本页内容
本页内容
代理协调
ACP 代理绑定
绑定会话
心智模型
- 聊天界面 - 人们持续对话的地方(Discord 频道、Telegram 主题、iMessage 聊天)。
- ACP 会话 - 持久 Codex/Claude/Gemini 运行时状态 OpenClaw 路由到。
- Child thread/topic - 仅由
--thread ...创建的可选额外消息传递表面。 - 运行时工作区 - harness 运行所在的文件系统位置(
cwd、仓库检出目录、后端工作区)。与聊天界面相互独立。
当前对话绑定
/acp spawn <harness> --bind here 将当前对话固定到已 spawn 的 ACP 会话——没有子线程,使用相同的聊天界面。OpenClaw 继续负责传输、认证、安全和投递。该对话中的后续消息会路由到同一个会话;/new 和 /reset 会在原地重置会话;/acp close 会移除绑定。
示例:
约束规则和排他性
--bind here和--thread ...互斥。--bind here仅适用于声明支持当前对话绑定的频道;否则 OpenClaw 会返回清晰的不支持消息。绑定会在网关重启后保持。- 在 Discord 上,
spawnSessions控制--thread auto|here的子线程创建 - 不控制--bind here。 - 如果您在没有
--cwd的情况下生成到不同的 ACP 代理,则 OpenClaw 默认继承 目标代理的 工作区。缺少继承路径(ENOENT/ENOTDIR)回退到后端默认值;其他访问错误 (e.g.EACCES) 表现为生成错误。 - 网关管理命令在绑定会话中保留在本地 - 即使正常的后续文本路由到绑定的 ACP 会话,
/acp ...命令也由 OpenClaw 处理;每当为该表面启用命令处理时,/status和/session也会保持本地状态。
线程绑定会话
当频道适配器启用了线程绑定时:
- OpenClaw 会将线程绑定到目标 ACP 会话。
- 该线程中的后续消息会路由到已绑定的 ACP 会话。
- ACP 输出会回送到同一个线程。
/session unbind、关闭、存档、空闲超时或 max-age 到期会删除绑定。/session unbind仅分离当前会话并让 ACP 会话保持运行。/acp close、/acp cancel、/acp status、/status和/session是网关命令,不是对 ACP harness的提示。
线程绑定 ACP 所需的功能开关:
acp.enabled=trueacp.dispatch.enabled默认开启(设置为false可暂停自动 ACP 线程分发;显式sessions_spawn({ runtime: "acp" })调用仍然可用)。- 已启用频道适配器线程会话 spawn(默认:
true):- Discord/Telegram:
session.threadBindings.spawnSessions=true
- Discord/Telegram:
线程绑定支持是特定于适配器的。如果活动通道适配器不支持线程绑定,则 OpenClaw 返回明确的 unsupported/unavailable 消息。
线程支持通道
- 公开 session/thread 绑定功能的任何通道适配器。
- 当前内置支持:Discord threads/channels, Telegram主题(论坛主题groups/supergroups和DM主题)。
- 插件频道可以通过同一绑定接口添加支持。
持久频道绑定
对于非临时工作流,在顶层 bindings[] 条目中配置持久的 ACP 绑定。
绑定模型
bindings[].type"acp"标记一个持久 ACP 对话绑定。
bindings[].matchobject标识目标对话。按频道的形状如下:
- Discord channel/thread:
match.channel="discord"+match.peer.id="<channelOrThreadId>" - Slack channel/DM:
match.channel="slack"+match.peer.id="<channelId|channel:<channelId>|#<channelId>|userId|user:<userId>|slack:<userId>|<@userId>>"。优先选择稳定的Slack ids;通道绑定还匹配该通道线程内的回复。 - Telegram 论坛主题:
match.channel="telegram"+match.peer.id="<chatId>:topic:<topicId>" - WhatsApp DM/group:
match.channel="whatsapp"+match.peer.id="<E.164|group JID>"。使用 E.164 号码(例如+15555550123)进行直接聊天,使用 WhatsApp 群组 JID(例如[email protected])进行群组。 - iMessage DM/group:
match.channel="imessage"+match.peer.id="<handle|chat_id:*|chat_guid:*|chat_identifier:*>"。优选chat_id:*以获得稳定的基团结合。
bindings[].agentIdstring所属的 OpenClaw agent id。
bindings[].acp.mode"persistent" | "oneshot"可选的 ACP 覆盖。
bindings[].acp.labelstring面向操作者的可选标签。
bindings[].acp.cwdstring可选的运行时工作目录。
bindings[].acp.backendstring可选的后端覆盖。
每个 agent 的运行时默认值
使用 agents.entries.*.runtime 为每个 agent 一次性定义 ACP 默认值:
agents.entries.*.runtime.type="acp"agents.entries.*.runtime.acp.agent(harness ID、e.g.codex或claude)agents.entries.*.runtime.acp.backendagents.entries.*.runtime.acp.modeagents.entries.*.runtime.acp.cwd
ACP 绑定会话的覆盖优先级:
bindings[].acp.*agents.entries.*.runtime.acp.*- 全局 ACP 默认值 (e.g.
acp.backend)
配置的绑定还转发所属代理的显式模型和思维策略。对于具有 runtime.type: "acp" 的代理,agents.entries.*.model.primary 选择 ACP harness模型,即使其值也看起来像本机 provider/model 参考。 OpenClaw-side 调用(例如 /btw 和内部实用程序)使用 agents.defaults.model 作为其本机默认值。显式本机会话覆盖和专用实用程序或子代理模型设置仍然适用。所选的本地提供商需要有自己的凭据; ACP harness登录不会验证 OpenClaw 的本机调用。
对于现有配置,即使 ACP 主要是有效的本机引用,这也可能会更改本机提供程序。 openclaw doctor 描述了每个 ACP 代理的harness模型并解析了本机默认值,而无需重写配置。 agents.defaults.model中选择本机默认值;本机会话、实用程序和子代理覆盖仍然可用于其各自的操作。
对于支持模型回退的本机调用,省略代理 model.fallbacks 继承 agents.defaults.model.fallbacks。显式本机后备列表会替换该列表,并且 fallbacks: [] 会禁用它。这些条目必须是本机 OpenClaw 模型引用,而不是仅限harness的 ID。 /btw 使用其选择的本机模型,没有模型后备链。
Thinking 使用代理的 thinkingDefault,然后是每个模型的 agents.defaults.models["provider/model"].params.thinking,然后是 agents.defaults.thinkingDefault。如果没有配置策略,外部harness将保留其自己的默认值。
更改配置的模型或思考值会在下一轮之前更新现有会话,而不会替换对话。每个选项仅在harness接受后才会保存;被拒绝的选项会返回错误并保留该选项之前的选择。模型和思维的改变是独立的,不是原子批次的。删除默认值会使用任何剩余的配置策略;如果没有剩余,OpenClaw 保留会话的最后选择。省略不是后端重置。要明确改变思维,请使用 /acp set thinking <level> 以及harness支持的级别。对于 Codex ACP,off 仅省略新会话的启动覆盖。不支持将现有会话切换到 off,并且会返回错误而不清除其当前的推理工作或对话。
示例
行为
- 如果需要,在通道特定准入之后和使用之前,OpenClaw 会创建配置的 ACP 会话。
- 该频道、主题或聊天中的消息会路由到配置的 ACP 会话。
- 已配置的 ACP 绑定拥有其会话路由。频道广播扇出不会替代匹配绑定所对应的配置 ACP 会话。
- 在已绑定的对话中,
/new和/reset会就地重置同一个 ACP 会话 key。 - 由线程绑定生成创建的运行时绑定仍然适用于存在的情况。
- 对于未显式指定
cwd的跨 agent ACP spawn,OpenClaw 会从 agent 配置继承目标 agent 工作区。 - 缺失的继承工作区路径会回退到后端默认 cwd;真实的访问失败会作为 spawn 错误暴露出来。