跳转至

Hook 边界

围绕一个 Codex 轮次的三层钩子,以及每一层负责的事件。属于 Codex harness runtime 指南的一部分;各章节迁移位置 列出了所有章节。

钩子边界

对于普通持久会话,包含 systemPrompt 的 before_prompt_build 结果 会替换完整的 OpenClaw 通用开发者策略。显式 空字符串会撤回该策略。未变更且已证明配置的 warm 线程 保持 warm,并在插件策略等待之后重新检查保留的订阅和主机权限。已关闭或已归档的线程不能仅因为其 连接仍然打开而被复用。冷恢复和策略变更恢复会保留原生线程和 历史,验证 Codex 已卸载之前的配置,然后在允许该轮次之前追加一条 完整的取代策略消息。历史策略 文本可以保留在转录中;后续策略明确取代它。

普通会话在本地 stdio、 WebSocket、Unix-socket 和 stdio-proxy 连接上使用相同的退订并恢复流程。原生会话 ID 和历史保持不变。OpenClaw 会验证原始 app-server 客户端 仍然有效、线程没有活动轮次,并且 Codex 已卸载之前的 配置,然后才安装当前策略。

此刷新要求 OpenClaw 是原生会话的唯一生命周期所有者。当没有独立客户端能在交接期间重新加载同一会话时,由 gateway 拥有的远程 app-server 满足此部署契约。 连接检查和卸载检查不会在独立客户端之间提供原子交接:竞争的恢复可能重新安装旧的原生配置。 具有竞争会话所有者的共享 app-server 不在此刷新契约范围内。

如果订阅者或失败的原生卸载阻止配置证明,该轮次 会在推理前停止。预写所有权拒绝会保持健康的共享客户端及其其他会话可用。策略拒绝以及不确定或已确认的策略写入失败会保留会话,并停止自动 auth-profile、model-fallback 和整轮重试。

受监督的外部连接保留其现有的共享连接租约语义;现有的 native-home 和 tool-catalog 限制仍然适用。这些租约检查不会建立对外部原生进程的独占所有权;加强该保证是另一项限制,不属于普通策略刷新。手动普通采用仍然需要其 agent-home 和 tool-catalog 检查,以及原生进程证明。

普通隐身会话保留其活动临时历史。标准 Codex 无法更新其通用会话配置或从磁盘恢复它们,因此变更或显式清空的通用策略会在下一轮推理前停止。 恢复之前的策略以继续会话,或为新策略启动新的隐身会话。策略未变更的轮次继续;此检查不会为隐身历史添加空闲过期或持久化。

预检拒绝保持正常外部聊天诊断隐私和群组静默策略。详细模式可以显示有界的恢复细节;Control UI 保留其常规诊断渲染。外部关闭的临时线程不能被承诺可恢复。

层 所有者 目的
OpenClaw 插件钩子 OpenClaw 跨 OpenClaw 和 Codex harness 的产品/插件兼容性。
Codex app-server 扩展中间件 OpenClaw 捆绑插件 围绕 OpenClaw 动态工具的每轮适配器行为。
Codex 原生钩子 Codex 来自 Codex 配置的底层 Codex 生命周期和原生工具策略。

OpenClaw 不使用项目或全局 Codex hooks.json 文件来路由插件行为。对于原生工具和权限桥接,OpenClaw 会为 PreToolUse、PostToolUse、PermissionRequest 和 Stop 注入按线程的 Codex 配置。

在启动或恢复线程之前,OpenClaw 会准备原生 relay 的已存储 MCP 审批快照和直接发布尝试,然后重新检查当前运行的权限。如果 listener 或 SQLite locator 不可用,钩子命令可以使用现有的 Gateway 回退。策略准备仍必须成功;Gateway 调用独立于发布而等待该快照。 注册返回一个同步句柄,其可选 deferMcpToolApprovals 字段在策略准备完成前保持未定义。

冷钩子 CLI 读取 locator,而不加载共享状态写入器启动。 在 Node 上,此一次性进程使用无 SQLite 锁等待的只读连接;瞬态锁竞争会让位于现有的重试和截止时间所有者。 在 Bun 上,它使用专用只读 worker,并在使用结果前 join 该 worker,以便释放原生数据库句柄。两条路径都保留模式准入,并在查找后关闭数据库。

桥接发布、续期、查找和移除在共享状态 worker 中运行。 发布和续期会在其写事务内重新检查当前主机注册,清理会在关闭 listener 前 join 已接受的工作。

没有监听直接桥接的 relay 仍可以续期其逻辑过期时间;监听桥接会在延长可见过期时间前更新其存储的 locator。注销会立即使前台访问失效。 清理会排空已接受的 locator 写入,并在 relay 退役后执行 listener 关闭。成功 yield 后保留的迟到钩子和直接子进程的现有宽限窗口会被保留;排空待处理存储工作不会关闭这些子进程。

当 Codex app-server 审批启用(approvalPolicy 不是 "never")时,默认注入的原生 hook 配置会省略 PermissionRequest,以便 Codex 的 app-server 审查器和 OpenClaw 的审批桥在审查后处理真实升级。无论如何,将 permission_request 添加到 nativeHookRelay.events 可强制启用兼容性 relay。其他 Codex hook,例如 SessionStart 和 UserPromptSubmit,仍属于 Codex 级别控制;在 v1 契约中,它们不作为 OpenClaw 插件 hook 暴露。

对于 OpenClaw 动态工具,OpenClaw 会在 Codex 请求调用后执行工具,因此插件和中间件行为在 harness adapter 中运行。Codex Code Mode 以文本形式接收通用动态结果,并串行化嵌套动态调用;调用方必须解析看似 JSON 的结果,并且不能依赖 Promise.all 进行并发提交。对于 Codex 原生工具,Codex 拥有规范工具记录;OpenClaw 可以镜像选定事件,但不能重写 原生线程,除非 Codex 通过 app-server 或原生 hook 回调暴露该能力。

Codex app-server report-mode PreToolUse 事件会将插件审批延迟到匹配的 app-server 审批。如果 OpenClaw before_tool_call hook 返回 requireApproval,而原生负载设置 openclaw_approval_mode: "report",则原生 hook relay 会记录插件审批要求,并且不返回原生决策。当 Codex 稍后为同一工具使用发送 app-server 审批 请求时,OpenClaw 会打开插件审批提示,并将决策映射回 Codex。Codex PermissionRequest 事件是 另一条审批路径,在配置该桥时仍可通过 OpenClaw 审批路由。

Codex app-server item 通知还为尚未被原生 PostToolUse relay 覆盖的原生工具完成提供异步 after_tool_call 观察。它们仅用于遥测/兼容性;不能 阻塞、延迟或修改原生工具调用。

Compaction 和 LLM 生命周期投影来自 Codex app-server 通知和 OpenClaw adapter 状态,而不是原生 Codex hook 命令。 before_compaction、after_compaction、llm_input 和 llm_output 是 adapter 级别观察,而不是 Codex 内部 请求或 compaction 负载的逐字节捕获。

Codex 原生 hook/started 和 hook/completed app-server 通知会被 投影为 codex_app_server.hook agent 事件,用于轨迹和 调试。它们不会调用 OpenClaw 插件 hook。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw