Bot Pipeline Coordination
Pass work between registered bots using the inbox/outbox handoff pattern.
Available Bots
| Bot | Workspace | Specialty |
|---|---|---|
| cody | workspace-cody | Coding, implementation |
| researcher | workspace-researcher | Research, web search |
| seo | workspace-seo | SEO optimization |
| contentwriter | workspace-contentwriter | Content, copy |
| marketing | workspace-marketing | Marketing campaigns |
| data-analyst | workspace-data-analyst | Data analysis |
Workflow
1. Receive Task
- Check orchestrator's inbox for new tasks:
~/.openclaw/workspace-orchestrator/inbox/ - Read task from
instructions.mdin inbox
2. Route to Specialist
For each bot, the path pattern is:
~/.openclaw/workspace-<bot>/inbox/instructions.md
~/.openclaw/workspace-<bot>/outbox/results.md
~/.openclaw/workspace-<bot>/status.json
To delegate to a bot:
- Write task to
<bot>/inbox/instructions.md - Update
<bot>/status.jsonwith{"state": "pending", "task": "description"} - Notify the bot via sessions_send or let it check on next turn
3. Monitor Progress
Check status.json for each bot:
pending- Task assigned, not startedrunning- Bot is workingcompleted- Results ready in outbox/failed- Error occurred
4. Collect Results
When bot status = completed:
- Read results from
<bot>/outbox/results.md - Clear the outbox after reading
- Update status to
{"state": "ready"}
5. Consolidate
Combine results from all bots into final deliverable.
Example: Product Launch Task
# 1. Read incoming task
task = read("~/.openclaw/workspace-orchestrator/inboxinstructions.md")
# 2. Delegate to researcher
write("~/.openclaw/workspace-researcher/inbox/instructions.md", """
Research brief: [product name]
- Competitor analysis
- Target audience insights
- Keyword research
Deliver to outbox/results.md
""")
write("~/.openclaw/workspace-researcher/status.json", '{"state": "pending", "task": "research"}')
# 3. Delegate to contentwriter (after researcher completes)
# ... wait for researcher status = completed
# 4. Collect and consolidate
research_results = read("~/.openclaw/workspace-researcher/outbox/results.md")
File Paths (for reference)
ORCHESTRATOR_INBOX = "~/.openclaw/workspace-orchestrator/inbox"
ORCHESTRATOR_OUTBOX = "~/.openclaw/workspace-orchestrator/outbox"
BOT_BASE = "~/.openclaw/workspace-{bot}"
BOT_INBOX = f"{BOT_BASE}/inbox/instructions.md"
BOT_OUTBOX = f"{BOT_BASE}/outbox/results.md"
BOT_STATUS = f"{BOT_BASE}/status.json"
Key Principles
- Always write instructions first - Don't assume bot knows context
- Check status before reading outbox - Don't race condition
- Clear outbox after reading - Prevent duplicate processing
- Handle failures gracefully - Log errors, try alternatives
- Consolidate explicitly - Don't leave gaps between handoffs