/** * Example 16 — Synchronous agent handoff via `delegate_to_agent` * * During `runTeam` / `runTasks`, pool agents register the built-in * `delegate_to_agent` tool so one specialist can run a sub-prompt on another * roster agent and read the answer in the same conversation turn. * * Whitelist `delegate_to_agent` in `tools` when you want the model to see it; * standalone `runAgent()` does not register this tool by default. * * Run: * npx tsx examples/16-agent-handoff.ts * * Prerequisites: * ANTHROPIC_API_KEY */ import { OpenMultiAgent } from '../src/index.js' import type { AgentConfig } from '../src/types.js' const researcher: AgentConfig = { name: 'researcher', model: 'claude-sonnet-4-6', provider: 'anthropic', systemPrompt: 'You answer factual questions briefly. When the user asks for a second opinion ' + 'from the analyst, use delegate_to_agent to ask the analyst agent, then summarize both views.', tools: ['delegate_to_agent'], maxTurns: 6, } const analyst: AgentConfig = { name: 'analyst', model: 'claude-sonnet-4-6', provider: 'anthropic', systemPrompt: 'You give short, skeptical analysis of claims. Push back when evidence is weak.', tools: [], maxTurns: 4, } async function main(): Promise { const orchestrator = new OpenMultiAgent({ maxConcurrency: 2 }) const team = orchestrator.createTeam('handoff-demo', { name: 'handoff-demo', agents: [researcher, analyst], sharedMemory: true, }) const goal = 'In one paragraph: state a simple fact about photosynthesis. ' + 'Then ask the analyst (via delegate_to_agent) for a one-sentence critique of overstated claims in popular science. ' + 'Merge both into a final short answer.' const result = await orchestrator.runTeam(team, goal) console.log('Success:', result.success) for (const [name, ar] of result.agentResults) { console.log(`\n--- ${name} ---\n${ar.output.slice(0, 2000)}`) } } main().catch((err) => { console.error(err) process.exit(1) })