openclaw channels
Manage chat channel accounts and their runtime status on the Gateway.
Related docs:
- Channel guides: Channels
- Gateway configuration: Configuration
Common commands
Status / capabilities / resolve / logs
channels status:--probe,--timeout <ms>,--jsonchannels capabilities:--channel <name>,--account <id>(only with--channel),--target <dest>,--timeout <ms>,--jsonchannels resolve:<entries...>,--channel <name>,--account <id>,--kind <auto|user|group>,--jsonchannels logs:--channel <name|all>,--lines <n>,--json
channels status --probe is the live path: on a reachable gateway it runs per-account
probeAccount and optional auditAccount checks, so output can include transport
state plus probe results such as works, probe failed, audit ok, or audit failed.
If the gateway is unreachable, channels status falls back to config-only summaries
instead of live probe output.
Add / remove accounts
openclaw channels add --help shows per-channel flags (token, private key, app token, signal-cli paths, etc).
Common non-interactive add surfaces include:
- bot-token channels:
--token,--bot-token,--app-token,--token-file - Signal/iMessage transport fields:
--signal-number,--cli-path,--http-url,--http-host,--http-port,--db-path,--service,--region - Google Chat fields:
--webhook-path,--webhook-url,--audience-type,--audience - Matrix fields:
--homeserver,--user-id,--access-token,--password,--device-name,--initial-sync-limit - Nostr fields:
--private-key,--relay-urls - Tlon fields:
--ship,--url,--code,--group-channels,--dm-allowlist,--auto-discover-channels --use-envfor default-account env-backed auth where supported
openclaw channels add without flags, the interactive wizard can prompt:
- account ids per selected channel
- optional display names for those accounts
Bind configured channel accounts to agents now?
openclaw agents bindings, openclaw agents bind, and openclaw agents unbind (see agents).
When you add a non-default account to a channel that is still using single-account top-level settings, OpenClaw promotes account-scoped top-level values into the channel’s account map before writing the new account. Most channels land those values in channels.<channel>.accounts.default, but bundled channels can preserve an existing matching promoted account instead. Matrix is the current example: if one named account already exists, or defaultAccount points at an existing named account, promotion preserves that account instead of creating a new accounts.default.
Routing behavior stays consistent:
- Existing channel-only bindings (no
accountId) continue to match the default account. channels adddoes not auto-create or rewrite bindings in non-interactive mode.- Interactive setup can optionally add account-scoped bindings.
openclaw doctor --fix to move account-scoped values into the promoted account chosen for that channel. Most channels promote into accounts.default; Matrix can preserve an existing named/default target instead.
Login / logout (interactive)
channels loginsupports--verbose.channels login/logoutcan infer the channel when only one supported login target is configured.
Troubleshooting
- Run
openclaw status --deepfor a broad probe. - Use
openclaw doctorfor guided fixes. openclaw channels listprintsClaude: HTTP 403 ... user:profile→ usage snapshot needs theuser:profilescope. Use--no-usage, or provide a claude.ai session key (CLAUDE_WEB_SESSION_KEY/CLAUDE_WEB_COOKIE), or re-auth via Claude CLI.openclaw channels statusfalls back to config-only summaries when the gateway is unreachable. If a supported channel credential is configured via SecretRef but unavailable in the current command path, it reports that account as configured with degraded notes instead of showing it as not configured.
Capabilities probe
Fetch provider capability hints (intents/scopes where available) plus static feature support:--channelis optional; omit it to list every channel (including extensions).--accountis only valid with--channel.--targetacceptschannel:<id>or a raw numeric channel id and only applies to Discord.- Probes are provider-specific: Discord intents + optional channel permissions; Slack bot + user scopes; Telegram bot flags + webhook; Signal daemon version; Microsoft Teams app token + Graph roles/scopes (annotated where known). Channels without probes report
Probe: unavailable.
Resolve names to IDs
Resolve channel/user names to IDs using the provider directory:- Use
--kind user|group|autoto force the target type. - Resolution prefers active matches when multiple entries share the same name.
channels resolveis read-only. If a selected account is configured via SecretRef but that credential is unavailable in the current command path, the command returns degraded unresolved results with notes instead of aborting the entire run.