线程与会话
Matrix 房间、DM 和线程如何映射到 OpenClaw 会话,以及每一轮携带多少房间历史。
线程¶
Matrix 支持原生线程,既可用于自动回复,也可用于 message-tool 发送。两个独立开关控制行为:
会话路由(sessionScope)¶
dm.sessionScope 决定 Matrix DM 房间如何映射到 OpenClaw 会话:
"per-user"(默认):与同一路由对等方相关的所有 DM 房间共享一个会话。"per-room":每个 Matrix DM 房间拥有自己的会话键,即使对等方相同。
显式会话绑定始终优先于 sessionScope;已绑定的房间和线程会保留其选定的目标会话。
回复线程(threadReplies)¶
threadReplies 决定机器人将回复发布到哪里:
"off":回复位于顶层。入站线程消息保留在父会话中。"inbound":仅当入站消息已经位于该线程中时,才在线程内回复。"always":在以触发消息为根的线程内回复;从第一次触发开始,该对话将通过匹配的线程级会话进行路由。
dm.threadReplies 仅对 DM 覆盖此设置——例如,保持房间线程隔离,同时保持 DM 为扁平结构。
在线程内选择回复目标会同时保留线程和所选消息。普通线程消息可以携带回复元数据以兼容旧版客户端;OpenClaw 不会将该兼容性回退视为代理上下文中的引用消息。
机器人创建线程中的提及¶
设置 channels.matrix.requireMentionInBotThreads: false 以接受在由接收机器人发送的事件为根的原生 Matrix 线程中未提及的后续消息。将其设置为 true 可在这些线程中要求提及,即使房间使用 requireMention: false 或 autoReply: true。省略该设置会保留房间现有的提及行为。
该设置也可在 accounts.<id> 以及每个 groups 或 rooms 条目下使用。房间条目会覆盖账户值。与其他 Matrix 房间设置一样,精确房间条目会替换通配符条目;精确条目中省略的字段会回退到账户,而不是通配符。
只有原生 m.thread 关系才符合条件。对机器人消息的普通回复不符合条件。OpenClaw 使用接收账户解析线程根,并缓存其已验证作者。Matrix 内容删除不会更改该作者,因此被删除的机器人创建根仍然符合条件。如果无法读取或验证根的身份,则应用现有提及行为。房间访问权限、发送者限制以及 allowBots: "mentions" 仍然适用。
线程继承与斜杠命令¶
- 入站线程消息会将线程根消息作为额外的代理上下文包含在内。
- 当目标为同一房间(或同一 DM 用户目标)时,message-tool 发送会自动继承当前 Matrix 线程,除非提供了显式
threadId。 - 仅当当前会话元数据证明同一 Matrix 账户上的同一 DM 对等方时,DM 用户目标复用才会生效;否则 OpenClaw 会回退到常规用户级路由。
/session unbind、/agents、/session idle、/session max-age以及线程绑定的/acp spawn均可在 Matrix 房间和 DM 中使用。- 当启用
threadBindings.spawnSessions时,/acp spawn --thread auto会创建新的 Matrix 线程。 - 在现有 Matrix 线程内运行
/acp spawn --thread here会就地绑定该线程。
当 OpenClaw 检测到 Matrix DM 房间与同一共享会话上的另一个 DM 房间发生冲突时,它会发布一次性 m.notice,建议将 dm.sessionScope: "per-room" 用于隔离房间。该通知仅在启用线程绑定时出现。
ACP 会话绑定¶
Matrix 房间、DM 和现有 Matrix 线程可以在不更改聊天界面的情况下成为持久 ACP 工作区。
快速操作员流程:
- 在 Matrix DM、房间或现有线程内运行
/acp spawn codex --bind here以继续使用。 - 在顶层 DM 或房间中,当前 DM/房间保持为聊天界面,后续消息会路由到生成的 ACP 会话。
- 在现有线程内,
--bind here会就地绑定当前线程。 /new和/reset会就地重置同一已绑定的 ACP 会话。/acp close会关闭 ACP 会话并移除绑定。
--bind here 不会创建子 Matrix 线程。threadBindings.spawnSessions 控制 /acp spawn --thread auto|here,即 OpenClaw 需要创建或绑定子线程的场景。
线程绑定配置¶
Matrix 从 session.threadBindings 继承全局默认值,并支持按通道覆盖:
threadBindings.enabledthreadBindings.idleHoursthreadBindings.maxAgeHoursthreadBindings.spawnSessions:同时控制子代理和 ACP 线程生成。- 已弃用的
threadBindings.spawnSubagentSessions/threadBindings.spawnAcpSessions键会通过openclaw doctor --fix迁移到spawnSessions。 threadBindings.defaultSpawnContext
Matrix 线程绑定会话生成默认开启。设置 threadBindings.spawnSessions: false 可阻止原生子代理和 ACP 线程生成创建/绑定 Matrix 线程。当原生子代理线程生成不应分叉父转录时,设置 threadBindings.defaultSpawnContext: "isolated"。
历史上下文¶
channels.matrix.historyLimit控制当房间消息触发代理时,有多少条最近的房间消息作为InboundHistory包含在内。回退到messages.groupChat.historyLimit;如果两者都未设置,则有效默认值为0(禁用)。- Matrix 房间历史仅适用于房间;DM 继续使用常规会话历史。
- 房间历史仅包含待处理消息:OpenClaw 会缓冲尚未触发回复的房间消息,然后在提及或其他触发器到达时对该窗口进行快照。
- 当前触发消息不包含在
InboundHistory中;它保留在该轮的主要入站正文中。 - 同一 Matrix 事件的重试会复用原始历史快照,而不是向前漂移到更新的房间消息。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw