Forum channels
Discord forum and media channels only accept thread posts. OpenClaw supports two ways to create them:- Send a message to the forum parent (
channel:<forumId>) to auto-create a thread. The thread title is the first non-empty line of the message (truncated to Discord’s 100-character thread-name limit). - Use
openclaw message thread createto create a thread directly. Do not pass--message-idfor forum channels.
channel:<threadId>).
When thread-create successfully sends all initial content, its result reports confirmed message
IDs and chunk counts in initialMessageDelivery with status: "delivered".
threadSnapshot: "creation" means the returned thread fields describe creation
time; do not retry content based on message_count or last_message_id.
Empty standalone threads have no initial-delivery receipt. Partial failures
report accepted chunks separately; failedChunkDelivery: "unknown" means the
failed chunk may have been delivered, so inspect the thread before retrying.
Session and thread behavior
History, context, and thread behavior
History, context, and thread behavior
Guild history context:
channels.discord.historyLimitdefault20- fallback:
messages.groupChat.historyLimit 0disables automatic guild/thread history reads, not explicit message reads or reply context.
message(action="read") tool keeps native pagination and exact
message lookup. Older reads remain available after restart or /new, subject
to Discord’s Read Message History permission and current access rules.DM history controls:channels.discord.dmHistoryLimitchannels.discord.dms["<user_id>"].historyLimit
- Discord threads route as channel sessions and inherit parent channel config unless overridden.
- Thread sessions inherit the parent channel’s session-level
/modelselection as a model-only fallback; thread-local/modelselections take precedence, and parent transcript history is not copied unless transcript inheritance is enabled. channels.discord.thread.inheritParent(defaultfalse) opts new auto-threads into seeding from the parent transcript. Per-account override:channels.discord.accounts.<id>.thread.inheritParent.- Message-tool reactions can resolve
user:<id>DM targets. guilds.<guild>.channels.<channel>.requireMention: falseis preserved during reply-stage activation fallback.
Thread-bound sessions for subagents
Thread-bound sessions for subagents
Discord can bind a thread to a session target so follow-up messages in that thread keep routing to the same session (including subagent sessions).Commands:Notes:
/session unbindremove the current thread binding without closing its agent session/agentsshow active runs and binding state/session idle <duration|off>inspect/update inactivity expiry for the current binding/session max-age <duration|off>inspect/update hard max age for the current binding
session.threadBindings.*is the canonical policy for Discord and Telegram.spawnSessionscontrols auto-create/bind threads forsessions_spawn({ thread: true })and ACP thread spawns. Default:true.defaultSpawnContextcontrols native subagent context for thread-bound spawns. Default:"fork".- Deprecated
spawnSubagentSessions/spawnAcpSessionskeys are migrated byopenclaw doctor --fix. - If thread bindings are disabled, thread-bound spawns are unavailable.
Persistent ACP channel bindings
Persistent ACP channel bindings
For stable “always-on” ACP workspaces, configure top-level typed ACP bindings targeting Discord conversations.Config path: Notes:
bindings[] with type: "acp" and match.channel: "discord"./acp spawn codex --bind herebinds the current channel or thread in place and keeps future messages on the same ACP session. Thread messages inherit the parent channel binding.- In a bound channel or thread,
/newand/resetreset the same ACP session in place. Temporary thread bindings can override target resolution while active. spawnSessionsgates child thread creation/binding via--thread auto|here.