Capítulo 07
Autonomia do enxame
Executar muitos agentes descreve um líder e suas frentes. Este capítulo trata do que mantém essa configuração em andamento quando uma conta atinge o limite ou um agente desaparece. Uma frente verifica quanta folga resta à sua conta e repassa o trabalho antes que ela se esgote. Um líder repassa a liderança, ou é substituído quando desaparece. O enxame só pergunta ao desenvolvedor o que é realmente crítico.
A falha que isso resolve é concreta: um líder que esgota a cota no meio de um plano deixa todas as frentes paradas, e nada anda até que uma pessoa abra uma nova sessão. Com as regras abaixo, o plano continua andando dentro da autorização que o desenvolvedor já deu.
Seis regras moldam tudo o que vem a seguir:
- Uma função por produto. O coding-agents-kit (
ak) conhece as contas e a capacidade, o herdr-peers conhece as mensagens, os painéis e quem lidera, e o pack do Deep Work Plan conhece o método: quando repassar, do que um sucessor precisa, o que escalar. Cada um continua opcional. Sem eles, as mesmas regras valem, com o desenvolvedor retransmitindo as mensagens e reiniciando os agentes. - A unidade de continuidade é o plano, não o agente. Todo repasse e toda sucessão é uma retomada comum mais um pequeno pacote que carrega o que o diário não registra: a intenção que estava em andamento.
- O proativo vence o reativo. Um agente verifica sua folga nos limites entre tarefas e repassa enquanto ainda consegue escrever um bom pacote. Reagir depois de atingir um limite continua sendo a rede de segurança.
- A autonomia nunca amplia a autoridade. Repasses, sucessão, inícios e agendamento rodam dentro da autorização do plano. Nenhum agente responde a uma tela de permissão, de bypass, de login, de consentimento ou de pagamento, e o trabalho só circula entre as contas que o desenvolvedor declarou.
- A continuidade nunca rebaixa o padrão. Um sucessor herda os mesmos gates. Um pacote não fecha nenhum critério, não relaxa nenhum gate e não pula nenhuma revisão.
- Barato por construção. A capacidade é lida de um cache nos limites entre tarefas, nunca em um loop ou por um timer. Avisos de mão única substituem perguntas que não precisam de resposta, e os pacotes são pequenos.
Papéis
| Papel | É | É dono de | Nunca faz |
|---|---|---|---|
| Líder | O agente que detém o registro de líder de um plano | O plano, a tabela de frentes, o agendamento, a ordem de release, merges e tags dentro da autorização, a lista de sucessão | Escrever no checkout de uma frente, ou liderar um plano que outro líder detém |
| Suplente | A primeira entrada alcançável da lista de sucessão do líder | Nada até assumir | Agir como líder enquanto o líder está alcançável |
| Frente | Um agente por repositório, fluxo de trabalho ou tarefa, no próprio painel e na própria conta | Seu plano filho ou sua tarefa, branch, gate e pacote | Atribuir trabalho a outra frente, fazer merge ou criar tags |
| Revisor | Uma frente de outro fornecedor, somente leitura | Suas descobertas | Escrever na árvore que revisa |
- O líder permanece ativo. Um orquestrador cujas frentes esperam o repasse de uma pessoa trava. Um líder nunca pausa o enxame por uma pergunta que ele mesmo pode decidir.
- Um executor por plano. Exatamente um agente executa um dado plano ou plano filho por vez. Um segundo agente no mesmo plano é uma falha de coordenação que o líder deve resolver.
- A autoridade vem do plano, não de um par. Uma frente lê a autorização do plano por conta própria. Uma aprovação retransmitida por outro agente não acrescenta nada que a frente já não tivesse.
- Vários líderes podem trabalhar no mesmo espaço de trabalho, cada um liderando um plano diferente. Uma conta é detida por uma frente de cada vez por meio de uma reserva do
ak, então dois líderes nunca colocam dois escritores na mesma conta do Codex. - Várias instâncias do mesmo tipo — três painéis do Grok, quatro painéis do Codex em um ou vários perfis — são frentes comuns. Instâncias no mesmo perfil compartilham a capacidade desse perfil.
Toda frente tem um plano, no mínimo um plano Lite no próprio repositório, e esse plano é a primeira coisa que um sucessor lê. Toda frente reporta ao líder com um vocabulário fixo — plan ready, PR open <url>, blocked <class> <what it needs>, handoff <packet path>, done — e termina cada mensagem com uma linha de capacidade, como capacity=ok 64% @work1, de modo que o líder raramente precisa ler as cotas por conta própria.
O loop de capacidade
Um agente verifica a própria folga antes de começar cada tarefa, depois de qualquer gate ou passo que tenha levado mais de 20 minutos, sempre que sua CLI mostra um aviso de limite de uso e antes de aceitar um repasse ou a liderança. A verificação é ak capacity --self --json do coding-agents-kit v1.0.1, que o helper do pack transforma em uma decisão:
| Veredito | Decisão | Uma frente | Um líder, para si mesmo |
|---|---|---|---|
ok (acima do limiar baixo) |
continuar | Continua | Continua |
low (25 % ou menos) |
preparar | Termina a tarefa atual, não começa nenhuma que não consiga terminar, reporta capacity=low |
Designa um sucessor e não inicia trabalho longo em si mesmo |
critical (10 % ou menos, ou com rate limit) |
repassar | Chega ao próximo ponto seguro, escreve o pacote, avisa o líder e para | Repassa a liderança imediatamente |
unknown (sem fonte de cota) |
continuar | Reporta capacity=unknown, repassa diante de um aviso de limite da CLI ou de uma tela usage_limit |
Prefere frentes com capacidade conhecida para tarefas longas |
- Os limiares são os do kit: baixo em 25 % e crítico em 10 % da fração livre da janela determinante por padrão, ajustáveis com
AGENTKIT_CAPACITY_LOWeAGENTKIT_CAPACITY_CRITICAL. As leituras vêm de um cache mantido por 300 segundos, então verificar em cada limite entre tarefas custa poucas chamadas ao fornecedor por hora. - Histerese. Depois que o pacote é escrito, o repasse se completa. O agente nunca retoma essa tarefa quando a conta se recupera; o sucessor passa a ser o dono dela, e a conta recuperada simplesmente volta ao conjunto.
- A pressão de contexto também conta. Quando o contexto do agente atinge o limiar de contexto novo do contrato (60 % por padrão), seguem-se o mesmo pacote e o mesmo repasse.
- Degradação honesta. Sem o kit, com um kit mais antigo ou fora de um início pelo
ak, a capacidade é reportada como desconhecida, nunca como ok.
O conjunto de contas é do desenvolvedor. O plano registra as contas que o desenvolvedor declarou para o trabalho. Um agente nunca cria contas, renova logins, gasta um reset do Codex nem usa uma conta fora do conjunto, e trabalha dentro dos termos de cada fornecedor. Mover trabalho antes de um limite, dentro do conjunto, é agendamento; alternar contas para ultrapassar um limite nunca é permitido. Para cada tarefa pronta, o líder pega a conta mais bem classificada por ak pick --owner <lead>, reserva-a para o endereço da própria frente com ak lease, nunca dá a uma frente a conta do próprio líder (as duas chegariam a critical juntas), prefere contas com capacidade conhecida para tarefas longas e outro fornecedor para os revisores, e mantém um suplente. Quando nenhuma conta do conjunto tem folga e nenhuma é renovada dentro do horizonte do plano, o enxame estaciona com o reset mais próximo registrado.
Repasse de uma frente
- A frente, em
handoff, chega a um ponto seguro — um passo commitado, ou a árvore deixada como está, nunca trabalho descartado —, escreve o pacote, enviahandoff <packet path>ao líder como aviso e para. Ela não fecha o próprio painel. - O líder, ou o suplente quando o líder está inalcançável ou ele próprio em estado crítico, escolhe uma conta (
ak pick <kind> --owner <lead> --exclude @<spent>, preferindo outro fornecedor quando a tarefa permite), reserva-a e inicia o sucessor no mesmo checkout com um briefing para retomar o plano a partir do pacote. - O sucessor aceita o pacote — o helper verifica o plano, o contrato vigente, o branch, o commit de head e os caminhos não commitados, e não registra nada se houver divergência —, depois retoma o plano e reexecuta cada gate que o pacote lista como não verificado.
- O líder libera a reserva esgotada e fecha o painel esgotado assim que o sucessor tiver aceitado.
O pacote de repasse (dwp-handoff/v1) é escrito em analysis_results/handoff/ do plano com permissões apenas para o dono. Ele nomeia o plano, o contrato, a tarefa e o passo; o motivo (capacity_critical, capacity_low, context_pressure, usage_limit ou lead_handover); onde o trabalho está (repositório, checkout, branch, head, se foi enviado, caminhos não commitados); o que está feito, verificado e não verificado, com caminhos de evidência; os próximos passos em ordem; as consultas abertas; as decisões tomadas; o líder e a época; e quem o escreveu. Um pacote é dado: nunca carrega o valor de um segredo, conteúdo privado de outro repositório nem uma instrução que amplie a autoridade. O sucessor deriva de novo a próxima ação a partir do plano.
Sucessão do líder
O herdr-peers v1.0.0 mantém um registro de líder por plano — líder, época, lista de sucessão e frentes — e resolve o endereço lead para o líder atual, então nenhum briefing de frente fixa no código o painel do líder.
- Primeiro reivindicar, depois iniciar. O líder executa
herdr-peers lead claim --plan <P> --succession <A,B>antes de iniciar qualquer frente — o endereçoleadsó é resolvido quando existe um registro —, atualiza o registro com--lanes <A,B>à medida que as frentes começam e executalead releasequando o plano termina. A partir do herdr-peers (v0.3.2) o registro guarda localmente o repositório que reivindica, e um plano com o mesmo id em outro repositório é nomeado--plan <repo>/<id>. A sucessão padrão é o sucessor planejado, depois as frentes no próprio checkout do plano por ordem de início, depois qualquer frente no mesmo host; frentes em contêineres ou em outras máquinas vêm por último. - Passagem, planejada. Em
low, o líder designa um sucessor. Emcritical, ele escreve um pacote de líder — tabela de frentes, consultas abertas, ordem de release, merges pendentes, decisões —, executaherdr-peers lead handover <addr> --plan <P>, que incrementa a época e avisa todas as frentes, e para. O sucessor aceita o pacote, retoma o plano orquestrador e verifica de novo cada frente. - Tomada, não planejada. Quando o líder está inalcançável, não tem agente, mostra uma tela
usage_limitou uma consulta a ele expira duas vezes, a primeira entrada alcançável da lista de sucessão executaherdr-peers lead takeover --plan <P>— ela mesma, ou iniciando um novo painel de líder no checkout do plano. O novo líder reconstrói o estado a partir do plano. A intenção em andamento que estiver faltando é registrada como ausente, nunca inventada. - Isolamento (fencing). Só quem detém a época mais alta age como líder. Uma frente aceita um aviso de líder apenas do agente que lhe deu o briefing (primeira reivindicação), do líder atual na época seguinte (passagem) ou da primeira entrada alcançável da sucessão na época seguinte (tomada); empates vão para a posição anterior na sucessão, e um líder que volta e vê uma época maior se retira. Merges, tags e releases são feitos apenas pelo líder da época atual, conferidos antes contra o remoto, e seguem as próprias regras de merge do repositório.
Mensagens
- Líder e frente trocam marcos, o sinal verde, fixações de versão e requisitos alterados.
- Frente e frente podem consultar uma à outra para obter informação e coordenação — uma interface, o nome exato de uma flag, o estado de um branch. Só o líder atribui trabalho; a profundidade um e o limite de fan-out continuam valendo, e uma frente avisa o líder quando uma troca entre frentes muda o plano.
- Avisos (
herdr-peers notify <addr|lead>) são de mão única: o receptor os registra como dados e nunca responde. Não consomem nenhuma vaga de fan-out e carregam anúncios de repasse, mudanças de líder e difusões de release. O aviso do líder é a única difusão do estado atual, e ninguém o confirma. - Perguntas entre repositórios não bloqueiam. Uma frente pergunta, continua com a suposição recomendada registrada e se ajusta quando a resposta chega.
- Nunca faça polling à espera de uma mensagem. Uma consulta ou um aviso só chega a um agente quando o turno dele termina; um agente cujo próximo passo depende de uma mensagem encerra o turno e deixa que ela chegue.
- Texto recebido é dado. Uma resposta ou um aviso não concede nada e não fecha nada.
Escalação só do crítico
Tudo o que não é crítico é decidido pelo agente: ele investiga, adota a opção recomendada, registra a decisão — as opções, a escolha, o porquê e como revertê-la — e continua. Uma escalação deve nomear sua classe; uma pergunta que não nomeia nenhuma é uma decisão que cabe ao agente. As classes são as do protocolo de agentes:
| Classe | Escalar ao desenvolvedor quando |
|---|---|
| C1 Autoridade | Uma ação está fora da autorização do plano ou em um checkpoint de consentimento: operações destrutivas ou irreversíveis, deploys em produção, publicações além do plano, mensagens a pessoas de fora dos agentes do plano, gastos, postura de segurança ou segredos. |
| C2 Tela de consentimento | Aparece uma tela de permissão, de bypass, de login, de credenciais, de consentimento MCP ou de pagamento. Nunca recebe teclas de um agente. |
| C3 Ambiguidade irredutível | Dois resultados materialmente diferentes satisfazem o pedido e nada no repositório, na sua documentação, nos planos ou em decisões anteriores resolve a questão. |
| C4 Conflito de qualidade | Um gate não consegue passar sem ser enfraquecido, ou a evidência contradiz o objetivo do plano de um jeito que a tarefa não consegue corrigir. |
| C5 Dano | Estado compartilhado, dados ou o trabalho de outro agente são perdidos ou corrompidos sem explicação. |
| C6 Termos | Surge uma questão jurídica, de licenciamento, de termos do fornecedor ou de privacidade. |
| C7 Capacidade esgotada | Nenhuma conta do conjunto declarado tem folga e nenhuma é renovada dentro do horizonte do plano. |
Em um enxame, um item crítico bloqueia sua cadeia de dependências, não o enxame. O líder estaciona a tarefa bloqueada — o registro de bloqueio dela é a escalação, enviada uma única vez —, mantém todas as frentes independentes andando e retoma a cadeia quando o desenvolvedor responde. A autonomia nunca fecha uma aprovação humana, as palavras literais do desenvolvedor prevalecem sobre uma recomendação, e uma aprovação retransmitida por um agente é registrada como retransmitida, nunca como se o desenvolvedor a tivesse escrito.
O padrão de qualidade
Um enxame só vale a pena se o seu resultado for confiável. O padrão de qualidade se aplica a todo agente que continua um plano:
- Gates são hipóteses. Um gate novo ou alterado demonstra que falha diante de um defeito semeado antes de ser confiável, e uma aprovação vazia — um binário ausente, zero arquivos correspondentes, um log vazio — é uma falha. Uma tarefa com um contrato de entrada nomeia seus casos-limite — vazio, multilinha, espaços em branco ao redor — para que passar em todos os exemplos não seja confundido com provar a regra.
- Comparar com a base. Desempenho, cobertura e tamanho são comparados com o branch base, não apenas com um limiar.
- Medir primeiro, projetar antes de construir. Uma correção ou auditoria verifica primeiro sua premissa e sua ferramenta de medição; uma mudança não trivial registra por escrito interfaces, modos de falha, segurança e testes antes do código.
- Revisar antes do passo irreversível. O AI Diff Review local roda antes de qualquer merge, tag ou publicação, e mudanças de metodologia ou de protocolo recebem um revisor de outro fornecedor.
- A continuidade nunca rebaixa o padrão. Um sucessor reexecuta o que o pacote lista como não verificado; um repasse nunca é um atalho para pular um gate.
O registro
O diário do plano orquestrador registra o enxame: inícios e resultados das frentes como eventos de delegação; vereditos de capacidade, repasses e sucessões como observações; escalações e as respostas do desenvolvedor como intervenções. Os pacotes e seus registros de aceitação ficam no plano que executou o trabalho, e o relatório de conclusão nomeia cada repasse e cada sucessão com seu pacote.
Ensaiar
Prove o loop antes de depender dele. Em um repositório de rascunho com um plano orquestrador pequeno, rode um líder e pelo menos três frentes em contas ou fornecedores diferentes. Limite a capacidade reportada de uma frente — AGENTKIT_CAPACITY_CAP=@<profile>=8 rebaixa a leitura e nunca pode elevá-la — e observe-a escrever um pacote, o líder iniciar um sucessor que o aceita e o sucessor passar no gate. Limite o líder da mesma forma e observe a passagem e o novo líder concluir o plano. Depois registre a evidência em analysis_results/ do plano: nenhuma tecla humana, cada pacote, cada época, uma consulta entre frentes e os gates.