tools.toolSearch。
对于公开 QuickJS-WASI exec/wait 界面而非工具搜索控制项的通用 OpenClaw 运行时,请参阅代码模式。
为 OpenClaw 运行启用后,默认情况下模型会收到一个 tool_search_code 工具,以及结构化结果无法通过紧凑桥接传递的所有仅限直接调用工具。代码工具会在隔离的 Node 子进程中运行一小段 JavaScript 代码,并提供 openclaw.tools 桥接:
单个轮次如何运行
在规划阶段,OpenClaw 嵌入式运行器会为此次运行构建有效目录:- 解析智能体、配置文件、沙箱和会话的活动工具策略。
- 列出符合条件的 OpenClaw 工具和插件工具。
- 通过会话 MCP 运行时列出符合条件的 MCP 工具。
- 添加为当前运行提供的符合条件的客户端工具。
- 保持仅限直接调用的工具对模型可见,并为其余符合目录收录条件的工具建立紧凑描述符索引。
- 在这些仅限直接调用的工具旁公开 OpenClaw 代码桥接、结构化回退工具或紧凑目录界面。
openclaw.tools.call(...) 会通过桥接返回 Gateway 网关,常规的策略、审批、钩子、日志和结果处理仍会在其中应用。
模式
tools.toolSearch 有三种面向模型的模式:
code:公开tool_search_code(默认的紧凑 JavaScript 桥接)以及仅限直接调用的工具。tools:将tool_search、tool_describe和tool_call作为普通结构化工具公开,适用于不应接收代码的提供商,同时还会公开仅限直接调用的工具。directory:公开tool_search、tool_describe和tool_call,以及一个包含可用工具名称和描述的有界提示词目录,适用于应看到工具名称但不应看到每个完整 schema 的提供商。OpenClaw 还可以为当前轮次直接公开一小组有界的可能需要或必需的工具 schema。在此模式下,仅限直接调用的工具仍然可见。
catalogMode: "direct-only" 的工具不会进入该目录,并保持对模型可见。如果当前运行时无法启动隔离的 Node 代码模式子进程,默认的 code 模式会在目录压缩前回退到 tools。在 directory 模式下,客户端提供的工具在当前运行中保持直接可见,而 OpenClaw 工具、插件工具和 MCP 工具可以压缩到目录背后。直接调用一个被隐藏的精确目录名称时,执行前会从同一个已授权目录中加载该工具。
所有模式均为实验性功能。对于较小的 OpenClaw 工具目录,优先直接公开工具;对于 Codex harness 运行,优先使用稳定的 Codex 原生界面。
没有单独的来源选择配置。启用工具搜索后,目录会在常规策略筛选后包含符合目录收录条件的 OpenClaw、MCP 和客户端工具;仅限直接调用的工具则单独保留。
存在的原因
大型目录很有用,但开销较高。将每个工具 schema 都发送给模型会增大请求、减慢规划速度,并增加意外选择工具的概率。 工具搜索改变了其形式:- 直接工具:模型会在生成第一个 token 前看到每个选定的 schema
- 工具搜索代码模式:模型会看到一个紧凑代码工具、一份简短的 API 契约,以及所有仅限直接调用的工具
- 工具搜索工具模式:模型会看到三个紧凑的结构化回退工具,以及所有仅限直接调用的工具
- 工具搜索目录模式:模型会看到一个有界目录、搜索/描述/调用控制项、一小组有界的可能需要或必需的 schema,以及所有仅限直接调用的工具
- 在轮次期间:模型可以按需加载其余 schema
API
openclaw.tools.search(query, options?)
搜索当前运行的有效目录。结果紧凑,可以安全地放回提示词上下文中。每个命中项都包含一个有界的 TypeScript 风格 input 签名,例如 { id: string; mode?: "drip" | "flood" },因此当该签名已足够时,模型可以跳过 describe。受信任的 OpenClaw 核心工具或插件工具还可以包含紧凑的 output 提示,例如 Array<{ id: string; paid: boolean }>。MCP 和客户端的输出 schema 声明不会提升为此受信任提示。它们不受信任的输入 schema 也会延迟为 input: "unknown";调用前请使用 describe。开放、过大或其他不完整的输出 schema 会省略该提示,但仍可通过 describe 获取。
openclaw.tools.describe(id)
加载一个搜索结果的完整元数据,包括精确的输入 schema;当工具声明了受信任的完整 outputSchema 时,也会加载它。
openclaw.tools.call(id, args)
通过 OpenClaw 调用选定的工具,并返回原始 { tool, result } 信封。返回 JSON 的工具通常将其值放在 result.details 中。如果受信任的工具声明了 outputSchema,OpenClaw 会在执行前编译该 schema,并在常规工具钩子处理后验证最终的 details,然后再返回目录调用结果。
outputSchema 属性声明输出契约。它描述的是 AgentToolResult.details,而非渲染后的内容块。请包含所有不会抛出异常的变体;如果结果不稳定,则省略该属性。请参阅代码模式输出契约和工具插件。
结构化回退模式会以工具形式公开相同的操作:
tool_searchtool_describetool_call
tool_searchtool_describetool_call
tool_search 查找。如果模型直接请求一个被隐藏的精确目录工具名称,OpenClaw 会在常规执行前从已授权目录中加载该工具。
目录模式下的客户端工具名称不得与 OpenClaw、插件或 MCP 工具名称冲突,因为精确的延迟分派会使用这些名称。
运行时边界
代码桥接在短生命周期的 Node 子进程中运行。子进程启动时启用 Node 权限模式,使用空环境,不授予文件系统或网络权限,也不授予子进程或 worker 权限。OpenClaw 会强制执行父进程的实际时间超时,并在超时时终止子进程,包括异步延续开始后。 运行时仅公开:console.log、console.warn和console.erroropenclaw.tools.searchopenclaw.tools.describeopenclaw.tools.call
- 工具允许和拒绝策略
- 按智能体和按沙箱配置的工具限制
- 渠道/运行时工具策略
- 审批钩子
- 插件
before_tool_call钩子 - 会话身份、日志和遥测
配置
使用默认代码桥接为 OpenClaw 运行启用工具搜索:codeTimeoutMs 限制在 1000-60000,将 maxSearchLimit 限制在 1-50,并将 searchDefaultLimit 限制在 1..maxSearchLimit。
禁用该功能:
提示词和遥测
工具搜索会记录足够的遥测数据,以便与直接公开工具进行比较:- 发送给 harness 的工具和提示词序列化总字节数
- 目录大小和来源明细
- 搜索、描述和调用次数
- 通过 OpenClaw 执行的最终工具调用
- 选定的工具 ID 和来源
- 模型预先看到了多少个工具 schema
- 模型执行了多少次搜索和描述操作
- 最终调用了哪个工具
- 结果来自 OpenClaw、MCP 还是客户端工具
E2E 验证
QA Lab Gateway 网关场景使用 OpenClaw 运行时验证两条路径:- 直接模式可以调用虚假插件工具。
- 工具搜索可以调用同一个虚假插件工具。
- 直接模式将虚假插件工具的 schema 直接暴露给提供商。
- 工具搜索仅暴露紧凑型桥接器以及所有仅限直接模式的工具。
- 对于大型虚假目录,工具搜索的请求载荷更小。
- 会话日志显示预期的工具调用次数和桥接调用遥测数据。
失败行为
工具搜索应采用失败时关闭策略:- 如果某个工具不在有效策略中,搜索不应返回该工具
- 如果所选工具变得不可用,
tool_call应失败 - 如果策略或审批阻止执行,调用结果应报告该 阻止,而不是绕过它
- 如果代码桥接器无法创建隔离运行时,请使用
mode: "tools",或 为该部署禁用工具搜索