工具
工具 (OpenClaw)
Section titled “工具 (OpenClaw)”OpenClaw 暴露了用于浏览器、画布、节点和定时任务的 一等 Agent 工具。 这些取代了旧的 openclaw-* 技能:工具是类型化的,无需 Shell 调用,Agent 应直接依赖它们。
您可以通过 openclaw.json 中的 tools.allow / tools.deny 全局允许/拒绝工具(拒绝优先)。这可以防止不允许的工具被发送到模型提供商。
{ tools: { deny: ["browser"] }}注意:
- 匹配不区分大小写。
- 支持
*通配符("*"表示所有工具)。 - 如果
tools.allow仅引用未知或未加载的插件工具名称,OpenClaw 会记录警告并忽略白名单,以便核心工具保持可用。
工具配置文件 (基础白名单)
Section titled “工具配置文件 (基础白名单)”tools.profile 在 tools.allow/tools.deny 之前设置 基础工具白名单。 每个 Agent 的覆盖:agents.list[].tools.profile。
配置文件:
minimal: 仅session_statuscoding:group:fs,group:runtime,group:sessions,group:memory,imagemessaging:group:messaging,sessions_list,sessions_history,sessions_send,session_statusfull: 无限制(同未设置)
示例(默认仅消息,也允许 Slack + Discord 工具):
{ tools: { profile: "messaging", allow: ["slack", "discord"] }}示例(编码配置文件,但在任何地方都拒绝 exec/process):
{ tools: { profile: "coding", deny: ["group:runtime"] }}示例(全局编码配置文件,仅消息支持 Agent):
{ tools: { profile: "coding" }, agents: { list: [ { id: "support", tools: { profile: "messaging", allow: ["slack"] } } ] }}特定于提供商的工具策略
Section titled “特定于提供商的工具策略”使用 tools.byProvider 为特定提供商(或单个 provider/model)进一步限制 工具,而无需更改全局默认值。 每个 Agent 的覆盖:agents.list[].tools.byProvider。
这在基础工具配置文件 之后 和允许/拒绝列表 之前 应用,因此它只能缩小工具集。 提供商键接受 provider(例如 google-antigravity)或 provider/model(例如 openai/gpt-5.2)。
示例(保持全局编码配置文件,但为 Google Antigravity 提供最少工具):
{ tools: { profile: "coding", byProvider: { "google-antigravity": { profile: "minimal" } } }}示例(针对不稳定端点的特定提供商/模型白名单):
{ tools: { allow: ["group:fs", "group:runtime", "sessions_list"], byProvider: { "openai/gpt-5.2": { allow: ["group:fs", "sessions_list"] } } }}示例(针对单个提供商的特定 Agent 覆盖):
{ agents: { list: [ { id: "support", tools: { byProvider: { "google-antigravity": { allow: ["message", "sessions_list"] } } } } ] }}工具组 (简写)
Section titled “工具组 (简写)”工具策略(全局、Agent、沙盒)支持扩展为多个工具的 group:* 条目。 在 tools.allow / tools.deny 中使用这些。
可用组:
group:runtime:exec,bash,processgroup:fs:read,write,edit,apply_patchgroup:sessions:sessions_list,sessions_history,sessions_send,sessions_spawn,session_statusgroup:memory:memory_search,memory_getgroup:web:web_search,web_fetchgroup:ui:browser,canvasgroup:automation:cron,gatewaygroup:messaging:messagegroup:nodes:nodesgroup:openclaw: 所有内置 OpenClaw 工具(不包括提供商插件)
示例(仅允许文件工具 + 浏览器):
{ tools: { allow: ["group:fs", "browser"] }}插件 + 工具
Section titled “插件 + 工具”插件可以注册核心集之外的 额外工具(和 CLI 命令)。 有关安装 + 配置的信息,请参阅 插件;有关如何将工具使用指南注入提示的信息,请参阅 技能。某些插件随工具一起提供自己的技能(例如,语音通话插件)。
可选插件工具:
apply_patch
Section titled “apply_patch”跨一个或多个文件应用结构化补丁。用于多块编辑。 实验性:通过 tools.exec.applyPatch.enabled 启用(仅限 OpenAI 模型)。
在工作区中运行 Shell 命令。
核心参数:
command(必填)yieldMs(超时后自动转入后台,默认 10000)background(立即后台)timeout(秒;如果超出则杀死进程,默认 1800)elevated(布尔值;如果启用/允许提升模式,则在主机上运行;仅当 Agent 沙盒化时才会改变行为)host(sandbox | gateway | node)security(deny | allowlist | full)ask(off | on-miss | always)node(host=node的节点 ID/名称)- 需要真正的 TTY?设置
pty: true。
注意:
- 后台运行时返回
status: "running"和sessionId。 - 使用
process轮询/记录/写入/杀死/清除后台会话。 - 如果
process被禁用,exec将同步运行并忽略yieldMs/background。 elevated受tools.elevated加上任何agents.list[].tools.elevated覆盖的限制(两者都必须允许),并且是host=gateway+security=full的别名。elevated仅当 Agent 沙盒化时才会改变行为(否则它是无操作)。host=node可以针对 macOS 伴侣应用或无头节点主机 (openclaw node run)。- 网关/节点批准和白名单:Exec 批准。
process
Section titled “process”管理后台 exec 会话。
核心操作:
list,poll,log,write,kill,clear,remove
注意:
poll在完成时返回新输出和退出状态。log支持基于行的offset/limit(省略offset以抓取最后 N 行)。process是基于 Agent 隔离的;其他 Agent 的会话不可见。
web_search
Section titled “web_search”使用 Brave Search API 搜索网络。
核心参数:
query(必填)count(1–10; 默认来自tools.web.search.maxResults)
注意:
- 需要 Brave API 密钥(推荐:
openclaw configure --section web,或设置BRAVE_API_KEY)。 - 通过
tools.web.search.enabled启用。 - 响应被缓存(默认 15 分钟)。
- 有关设置,请参阅 Web 工具。
web_fetch
Section titled “web_fetch”从 URL 获取并提取可读内容(HTML → markdown/text)。
核心参数:
url(必填)extractMode(markdown|text)maxChars(截断长页面)
注意:
- 通过
tools.web.fetch.enabled启用。 - 响应被缓存(默认 15 分钟)。
- 对于重 JS 站点,首选 browser 工具。
- 有关设置,请参阅 Web 工具。
- 有关可选的反机器人回退,请参阅 Firecrawl。
browser
Section titled “browser”控制专用的 OpenClaw 管理的浏览器。
核心操作:
status,start,stop,tabs,open,focus,closesnapshot(aria/ai)screenshot(返回图像块 +MEDIA:<path>)act(UI 操作: click/type/press/hover/drag/select/fill/resize/wait/evaluate)navigate,console,pdf,upload,dialog
配置文件管理:
profiles— 列出所有浏览器配置文件及其状态create-profile— 创建带有自动分配端口(或cdpUrl)的新配置文件delete-profile— 停止浏览器,删除用户数据,从配置中移除(仅限本地)reset-profile— 杀死配置文件端口上的孤立进程(仅限本地)
通用参数:
profile(可选; 默认为browser.defaultProfile)target(sandbox|host|node)node(可选; 选择特定节点 ID/名称) 注意:- 需要
browser.enabled=true(默认为true;设置为false以禁用)。 - 所有操作都接受可选的
profile参数以支持多实例。 - 当省略
profile时,使用browser.defaultProfile(默认为 “chrome”)。 - 配置文件名称:仅限小写字母数字 + 连字符(最多 64 个字符)。
- 端口范围:18800-18899(最多约 100 个配置文件)。
- 远程配置文件仅限连接(无启动/停止/重置)。
- 如果连接了支持浏览器的节点,工具可能会自动路由到它(除非您固定
target)。 - 当安装了 Playwright 时,
snapshot默认为ai;使用aria获取可访问性树。 snapshot还支持角色快照选项(interactive,compact,depth,selector),返回如e12的引用。act需要来自snapshot的ref(来自 AI 快照的数字12,或来自角色快照的e12);使用evaluate处理罕见的 CSS 选择器需求。- 默认情况下避免
act→wait;仅在例外情况下使用(没有可靠的 UI 状态可等待)。 upload可以选择传递ref以在装填后自动点击。upload还支持inputRef(aria 引用)或element(CSS 选择器)以直接设置<input type="file">。
canvas
Section titled “canvas”驱动节点 Canvas(演示、评估、快照、A2UI)。
核心操作:
present,hide,navigate,evalsnapshot(返回图像块 +MEDIA:<path>)a2ui_push,a2ui_reset
注意:
- 底层使用网关
node.invoke。 - 如果未提供
node,工具会选择默认节点(单个连接的节点或本地 mac 节点)。 - A2UI 仅限 v0.8(无
createSurface);CLI 会拒绝带有行错误的 v0.9 JSONL。 - 快速冒烟测试:
openclaw nodes canvas a2ui push --node <id> --text "Hello from A2UI"。
发现并定位配对节点;发送通知;捕获摄像头/屏幕。
核心操作:
status,describepending,approve,reject(配对)notify(macOSsystem.notify)run(macOSsystem.run)camera_snap,camera_clip,screen_recordlocation_get
注意:
- 摄像头/屏幕命令需要节点应用处于前台。
- 图像返回图像块 +
MEDIA:<path>。 - 视频返回
FILE:<path>(mp4)。 - 位置返回 JSON 负载(经度/纬度/精度/时间戳)。
run参数:commandargv 数组;可选cwd,env(KEY=VAL),commandTimeoutMs,invokeTimeoutMs,needsScreenRecording。
示例 (run):
{ "action": "run", "node": "office-mac", "command": ["echo", "Hello"], "env": ["FOO=bar"], "commandTimeoutMs": 12000, "invokeTimeoutMs": 45000, "needsScreenRecording": false}使用配置的图像模型分析图像。
核心参数:
image(必填路径或 URL)prompt(可选; 默认为 “Describe the image.“)model(可选覆盖)maxBytesMb(可选大小上限)
注意:
- 仅当配置了
agents.defaults.imageModel(主要或回退),或者可以从您的默认模型 + 配置的身份验证推断出隐式图像模型(尽力配对)时才可用。 - 直接使用图像模型(独立于主聊天模型)。
message
Section titled “message”跨 Discord/Google Chat/Slack/Telegram/WhatsApp/Signal/iMessage/MS Teams 发送消息和频道操作。
核心操作:
send(文本 + 可选媒体; MS Teams 也支持card用于自适应卡片)poll(WhatsApp/Discord/MS Teams 投票)react/reactions/read/edit/deletepin/unpin/list-pinspermissionsthread-create/thread-list/thread-replysearchstickermember-info/role-infoemoji-list/emoji-upload/sticker-uploadrole-add/role-removechannel-info/channel-listvoice-statusevent-list/event-createtimeout/kick/ban
注意:
send通过网关路由 WhatsApp;其他频道直接发送。poll对 WhatsApp 和 MS Teams 使用网关;Discord 投票直接发送。- 当消息工具调用绑定到活动聊天会话时,发送被限制在该会话的目标,以避免跨上下文泄漏。
管理网关定时任务和唤醒。
核心操作:
status,listadd,update,remove,run,runswake(排队系统事件 + 可选立即心跳)
注意:
add需要完整的 cron job 对象(与cron.addRPC 模式相同)。update使用{ id, patch }。
gateway
Section titled “gateway”重启或应用更新到正在运行的网关进程(就地)。
核心操作:
restart(授权 + 发送SIGUSR1进行进程内重启;openclaw gateway就地重启)config.get/config.schemaconfig.apply(验证 + 写入配置 + 重启 + 唤醒)config.patch(合并部分更新 + 重启 + 唤醒)update.run(运行更新 + 重启 + 唤醒)
注意:
- 使用
delayMs(默认为 2000)以避免中断正在进行的回复。 restart默认禁用;通过commands.restart: true启用。
sessions_list / sessions_history / sessions_send / sessions_spawn / session_status
Section titled “sessions_list / sessions_history / sessions_send / sessions_spawn / session_status”列出会话,检查记录历史,或发送到另一个会话。
核心参数:
sessions_list:kinds?,limit?,activeMinutes?,messageLimit?(0 = 无)sessions_history:sessionKey(或sessionId),limit?,includeTools?sessions_send:sessionKey(或sessionId),message,timeoutSeconds?(0 =即发即弃)sessions_spawn:task,label?,agentId?,model?,runTimeoutSeconds?,cleanup?session_status:sessionKey?(默认当前; 接受sessionId),model?(default清除覆盖)
注意:
main是规范的直接聊天键;全局/未知被隐藏。messageLimit > 0获取每个会话的最后 N 条消息(过滤掉工具消息)。sessions_send当timeoutSeconds > 0时等待最终完成。- 传递/宣布发生在完成之后,并且是尽力而为的;
status: "ok"确认 Agent 运行完成,而不是确认宣布已传递。 sessions_spawn启动子 Agent 运行并将宣布回复发布回请求者聊天。sessions_spawn是非阻塞的,立即返回status: "accepted"。sessions_send运行回复-乒乓(回复REPLY_SKIP停止;通过session.agentToAgent.maxPingPongTurns设置最大轮数,0–5)。- 乒乓之后,目标 Agent 运行 宣布步骤;回复
ANNOUNCE_SKIP以抑制宣布。
agents_list
Section titled “agents_list”列出当前会话可以使用 sessions_spawn 目标的 Agent ID。
注意:
- 结果受限于每个 Agent 的白名单(
agents.list[].subagents.allowAgents)。 - 当配置为
["*"]时,工具包括所有配置的 Agent 并标记allowAny: true。
参数 (通用)
Section titled “参数 (通用)”网关支持的工具 (canvas, nodes, cron):
gatewayUrl(默认ws://127.0.0.1:18789)gatewayToken(如果启用了认证)timeoutMs
浏览器工具:
profile(可选; 默认为browser.defaultProfile)target(sandbox|host|node)node(可选; 固定特定节点 ID/名称)
推荐的 Agent 流程
Section titled “推荐的 Agent 流程”浏览器自动化:
browser→status/startsnapshot(ai 或 aria)act(click/type/press)screenshot如果您需要视觉确认
Canvas 渲染:
canvas→presenta2ui_push(可选)snapshot
节点定位:
nodes→statusdescribe在选定的节点上notify/run/camera_snap/screen_record
- 避免直接
system.run;仅在用户明确同意的情况下使用nodes→run。 - 尊重用户对摄像头/屏幕捕获的同意。
- 在调用媒体命令之前使用
status/describe确保权限。
工具如何呈现给 Agent
Section titled “工具如何呈现给 Agent”工具通过两个并行渠道暴露:
- 系统提示文本:人类可读的列表 + 指南。
- 工具模式:发送到模型 API 的结构化函数定义。
这意味着 Agent 既能看到“存在哪些工具”,也能看到“如何调用它们”。如果工具未出现在系统提示或模式中,模型将无法调用它。