{"id":"b1379bd4-51de-44ae-a062-9f7d48505f7f","slug":"clawhub-1yihui-yihui-taskflow","name":"taskflow","description":"Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under...","canonicalUrl":"https://www.xpersona.co/agent/clawhub-1yihui-yihui-taskflow","sourceUrl":"https://clawhub.ai/1yihui/yihui-taskflow","homepage":"https://clawhub.ai/1yihui/skills/yihui-taskflow","source":"CLAWHUB","vendor":{"slug":"clawhub","label":"Clawhub","url":"https://clawhub.ai/1yihui/skills/yihui-taskflow"},"protocols":["OPENCLEW"],"capabilities":[],"trustScore":null,"trustConfidence":"unknown","artifactCount":0,"benchmarkCount":0,"lastRelease":"1.0.0","freshnessAt":"2026-10-11T06:32:49.177Z","freshnessLabel":"Oct 11, 2026","securityReviewed":true,"openapiReady":false,"stats":[{"label":"Trust score","value":"Unknown"},{"label":"Compatibility","value":"OpenClaw"},{"label":"Freshness","value":"Oct 11, 2026"},{"label":"Vendor","value":"Clawhub"},{"label":"Artifacts","value":"0"},{"label":"Benchmarks","value":"0"},{"label":"Last release","value":"1.0.0"}],"factsPreview":[{"factKey":"vendor","category":"vendor","label":"Vendor","value":"Clawhub","href":"https://clawhub.ai/1yihui/skills/yihui-taskflow","sourceUrl":"https://clawhub.ai/1yihui/skills/yihui-taskflow","sourceType":"profile","confidence":"medium","observedAt":"2026-10-11T06:32:49.242Z","isPublic":true},{"factKey":"protocols","category":"compatibility","label":"Protocol compatibility","value":"OpenClaw","href":"https://www.xpersona.co/api/v1/agents/clawhub-1yihui-yihui-taskflow/contract","sourceUrl":"https://www.xpersona.co/api/v1/agents/clawhub-1yihui-yihui-taskflow/contract","sourceType":"contract","confidence":"medium","observedAt":"2026-10-11T06:32:49.242Z","isPublic":true},{"factKey":"traction","category":"adoption","label":"Adoption signal","value":"1.1K downloads","href":"https://clawhub.ai/1yihui/yihui-taskflow","sourceUrl":"https://clawhub.ai/1yihui/yihui-taskflow","sourceType":"profile","confidence":"medium","observedAt":"2026-10-11T06:32:49.242Z","isPublic":true},{"factKey":"latest_release","category":"release","label":"Latest release","value":"1.0.0","href":"https://clawhub.ai/1yihui/yihui-taskflow","sourceUrl":"https://clawhub.ai/1yihui/yihui-taskflow","sourceType":"release","confidence":"medium","observedAt":"2026-04-28T07:29:17.829Z","isPublic":true},{"factKey":"handshake_status","category":"security","label":"Handshake status","value":"UNKNOWN","href":"https://www.xpersona.co/api/v1/agents/clawhub-1yihui-yihui-taskflow/trust","sourceUrl":"https://www.xpersona.co/api/v1/agents/clawhub-1yihui-yihui-taskflow/trust","sourceType":"trust","confidence":"medium","observedAt":null,"isPublic":true}],"highlights":["1.1K downloads","Trust evidence available"],"agentCard":{"name":"taskflow","description":"Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under...","source":"CLAWHUB","sourceId":"clawhub:s17dkj69epg7yy8vn06c46hemn85dcap:yihui-taskflow","homepage":"https://clawhub.ai/1yihui/skills/yihui-taskflow","repository":"https://clawhub.ai/1yihui/yihui-taskflow","documentation":"https://www.xpersona.co/agent/clawhub-1yihui-yihui-taskflow","protocols":["OPENCLEW"],"examples":[{"kind":"example","language":"ts","snippet":"const taskFlow = api.runtime.tasks.flow.fromToolContext(ctx);\n\nconst created = taskFlow.createManaged({\n  controllerId: \"my-plugin/inbox-triage\",\n  goal: \"triage inbox\",\n  currentStep: \"classify\",\n  stateJson: {\n    businessThreads: [],\n    personalItems: [],\n    eodSummary: [],\n  },\n});\n\nconst classify = taskFlow.runTask({\n  flowId: created.flowId,\n  runtime: \"acp\",\n  childSessionKey: \"agent:main:subagent:classifier\",\n  runId: \"inbox-classify-1\",\n  task: \"Classify inbox messages\",\n  status: \"running\",\n  startedAt: Date.now(),\n  lastEventAt: Date.now(),\n});\n\nif (!classify.created) {\n  throw new Error(classify.reason);\n}\n\nconst waiting = taskFlow.setWaiting({\n  flowId: created.flowId,\n  expectedRevision: created.revision,\n  currentStep: \"await_business_reply\",\n  stateJson: {\n    businessThreads: [\"slack:thread-1\"],\n    personalItems: [],\n    eodSummary: [],\n  },\n  waitJson: {\n    kind: \"reply\",\n    channel: \"slack\",\n    threadKey: \"slack:thread-1\",\n  },\n});\n\nif (!waiting.applied) {\n  throw new Error(waiting.code);\n}\n\nconst resumed = taskFlow.resume({\n  flowId: waiting.flow.flowId,\n  expectedRevision: waiting.flow.revision,\n  status: \"running\",\n  currentStep: \"finalize\",\n  stateJson: waiting.flow.stateJson,\n});\n\nif (!resumed.applied) {\n  throw new Error(resumed.code);\n}\n\ntaskFlow.finish({\n  flowId: resumed.flow.flowId,\n  expectedRevision: resumed.flow.revision,\n  stateJson: resumed.flow.stateJson,\n});"}]}}