Multi-agent routing: setup works for simple cases, but advanced configs are fragile
Summary
Multi-agent routing in OpenClaw is usable for small setups (for example: one agent per channel, no peer overrides).
The risk climbs fast when you combine:
- multiple agents
- multiple channel accounts
- per-peer bindings
- per-agent
agentDir
- session scope choices
This is not one single bug. It is a recurring issue cluster where routing and session-path behavior can regress between versions.
Environment
- Analysis date: 2026-02-23
- Evidence source A: official docs (
docs.openclaw.ai)
- Evidence source B: live GitHub issue queries (
openclaw/openclaw)
- Evidence source C: local issue snapshot:
research/openclaw-issues-snapshot/2026-02-20-221422/issues-all.jsonl
Reproduction
Use a minimal but realistic multi-agent setup:
- Create two isolated agents.
- Configure two accounts on one channel (Telegram/Discord/WhatsApp/Slack).
- Add account-level bindings.
- Add one peer-level override binding above channel-wide rules.
- Restart gateway and run:
openclaw agents list --bindings
openclaw channels status --probe
- Send inbound messages to both accounts and one bound peer.
Expected
Messages route deterministically to the intended agentId + account path.
Actual (seen in issue history)
Depending on version and config shape, users reported:
- wrong agent response
- wrong account delivery
- dropped inbound on one account
- session path validation failures
Findings
- Docs quality is improving, but setup still has many moving parts.
- Binding priority + first-match ordering is deterministic, but easy to misconfigure.
- Regression pattern is real across channels (Telegram/Discord/Slack/WhatsApp).
- A recurring error string appears often in issue history:
Session file path must be within sessions directory
- Snapshot grep (2026-02-20) found this exact string in 112 issues (many duplicates/variants).
Mitigation / Workaround
Use a hardened rollout path:
- Start with account-level routing only (no peer overrides yet).
- Keep each agent on a unique
agentDir (never reuse).
- Add peer overrides only after account routing is stable.
- Keep peer override bindings above channel-wide bindings.
- For multi-account DM isolation, prefer:
session.dmScope: "per-account-channel-peer"
- Use a preflight check before production:
openclaw agents list --bindings
openclaw channels status --probe
openclaw gateway status
openclaw logs --follow
- Run a smoke test matrix (DM/group/thread per account).
Risk / Impact
- Privacy risk: message may route to wrong agent/persona.
- Reliability risk: silent drops or partial message flow.
- Ops risk: high debugging cost for small config changes.
Open examples:
- #15418 — Discord multi-account ignores
accountId in delivery context
- #17047 — Telegram multi-account bot silently drops inbound DMs
- #17494 — binding matches sub-agent but loads default workspace/personality
- #17600 — channel bindings not enforced, responses in wrong channels
- #16652 — Telegram default provider not starting when accounts exist
Recently closed siblings in same cluster:
Next actions
References