Quando usar
A skill embutida
task-graph ensina ao modelo essa régua, o schema do plano e a disciplina (“você nunca declara done”).
O schema do plano
Um único objeto JSON descreve a entrega inteira:depssó pode referenciar tasks declaradas antes (o que também elimina ciclos).promptprecisa ser autocontido — workers não veem a conversa.#<depID>é substituído pelo output daquela dependência.- Os comandos de
validation[].runsão executados pelo engine (herdando o sandbox do coder e a denylist de comandos perigosos) — nunca pelo executor.expecté prosa para o reviewer. Uma string simples vale como contrato só-prosa (o reviewer verifica por inspeção). agenttem defaultcoder(qualquer worker type do squad funciona);max_attemptsdefault 3;require_reviewdefault true, por grafo ou por task.
Execução: ready-set scheduling
Tasks disparam no instante em que suas dependências concluem — sem barreiras de nível, sem wall-clock desperdiçado. A concorrência é limitada pela env já existente do squad,CHATCLI_AGENT_MAX_WORKERS (o max_parallel do próprio grafo pode reduzi-la); nenhuma variável de ambiente nova foi adicionada para essa feature.
Cada task passa por um loop de tentativas:
- Checkpoint — um snapshot shadow-git do workspace, best-effort, antes do executor começar.
- Executor — um worker fresco recebe o prompt (mais o feedback do reviewer nos retries).
- Gate — o engine executa ele mesmo cada comando de
validation[].rune grava a saída; exit diferente de zero falha a tentativa sem gastar reviewer. - Review — um
reviewerworker fresco (ferramentas read-only) recebe o contrato, as saídas do gate e o relato do executor, e precisa terminar comVERDICT: PASS — evidênciaouVERDICT: FAIL — o que falta. - Promoção ou retry — gate verde + PASS promove a
donecom a evidência gravada; FAIL repete com o feedback injetado, atémax_attempts, quando a task falha e suas sucessoras ficamblocked.
pending → running → reviewing → done | failed | blocked.
Cada tentativa também carrega seu custo real: cada chamada LLM de worker é atribuída ao nó do grafo que a originou, com a mesma contabilidade por chamada do cost tracking.
Superfícies
@taskgraph (para a IA)
run executa o grafo inteiro em uma única tool call, streamando eventos conforme acontecem. Resume é inerente: tasks concluídas ficam done, então re-executar um grafo que falhou continua de onde parou.
/taskgraph (para humanos)
/taskgraph é permitido como side command mid-run — digite enquanto o grafo executa para inspecionar o progresso sem tocar no loop do orquestrador.
A dashboard live
/taskgraph dash (ou {"cmd":"dash"}) serve uma dashboard no browser a partir de uma porta efêmera em 127.0.0.1 — um único arquivo embarcado, zero CDN, zero configuração:
- Canvas de DAG animado — swimlanes por fase, béziers de dependência com traços animados nas tasks em execução, cards coloridos por status com contagem de tentativas e custo por task; arraste para pan, ctrl/⌘+scroll para zoom,
0para ajustar, highlight de linhagem no hover. - Popovers de evidência — clique numa task para ver prompt, contrato de validação, saídas do gate, veredito + evidência do reviewer e os run IDs de executor e reviewer.
- Aba Results — critical path, wall-clock vs tempo de agente, fator de paralelismo e o custo real por task.
- Live — a página consulta o estado persistido a cada segundo e acompanha o feed de eventos.
state.json e events.ndjson do disco a cada request. Fechar a dashboard nunca afeta uma run, e runs finalizadas renderizam igualmente bem.
Persistência
Cada run possui~/.chatcli/taskgraph/<runID>/:
As runs aparecem em
/agents (e no Conversation Hub) como uma run-mãe com cada executor e reviewer registrados como filhos — o cancelamento propaga pela árvore.