taskflow

Coordene tarefas multi-etapa desanexadas como um único job TaskFlow durável, com contexto do proprietário, estado, esperas e tarefas filhas.

O que é taskflow?

TaskFlow é uma skill para coordenar tarefas de fundo em múltiplas etapas que precisam sobreviver a um único prompt ou execução desanexada, garantindo uma sessão de proprietário, um contexto de retorno e um local para inspecionar ou retomar o trabalho. Ela gerencia identidade do fluxo, sessão do proprietário, passos atuais (currentStep), estado persistente (stateJson), metadados de espera (waitJson), tarefas filhas vinculadas e revisões para mutações seguras contra conflitos. A skill é especialmente útil para fluxos de trabalho multi-etapa com um único proprietário, tarefas que dependem de ACP desanexado ou subagentes, jobs que precisam emitir atualizações claras de volta ao proprietário, e trabalho que deve sobreviver a reinicializações e conflitos de revisão. Suporta o ecossistema de runtime da plataforma (api.runtime.tasks.flow) e oferece um ciclo de vida gerenciado com métodos como createManaged, runTask, setWaiting, resume, finish, fail, requestCancel e cancel. A skill não gerencia lógica de negócios ou ramificações, deixando isso para a camada de autoria (Lobster, acpx) ou o código chamador.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/clawdbot/clawdbot/tree/main/skills/taskflow

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que taskflow faz?

Use TaskFlow quando um job precisar sobreviver a um prompt ou a uma execução desanexada, mas você ainda quiser uma sessão de proprietário, um contexto de retorno e um lugar para inspecionar ou retomar o trabalho.

Quando usar

  • Trabalho em segundo plano multi-etapa com um proprietário
  • Trabalho que depende de tarefas ACP desanexadas ou subagentes
  • Jobs que podem precisar emitir uma atualização clara de volta ao proprietário
  • Jobs que precisam de pequeno estado persistente entre etapas
  • Trabalho de plugin ou ferramenta que deve sobreviver a reinicializações e conflitos de revisão de forma limpa

O que o TaskFlow gerencia

  • identidade do fluxo
  • sessão do proprietário e origem do solicitante
  • currentStep, stateJson e waitJson
  • tarefas filhas vinculadas e seu id do fluxo pai
  • estado de conclusão, falha, cancelamento, espera e bloqueio
  • rastreamento de revisão para mutações seguras contra conflitos

Ele não gerencia ramificações ou lógica de negócios. Coloque isso no Lobster, acpx ou no código chamador.

Forma atual do runtime

Ponto de entrada canônico para plugin/runtime:

  • api.runtime.tasks.flow
  • api.runtime.taskFlow ainda existe como alias, mas api.runtime.tasks.flow é a forma canônica

Vinculação:

  • api.runtime.tasks.flow.fromToolContext(ctx) quando você já tem um contexto de ferramenta confiável com sessionKey
  • api.runtime.tasks.flow.bindSession({ sessionKey, requesterOrigin }) quando sua camada de vinculo já resolveu a sessão e o contexto de entrega

Ciclo de vida do fluxo gerenciado:

  1. createManaged(...)
  2. runTask(...)
  3. setWaiting(...) ao aguardar uma pessoa ou um sistema externo
  4. resume(...) quando o trabalho pode continuar
  5. finish(...) ou fail(...)
  6. requestCancel(...) ou cancel(...) quando todo o job deve parar

Restrições de design

  • Use fluxos gerenciados quando seu código for o responsável pela orquestração.
  • Fluxos espelhados de uma tarefa são criados pelo runtime principal para trabalho ACP/subagente desanexado; esta skill é principalmente sobre fluxos gerenciados.
  • Trate stateJson como o saco de estado persistido. Não há API separada setFlowOutput ou appendFlowOutput.
  • Todo método mutante após a criação é verificado por revisão. Avance com a revisão mais recente (flow.revision) após cada mutação bem-sucedida.
  • runTask(...) vincula a tarefa filha ao fluxo. Use-o em vez de criar manualmente tarefas desanexadas quando você quiser orquestração pai.

Exemplo de forma

const taskFlow = api.runtime.tasks.flow.fromToolContext(ctx);

const created = taskFlow.createManaged({
  controllerId: "my-plugin/inbox-triage",
  goal: "triagem de caixa de entrada",
  currentStep: "classificar",
  stateJson: {
    businessThreads: [],
    personalItems: [],
    eodSummary: [],
  },
});

const classify = taskFlow.runTask({
  flowId: created.flowId,
  runtime: "acp",
  childSessionKey: "agent:main:subagent:classifier",
  runId: "inbox-classify-1",
  task: "Classificar mensagens da caixa de entrada",
  status: "running",
  startedAt: Date.now(),
  lastEventAt: Date.now(),
});

if (!classify.created) {
  throw new Error(classify.reason);
}

const waiting = taskFlow.setWaiting({
  flowId: created.flowId,
  expectedRevision: created.revision,
  currentStep: "aguardar_resposta_comercial",
  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: "finalizar",
  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,
});

Mantenha condicionais acima do runtime

Use o runtime do fluxo para estado e vinculação de tarefas. Mantenha as decisões na camada de autoria:

  • business -> postar no Slack e aguardar
  • personal -> notificar o proprietário agora
  • later -> anexar a um balde de resumo do final do dia

Padrão operacional

  • Armazene apenas o estado mínimo necessário para retomar.
  • Coloque razões de espera legíveis por humanos em blockedSummary ou metadados de espera estruturados em waitJson.
  • Use getTaskSummary(flowId) quando o orquestrador precisar de uma visão compacta da saúde do trabalho filho.
  • Use requestCancel(...) quando um chamador quiser que o fluxo pare de agendar imediatamente.
  • Use cancel(...) quando você também quiser cancelar tarefas filhas vinculadas ativas.

Exemplos

  • Veja skills/taskflow/examples/inbox-triage.lobster
  • Veja skills/taskflow/examples/pr-intake.lobster
  • Veja skills/taskflow-inbox-triage/SKILL.md para um padrão concreto de roteamento

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

1password

Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.

acp-router

Route plain-language requests for Claude Code, Cursor, Copilot, OpenClaw ACP, OpenCode, Gemini CLI, Grok Build, Qwen, Kiro, Kimi, iFlow, Factory Droid, Kilocode, or explicit ACP harness work into either OpenClaw ACP runtime sessions or direct acpx-driven sessions ("telephone game" flow). For coding-agent thread requests, read this skill first, then use only `sessions_spawn` for thread creation. Codex chat binding defaults to the native Codex app-server plugin unless ACP is explicit or background spawn needs ACP.

add-model-provider

Add and live-prove a model provider with non-interactive config one-liners, without exposing credentials.

agent-transcript

Requested GitHub PR/issue agent transcripts: redact, trim, preview, and insert safely.

apple-notes

Create, view, edit, delete, search, move, or export Apple Notes via the memo CLI on macOS.

apple-reminders

List, add, edit, complete, or delete Apple Reminders and reminder lists via remindctl.

auto-qa

Run OpenClaw-wide autonomous QA and live/stress campaigns across independent subsystem lanes, with verified fixes and a resumable evidence report.

autoreview

Structured code review through the shared OpenClaw agent-skills installation.

bear-notes

Create, search, and manage Bear notes via grizzly CLI.

blacksmith-testbox

Run Blacksmith Testbox for CI-parity checks, secrets, hosted services, migrations, or builds local cannot reproduce.

block-kit

Use proactively for structured or interactive Slack replies, and when asked to author or validate native Slack Block Kit JSON.

blogwatcher

Monitor blogs and RSS/Atom feeds for updates using the blogwatcher CLI.

blucli

BluOS CLI (blu) for discovery, playback, grouping, and volume.

bluebubbles

Send and manage iMessages via BlueBubbles, including attachments, tapbacks, edits, replies, and groups.

browser-automation

Use when controlling web pages with the OpenClaw browser tool, especially multi-step flows, login checks, tab management, or recovery from stale refs/timeouts.

camsnap

Capture frames or clips from RTSP/ONVIF cameras and local webcams, including USB pan/tilt/zoom control.

canvas

Present HTML on connected OpenClaw node canvases, navigate/eval/snapshot, and debug canvas host URLs.

channel-message-flows

Use when running QA Lab channel message flow evidence.

clawdtributor

Clawtributor PRs here, last week or another window: discover conversation refs, recheck GitHub, rank by impact.

clawhub

Search ClawHub for plugins by default, or skills when explicitly requested; install, verify, update, uninstall, publish, or sync skills.

Habilidades Relacionadas