80 lines
2.7 KiB
Markdown
80 lines
2.7 KiB
Markdown
# OpenClaw session routing / two-agent proposal
|
||
|
||
## Problem observed
|
||
Michael reported cross-channel bleed where parts of WebUI-originated conversation continuations were appearing in Telegram. This did not seem limited to heartbeat content; some leaked text looked like the tail end of a WebUI conversation.
|
||
|
||
## Diagnosis summary
|
||
The issue appears more like shared main-agent/session routing bleed than a simple heartbeat-only bug.
|
||
|
||
Most suspicious current config factors:
|
||
- heartbeat configured under `agents.defaults.heartbeat`
|
||
- heartbeat target explicitly set to Telegram / `1411368290`
|
||
- `tools.sessions.visibility` set to `all`
|
||
- single shared `main` agent serving multiple surfaces
|
||
|
||
Less suspicious / probably correct:
|
||
- `session.dmScope = "per-channel-peer"` looks like the right direction and should likely be kept.
|
||
|
||
## Docs/research conclusion
|
||
OpenClaw docs indicate the official mechanism for channel-to-agent routing is:
|
||
- `agents.list` for agent definitions
|
||
- `bindings` for mapping inbound channels/accounts/peers to agents
|
||
|
||
Important doc takeaways:
|
||
- routing chooses one agent deterministically
|
||
- `bindings` can match by channel, account, peer, etc.
|
||
- WebChat attaches to the selected agent and defaults to that agent’s main session
|
||
|
||
## Proposed separation model
|
||
Use two agents with the same workspace but different channel roles:
|
||
- `telegram-main`
|
||
- `webui-main`
|
||
|
||
Keep `grok-cron` as-is.
|
||
|
||
### Intended behaviour
|
||
- Telegram inbound traffic binds to `telegram-main`
|
||
- WebUI/default interactive use binds to `webui-main`
|
||
- heartbeat lives only on `telegram-main`
|
||
- both agents may share the same workspace for files/projects
|
||
|
||
## Config proposal file created
|
||
Saved comparison file:
|
||
- `/home/openclaw/.openclaw/openclaw.two-agent-proposal.json`
|
||
|
||
Live config was not overwritten.
|
||
|
||
## Key proposed config changes
|
||
### Remove heartbeat from defaults
|
||
Remove:
|
||
- `agents.defaults.heartbeat`
|
||
|
||
### Replace `main` with two agents
|
||
New agent layout:
|
||
- `telegram-main` with heartbeat block
|
||
- `webui-main` marked `default: true`
|
||
- existing `grok-cron` retained
|
||
|
||
### Add bindings
|
||
Add top-level:
|
||
```json
|
||
"bindings": [
|
||
{
|
||
"agentId": "telegram-main",
|
||
"match": {
|
||
"channel": "telegram"
|
||
}
|
||
}
|
||
]
|
||
```
|
||
|
||
## Current confidence
|
||
High confidence on the architectural direction:
|
||
- separate agents + bindings is the right OpenClaw-native way to reduce cross-channel bleed
|
||
|
||
Lower confidence on exact final production syntax until validated live, because the proposal has not yet been tested/restarted.
|
||
|
||
## User preference / outcome
|
||
Michael preferred a separate comparison config file rather than changing the live config immediately.
|
||
The proposed two-agent config was written out for comparison and reviewed in short diff form.
|