--- summary: "动态工具、网络搜索、图像加载、转向活跃度和运行时边界" read_when: - "您想知道哪些 OpenClaw 工具达到了 Codex 转弯" - "您正在调试轮流活跃度或并行聊天" - "您需要 OpenClaw 和 Codex 之间的所有权分割" title: "Codex 运行时行为" sidebarTitle: "运行时行为" --- Codex harness在转弯时拥有什么,以及 OpenClaw 保留什么。 [Codex harness](/plugins/codex-harness) 指南的一部分; [ 每个部分移动的位置](/plugins/codex-harness#where-each-section-moved) 列出每个部分。 ## 动态工具和网络搜索 当符合条件的安装技能和工具策略允许时,OpenClaw 将 `skills_search` 和 `skills_read` 公开为主机拥有的动态工具。搜索包括 OpenClaw 的有界提示目录中省略的技能。读取使用精确的安装名称并返回完整的指令,或者如果回合的动态工具输出预算无法容纳它们,则明确拒绝。这些工具不会更改 Codex 的本机 `skills` 命名空间或安装市场技能。参见[安装技能搜索](/tools/skills#search-installed-skills)。 Codex 动态工具默认加载 `searchable`。 OpenClaw 通常不会公开重复 Codex-native 工作区操作的动态工具:`read`、`write`、`edit`、`apply_patch`、`exec`、`process`、 `get_goal`、`create_goal`、`update_goal`、`dispatch_action`、`tool_describe` 和 `tool_search`。目标操作保留在 Codex 中,因此 OpenClaw 不会将第二个目标存储投影到 Codex 回合中。大多数剩余的 OpenClaw 集成工具,例如消息传递、媒体、cron、浏览器、节点、网关、`progress_card` 和 `heartbeat_respond` 都可以通过 `openclaw` 命名空间下的 Codex 工具搜索获得,从而使初始模型上下文保持较小。当有限白名单禁用本机代码模式时,限制转向 shell 回退是 `exec` 和 `process` 的例外情况;运行时白名单和 `codexDynamicToolsExclude` 仍然适用。严格的 [`agent exec`](/cli/agent#agent-exec) 运行也使用 OpenClaw 的工具,因此其进程清理工作由一次性运行所有者负责。当本机 shell 保持活动状态并且网关访问符合策略条件时,OpenClaw 会发布不同的 `gateway_exec` 和 `gateway_process` 名称,因此本机 shell 和 OpenClaw- 托管环境路径不会混淆。 标记为 `catalogMode: "direct-only"` 的工具,包括 OpenClaw 的 `computer` 工具, 应改用 `openclaw_direct` 命名空间。Codex 将该命名空间视为 `DirectModelOnly`, 因此这些工具在普通线程和仅代码线程中仍会直接对模型可见,而不会通过嵌套的代码模式 `tools.*` 调用进行路由。 当启用搜索且未选择托管提供程序时,Web 搜索默认使用 Codex 的托管 `web_search` 工具。本机托管搜索和 OpenClaw 的托管 `web_search` 动态工具是互斥的,因此托管搜索无法绕过本机域限制。当托管搜索不可用、明确禁用或被选定的托管提供商替换时,OpenClaw 使用托管工具。 OpenClaw 保持 Codex 的独立 `web.run` 扩展处于禁用状态,因为生产应用程序服务器流量拒绝其用户定义的 `web` 命名空间。 `tools.web.search.enabled: false` 禁用这两个路径,工具禁用的 LLM-only 运行也是如此。 Codex 将 `"cached"` 视为首选项,并将其解析为实时外部访问,以实现不受限制的应用程序服务器轮流。当设置本机 `allowedDomains` 时,自动托管回退将被阻止,因此无法绕过允许列表。持久有效的搜索策略更改会在下一轮之前旋转绑定的 Codex 线程;瞬态每轮限制使用临时受限线程并保留现有绑定以供以后恢复。 `sessions_yield`、`sessions_spawn` 和仅消息工具源回复保持直接,因为它们是轮流控制或委托合约。指南仍然更喜欢 Codex 的本机 `spawn_agent` 作为主要 Codex 子代理表面,而显式 OpenClaw 或 ACP 委派仍然可以通过 `sessions_spawn` 直接调用。在 Codex 代码模式下,通用 OpenClaw 动态工具结果是 JSON 文本而不是 JavaScript 对象,因此在读取字段之前解析 JSON-looking 结果。 Codex 还序列化嵌套动态调用;在有界循环中提交多个 `sessions_spawn` 调用,而不是期望 `Promise.all` 同时启动它们。当稍后提交调用时,已接受的子级仍然可以重叠。有关完整模式,请参阅 [Swarm](/tools/swarm#use-swarm-from-other-harnesses)。当启用结构化响应时,预定的心跳用户消息识别`heartbeat_respond`;该工具仍然可以通过 Codex 工具搜索找到。 仅当连接到无法搜索延迟动态工具的自定义 Codex 应用程序服务器或调试完整工具有效负载时,才设置 `codexDynamicToolsLoading: "direct"`。 ## 检查工具输出 长工具结果在 Control UI 中具有折叠预览。 **显示完整输出**以纯文本形式打开保存的结果;复制和下载使用该文本,而不是预览。重新加载对话会读取相同的保存结果。检查受到网关的消息大小限制。工具结果文本未经过秘密屏蔽。工具输出检查要求每个文本字段支持最多 2,000,000 个字符;保持上限的结果被明确标记为不可用。预览限制并不意味着 Codex 截断了模型的输入。 OpenClaw 保留 Codex 的 `rawResponseItem/completed` 通知公开的完整工具响应文本,包括空格和 Codex 自己的截断通知。结构化响应将其文本块保留为 JSON;非文本有效负载被标记为省略,而不是复制到文本检查器中。在对结果进行检查点之前,OpenClaw 将响应与其工具调用 ID 相关联。如果只有执行事件可用,则结果将被标记为执行输出。代码模式响应 ID 与嵌套命令 ID 不同。 如果本机补丁或命令在 Codex 发出其本机项目之前失败,则镜像可以从具有文字输入和未修改的 `text` 输出(包括本地输入变量)的单次调用代码模式包装器恢复失败的 `apply_patch` 或 `bash` 接收。完成的脚本仍然可以包含失败的命令:其结构化非零退出代码拥有该结果。现有的原生项目保留自己的 ID;不受支持的包装和未知的响应仍然是 `exec` 的外部证据。 这两个事件都不能证明准确的最终模型输入。 Codex 可以在构建响应后应用额外的历史截断和上下文规范化;它的应用程序服务器不会在这里公开最终的请求表示。 OpenClaw 标记了此限制,而不是将原始标准输出视为模型可见输出。 带有 `OpenClaw truncated Codex native tool output` 通知的较旧记录在持久性之前丢失了省略的文本。它们明确表明完整输出不可用。当仅接收到有界执行流并且没有完整响应或完成输出到达时,同样的限制也适用。打开、复制或下载此类记录无法恢复其丢失的文本。 ## 背景文本完成 通过本地 stdio 传输和默认的 `appServer.homeScope: "agent"`,Codex 完成内存叙述和会话标题,在全新的私人 Codex 家庭和工作区中运行。它们保留选定的模型和范围身份验证,具有只读沙箱,没有模型可调用工具、应用程序或 MCP 服务器。普通用户和项目钩子无法进入该私有进程;管理员管理的挂钩保持活动状态。 私有完成支持直接可执行启动器和 Node 脚本包装器。内联 shell/eval 命令和不明确的启动器参数失败并出现隔离错误;对这些自定义启动使用可直接执行的包装器。 即使 OpenClaw 身份验证配置文件也存在,用户主模式也会保留本机 Codex 帐户。 Stdio 代理和远程传输保留其配置的服务器。这些连接保留其现有的受限完成行为,并在无法验证其隔离时拒绝托管挂钩。强制冲突工具功能的托管需求仍然会拒绝完成。 ## 图像加载器所有权 对于启用了 Codex 本机工具的支持图像的模型,Codex 拥有 `view_image`,而 OpenClaw 会抑制其重复加载程序。本机 Codex 模式接受一个本地文件系统 `path`。对于纯文本模型,或者当禁用本机工具界面时,OpenClaw 为 `view_image` 提供其 `path`/`paths` 架构和委派视觉路线。调用者必须使用为活动运行通告的架构。 当 OpenClaw 将对话历史记录恢复到 Codex 线程中时,保存的图像将保留在引用历史记录中的原始消息旁边。当前请求及其附件遵循该历史记录,因此稍后的文本或语音不会将旧的屏幕截图显示为新附加的图像。如果上下文限制删除了图像的原始消息,则其图像输入也会被省略;保存的成绩单和附件保持不变。 发送另一个附件不会抑制最终回复中生成的图像。仅当 OpenClaw 能够与已确认的图像传送到回复目标相匹配时,才会忽略生成的图像。附件结果不确定的部分传送可能会留下重复的图像,而不是丢失未发送的图像。 ## Turn 活跃度和超时 Codex 拥有提供商流活跃性和本机回合完成。 OpenClaw 等待确切的 `turn/completed` 结果,而不是中断安静转弯或将辅助输出视为完成。格式错误的完成有效负载不会结束运行:OpenClaw 等待有效的本机结果,而不是发明丢失的项目、工具参数或完成状态。现有的 `agents.defaults.timeoutSeconds` 限制是每次尝试已用的执行预算:进度不会重置它,而 `0` 表示无限制执行。 OpenClaw 仍然约束自己的请求、动态工具、取消和本地结算。请参阅 [Timeouts](/plugins/codex-harness-reference#timeouts) 了解这些预算、停止和重播行为以及已停用闲置设置的医生迁移。 如果应用程序与服务器的连接在回合完成之前丢失,则即使 Codex 已发送注释或部分输出,对话也会保留可见的失败结果。重新加载 Control UI 或在另一个客户端上打开对话会保留该结果。实时错误和保存的通知都说明任务可能仍在运行,并告诉您在重试之前检查对话。原始错误仍保留在诊断详细信息中。在重试之前检查任何命令的效果:丢失的连接并不能证明其工作已停止。稍后可以正常重新连接到应用程序服务器。 失败的应用程序服务器启动会等待子进程关闭,然后返回错误。如果启动超时或在进程注册期间被取消,清理会加入该注册并关闭任何迟到的子进程。清理工作可能会超出启动期限。当另一个调用者仍然拥有启动时,已取消的调用者会使启动继续运行。 即使 Codex 没有发送文本增量,OpenClaw 也会保留初始本机项目提供的辅助文本和完成项目提供的推理。已完成的项目(包括空消息)使抄本与 Codex 的最终内容保持一致。原始提供程序副本无法恢复 Codex 删除的文本。当 Codex 在回合完成摘要中重复标记为异步传递的消息时,它们与最终回复保持分离。 ## 网络安全须知 当 Codex 报告网络安全缓冲、网络策略拒绝或高风险网络活动的提供商模型重新路由时,Control UI 会在编辑器上方显示通知。这些通知使用结构化的应用程序服务器事件; OpenClaw 不会从助手的措辞中推断分类器活动。 缓冲意味着提供者仍在处理请求。当辅助输出开始或回合结束时,其通知会清除。被阻止的通知将保留到下一轮或会话重置为止。重新路由通知报告提供商选择的模型。 网关代理事件使用者在 `notice` 流上接收这些更新,包括 `phase: "provider_policy"`、`provider: "openai"`、`category: "cyber"` 和 `state` `buffering`、`blocked`、`fallback`、 `escalated`、`unavailable` 或 `cleared`。当上游事件提供模型字段时,模型字段就会出现。建议的后备模型仅供参考,并不证明该帐户可以使用它。 ## 黎明自动升级 OpenAI 拒绝在其通用模型上进行一些防御性网络工作,并将批准的工作空间引导至 Daybreak 模型。当回合因网络策略拒绝而结束时,OpenClaw 在配置的 Daybreak 模型上重试一次,以便被拒绝的工作达到允许回答它的级别。默认情况下此功能处于启用状态,并在 `plugins.entries.codex.config.appServer.cyberFailover` 下进行配置。 Daybreak 在功能上落后于一般模型,因此升级范围仅限于实际被拒绝的工作: - 每回合最多进行一次升级尝试。在“黎明”下第二次拒绝将保持封锁并停止。 - A 已在配置的 Daybreak 模型上运行,并且永远不会升级。 - A 已执行的回合不再重试。升级需要尝试自己的重放安全判决,因此在发送消息、添加 cron 条目、生成会话、启动本机延续或生成的媒体保留其结果后,轮次会被拒绝。即使结果保留拒绝诊断,取消、超时或稍后的失败也可以防止升级。 - 只有被拒绝的转弯才会被路由到黎明。每个回合都从会话选择的模型开始,未被拒绝的回合永远不会到达较弱的层。 - 重试不会再次将提示镜像到记录中。被拒绝的尝试自己的终端行将与其结果一起被丢弃,而不是暂存,因此成功的升级将返回 Daybreak 答案;被拒绝的转向仍然存在于本机 Codex 线程的上游,OpenClaw 不会重写该线程。 - 只有 OpenAI 自己对当前尝试的网络拒绝升级。另一个提供者的拒绝、另一个类别以及从较早的轮次继承的拒绝都不会影响结果。 - Escalation 永远不会更改会话的存储模型选择,唯一保留的状态是下面的未授权目标记录,该记录是进程本地的而不是持久的。 授权仍属于服务器所有。 `model/list` 向每个客户端宣传 Daybreak,因此目录存在并不能证明其权利:未授权的工作空间仍会收到使用中的 `401`/`403`,并且每次此类尝试都会花费传输的完整重新连接阶梯。因此,OpenClaw 将重试本身视为唯一证据,并报告 `unavailable` 通知而不是静默块。如果回退目标在没有工具活动、副作用、本机继续或中断的情况下被拒绝,则 OpenClaw 会保留原始拒绝,即使回退未产生任何辅助消息也是如此。否则,其结果将被保留,以便这些事实到达跑步者。 由于权利属于经过身份验证的工作区和目标模型,而不属于任何一个会话,因此对于该工作区下的每个会话,未经授权的目标都会被记住一次,并且不会因会话流失而被替换。被授权的单独工作区会正常升级,并且一旦 `cooloffMs` 过去,该记录就会自行释放。对于给定的工作空间和目标,一次仅运行一次检查,因此同时拒绝的同级会话不会在第一个结果落地之前分别支付重新连接阶梯的费用。 ## 并行聊天和线程所有权 独立聊天可以共享 Codex 应用程序服务器并同时运行。恢复空闲聊天不需要不相关的聊天、模型发现或工具目录读取来完成。 OpenClaw 为每个本机线程协调其自己的生命周期操作,并在普通恢复中保留该线程的标识。关闭、替换或退休的客户端仍然无法完成陈旧的移交。当确认本机中断和订阅清理后,停止一个聊天将使其他聊天在共享客户端上运行。后续人员可以恢复已停止的线程,而无需等待这些聊天完成。 如果本机子级在其父级停止或调用 `sessions_yield` 时仍在运行,则 OpenClaw 会保留父级的订阅以观察其结果。在 Codex 确认确切的父回合已结束后,同一对话可以接受另一条消息。子结果保留在原始会话生命周期中;重置、替换的绑定或撤销的源不能继承其保留的权限。 当其重试预算耗尽或请求者恢复阻止它时,本机子完成交付将永久停止。 OpenClaw 将该子轮的待定分配和后续接收一起收回,因此以后的父注册和网关重新启动不会重新启动传递。父记录中的有界系统注释标识了子记录、其状态及其结果会话密钥;即使无法写成绩单,也会收到警告记录退休。同一个孩子的其他待处理轮次保持独立。普通完成重试期间的父订阅保留不变。 托管本地连接共享有界推理中继。最多同时运行 16 个请求准备和上传,另外 16 个请求按到达顺序等待。上传容量释放后,响应会继续流式传输,因此较长的响应不会阻止第十七个聊天或本机子进程的开始。 该中继允许最多 80 个组合的 HTTP 操作和 WebSocket 连接,并有空间容纳 16 个待处理或关闭的准入。它保留最多 64 个可用的 WebSockets,并在任一传输需要空间时回收最旧的已完成空闲连接。等待第一个请求的活动响应和新打开的连接不会被驱逐。 HTTP 连接在每次响应后关闭;原生 WebSocket 重用保持不变。 64 个承认的根上下文的单独限制保持不变;传输容量不是已保存对话的计数。 新的 WebSocket 在打开其上游连接之前等待;入场和握手有 10 秒的截止时间。 HTTP 准入和排队的 WebSocket 上传最多等待 30 秒。取消或取代的排队工作不会到达提供者。已经开始的准备和运输清理工作将保持其产能,直到其所属业务稳定下来。 这些限制适用于共享中继的聊天和本机子代理。队列容量或截止时间耗尽会返回可重试的繁忙响应。 Codex 用尽重试次数后,持续过载仍可能导致转弯失败。 如果已接纳的WebSocket无法连接上行,则中继返回HTTP `502`;上游握手截止时间返回 `504`。这些错误使用没有凭据或模型内容的固定消息。本机 Codex 保持对重试和 HTTPS 回退的控制。提供商 HTTP 故障保留其原始状态和正文。 提供程序完全失败后,您可以使用其现有配置继续进行同一聊天。 OpenClaw 保留配置的本机线程,包括该聊天已绑定线程的 `/codex resume`。本机提供程序策略拒绝会结束当前尝试,而无需本机重试。上述 OpenClaw 配置的网络后备是一次单独的尝试。稍后的用户消息是一个单独的回合;它不提供本机策略覆盖或用户确认。 对于 Codex 应用程序服务器 `0.153.4`,首次采用或更改已加载失败线程的配置仍然需要本机卸载。 OpenClaw 保留线程并报告缺少配置确认,而不是假设更改已生效。现有的主动轮换和父控制线程检查仍然适用。 这种协调不会使本机配置替换针对 Codex- 内部控制器成为原子。本机子代理重新加载或另一个本机控制器可以在 OpenClaw 的线程队列之外进行操作。避免通过多个控制器同时重新配置同一个本机线程;仅观察本机拆卸并不能将其保留以防止随后的本机重新加载。 ## 运行时边界 无论 Codex 拒绝轮次启动还是报告轮次失败,本机提供程序限制和过载都会保留其结构化状态。两条路径都使用 OpenClaw 在频道聊天和 Control UI 中的共享重试和失败指导。临时限制不会继承订阅使用限制重置冷却时间。 Codex harness 只会改变底层嵌入式 agent 执行器。 - 支持 OpenClaw 动态工具。Codex 会请求 OpenClaw 执行这些工具,因此 OpenClaw 仍然处于执行路径中。 - Codex-native shell、补丁、MCP 和本机应用程序工具归 Codex 所有。 OpenClaw 可以通过支持的中继观察或阻止选定的本机事件,但它不会重写本机工具参数。 - `gateway_exec` 和 `gateway_process` 是 OpenClaw- 拥有的动态工具。他们故意重新进入网关执行准备代理可读的秘密存储环境和受保护的出口;这些值永远不会流入 Codex 本机 shell。 - Codex 拥有本机压缩。 OpenClaw 保留通道历史记录、搜索、`/new`、`/reset` 和未来模型或harness切换的转录镜像,但不会用 OpenClaw 或上下文引擎摘要器替换 Codex 压缩。完成的评论和工具活动在回合期间保存,而不是等待其最终答案,从而在网关中断时保留已完成的工作。 - 媒体生成、媒体理解、TTS、批准和消息传递工具输出继续通过匹配的 OpenClaw provider/model 设置进行。 - `tool_result_persist` 适用于 OpenClaw- 拥有的转录工具结果,而不是 Codex-native 工具结果记录。 关于 hook 层、受支持的 V1 接口、原生权限处理、队列引导、Codex 反馈上传机制以及压缩细节,请参见 [Codex harness 运行时](/plugins/codex-harness-runtime)。