O contrato que toda chamada de swarm deve satisfazer — e por que o modelo não pode misturar AgentSwarm com outras tools no mesmo turno.
Cada chamada AgentSwarm é um fan-out estruturado. Você fornece um template com placeholder {{item}} e um array items — cada string vira o prompt concreto de um subagente. Perfil padrão: coder; use explore para varreduras paralelas read-only.
Regras de validação do binário (Zod AgentSwarmToolInputSchema):
resume_agent_ids for fornecidoprompt_template deve conter {{item}} ao usar itemsresume_agent_ids é um mapa (agent_id → prompt de resume), não um array. Retoma subagentes existentes antes de lançar novos por items.
Depois vem a policy exclusive-deny: AgentSwarm deve ser a única tool call na resposta do modelo. Sem Read + AgentSwarm no mesmo turno. Explore primeiro, swarm sozinho depois.
Pense assim… um mail merge em massa. O template é a carta; cada item preenche a linha do destinatário. Você não faz mail merge e arquiva papelada no mesmo instante — o runtime força uma ação por vez para que o lançamento do swarm seja atômico e auditável.
type AgentSwarmInput = { description: string; subagent_type?: string; // default "coder" prompt_template?: string; // obrigatório com items items?: string[]; // máx 128 resume_agent_ids?: Record<string, string>; };
<agent_swarm_result> <summary>completed: 8</summary> <subagent agent_id="agent-0" item="claude" outcome="completed">...</subagent> <resume_hint>Call AgentSwarm with resume_agent_ids...</resume_hint> </agent_swarm_result>
Outcomes por subagente: completed, failed, aborted (de renderSwarmSummary no binário).
agent-swarm-exclusive-deny rejeita chamadas mistas ou duplicadas no mesmo turno.Chamada real da sessão 30e21381 — 8 subagentes paralelos, todos completaram.
{
"name": "AgentSwarm",
"args": {
"description": "Extract agent sessions & assets",
"subagent_type": "coder",
"items": ["claude", "grok", "kimi", "codex",
"appfy-projects", "loop-engineering-suite",
"agent-swarm", "gmail-auth"],
"prompt_template": "Your specific scope is: {{item}}. ..."
}
}
agent-swarm-exclusive-deny.ts (embutido no binário)
evaluate(context) { const n = toolCalls.filter(t => t.name === "AgentSwarm").length; if (n === 0) return; if (n === 1 && toolCalls.length === 1) return; // OK return { kind: "deny", message: "AgentSwarm must be called one swarm at a time." }; }
Agent — um subagente, prompt completo único. AgentSwarm — N subagentes, mesmo template + items distintos. Subagentes não recebem AgentSwarm nem Agent na tool list.
Escolha um padrão de tool calls. Veja se agent-swarm-exclusive-deny permite ou bloqueia.
wire.jsonl e state.json.