{
    "app": {
        "name": "taskflow-inbox-triage",
        "description": "Example TaskFlow pattern for inbox triage, intent routing, waiting on replies, and later summaries.",
        "mode": "advanced-chat",
        "model_config": {
            "provider": "deepseek",
            "model": "deepseek-chat",
            "parameters": {
                "temperature": 0.7,
                "max_tokens": 4096
            }
        }
    },
    "instructions": "name taskflow-inbox-triage description Example TaskFlow pattern for inbox triage, intent routing, waiting on replies, and later summaries. metadata {\"openclaw\":{\"emoji\":\"📥\"}} TaskFlow inbox triage This is a concrete example of how to think about TaskFlow without turning the core runtime into a DSL. Goal Triage inbox items with one owner flow: business -> post to Slack and wait for reply personal -> notify the owner now everything else -> keep for end-of-day summary Pattern Create one flow for the inbox batch. Run one detached task to classify new items. Persist the routing state in stateJson . Move to waiting only when an outside reply is required. Resume the flow when classification or human input completes. Finish when the batch has been routed. Suggested stateJson shape { \"businessThreads\" : [ ] , \"personalItems\" : [ ] , \"eodSummary\" : [ ] } Suggested waitJson when blocked on Slack: { \"kind\" : \"reply\" , \"channel\" : \"slack\" , \"threadKey\" : \"slack:thread-1\" } Minimal runtime calls const taskFlow = api. runtime . tasks . managedFlows . fromToolContext (ctx); const created = taskFlow. createManaged ({ controllerId : \"my-plugin/inbox-triage\" , goal : \"triage inbox\" , currentStep : \"classify\" , stateJson : { businessThreads : [], personalItems : [], eodSummary : [], }, }); const child = taskFlow. runTask ({ flowId : created. flowId , runtime : \"acp\" , childSessionKey : \"agent:main:subagent:classifier\" , task : \"Classify inbox messages\" , status : \"running\" , startedAt : Date . now (), lastEventAt : Date . now (), }); if (!child. created ) { throw new Error (child. reason ); } const waiting = taskFlow. setWaiting ({ flowId : created. flowId , expectedRevision : created. revision , currentStep : \"await_business_reply\" , stateJson : { businessThreads : [ \"slack:thread-1\" ], personalItems : [], eodSummary : [], }, waitJson : { kind : \"reply\" , channel : \"slack\" , threadKey : \"slack:thread-1\" , }, }); if (!waiting. applied ) { throw new Error (waiting. code ); } const resumed = taskFlow. resume ({ flowId : waiting. flow . flowId , expectedRevision : waiting. flow . revision , status : \"running\" , currentStep : \"route_items\" , stateJson : waiting. flow . stateJson , }); if (!resumed. applied ) { throw new Error (resumed. code ); } taskFlow. finish ({ flowId : resumed. flow . flowId , expectedRevision : resumed. flow . revision , stateJson : resumed. flow . stateJson , }); Related example skills/taskflow/examples/inbox-triage.lobster",
    "variables": [],
    "opening_statement": "你好，我是 taskflow-inbox-triage，Example TaskFlow pattern for inbox triage, intent ...",
    "suggested_questions": [],
    "source": "DeepseekModel",
    "source_url": "https://deepseekmodel.com/skill?id=openclaw-openclaw-skills-taskflow-inbox-triage-skill-md"
}