Um lote, muitos cérebros: o delegate_task agora escolhe um modelo ou um profile por tarefa

Você entrega ao Hermes um lote: oito subtarefas. Seis são buscas — ler um documento, rodar um grep num log, reformatar uma tabela. Duas são as difíceis — desembaraçar um bug de concorrência, redesenhar a fronteira de um módulo. E você tem um modelo só para todas. Escolha um caro e as seis tarefas triviais queimam dinheiro; escolha um barato e as duas difíceis voltam com bobagem plausível. Essa escolha forçada deixa de ser obrigatória com o PR #142563, mesclado em 22 de outubro de 2026.
A regra antiga: um delegation.model para cada filho
O modelo filho ficava fixado globalmente no config.yaml — delegation.model, delegation.provider, delegation.base_url. Na estratégia padrão, o delegate_task não tem parâmetro de modelo por tarefa, então cada subagente de um lote roda na mesma rota. A documentação dizia com todas as letras: para uma subtarefa sensível a qualidade, ou você deixa delegation.model sem definir naquela sessão, ou entrega o trabalho ao quadro kanban, que aceita, sim, uma sobrescrita de modelo por tarefa.
Então todo mundo fez o mesmo acordo: fixar um modelo de faixa intermediária e conviver com ele.
A regra nova: delegation.backend decide como o trabalho é roteado
A mudança em uma frase: a delegação virou uma categoria de provider plugável, com o mesmo formato de TTS, geração de imagens e backends de terminal. delegation.backend escolhe a estratégia. default significa exatamente o que você tinha — sem definir ou em default, o schema do delegate_task e cada definição de ferramenta do hermes-cli ficam idênticos byte a byte ao que eram.
As outras duas estratégias vêm do plugin oficial advanced-delegation:
model_map— você lista opções com nome (fast,deep, …), cada uma com uma descrição de uma linha mais um provider e um modelo, e o modelo escolhe uma por tarefa;profile_routes— cada tarefa roda como um dos seus profiles do Hermes, com o modelo, as credenciais, as skills e a persona daquele profile.
delegation:
backend: model_map
backends:
model_map:
options:
- name: fast
description: Cheap and quick; lookups, summaries, simple edits.
provider: openrouter
model: google/gemini-3-flash-preview
- name: deep
description: Slow and careful; hard debugging and design work.
provider: anthropic
model: claude-opus-5
reasoning_effort: high
service_tier: fast # opcional; recusado no spawn se esta rota não tiver nível fast
default: fast # opcional: opção para tarefas que não definem nenhuma
profile_routes: # lido quando backend: profile_routes
profiles:
- name: coder
description: Writes and refactors code; runs tests.
As descrições não são enfeite. O modelo só vê os nomes e as descrições que você configurou — nunca os campos crus de provider, modelo ou chave. Escreva “Cheap and quick; lookups, summaries” e você está ensinando quando economizar; escreva “Slow and careful; hard debugging and design work” e você está ensinando quando gastar.
O core mantém todo o ciclo de vida dos dois jeitos: spawn, isolamento, papéis leaf/orchestrator, profundidade, concorrência, unidades em segundo plano, parada do fan-out, resultados, output_schema, progresso. Só a decisão de roteamento mudou de lugar.
Todo resultado roteado agora carrega um recibo route
Uma tarefa que passou por um backend informa onde realmente rodou: o backend, o nome da opção ou do profile, e o provider, modelo, esforço de raciocínio e nível de velocidade que o filho usou. Se um provider de fallback assumiu, fallback_activated é true.
Isso importa mais do que parece. Antes, você deduzia o modelo do filho a partir de “eu defini delegation.model”. Agora ele reporta — quando um lote de repente fica caro, você lê o recibo em vez de adivinhar.
Falhas são barulhentas, nunca uma troca silenciosa
É aqui que o PR gasta a maior parte do esforço:
- Se o backend selecionado está faltando (plugin não instalado ou desabilitado) ou informa que não consegue rodar, o
delegate_taskdevolve um erro de ferramenta que nomeia o backend e a correção (instalar ou habilitar o plugin,/delegation default, ouhermes config set delegation.backend default). Nenhum subagente inicia, e os filhos nunca rodam em silêncio na rota padrão. - Dentro de um lote, uma tarefa que o backend dela não consegue rotear — uma opção desconhecida, um parâmetro que o backend escolhido não aceita, um profile que não existe, um
service_tierque a rota não oferece, umreasoning_effortdesconhecido, credenciais ausentes — é recusada sozinha. A entrada de resultado dela temstatus: "error", o motivo eroute.refused: true; as irmãs seguem rodando. - A chamada só se torna erro de ferramenta quando todas as tarefas foram recusadas.
- Uma rota de modelo sem
fallback_providerspróprios herdadelegation.fallback_providers;fallback_providers: []na rota desativa o fallback para ela. Uma rota de profile usa a cadeia de fallback daquele profile.
Um limite que vale conhecer: enquanto model_map ou profile_routes está ativo, delegation.model e delegation.provider ficam inativos — as rotas decidem. Não configure opções e depois se pergunte por que o antigo modelo fixo deixou de importar.
Trocar, e voltar atrás
As duas estratégias, o comando de barra /delegation e o hermes delegation config (criar, editar e excluir rotas de modelo, escolher profiles) vêm no plugin oficial:
hermes plugins search advanced-delegation
hermes plugins install advanced-delegation
hermes plugins enable advanced-delegation
Depois, trocar não exige editar arquivos:
/delegation model_map # só nesta sessão
/delegation profile_routes --global # grava delegation.backend no config.yaml
/delegation default # volta para a estratégia padrão
Há uma sutileza que a documentação aponta explicitamente: trocar na sessão muda o roteamento, não o schema da ferramenta. Os parâmetros por tarefa (option, profile) fazem parte do prompt em cache e seguem o config.yaml, então mudam na sessão seguinte. Até lá o modelo pode ainda mandar o parâmetro do backend anterior — um option: fast depois de passar para profile_routes. Essa tarefa é recusada sozinha, com a correção na mensagem: /delegation <backend> --global e depois /new (porque o /new começa no backend salvo), ou /delegation <saved backend> para voltar. Ela nunca roda na rota padrão do novo backend só para continuar.
Sem o plugin, hermes config set delegation.backend default restaura o comportamento antigo.
Qual estratégia encaixa
model_map— um conjunto de credenciais, dinheiro dividido por dificuldade. Tarefas leves vão para um modelo barato, as duras para um modelo forte. Encaixa em lotes cujas subtarefas variam muito em dificuldade: corrigir dez issues numa rodada, rodar vinte linhas de pesquisa.profile_routes— o filho troca de identidade. Cada profile carrega o próprio modelo, pool de credenciais,SOUL.mde política de terminal, o que encaixa em “estes subagentes devem rodar sob outras permissões”, por exemplo manter o trabalho de código dentro de uma política de terminal restrita.
Um aviso vem direto da documentação e merece citação: listar um profile em delegation.backends.profile_routes deixa os subagentes deste profile usarem as credenciais, o pool de credenciais, o SOUL.md e a política de terminal daquele profile. Liste só os profiles cujas chaves e cujo acesso ao terminal você aceita que este agente use.
Status do lançamento
O PR #142563 foi mesclado no main em 22 de outubro de 2026. O seguinte, #142564, move a própria estratégia padrão para um plugin incluído, e o #143126 acrescenta as configurações de delegação no desktop (seletor de modo, editor de rotas de modelo, rotas de profile). O lançamento mais recente é o v0.22.4, de 21 de outubro, então hoje tudo isso está só no main e chega ao canal estável na próxima versão. Se você trocar agora, atenção ao canal: releases de correção ainda não trazem isso.
Se você ainda não usou o controle de subagentes ao vivo (list/steer/stop), comece pelo guia de orquestração de subagentes. Para a seção delegation completa, a referência do hermes config é mais rápida que ler o código. A outra metade do roteamento por modelo está no guia de model_overrides, e a instalação de plugins está coberta no guia do catálogo de plugins.