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_refcom 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/stopficam de fora — de propósito. É exatamente quando o teto é atingido que “interromper com urgência o que saiu do controle” importa mais, então ostopcontinua utilizável. - Subagentes não geram subagentes por padrão: um filho com
role='leaf'nunca recebe a ferramentadelegate_task; só umrole='orchestrator'explícito mantém o conjunto de ferramentas de despacho (limitado pordelegation.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” ostopé 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+steerno meio pode economizar horas. - Tratamento cirúrgico em lotes paralelos: de três subagentes, só um se desviou — dê
steeroustopsó 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.