Seu Subagente Está Indo na Direção Errada? Agora Você Pode Redirecioná-lo em Pleno Voo


Numa segunda-feira à tarde, você faz o Hermes gerar três subagentes para paralelizar um refactor: um para o frontend, um para o backend, um para os testes. Meia hora depois, você dá uma olhada no progresso e percebe que o do backend está indo na direção errada — ele continua escrevendo contra a API antiga, enquanto a nova mudou todas as assinaturas. Antes, sua única opção era matar o lote inteiro, reexplicar os requisitos e começar do zero; se você desse azar, os dois subagentes que estavam indo bem também acabavam sendo atingidos. Isso acabou. Desde 13 de agosto, o delegate_task vem com um painel de controle em tempo real — você pode listar os subagentes em execução, redirecionar o que se desviou ou interromper um que não tem mais salvação, tudo sem atrapalhar o resto do time.

O console do maestro: três ações de controle

Primeiro, uma premissa rápida: um subagente é um “clone” separado que o Hermes despacha para trabalhar de forma independente, com seu próprio contexto de conversa isolado e sessão de terminal própria. Antes, o delegate_task tinha exatamente um verbo — spawn: disparar uma tarefa e esperar o resumo. O PR #85232 adiciona três ações de controle diretamente na mesma ferramenta, sem introduzir nenhuma ferramenta nova. O modelo continua chamando o delegate_task; ele só ganha três parâmetros novos: action, subagent_id e message.

Action Parâmetros Efeito
action='list' nenhum Lista os subagentes ainda em execução gerados por esta conversa
action='steer' subagent_id + message Enfileira uma correção de rota em um subagente em execução sem interrompê-lo
action='stop' subagent_id Interrompe um subagente antes da hora; o resultado parcial dele ainda volta normalmente
omitido ou action='spawn' goal/tasks etc. O modo de spawn original — comportamento inalterado

As três ações de controle rodam de forma síncrona — elas nunca entram na fila de despacho em segundo plano e retornam na hora, então você tem uma resposta instantânea do tipo “aqui está o que está rodando” direto na conversa.

Como usar: um treino completo de descobrir → redirecionar → interromper

Suponha que você acabou de despachar três subagentes e quer ver como estão:

{
  "tool": "delegate_task",
  "action": "list"
}

Cada entrada na lista retornada traz subagent_id, parent_id, depth, goal, model, started_at e accepting_steer — o campo goal deixa você identificar de relance qual deles “ainda está escrevendo contra a API antiga”.

Depois de achar o desgarrado, injete uma correção:

{
  "tool": "delegate_task",
  "action": "steer",
  "subagent_id": "sa-7f3k9",
  "message": "Heads up: the backend API signature changed. Use the new /v2/users endpoint — the field is userId, not id."
}

O steer funciona enfileirando o texto na entrada pendente do subagente de destino, que é entregue no próximo tool boundary do filho — ele não arranca o subagente do que ele está fazendo; a correção chega num ponto seguro. E se o subagente terminar antes de consumir o steer, a instrução não desaparece no ar: ela aparece como um campo missed_steer na entrada de conclusão daquele subagente, para você saber que a correção de rota nunca foi aplicada.

Se esse subagente realmente não tem mais salvação, encerre-o:

{
  "tool": "delegate_task",
  "action": "stop",
  "subagent_id": "sa-7f3k9"
}

O stop usa a infraestrutura de interrupção: o subagente para no próximo limite de iteração, e o resultado parcial que ele produziu volta como uma mensagem de conclusão normal — nenhum trabalho desperdiçado, nenhum estado pendurado. Você pode pegar a saída parcial e despachar um subagente novo para terminar o resto.

Limites e segurança: você só controla a própria árvore

O painel de controle vem com alguns limites pensados de propósito — conheça-os e você não terá surpresas:

  • Cadeia de propriedade: uma conversa só pode controlar subagentes que ela mesma gerou. O Hermes impõe isso por uma cadeia de weakrefs _delegate_parent_ref com verificação de identidade — você não pode redirecionar os filhos de outra conversa a partir da sua. É a mesma garantia que impede várias sessões do Hermes de atropelarem umas às outras.
  • Ações de controle não consomem o orçamento de spawn: existe um teto por turno de quantos subagentes você pode gerar, mas list/steer/stop ficam de fora — de propósito. É exatamente quando o teto é atingido que “interromper com urgência o que saiu do controle” importa mais, então o stop continua utilizável.
  • Subagentes não geram subagentes por padrão: um filho com role='leaf' nunca recebe a ferramenta delegate_task; só um role='orchestrator' explícito mantém o conjunto de ferramentas de despacho (limitado por delegation.max_spawn_depth). O controle sempre fica no lado da conversa de nível superior.
  • Tempo de entrega do steer: o steer é “injeção em fila”, não “interrupção instantânea”. Se o subagente estiver preso dentro de uma chamada de ferramenta muito longa, a correção só chega no próximo tool boundary — tudo bem na maioria dos casos, mas para situações de “preciso parar agora” o stop é a ferramenta certa.

Quando a orquestração ao vivo compensa

O valor real é mover sua “inspeção humana” de depois-do-fato para em-pleno-voo:

  • Correção de rota antecipada em tarefas longas: ao reescrever dezenas de milhares de linhas, descobrir um rumo errado depois de 10 minutos é caro. Um único list + steer no meio pode economizar horas.
  • Tratamento cirúrgico em lotes paralelos: de três subagentes, só um se desviou — dê steer ou stop só naquele, enquanto os outros dois continuam rodando, em vez de reiniciar o lote inteiro.
  • Combinação com fluxos de kanban/revisão: se você gerencia tarefas de subagentes num quadro (veja o nosso guia do ciclo de vida de revisão kanban), o painel de controle preenche a lacuna de “como eu interfiro no meio da tarefa” que o quadro sozinho não conseguia.

Já cobrimos o delegate_task antes — o merge-reconciler, um árbitro neutro de merge de código mostrou o formato “despachar e esperar pelos resultados”. Essa superfície de controle evolui o delegate_task de disparar-e-esquecer para conduzir-enquanto-roda. Os subagentes são o núcleo dos fluxos multiagente do Hermes desde a v0.20.0 (veja as notas de lançamento da Herald v0.20.0), e agora eles finalmente têm um volante ao vivo.

Uma frase para guardar: o list deixa você ver, o steer deixa você falar, o stop deixa você frear — os três sem interromper os subagentes que estão indo bem. Da próxima vez que um subagente se desviar, você não precisa virar a mesa e recomeçar do zero.