Lesson 887 of 2116
Multi-Soul Orchestration: When To Split, How To Hand Off
One Soul that does everything is a junior generalist. A team of Souls is closer to how real organizations work — but only if you design the handoff and the shared memory carefully. The fix is not a bigger model; it's specialization.
Lesson map
What this lesson covers
Learning path
The main moves in order
- 1When one Soul stops being enough
- 2multi-soul orchestration
- 3soul-to-soul handoff
- 4shared memory
Concept cluster
Terms to connect while reading
Section 1
When one Soul stops being enough
A single Soul carrying every responsibility — triage, drafting, deploying, customer support — eventually starts to sound like a junior generalist. The voice gets muddled, the memory stores collide, the refusal patterns conflict. The fix is not a bigger model; it's specialization. OpenClaw lets you spin up multiple Souls and hand work between them like an org chart.
Compare the options
| Symptom | Likely cause | Refactor |
|---|---|---|
| Voice drifts depending on the topic | One Soul carrying conflicting voice rules | Split: ops Soul vs writing Soul |
| Episodic memory mixes domains | All turns flow into one episodic store | Per-Soul private episodic, shared semantic |
| Refusal patterns contradict | Same Soul has both customer-facing and internal modes | Two Souls with explicit handoff protocol |
| Procedural store has dead workflows | Procedures from old roles never expired | Move retired procedures to a Soul that no longer ships work |
The router pattern
The most common multi-Soul shape is one router Soul plus N specialist Souls. The router has a thin Soul brief — its job is to read the request, classify it, and hand off to the right specialist. The router doesn't try to answer; it dispatches. The specialists carry the deep voice, memory, and procedures for their domain.
- 1User input arrives at the router Soul
- 2Router classifies the request against known specialist taxonomies
- 3Router hands off with a structured handoff payload — request, classification, relevant context
- 4Specialist Soul takes over, runs the task, returns a result
- 5Router decides whether the user sees the specialist directly, or whether the router summarizes
- 6Episodic memory of the handoff is written so future routers learn from it
The handoff payload
Handoffs fail when they pass too little or too much. Too little: the specialist re-asks questions the user already answered. Too much: the specialist drowns in irrelevant prior context and the voice doesn't switch cleanly. Define the payload shape explicitly.
The handoff is a typed payload, not a free-text 'pass it on.' Specialists trust the payload's shape; that's how voice and memory stay coherent.
// The handoff payload OpenClaw passes between Souls.
// Keep it small, structured, and free of router voice.
type Handoff = {
fromSoul: string;
toSoul: string;
reason: 'classified' | 'escalation' | 'fallback';
request: {
raw: string; // the user's original message, verbatim
intent: string; // the router's classification
entities: string[]; // people, systems, dates the router pulled out
};
context: {
recentTurns: number; // how many prior turns the specialist needs to read
sharedFacts: string[]; // semantic memory keys to preload
privateFacts?: never; // never share another Soul's private episodic
};
permissions: {
canRespondDirectly: boolean; // or must hand back to router
toolWhitelist: string[]; // narrower than the specialist's full kit
};
};Shared vs private memory
When you split into multiple Souls, the memory question gets harder. Some facts are organizational — every Soul should know them. Some are intimate to one Soul — a customer-success Soul shouldn't see the on-call Soul's incident notes. Decide the boundary deliberately.
Compare the options
| Memory | Sharing default | Why |
|---|---|---|
| Semantic facts about the org | Shared across Souls | All Souls need a consistent picture of reality |
| Episodic events | Private to the Soul that lived them | Voice and recall are tied to who was there |
| Procedural workflows | Shared by domain, private by Soul | Same procedure can be specialized per Soul |
| User preferences | Shared, but flagged by source Soul | All Souls benefit, but you want auditability |
| Sensitive context | Private, with explicit grant | Default-deny is the safe stance |
Conversation continuity across handoff
Users hate being asked the same question twice. The specialist Soul should know what the router already knows — but only what's relevant. The cleanest pattern is: router writes a one-paragraph summary of the conversation to date, hands it to the specialist as part of the payload, and the specialist treats it as a primer, not as full episodic context.
- Router writes a 3-5 sentence summary capturing intent, entities, and what's been tried
- Specialist reads the summary as system context, NOT as episodic memory
- If the specialist needs more, it asks the router for specific shared facts by key
- Specialist's own episodic memory begins fresh from the moment it takes over
- On handoff back, specialist returns a structured result, not free-form transcript
When NOT to split
- Domain is small and unified — one voice, one memory, one Soul is fine
- Tasks rarely require domain-specific tone — context-switching costs more than it saves
- You're still iterating on the original Soul brief — splitting prematurely freezes mistakes
- Latency matters and the handoff would add a model roundtrip per turn
- You don't have eval coverage for each Soul individually — splits without evals just multiply unknowns
Apply: design a two-Soul split
- 1Take an existing single-Soul agent that's starting to feel overloaded
- 2List its top 10 tasks and group them by voice / memory needs
- 3If two natural clusters emerge, draft Soul briefs for each — name, voice, refusals, memory boundary
- 4Define the handoff payload shape for the two new Souls
- 5Write three end-to-end scenarios that cross the boundary; trace what gets shared
- 6Run the eval set you already had for the single Soul against the new pair — coverage should not regress
Key terms in this lesson
The big idea: multiple Souls work like an org chart with explicit handoffs. The wins come from specialization; the costs come from sloppy memory boundaries. Split when voice and memory genuinely diverge — and design the handoff before you wire it.
End-of-lesson quiz
Check what stuck
15 questions · Score saves to your progress.
Tutor
Curious about “Multi-Soul Orchestration: When To Split, How To Hand Off”?
Ask anything about this lesson. I’ll answer using just what you’re reading — short, friendly, grounded.
Progress saved locally in this browser. Sign in to sync across devices.
Related lessons
Keep going
Creators · 10 min
Subagents: When To Delegate vs Do It Yourself
Claude Code can spawn isolated subagents for parts of a task. The trick is knowing when delegation actually helps — and when it just doubles your context bill.
Creators · 10 min
Codex With Custom Tools And MCP
Codex's real power shows when you connect it to your own tools — internal APIs, datastores, ticketing systems — usually via Model Context Protocol.
Creators · 10 min
Debugging A Heartbeat Loop: Observability, Replay, And Failure Modes
Heartbeats fail in ways reactive agents never do — silent drift, soul-state thrash, infinite loops. Debugging them takes different tools and a different mental model.
