Runtimes
Chat channels#
An OpenClaw-family agent can be reachable from a lot of places at once. Each channel writes its own transcript directory, and ClawMetry reads all of them into the same session and event model as everything else — so a Telegram conversation and a terminal session sit side by side in Conversations, with the same cost accounting.
Supported channels#
All 22 adapters are free; there is no per-adapter gate.
| Telegram | Signal | Discord | |
| Slack | IRC | iMessage | WebChat |
| Google Chat | Microsoft Teams | BlueBubbles | Matrix |
| Mattermost | LINE | Nostr | Twitch |
| Feishu | Zalo | Tlon | Synology Chat |
| Nextcloud Talk | ClickClack |
Where the data comes from#
One directory per adapter under the workspace root:
~/.openclaw/telegram/*.jsonl
~/.openclaw/signal/*.jsonl
~/.openclaw/whatsapp/*.jsonl
~/.openclaw/discord/*.jsonl
…The daemon walks each directory it finds and ingests the transcripts. Files that are adapter bookkeeping rather than conversation — offset trackers, schema manifests — are skipped by name, so a JSON-object-per-file layout does not turn into noise in the event table.
The concurrent-channel cap#
The channels axis is capacity-scoped: every adapter is free, but the number you may run concurrently is what the tier bounds.
| Tier | Concurrent channels |
|---|---|
| OSS / Free | 3 |
| Starter and above | Unlimited |
clawmetry channels # list adapters and the current cap
clawmetry channels --json # {tier, grace, enforced, channel_limit, channels[]}
clawmetry channels --why 8 # what tier 8 concurrent channels would needNote that --why takes a count, not an adapter id — because the constraint is
capacity, not which adapter you picked.
What you see per channel#
The Conversations tab groups by channel and thread. Per channel you get:
- Message volume and thread count over time
- Delivery health — whether messages are actually getting through
- Per-thread transcripts with the same tool-call and cost detail as any session
- Which agent handled which conversation
The API surface mirrors this:
curl -s localhost:8900/api/channels/status | jq
curl -s localhost:8900/api/channels/telegram/threads | jq '.threads[:5]'
curl -s localhost:8900/api/channel-delivery-health | jqAdding a channel directory#
If your agent writes a channel transcript directory ClawMetry does not know about, the daemon needs its directory name added to the channel list — that is the only wiring required, and it is picked up on the next cycle. Open an issue with the directory name and a sample line.