O código de dois agentes colidiu? Envie um terceiro agente como árbitro

São 2h da manhã e seus dois agentes acabaram de terminar o trabalho em paralelo: um refatorou as assinaturas de funções do módulo de pagamento, o outro adicionou um novo recurso no mesmo arquivo, e o git merge solta um gemido enquanto os marcadores de conflito inundam a tela. A quem você pede para resolver? Pergunte ao agente A e ele vai decidir que a refatoração dele importa mais; pergunte ao agente B e ele vai insistir que o novo recurso é o trabalho de verdade — uma parte envolvida na disputa nunca é um juiz imparcial. Em agosto de 2026, o Hermes incorporou uma skill chamada merge-reconciler (PR #83063) construída sobre uma ideia simples: nenhum dos autores toca no merge — um agente terceiro e neutro arbitra no lugar.
Por que as partes não conseguem se reconciliar sozinhas
Esta é a premissa em que todo o design se apoia, e é a observação que a documentação da skill martela: quando um agente encara o código de um colega, ele carrega um viés inerente — ou acredita que a própria mudança é mais correta e silenciosamente sobrescreve o outro lado, ou não consegue entender o código do colega e abandona o próprio trabalho. Nenhum dos dois resultados é bom. O ponto mais sutil é que conflitos de merge raramente são apenas “o código não aplica” — as duas mudanças carregam intenções por trás delas, e somente colocando as duas intenções na mesa você decide no que cada hunk conflitante deve se tornar.
O merge-reconciler coloca o árbitro como um terceiro sem interesse no conflito: ele recebe os dois diffs e as intenções declaradas de ambos os lados, e então decide sobre cada hunk. A skill é puramente skill-mais-documentação — zero mudanças no código do núcleo — então todo usuário do Hermes a recebe de fábrica, sem precisar atualizar configuração alguma.
Três classes de conflito, três regras de decisão
O árbitro não divide a diferença; ele classifica cada hunk conflitante e aplica a regra correspondente:
| Classe de hunk | Significado | Resolução |
|---|---|---|
| disjoint-intent | As duas mudanças servem a objetivos diferentes e podem coexistir | Mantenha as duas — combine |
| same-question-different-answer | Os dois lados responderam uma mesma pergunta de design de formas diferentes | Escolha UMA conforme as intenções declaradas; deixe a decisão explícita |
| superseded | A premissa de um lado não se sustenta mais após a mudança do outro | Mantenha o lado sobrevivente; registre o motivo |
A regra mais contraintuitiva é nunca dividir a diferença: se os dois lados responderam a mesma pergunta de design de formas diferentes, o árbitro deve escolher uma — não soldar um híbrido que ninguém projetou. O processo de decisão também roda sob um contrato de imparcialidade: nunca favorecer nenhum dos lados, tocar SOMENTE nas regiões conflitantes (sem correções oportunistas), e toda escolha de design deve aparecer no resumo final, onde um humano pode vetá-la.
Como usar: três formatos
Formato um: standalone. Carregue a skill dentro do repositório com conflito e siga o procedimento de ponta a ponta: encontre o ancestral comum com git merge-base <A> <B>, colete as mudanças dos dois lados com git log --oneline <base>..<side> e git diff <base>..<side> -- <file>, fixe as duas intenções por meio dos resumos das tarefas no kanban ou dos corpos dos PRs, e então classifique, decida, verifique e faça commit hunk por hunk.
Formato dois: delegar um agente neutro. O formato preferido para campanhas multi-agente — crie um subagente com delegate_task cuja mensagem de tarefa carrega o caminho do repositório, os nomes das duas branches, os resumos de intenção dos dois lados na íntegra e uma instrução para seguir esta skill. O subagente é um terceiro natural, sem motivo para viés.
Formato três: nativo do kanban. Se o seu trabalho paralelo passa pelo kanban, crie um card de reconciliação dedicado atribuído a um terceiro perfil (não a nenhum dos dois workers), com AMBOS os cards conflitantes vinculados como pais:
kanban_create(
title="reconcile branch-a x branch-b",
assignee="reconciler",
parents=["t_a", "t_b"]
)
Os vínculos de pais carregam automaticamente os resumos de conclusão dos dois lados para o contexto do árbitro; o corpo do card apenas nomeia o caminho do repositório e as duas branches. Quando a arbitragem termina, finalize com kanban_complete(summary=...), listando a decisão de cada hunk.
Quando NÃO usar
A documentação da skill traça limites claros: conflitos dentro do trabalho de um único agente, ou colisões triviais de lockfile/arquivos gerados, devem ser regenerados em vez de arbitrados. A skill mira o caso difícil de campanhas paralelas em que dois agentes mudaram o mesmo código com intenção. E se a intenção de algum dos lados não puder ser recuperada das mensagens de commit, dos corpos dos PRs ou dos resumos do kanban — escale em vez de adivinhar. Decidir sem intenções é jogar dados.
O trabalho paralelo multi-agente é um dos pontos fortes do Hermes — já cobrimos cadeias de diretórios AGENTS.md para colaboração multi-agente e combinações de skills em cadeia. Para manter os agentes trabalhando em paralelo sem colidir, a referência de comandos do kanban e nosso guia completo de automação com cron são boas próximas leituras.