owner_user_id and receive only the token scopes you grant.
Quick setup
Create a bot token on the ClickClack server:--owner <user_id>.
Configure OpenClaw:
baseUrl, token, and workspace are all set. workspace accepts a workspace id (wsp_...), slug, or name; the gateway resolves it to the id at startup.
Account config keys
| Key | Default | Notes |
|---|---|---|
baseUrl | none (required) | ClickClack server URL. |
token | none (required) | Plain string or secret ref (source: "env" | "file" | "exec"). |
workspace | none (required) | Workspace id, slug, or name. |
replyMode | "agent" | "agent" runs the full agent pipeline; "model" sends short direct model completions. |
defaultTo | "channel:general" | Target used when an outbound path gives no target. |
allowFrom | ["*"] | User-id allowlist for inbound DMs and channel messages. |
botUserId | auto-detected | Resolved from the bot token identity at startup. |
agentId | route default | Pin this account’s inbound messages to one agent. |
toolsAllow | none | Tool allowlist for agent replies from this account. |
model, systemPrompt | none | Used by replyMode: "model" completions. |
reconnectMs | 1500 | Realtime reconnect delay (100 to 60000). |
plugins.allow is a non-empty restrictive list, explicitly selecting
ClickClack in channel setup or running openclaw plugins enable clickclack
appends clickclack to that list. Onboarding installation uses the same
explicit-selection behavior. These paths do not override plugins.deny or a
global plugins.enabled: false setting. Direct
openclaw plugins install @openclaw/clickclack follows the normal
plugin-install policy and also records ClickClack in an existing allowlist.
Multiple bots
Each account opens its own ClickClack realtime connection and uses its own bot token.Reply modes
replyMode: "agent"(default) dispatches inbound messages through the normal agent pipeline, including session recording and tool policy.replyMode: "model"skips the agent pipeline and uses the plugin runtime’sllm.completefor short direct bot replies (optionally shaped bymodelandsystemPrompt).
plugins.entries.clickclack.llm.allowAgentIdOverride: true trust
bit:
agent reply mode; it is
not needed there.
Agent activity rows
By default a ClickClack channel shows nothing while an agent turn runs; only the final reply lands. SetagentActivity: true on an account to publish durable agent_commentary and agent_tool message rows while the turn is in progress:
- Off by default. Stock setups and older ClickClack servers are untouched.
- Requires the
agent_activity:writetoken scope. This scope is separate frombot:writeand is not inherited by it; create the bot token with--scopes bot:write,agent_activity:write(or grant the scope to an existing token) before enabling the option. - Best-effort degradation. If the token lacks
agent_activity:writeor the server rejects activity writes, failures are logged and the final reply still delivers normally; no activity rows appear. - Rows are grouped per turn (
turn_id), coalesced so one logical step is one row, and tool rows use the same progress formatting as Discord/Slack/Telegram (tool name plus command detail). - Attribution metadata. Agent-authored posts (activity rows and the final reply) carry
author_modelandauthor_thinkingfields resolved from the actual model used for the turn (including after fallback). Servers that do not define these columns ignore the unknown JSON fields; servers that persist them can answer “which model said this line, at which thinking level” per message.
Targets
channel:<name-or-id>sends to a workspace channel. Bare targets default tochannel:.dm:<user_id>creates or reuses a direct conversation with that user.thread:<message_id>replies in the thread rooted at that message.
clickclack: or cc: provider prefix.
Examples:
Permissions
ClickClack token scopes are enforced by the ClickClack API.bot:read: read workspace/channel/message/thread/DM/realtime/profile data.bot:write:bot:readplus channel messages, thread replies, DMs, and uploads.bot:admin:bot:writeplus channel creation.agent_activity:write: durable agent activity rows (agent_commentary/agent_tool). Not inherited bybot:writeorbot:admin; required only whenagentActivity: trueis set.
bot:write for normal agent chat. Add agent_activity:write when enabling agent activity rows.
Troubleshooting
ClickClack is not configured for account "<id>": setbaseUrl,token(for example viaCLICKCLACK_BOT_TOKEN), andworkspacefor that account.ClickClack workspace not found: <value>: setworkspaceto the workspace id, slug, or name returned by ClickClack.- No inbound replies: confirm the token has realtime read access and note that the bot ignores its own messages and messages from other bots.
- Channel sends fail: verify the bot is a member of the workspace and has
bot:write.