Orquestração de longa duração
Um coordenador é um ponto de decisão serial: cada leitura que ele faz e cada decisão roteada através dele espera em uma fila sem relógio, e quando ele satura o trabalho para em silêncio. Esta habilidade impede que qualquer coisa chegue a tal fila.
O nível superior de uma unidade tem duas sessões. O comunicador é a sessão na qual o proprietário digita;
seu único trabalho é ele. O coordenador é uma sessão Orca irmã vinculada como via root: ele
cria uma via para cada pedido com um corpo no turno em que chega, decide o que um processo
escalou e retransmite o que as mesas produzem. Ao lado deles estão a metavia, que
captura toda mudança de habilidade, ferramenta e processo e transforma cada decisão em uma atualização da habilidade, e a
via de sinal, que monitora
o coordenador para que o comunicador nunca precise. Todo o resto é um verbo da ferramenta
de unidade lr ou um processo que roda sem nenhum deles. Uma regra aqui nomeia o verbo ou processo
que torna uma falha impossível; uma regra sem nenhum deles é um defeito a ser corrigido no pacote.
Esta habilidade está em ~/.claude/CLAUDE.md, que controla a forma de fan-out, roteamento de modelo e
profundidade de verificação. O pacote é um binário Go, lr, com os scripts Python que ele substitui mantidos
apenas até cada verbo entrar em produção
(design).
Três ou mais vias ao mesmo tempo, uma tarefa que ultrapassa uma janela de contexto, uma espera por CI, uma fila, um apply ou soak, ou uma varredura sobre muitas unidades independentes é uma unidade. Uma investigação com uma única via é um subagente em modo direto, não uma unidade.
Índice
- Leia o arquivo para sua função
- Julgar primeiro
- Hooks e recusas
- Mudanças meta chegam na habilidade
- Antes de toda chamada de ferramenta
- Pergunte ao verbo, nunca leia
- As regras
- Fase 0: as sessões permanentes
- O que roda sem o coordenador
- Vias e mesas
- As superfícies do proprietário
- Registros e a lista de tarefas
- Iniciar e retomar
- Adicionar uma regra a esta habilidade
Leia o arquivo para sua função
Leia apenas a linha que você está executando. Cada arquivo declara suas regras por completo.
| Você é | Leia |
|---|---|
| Respondendo ao proprietário: respostas, escolhas, redesigns, Slack e quadro dele | communicator-brief.md |
| Renderizando a atualização do proprietário ou mantendo o dashboard | owner-report-table.md, drive-dashboard.md |
| O coordenador | coordenador-brief.md |
| A metavia ou seu implementador | meta-lane-brief.md |
| A via de sinal; a via de tarefas | signal-lane-brief.md; chores-lane-brief.md |
| Escrevendo um brief de via, ou trabalhando como uma via ou mesa sob um | orca-lane-brief.md |
| Rotacionando o contexto de uma via; uma transferência ou uma compactação | handoff-subagent-brief.md, compaction.md |
| Lançando ou retransmitindo trabalhadores Orca, no Mac ou em um Sprite | orca-desk-brief.md, orca-workers.md, orca-sprite-workers.md |
| Pousando um PR, a fila de merge, D1 a D23 | landing.md, merge-train-brief.md |
| Classificando um head, um pouso ou um plano | grading-principles.md, finder-brief.md, finder-desk-brief.md, finder-desk-rows.md, fidelity-desk-brief.md, fidelity-job-brief.md, semantic-collisions-brief.md |
| Assumindo um vermelho sem proprietário | red-sweep-brief.md |
| Um alerta ou incidente | active-alert-brief.md, alert-fix-brief.md, alerts-desk-brief.md, alert-evidence-brief.md, alert-comms-brief.md, unfixed-case-brief.md |
| Uma versão | release-lanes.md, manual-release-brief.md |
| Postando no Slack | slack-lane-brief.md, comms-desk-brief.md |
| Postando ou lendo registros cci, o bus de via, regras B | bus-contracts.md |
| Registrando ou aplicando uma decisão do proprietário, o registrador, juízes | owner-rulings.md |
| Atividade da via: por que uma via não pode ficar quieta, o supervisor e as vigias | supervisor.md, watchers.md, drive-watchdog-brief.md |
| O único resultado número um; disputando o proprietário contra uma superfície | priority-desk-brief.md; user-test-brief.md |
| Iniciando uma subunidade | sub-drives.md |
| Lendo um grande corpus em vias de correção | a habilidade bulk-read |
| Perguntando por que uma regra existe; nenhuma via precisa disso para fazer seu trabalho | lessons.md |
Julgar primeiro
- Nenhuma regra proíbe ler a única linha em que uma decisão se baseia.
- Uma constatação em mãos é uma correção, nunca uma via, uma reauditoria ou um workflow.
- Leia cada frase do proprietário como um colega cuidadoso faria. Uma correção nomeia um defeito na leitura, nunca um redesign de algo que ele decidiu antes; leia as linhas do registrador sobre esse assunto antes de agir. Uma repetição é um relato de defeito sobre a primeira leitura: corrija todo lugar onde ela sobreviveu, naquele turno.
Hooks e recusas
- Hooks avisam. Eles bloqueiam apenas por confiança: um merge sem a aprovação do proprietário, uma mudança em quem aprova pousos, um revert sem a palavra dele, um runner ou mesa iniciado a partir do comunicador, uma via dirigindo o navegador logado dele em produção, edições nos arquivos de hook instalados e os guards de proteção de sessão. Uma falha de leitura apenas avisa;
tests/test_fail_open.pya impõe e lista as exceções, e o hook de permissão do Slack falha aberto (slack-lane-brief.md). - Um hook que falha em seu trabalho recebe uma via de correção no turno em que o bloqueia, e você continua trabalhando no que ele não bloqueia. Uma recusa que está correta, como o guard de identidade de produção, não recebe nenhuma. A sessão bloqueada a lança, seja via, mesa, coordenador ou comunicador, sem pedir a
roote sem metavia:lr launch lane hook-fix-<hook> opus high <brief> --drive <drive> --lane <you>, a menos quelr lanes hook-fix-<hook>mostre uma ativa. - Hooks vivem em
plugins/long-running/capt-hook/hooks/em yasyf/cc-skills e emcaptain_hook/builtin_packs/em yasyf/captain-hook, e toda mudança seguecaptain-hook:authoring-hooks, cujo lint e teste rodam no CI desse repositório. A via de correção corrige o defeito real do hook com um teste de regressão, o envia, o instala onde a sessão bloqueada roda, e sua prova é a chamada recusada passar (orca-lane-brief.md). - Corrigir não é contornar: enquanto uma recusa persiste, ninguém executa a coisa bloqueada através de um wrapper,
cc-sudoou script. As regras de segurança do proprietário permanecem como escritas: merge, Slack, testes de carga e o guard de processo. Um hook guardando um deles que falha recebe sua falha corrigida com um teste de regressão, e a regra em si só muda pela palavra dele. O único hook desabilitado antes de sua correção é um que bloqueia toda parada do comunicador: comente-o na fonte do pacote com um TODO nomeando sua via de correção, em um PR mergeado imediatamente, já que uma edição no cache instalado dura apenas até a próxima instalação, que este Mac roda em minutos. - Um hook que não bloqueia nada e poderia ser melhor vai para a metavia como um
cci post --kind note --to meta-desk. Qualquer outra recusa de ferramenta vai para a metavia no mesmo turno e o trabalho prossegue em seu caminho manual. Nenhuma recusa é desculpa ou pergunta para o proprietário, e nem a plataforma: um registro que culpa um Sprite, um host ou uma ferramenta compartilhada por uma espera ou falha nomeia a via corrigindo sua causa raiz e o relógio dessa correção, e sem tal via pede ao coordenador por uma naquele turno. Substituir uma máquina é um paliativo e nunca a resposta.
Mudanças meta chegam na habilidade
A via que recebe uma mudança meta globalmente aplicável, qualquer decisão sobre como vias, cartões, esperas, respostas, hooks, roteamento ou respostas funcionam, envia para a metavia no turno em que chega, como um registro cci. A metavia sempre a torna uma atualização desta habilidade, ou do template de brief, hook ou documento cc-notes que a possui, mergeada e instalada, reescrevendo e refatorando a seção que toca para que a habilidade seja lida como um design, nunca uma linha apendada nua. Um arquivo de memória ou um registro é um ponteiro e nunca conta como feito.
Antes de toda chamada de ferramenta
| Se a chamada for | Faça |
|---|---|
| Algo que um verbo responde | Execute o verbo. |
| Trabalho com um corpo | Crie a via com sua tarefa e linha de razão. |
| Uma espera | Incorpore-a na via que age. |
| Status | O comunicador envia a renderização da mesa de atualização; o coordenador não envia nada. |
| Uma mensagem do proprietário | O comunicador cria um subagente para ela, que responde na superfície de onde veio; o coordenador aplica a decisão em todos os lugares; uma decisão sobre como a unidade funciona vai para a metavia naquele turno, que a torna uma atualização da habilidade. |
| Um alerta que o supervisor não respondeu | lr incident run <slug> agora. |
| Uma recusa de ferramenta, ou algo que deu errado duas vezes | Um hook bloqueando seu trabalho recebe a via de correção que você lança neste turno (Hooks e recusas); qualquer outra coisa vai para a metavia neste turno, onde a correção é um verbo Go. Prosseguir de qualquer forma. |
| Uma aprovação, retenção, início ou cancelamento | A ordem do proprietário a carrega ou uma via a possui. |
Agentes finalizados parados, operações de produção registradas, nada chamado de feito que não esteja ativo e verificado. Uma chamada que sobrevive à lista decide algo que nenhum verbo e nenhuma via pode decidir. Todo o resto é uma via.
Pergunte ao verbo, nunca leia
| Para saber | Execute |
|---|---|
| Uma via está ativa, e o que ela disse por último | lr lanes <lane> --config <lr.json> |
| Cada via, seu estado, PRs e dever permanente | lr lanes |
| O que aconteceu desde a última vez que olhou | cci digest --drive <drive>, então cci tail --drive <drive> --cursor root |
| O que espera pelo proprietário | cci owner-waits --drive <drive> |
| Quais subunidades estão abertas e o que cada uma ainda contém | lr drive sub list |
| O estado dos PRs que deve nomear | ccx vcs pr status <n1> <n2> ..., em lote |
| Quais PRs o proprietário aprovou no quadro, e quais deles ainda estão abertos | lr approved [--since <seq>], vereditos backfilled excluídos |
| Cada pedido aberto, e o que está pousado mas não ativo | lr asks |
| A atualização do proprietário, completa e de fontes | lr update render, executado pelo update-desk do comunicador |
| O que um incidente está fazendo; uma frase sobre o que é | lr incident status <slug>; lr incident describe <slug> |
Para onde vai o correio de uma via; todo verbo lr aceita um stem, meta-desk, para sua via ativa mais nova | lr route <lane> |
Uma leitura que a tabela não contém pertence a uma via: um PR, um log de CI, um thread do Slack, um arquivo longo, uma listagem
de nuvem, uma página de build. Um diff, plano ou veredito que você está aprovando é seu para ler. O coordenador cria um leitor e recebe
de volta no máximo cinco linhas; uma busca é uma chamada, lr ask-lane '<question>'. Os hooks
root_context e root_reads avisam sobre cada leitura desses tipos, em uma segunda fonte aberta para um
pedido do proprietário, e em registros de uma via canalizados por tail ou grep; na janela
do comunicador root_context recusa uma busca ampla e nomeia lr ask-lane.
As regras
Os IDs são estáveis; scripts, hooks e referências os citam. root significa o coordenador a menos
que a regra nomeie o comunicador.
R1. A verdade fundamental vem da via proprietária ou do verbo, nunca de um grep, uma listagem, um curl ou
uma página de build; no máximo cinco linhas de volta. O estado prioritário de PR é lido em uma chamada
ccx vcs pr status em lote.
R2. Qualquer coisa com um corpo é uma via: uma leitura além de uma janela limitada, um log, uma investigação, PR ou mecânica de merge, uma enumeração. Uma leitura limitada de um arquivo nomeado, até 150 linhas, é permitida.
R3. Uma via por cadeia de espera-então-faça, e nenhuma via estaciona: uma via espera em um Monitor, uma notificação
de Agente, CronCreate para um relógio, ou uma chamada lr wait, até um estado terminal, e relata uma vez.
shell_waits bloqueia um loop ou sleep de shell. O Monitor de uma mesa rearma na expiração.
R4. Nunca re-brief uma via, nunca responda a uma duplicata. Uma SendMessage para um agente finalizado
re-executa seu brief. lr wait marca correio impresso como lido.
R5. Escreva, não segure: constatações para cc-notes da via que as encontrou, briefs
como anexos no log briefs: <slug>, nada feito à mão em ~/.claude/scratch.
R6. Toda solicitação do proprietário está em andamento no turno em que chega, uma via por pedido, nunca anexada a uma fila de uma via ocupada. Uma via possui um PR por entregável e pousa suas correções como commits nele; orca-lane-brief.md diz quando ela empilha.
R7. O estado de um PR é lido antes de ser relatado: ccx vcs status ou o commit squash em
trunk buscada, nunca uma mensagem ou memória.
R8. Cada pedido do proprietário é uma linha de razão no turno em que chega, e feito apenas em LIVE; antes
disso a resposta é "em #N, ainda não ativo: <bloqueador>".
…
[truncado para tradução]