动态工具
Codex 请求 OpenClaw dynamic tool 后,由 OpenClaw 执行,因此 OpenClaw 能跑自己拥有的 plugin 和 middleware 行为。
Plugins 导读
Codex mode 不是 PI 换一个模型请求。Codex 掌握原生线程、native model loop、工具续跑和原生压缩;OpenClaw 负责频道路由、session 文件、可见消息、动态工具、审批、媒体和 transcript mirror。读这页时,先抓住 owner 边界,再看 hook、权限、队列、诊断和 compaction。
先讲这一页到底在解决什么
Codex mode 不是 PI 换一个模型请求。Codex 掌握原生线程、native model loop、工具续跑和原生压缩;OpenClaw 负责频道路由、session 文件、可见消息、动态工具、审批、媒体和 transcript mirror。读这页时,先抓住 owner 边界,再看 hook、权限、队列、诊断和 compaction。
总边界
OpenClaw 仍然负责频道路由、session 文件、可见消息、OpenClaw 动态工具、审批、媒体和 transcript mirror。Codex 负责 canonical native thread、native model loop、native tool continuation 和 native compaction。
像 Codex 自己的作业本。模型切换时,OpenClaw 会把当前 model、approval policy、sandbox 和 service tier 再发给 app-server。
像 OpenClaw 留的一份外层影印本,用于频道历史、搜索、/new、/reset 和未来切换。
从 openai/gpt-5.5 切到 openai/gpt-5.2,可以保留 thread binding,同时要求 Codex 用新模型继续。
很多 lifecycle 和 hook 只能投影或观察,不能把 Codex 原生记录当成 OpenClaw 自己的记录随意改写。
可见回复
默认情况下,源聊天里的可见回复走 OpenClaw message 工具。Agent 可以结束 Codex turn,但只有调用 message(action="send") 时才发到频道。
message像“把结果贴到聊天窗口”的按钮。没有按按钮,Codex turn 可以完成但不一定发言。
visibleReplies设成 "automatic" 时,可以保留 direct-chat final reply 的旧自动发送路径。
heartbeat_respondHeartbeat turn 默认也能看到这个工具,用来说明这次唤醒要安静记录还是通知用户。
Heartbeat 的主动性指导只在 heartbeat turn 注入,普通聊天会回到 Codex Default mode。
Hook 边界
OpenClaw 不用项目或全局 Codex hooks.json 来路由 OpenClaw 插件行为。它会为支持的 native tool 和 permission bridge 注入每个线程的 Codex config。
Codex 请求 OpenClaw dynamic tool 后,由 OpenClaw 执行,因此 OpenClaw 能跑自己拥有的 plugin 和 middleware 行为。
Codex 掌握 canonical tool record。OpenClaw 可以镜像部分事件,但不能随意重写原生线程。
app-server approvals 开启时,默认让 Codex reviewer 和 OpenClaw approval bridge 处理真实 escalations。
native hook started/completed 通知会投影成 agent events,主要用于 trajectory 和调试。
权限和询问
对 Codex native permission request,OpenClaw 只有在策略决定时才返回明确 allow 或 deny。没有决定并不等于允许,而是让 Codex 继续走自己的 guardian 或用户审批路径。
allow-always 只记住同一 provider、session、tool input 和 cwd 指纹;命令或参数变了就要重新判断。
Codex MCP tool approval elicitation 会在标记为 mcp_tool_call 时路由到 OpenClaw 插件审批流。
request_user_inputCodex 发起的问题会回到原聊天,下一条排队 follow-up 会作为回答,而不是普通补充上下文。
没有被支持的 MCP elicitation 请求会失败关闭。
队列和诊断
turn/steer默认 messages.queue.mode: "steer" 时,OpenClaw 会把安静窗口里的 steer-mode 消息按顺序合成一条 turn/steer 发给 app-server。review 和手动压缩 turn 可能拒绝 same-turn steering。
/queue followup希望默认排队而不是 steer 时,用 queue 命令表达。
/diagnostics获得批准后,Codex harness session 还能把相关 Codex thread 的反馈上传给 app-server。
/codex diagnostics只想上传当前 Codex thread 反馈,而不是完整 Gateway diagnostics bundle 时使用。
如果你拒绝或忽略审批,OpenClaw 不会打印 Codex ids,也不会发送 Codex feedback。
最后记住
线程、工具、hook、权限、媒体、诊断、compaction 都要先问“这件事的 canonical owner 是谁”。问清楚了,很多看似奇怪的行为就能解释。