代码模式
Code Mode 是 OpenClaw 代理运行时的一个实验性功能。启用后,模型不再看到每个已启用工具的模式,取而代之的是 exec、wait,以及任何结构化结果无法穿越仅限 JSON 的访客桥接的 direct-only 工具。模型编写一个小型 JavaScript 程序,用于搜索、描述和调用隐藏的工具目录。TypeScript 风格的签名描述可用工具;可执行单元格使用不带类型注解的纯 JavaScript。
Note
当 tools.codeMode 缺失时,OpenClaw 使用 "auto" 级别,并仅对标记为首选 Code Mode 执行者的模型启用 Code Mode。
用户编写的对象如果未包含 enabled,则保持关闭;false 和 { enabled: false } 也是如此。
代理和模型级别的覆盖设置优先。使用 设置 → 代理与工具 → 实验室 → Code Mode 来选择全局设置。
本页介绍的是 OpenClaw Code Mode,而不是 Codex Code Mode。这两个功能同名,并使用相同的控制工具名称(exec、wait),但它们是独立的实现:
- Codex Code Mode 在 Codex 编码框架内运行。其
exec工具是一个自由格式语法工具:模型编写原始 JavaScript 源代码(可选地以// @exec: {...}pragma 行开头,以指定执行选项),并在 Codex 的进程内 V8 Code Mode 运行时中执行。 - OpenClaw Code Mode 在通用的 OpenClaw 代理运行时中运行,并通过全局、代理或模型激活设置启用。其
exec工具接收 JSON{ title, code }负载,由所选的 Node 或 QuickJS 执行器执行。
两者都是 JavaScript 执行面,而不是 shell 命令面。请将它们视为独立的、实现方式不同的功能,它们只是恰好暴露了同名的 exec/wait 工具。
在 OpenClaw Code Mode 中,command 是 code 的 JavaScript 别名,而不是 shell 命令。对于 shell 或文件操作,请从访客 JavaScript 中调用适当的异步工具全局函数。可识别的 shell 命令会在访客执行之前被拒绝,并附上可操作的 invalid_input 指导。
JavaScript 在 Gateway 的主事件循环之外执行。Node 是默认执行器,在工作线程中使用 node:vm 进行可信执行;它不是安全边界。随附的 QuickJS 执行器提供强化的访客隔离。两者使用相同的工具桥接,其中权限、审批和会话所有权仍归 Gateway 所有。在启用之前,请参阅 Code Mode 执行器。
本页是一个索引。Code Mode 在九个页面中均有文档,每个页面针对一种读者任务。打开与你任务匹配的页面。
| 页面 | 阅读时机 |
|---|---|
| Code Mode 快速入门 | 你想启用 Code Mode、覆盖单个模型,并从工具错误中恢复。 |
| Code Mode 执行器 | 你想选择 Node 或 QuickJS,并了解它们的安全边界。 |
| Code Mode 配置 | 你需要配置字段、首选模型列表和激活顺序。 |
功能说明¶
- 模型可见的工具列表变为
exec、wait,再加上任何 direct-only 工具,例如computer或原生视觉view_image加载器——其图像结果无法在访客桥接中存续。 exec在所选执行器的工作线程中执行模型生成的 JavaScript。- 每个符合目录收录条件的已启用非 MCP 工具(OpenClaw 核心、插件、客户端)都会作为独立的模型工具被隐藏,并在访客程序内部以异步全局函数的形式暴露。MCP 仍位于
MCP命名空间下。 exec的描述带有最终可调用名称的受限快速索引、紧凑的输入提示,以及紧凑的声明输出提示(当受信任工具提供输出模式时)。它省略描述、完整模式、MCP 条目和溢出条目。可调用的catalog.search(...)结果是后备方案。输入提示以注释形式保留整数和数值边界,例如offset?: number /* integer, >= 1 */。其他验证细节保留在通过describe()可用的完整模式中。这些提示不会改变工具验证或输出契约。- 访客代码直接调用全局函数,或在隐藏目录中搜索可调用的句柄。句柄暴露受限的元数据和
describe(),但绝不暴露确切的内部目录 ID。调用使用与正常代理回合相同的执行路径(策略、审批、钩子、遥测仍然全部生效)。 - MCP 工具分组在
MCP命名空间下,可通过catalog.search(...)按任务发现。MCP 搜索句柄调用相同的命名空间路径,并指向 MCP 的确切声明。 - 当嵌套工具调用仍处于挂起状态时,
wait会恢复被暂停的 Code Mode 运行。
仅当外部 Code Mode 结果的 status 为 "waiting" 时才调用 wait,并使用其顶层 runId。已完成的单元格可以在 value 内返回带有自身 sessionId 的后台 shell 操作。在新的 exec 中使用已启用的进程控制工具来轮询该操作。其 sessionId 不是 Code Mode 运行 ID。
Code Mode 仅改变面向模型的编排表面。它不会取代工具、插件工具、MCP 工具、认证、审批策略、频道行为或模型选择。
为什么使用它¶
- 更小的提示面:提供方获得两个控制工具、一个受限的原生工具索引,以及仅有的几个必需直接工具,而不是几十或上百个完整工具模式。
- 更好的编排:模型可以在一个代码单元格中使用循环、连接、小型转换、条件逻辑和并行嵌套工具调用。
- 更少的模型往返:声明的输出契约让模型在一次
exec中调用并转换工具结果。未知输出仍以原始形式优先返回。 - 提供方无关:适用于 OpenClaw、插件、MCP 和客户端工具,不依赖提供方原生的代码执行。
- 故障关闭:如果启用了 Code Mode 但所选执行器不可用,运行将失败,而不是静默回退到广泛的直接工具暴露。
对于拥有大量已启用工具目录的智能体,或模型在回答前需要搜索、组合并调用多个工具的工作流,最为有用。
对于小型目录,或无法可靠地编写短程序的模型,请保留直接工具暴露。当你希望拥有紧凑目录,但更倾向于使用结构化的 search/describe/call 控制而非 JavaScript 单元格时,请使用 Tool Search。
技术导览¶
这些页面涵盖运行时契约和实现细节,面向维护者、调试工具暴露的插件作者,以及验证高风险部署的运维人员。
| 页面 | 阅读时机 |
|---|---|
| Code Mode 工具表面 | 你需要 exec 和 wait 契约、隐藏目录以及冲突。 |
| Code Mode 来宾 API | 你正在编写来宾代码,并需要其全局变量、句柄和 MCP 命名空间。 |
| Code Mode 输出 | 你需要声明的输出契约或来宾输出 API。 |
| Code Mode 内部机制 | 你需要作用域、术语、嵌套执行、快照或安全边界。 |
| Code Mode 故障排查 | 你需要错误代码、遥测字段或调试环境变量。 |
| Code Mode 维护者说明 | 你正在修改 Code Mode 源代码、验证它,或编写 E2E 覆盖。 |
各章节迁移位置¶
上一版单页版本中的每个章节标题都会在此保留其锚点,因此诸如 /tools/code-mode#guest-runtime-api 的现有链接仍然可以解析。每个条目都指向现在承载该内容的页面。
- 快速入门
- 启用 Code Mode
- 覆盖单个模型
- 模型执行的操作
- 从工具错误中恢复
- 验证活动表面
- 使用 Swarm 进行智能体扇出
- 配置
- 按模型自动激活
- compat 目录标志
- 已发布的优先模型
- 由多个提供商发布的模型
- 选择启用时机
- 激活
- 模型可见工具
- exec 工具
- 会话历史中的来源
- wait 工具
- 工具目录
- Tool Search 交互
- 工具名称和冲突
- 来宾运行时 API
- 读取分页文件数据
- 声明的输出契约
- 输出 API
- 运行时状态
- 作用域
- 术语
- 嵌套工具执行
- 运行和快照生命周期
- QuickJS-WASI 运行时
- TypeScript
- 安全边界
- 错误代码
- 遥测
- 调试
- 实现布局
- 验证清单
- E2E 测试计划
相关¶
- Swarm 用于从 Code Mode 脚本进行扇出智能体编排
- Tool Search
- 智能体运行时
- exec 工具
- 代码执行
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw