Orquestrar: coordenar sessões paralelas do Claude Code

Coordena grandes tarefas em várias sessões paralelas do Claude Code Desktop, com a sessão atual atuando como coordenadora. Primeiro entrevista o usuário até que os requisitos estejam claros, depois divide o trabalho em tarefas independentes, lança cada uma como sua própria sessão (com git worktree e branch próprios), supervisiona o progresso, lança ondas dependentes, verifica resultados e exibe um painel visual ao vivo.

O que é Orquestrar: coordenar sessões paralelas do Claude Code?

A habilidade **Orquestrar** transforma o Claude Code em um coordenador capaz de gerenciar grandes projetos de software de forma estruturada, dividindo o trabalho em tarefas independentes que executam em sessões paralelas. O diferencial está na abordagem metódica: primeiro, o coordenador entrevista o usuário para compreender completamente os requisitos, o escopo e as não-metas, antes de qualquer divisão de trabalho. Depois, ele planeja ondas de tarefas com base em dependências, garantindo que arquivos sejam de propriedade exclusiva de cada tarefa para evitar conflitos de merge. A supervisão contínua verifica o progresso, detecta bloqueios e solicita retrabalho quando necessário, usando um painel visual que exibe o status em tempo real. A integração final é feita pelo coordenador, que mescla os branches das tarefas e verifica os critérios de aceitação. A habilidade é ideal para desenvolvedores que usam o Claude Code Desktop e precisam coordenar trabalhos complexos com múltiplas peças independentes. Ela suporta inglês e russo no painel e usa o sistema de sessões paralelas (`start_session`, `list_sessions`, `SendMessage`) ou, como fallback, subagentes em segundo plano. O arquivo de estado (`state.json`) é a fonte única da verdade, permitindo continuidade mesmo após compactação de contexto. A habilidade é rigorosa quanto à verificação: relatórios de conclusão são validados com `git log` e `git diff`, garantindo que os resultados sejam confiáveis.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/NicatAv/orchestrate-skill/tree/HEAD/skills/orchestrate

Installed? Explore more Produtividade e Colaboração skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Perguntar na sua IA favorita

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

Documentação

Orquestrar: esclarecer → dividir → executar sessões → supervisionar → integrar

Você é o coordenador. Os trabalhadores implementam em suas próprias sessões; você é dono da especificação, do plano, do painel, da verificação e da integração. Fale com o usuário no idioma dele (o painel suporta ru e en).

Todo o valor desta habilidade baseia-se em uma ideia: um mal-entendido capturado antes da divisão custa uma pergunta, o mesmo mal-entendido capturado depois custa N sessões desperdiçadas. Portanto, seja minucioso na Fase 1 e disciplinado sobre os limites de escopo na Fase 2.

Ferramentas das quais depende (aplicativo Claude Desktop, guia Code). Carregue as adiadas com ToolSearch em uma chamada: mcp__ccd_session__start_session, mcp__ccd_session_mgmt__list_sessions, SendMessage, mcp__ccd_session__mark_chapter, AskUserQuestion, mcp__visualize__read_me, mcp__visualize__show_widget. Se start_session não existir (CLI de terminal simples), use a seção de Fallback.


Arquivo de estado — a fonte única da verdade

Execuções longas têm seu contexto compactado, portanto, nunca mantenha o plano apenas em sua cabeça. Mantenha-o em <repo>/.claude/orchestrator/state.json e adicione .claude/orchestrator/ a <repo>/.git/info/exclude (ignorado apenas localmente; não altera nenhum arquivo rastreado). O mesmo JSON é a entrada do painel. Esquema:

{
  "lang": "ru",
  "title": "Nome curto do trabalho",
  "goal": "Uma frase",
  "phase": "clarify | plan | running | integrating | done",
  "base_branch": "main",
  "updated": "2026-11-07 14:32",
  "spec": { "acceptance": ["..."], "non_goals": ["..."], "constraints": ["..."], "assumptions": ["..."] },
  "tasks": [
    { "id": "T1", "title": "Endpoints da API", "wave": 1, "status": "planned",
      "progress": 0, "depends_on": [], "owns": ["src/api/"],
      "session": "t1-api", "session_id": "local_...", "branch": "...", "note": "última linha de status" }
  ],
  "log": [ { "t": "14:30", "msg": "Onda 1 iniciada: T1, T2, T3" } ]
}

status é um dentre planned | running | blocked | rework | done | failed.

Ao iniciar, verifique se existe um arquivo de estado. Se houver tarefas inacabadas, pergunte se deve retomá-lo (então pule para a Fase 5) ou iniciar um novo trabalho (arquive o arquivo antigo como state-<data>.json).


Fase 1 — Entender o trabalho completamente

  1. Inspecione antes de perguntar. Leia README, CLAUDE.md, arquivos de regras, a estrutura, os comandos de build e teste, git status e o branch atual. Responda a partir do código o que o código pode responder — pergunte ao usuário apenas o que ele não pode.
  2. Verifique a prontidão do git. As worktrees dos trabalhadores são cortadas a partir do branch base commitado: alterações não commitadas são invisíveis para eles. Se a árvore estiver suja, avise ao usuário e pergunte se deve commitá-la primeiro. Se a pasta não for um repositório git, explique que trabalhadores paralelos sem worktrees sobrescreveriam uns aos outros e ofereça git init + commit inicial, ou trabalhadores sequenciais.
  3. Entreviste com AskUserQuestion (≤4 perguntas por chamada, opção recomendada primeiro). Pergunte apenas o que muda o que é construído: objetivo e usuário-alvo, escopo e não-metas, critérios de aceitação, contratos entre partes (formatos de API, modelo de dados, tipos compartilhados), restrições técnicas, expectativas de teste, o que significa "pronto". Faça novas rodadas até que nenhuma pergunta em aberto mude o plano.
  4. Escreva a especificação no arquivo de estado e mostre-a ao usuário em algumas linhas. Detalhes reversíveis de baixo risco tornam-se suposições explícitas, em vez de mais perguntas.

Fase 2 — Decidir se deve dividir e depois decompor

Dividir compensa apenas quando há ≥2 partes substanciais que podem progredir independentemente. Se o trabalho for pequeno ou fortemente acoplado, diga isso e faça-o nesta sessão — uma divisão que cria conflitos de merge e sobrecarga de transferência é pior do que nenhuma divisão.

Regras para tarefas:

  • Propriedade disjunta de arquivos. Cada tarefa lista os caminhos que possui. Dois trabalhadores nunca editam o mesmo arquivo; é isso que mantém o merge final limpo. Arquivos compartilhados (lockfiles, configurações raiz, tabelas de roteamento, registro de DI) pertencem a uma tarefa ou ao coordenador.
  • Contratos primeiro. Se as peças dependem de uma interface compartilhada (esquema de API, tipos, esquema de banco de dados), faça dela a tarefa T0, executada por você nesta sessão e commitada no branch base antes da onda 1, para que toda worktree comece com ela. O plano que o usuário aprova deve dizer que este commit ocorrerá.
  • Cada tarefa tem: id, title, objetivo, owns, entregável, critérios de conclusão verificáveis (comandos ou testes), depends_on, tamanho P/M/G e, opcionalmente, um model mais barato para trabalho mecânico.
  • Ondas. Agrupe por dependências. Padrão ≤4 sessões paralelas por onda (limites de taxa e sua própria capacidade de revisão). Uma tarefa com exatamente uma dependência começa a partir do branch dessa dependência (source_branch). Uma tarefa com várias dependências precisa que elas sejam mescladas primeiro — isso requer um sim explícito do usuário (regras da Fase 6), portanto, prefira planos que evitem isso.
  • A integração e a verificação final permanecem sempre com o coordenador.

Fase 3 — Mostrar o plano, obter uma confirmação

  1. Renderize o painel (todas as tarefas planned, fase plan) — veja Painel abaixo.
  2. Abaixo dele, em prosa: as ondas, o que cada sessão faz, quais caminhos possui e qualquer coisa que você irá commitar (T0).
  3. Faça uma AskUserQuestion: "Iniciar N sessões de acordo com este plano?" → opções "Iniciar (Recomendado)" / "Alterar o plano". O sim do usuário é a solicitação para iniciar essas sessões.

Após o sim, execute até o fim sem aprovações adicionais exceto: mesclar branches, qualquer coisa destrutiva, push/PRs e perguntas que a especificação não puder responder.

Fase 4 — Iniciar uma onda

  1. Chame mark_chapter (ex.: "Onda 1: iniciando sessões").
  2. Para cada tarefa: escreva uma linha de título em negrito e uma frase sobre o que a sessão fará, depois chame start_session com:
    • initiation: "user_asked", context: "fresh", use_worktree: true, wake_when_done: true
    • title, name (estilo t1-api, ≤24 caracteres), branch_name (orch-t1-api)
    • prompt: o resumo do trabalhador construído a partir de references/worker-brief.md
    • background (≥80 caracteres): objetivo, principais pontos da especificação, como esta peça se encaixa com as outras
    • source_branch: o branch da dependência para tarefas com dependência única
    • model: apenas quando a tarefa for mecânica e um modelo mais barato for adequado
  3. Armazene session_id (local_...), name, branch no arquivo de estado; status running; registre no log; re-renderize o painel.
  4. Encerre sua vez. Não faça polling — o aplicativo acorda você com uma mensagem <side-sessions-event> quando os trabalhadores terminam uma vez.

Fase 5 — Supervisionar

A cada despertar (um <side-sessions-event>, uma mensagem entre sessões ou o usuário pedindo status):

  1. list_sessions {"linked": true} para o estado de cada trabalhador.
  2. Leia a linha de status de cada trabalhador em seu relatório. Os trabalhadores iniciam seu relatório com [T2] DONE 100% — ..., [T2] IN_PROGRESS 60% — ... ou [T2] BLOCKED — <pergunta>.
  3. Verifique, não confie. Um relatório é uma afirmação. Para DONE: git log --oneline <base>..<branch> e git diff --stat <base>...<branch>; sinalize arquivos alterados fora de owns; verifique os critérios de conclusão (peça ao trabalhador a saída de teste ou execute verificações baratas você mesmo dentro da worktree dele).
  4. Bloqueado: se a especificação responder, responda com SendMessage para o ID local_... do trabalhador. Se não, pergunte ao usuário e encaminhe as palavras exatas dele. Nunca peça a um trabalhador que faça algo que foi negado ou seria bloqueado nesta sessão.
  5. Retrabalho: envie problemas concretos via SendMessage; status rework.
  6. Parado (ocioso, sem linha de status): peça uma linha de status uma vez.
  7. Atualize o arquivo de estado e re-renderize o painel — apenas quando algo mudou.
  8. Quando as dependências de uma onda estiverem todas done e verificadas, inicie a próxima onda (já aprovada).

Para uma espiada ao vivo em uma sessão ainda em execução quando o usuário pedir, mcp__ccd_session_mgmt__list_events mostra sua atividade mais recente; não faça isso rotineiramente. Percentuais de progresso vêm apenas de relatórios dos trabalhadores ou fatos verificados — nunca invente progresso.

Fase 6 — Integrar e verificar

  1. Painel final (fase integrating). Liste cada branch de trabalhador por referência completa (refs/heads/...).
  2. Pergunte se deve mesclá-los em um branch de integração orch/<slug> neste checkout. Mescle apenas com o sim explícito do usuário — não por sugestão de um trabalhador.
  3. Mescle na ordem de dependência, resolva conflitos, execute o build completo e a suíte de testes.
  4. Relatório: critérios de aceitação como tabela (atendido / não atendido / não verificado com motivo), resultados de teste com desfechos reais, riscos restantes. Fase done, painel final.
  5. Ofereça-se para arquivar as sessões dos trabalhadores (apenas com sim). Nunca faça push ou abra um PR sem aprovação.

Painel

O painel é um modelo fixo: assets/dashboard.html. Leia-o uma vez por conversa (novamente após compactação de contexto). Antes da primeira renderização, chame mcp__visualize__read_me com modules: ["interactive"] (silenciosamente). Depois, chame mcp__visualize__show_widget com o conteúdo do modelo onde apenas a linha const STATE = {...}; é substituída pelo JSON de estado atual (minificado, JSON válido). Mantenha o design como está — a consistência entre atualizações é o que permite ao usuário ler o progresso de relance. title: orchestration_<slug>_dashboard.

Renderize-o: após o plano, após cada início, após cada despertar que mudou algo e no final. Explicações vão em prosa ao lado, não dentro do widget.

Fallback sem ferramentas de sessão

Se start_session não estiver disponível, execute cada tarefa como um subagente em segundo plano: Agent com isolation: "worktree" e run_in_background: true, mesmo resumo. Você será notificado na conclusão; todo o resto (estado, painel, verificação, integração) permanece o mesmo, com IDs de agente no campo session. Avise ao usuário que esses trabalhadores não podem ser abertos e direcionados como sessões.

Regras básicas

  • Mantenha o coordenador leve: não implemente tarefas de trabalhador aqui; pequenas colas e contratos T0 são aceitáveis.
  • Siga os limites de aprovação global do usuário (sem push, deploy, operações destrutivas ou instalações sem aprovação) e repasse-os em cada resumo.
  • Relate resultados fielmente: diga quais verificações foram executadas, quais falharam, quais não foram executadas.

Habilidades Relacionadas