* docs(cli): apply STE structural fixes to small CLI reference pages * docs(cli): STE structural fixes for cron and browser reference * docs(cli): STE structural fixes for migrate and triage reference * docs(concepts): STE structural fixes for architecture, agent, presence, mantis runbook * docs(concepts): STE structural fixes for session-state and models * docs(concepts): STE structural fixes for user-model * docs(concepts): STE structural fixes for mantis * docs(concepts): STE fixes and person-noun normalization for multi-user * docs(concepts): STE fixes and failover term normalization for model-failover * docs(concepts): define Mantis runbook terms * docs(gateway): STE structural fixes for logging, local-models, tailscale, multiple-gateways * docs(gateway): normalize Configuration reference naming and STE fixes * docs(gateway): STE fixes and workspace term normalization for openshell * docs(gateway): split semicolon-joined sentences in operator-scopes, restart-recovery, heartbeat, cli-backends * docs(gateway): finish semicolon splits in gateway reference pages * docs(gateway): normalize Gateway, heartbeat, tombstone and profile terminology * docs(gateway): split remaining multi-clause sentences in heartbeat and cli-backends * docs(gateway): split semicolon in heartbeat transcript-markers paragraph from main --------- Co-authored-by: Vincent Koc <vincent@openclaw.org>
5.5 KiB
| summary | read_when | title | ||
|---|---|---|---|---|
| CLI reference for `openclaw directory` (self, peers, groups) |
|
Directory |
openclaw directory
Directory lookups for channels that support them: contacts/peers, groups, and "me" (self).
Results are meant to be pasted into other commands, especially openclaw message send --target ....
Common flags
--channel <name>: channel id or alias. Required when several channels are configured, and auto-selected when only one is configured.--account <id>: account id (default: channel default)--json: output JSON--limit <n>: positive integer cap for peers/groups/members listings
Omit --account to select the channel default. Explicitly empty and whitespace-only account
values fail with --account must not be blank before account setup or lookup.
--limit requires a positive integer. Omit --limit to use the selected channel plugin's default.
Explicitly empty and whitespace-only values are rejected.
Default output renders IDs and names in a table. Empty list results name the channel and account
that were queried. JSON list output uses an empty array ([]). Failures exit nonzero and use the
canonical { "ok": false, "error": { "type": "cli_error", "message": "..." } } envelope in
JSON mode.
Notes
- For many channels, results are config-backed (allowlists / configured groups) rather than a live provider directory.
- Before a live lookup, OpenClaw resolves configured SecretRefs only for the selected channel and account. Resolved credentials remain runtime-only. Plugin installation and auto-enable writes preserve the authored references without persisting runtime defaults.
- WhatsApp group listing is live. Gateway lookups reuse its owned connection. A standalone command opens the linked session only when no other process owns that account. Otherwise it reports that live groups are unavailable.
- An already-installed channel plugin can lack directory support. In that case the command reports the unsupported operation. It does not try to reinstall or upgrade the plugin to add support.
Using results with message send
openclaw directory peers list --channel slack --query "U0"
openclaw message send --channel slack --target user:U012ABCDEF --message "hello"
ID formats by channel
| Channel | Target id format |
|---|---|
+15551234567 (DM), 1234567890-1234567890@g.us (group), 120363123456789@newsletter (Channel/Newsletter, outbound only) |
|
| Signal | Configured aliases resolve to E.164/UUID DM targets or group:<id> group targets |
| Telegram | @username or numeric chat id; groups use numeric ids |
| Slack | user:U… and channel:C… |
| Discord | user:<id> and channel:<id> |
| Matrix (plugin) | user:@user:server, room:!roomId:server, or #alias:server |
| Microsoft Teams (plugin) | user:<id> and conversation:<id> |
| Zalo (plugin) | User id (Bot API) |
Zalo Personal / zalouser (plugin) |
Thread id (DM/group), from zca (me, friend list, group list) |
Self ("me")
openclaw directory self --channel zalouser
A channel may legitimately return no self identity. This is a successful empty result (exit code
0), not a failed lookup. Channels without a self resolver report that the channel does not expose
a self identity, without suggesting account troubleshooting:
{
"status": "unavailable",
"channel": "telegram",
"accountId": "default",
"reason": "self-identity-unsupported"
}
When a channel implements self lookup but returns no identity, the text output names the channel and account and suggests checking its configuration and authentication. JSON callers can distinguish that case by its reason:
{
"status": "unavailable",
"channel": "msteams",
"accountId": "default",
"reason": "plugin-returned-no-self-identity"
}
Peers (contacts/users)
openclaw directory peers list --channel zalouser
openclaw directory peers list --channel zalouser --query "name"
openclaw directory peers list --channel zalouser --limit 50
Groups
openclaw directory groups list --channel zalouser
openclaw directory groups list --channel zalouser --query "work"
openclaw directory groups members --channel zalouser --group-id <id>
groups members requires a non-blank --group-id. Empty or whitespace-only IDs fail before plugin setup or lookup.