--- title: "工具" --- # 工具 (OpenClaw) OpenClaw 为浏览器、画布、节点和定时任务暴露**一流的代理工具**。 这些工具替代了旧的 `openclaw-*` 技能:工具具有类型检查,无需 shell 调用, 代理应该直接依赖它们。 ## 禁用工具 您可以通过 `openclaw.json` 中的 `tools.allow` / `tools.deny` 全局允许/拒绝工具 (拒绝优先)。这可以防止不允许的工具被发送给模型提供商。 ```json5 { tools: { deny: ["browser"] }, } ``` 注意事项: - 匹配不区分大小写。 - 支持 `*` 通配符(`"*"` 表示所有工具)。 - 如果 `tools.allow` 仅引用未知或未加载的插件工具名称,OpenClaw 会记录警告并忽略允许列表,以便核心工具保持可用。 ## 工具配置文件(基础允许列表) `tools.profile` 在 `tools.allow`/`tools.deny` 之前设置**基础工具允许列表**。 每代理覆盖:`agents.list[].tools.profile`。 配置文件: - `minimal`:仅 `session_status` - `coding`:`group:fs`、`group:runtime`、`group:sessions`、`group:memory`、`image` - `messaging`:`group:messaging`、`sessions_list`、`sessions_history`、`sessions_send`、`session_status` - `full`:无限制(与未设置相同) 示例(默认仅消息,也允许 Slack + Discord 工具): ```json5 { tools: { profile: "messaging", allow: ["slack", "discord"], }, } ``` 示例(编码配置文件,但在各处拒绝 exec/process): ```json5 { tools: { profile: "coding", deny: ["group:runtime"], }, } ``` 示例(全局编码配置文件,仅消息支持代理): ```json5 { tools: { profile: "coding" }, agents: { list: [ { id: "support", tools: { profile: "messaging", allow: ["slack"] }, }, ], }, } ``` ## 提供商特定的工具策略 使用 `tools.byProvider` 来**进一步限制**特定提供商的工具 (或单个 `provider/model`),而无需更改全局默认设置。 每代理覆盖:`agents.list[].tools.byProvider`。 这在基础工具配置文件**之后**和允许/拒绝列表**之前**应用, 因此它只能缩小工具集。 提供商键接受 `provider`(例如 `google-antigravity`)或 `provider/model`(例如 `openai/gpt-5.2`)。 示例(保持全局编码配置文件,但为 Google Antigravity 使用最小工具): ```json5 { tools: { profile: "coding", byProvider: { "google-antigravity": { profile: "minimal" }, }, }, } ``` 示例(针对不稳定端点的提供商/模型特定允许列表): ```json5 { tools: { allow: ["group:fs", "group:runtime", "sessions_list"], byProvider: { "openai/gpt-5.2": { allow: ["group:fs", "sessions_list"] }, }, }, } ``` 示例(针对单个提供商的代理特定覆盖): ```json5 { agents: { list: [ { id: "support", tools: { byProvider: { "google-antigravity": { allow: ["message", "sessions_list"] }, }, }, }, ], }, } ``` ## 工具组(快捷方式) 工具策略(全局、代理、沙盒)支持展开为多个工具的 `group:*` 条目。 在 `tools.allow` / `tools.deny` 中使用这些。 可用组: - `group:runtime`:`exec`、`bash`、`process` - `group:fs`:`read`、`write`、`edit`、`apply_patch` - `group:sessions`:`sessions_list`、`sessions_history`、`sessions_send`、`sessions_spawn`、`session_status` - `group:memory`:`memory_search`、`memory_get` - `group:web`:`web_search`、`web_fetch` - `group:ui`:`browser`、`canvas` - `group:automation`:`cron`、`gateway` - `group:messaging`:`message` - `group:nodes`:`nodes` - `group:openclaw`:所有内置 OpenClaw 工具(不包括提供商插件) 示例(仅允许文件工具 + 浏览器): ```json5 { tools: { allow: ["group:fs", "browser"], }, } ``` ## 插件 + 工具 插件可以注册核心工具集之外的**附加工具**(和 CLI 命令)。 请参见 [插件](/tools/plugin) 了解安装 + 配置,以及 [技能](/tools/skills) 了解 如何将工具使用指导注入提示中。一些插件随工具一起提供自己的技能 (例如,语音通话插件)。 可选插件工具: - [Lobster](/tools/lobster):具有可恢复审批的类型化工作流运行时(需要网关主机上的 Lobster CLI)。 - [LLM 任务](/tools/llm-task):仅 JSON 的 LLM 步骤,用于结构化工作流输出(可选模式验证)。 ## 工具清单 ### `apply_patch` 在一個或多個文件中應用結構化補丁。用於多塊編輯。 實驗性:通過 `tools.exec.applyPatch.enabled` 啟用(僅限 OpenAI 模型)。 `tools.exec.applyPatch.workspaceOnly` 默認為 `true`(工作區內)。僅當您有意讓 `apply_patch` 在工作區目錄外寫入/刪除時才設為 `false`。 ### `exec` 在工作區中運行 shell 命令。 核心參數: - `command`(必需) - `yieldMs`(超時後自動後台運行,默認 10000) - `background`(立即後台運行) - `timeout`(秒;超過時殺死進程,默認 1800) - `elevated`(布爾值;如果啟用/允許提升模式則在主機上運行;僅當代理被沙盒化時才改變行為) - `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` 僅當代理被沙盒化時才改變行為(否則無操作)。 - `host=node` 可以針對 macOS 伴侶應用或無頭節點主機(`openclaw-cn node run`)。 - 網關/節點審批和允許列表:[執行審批](/tools/exec-approvals)。 ### `process` 管理後台執行會話。 核心操作: - `list`、`poll`、`log`、`write`、`kill`、`clear`、`remove` 注意事項: - `poll` 完成時返回新輸出和退出狀態。 - `log` 支持基於行的 `offset`/`limit`(省略 `offset` 以獲取最後 N 行)。 - `process` 按代理範圍劃分;其他代理的會話不可見。 ### `web_search` 使用 Brave Search API 搜索網絡。 核心參數: - `query`(必需) - `count`(1–10;默認來自 `tools.web.search.maxResults`) 注意事項: - 需要 Brave API 密鑰(推薦:`openclaw-cn configure --section web`,或設置 `BRAVE_API_KEY`)。 - 通過 `tools.web.search.enabled` 啟用。 - 響應被緩存(默認 15 分鐘)。 - 請參見 [網絡工具](/tools/web) 進行設置。 ### `web_fetch` 從 URL 獲取並提取可讀內容(HTML → markdown/text)。 核心參數: - `url`(必需) - `extractMode`(`markdown` | `text`) - `maxChars`(截斷長頁面) 注意事項: - 通過 `tools.web.fetch.enabled` 啟用。 - `maxChars` 受 `tools.web.fetch.maxCharsCap` 限制(默認 50000)。 - 響應被緩存(默認 15 分鐘)。 - 對於 JS 密集型網站,優先使用瀏覽器工具。 - 請參見 [網絡工具](/tools/web) 進行設置。 - 請參見 [Firecrawl](/tools/firecrawl) 了解可選的反機器人備用方案。 ### `browser` 控制專門的 OpenClaw 管理瀏覽器。 核心操作: - `status`、`start`、`stop`、`tabs`、`open`、`focus`、`close` - `snapshot`(aria/ai) - `screenshot`(返回圖像塊 + `MEDIA:\`) - `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`);對於罕見的 CSS 選擇器需求使用 `evaluate`。 - 默認情況下避免 `act` → `wait`;僅在特殊情況下使用(沒有可靠的 UI 狀態可等待)。 - `upload` 可以選擇性地傳遞 `ref` 以便在準備後自動點擊。 - `upload` 還支持 `inputRef`(aria 引用)或 `element`(CSS 選擇器)直接設置 ``。 ### `canvas` 驅動節點畫布(呈現、評估、快照、A2UI)。 核心操作: - `present`、`hide`、`navigate`、`eval` - `snapshot`(返回圖像塊 + `MEDIA:\`) - `a2ui_push`、`a2ui_reset` 注意事項: - 底層使用網關 `node.invoke`。 - 如果未提供 `node`,工具會選擇默認值(單個連接節點或本地 mac 節點)。 - A2UI 僅限 v0.8(無 `createSurface`);CLI 拒絕帶行錯誤的 v0.9 JSONL。 - 快速測試:`openclaw-cn nodes canvas a2ui push --node \ --text "來自 A2UI 的問候"`。 ### `nodes` 發現和定位配對節點;發送通知;捕獲相機/屏幕。 核心操作: - `status`、`describe` - `pending`、`approve`、`reject`(配對) - `notify`(macOS `system.notify`) - `run`(macOS `system.run`) - `camera_snap`、`camera_clip`、`screen_record` - `location_get` 注意事項: - 相機/屏幕命令要求節點應用處於前臺。 - 圖像返回圖像塊 + `MEDIA:\`。 - 視頻返回 `FILE:\`(mp4)。 - 位置返回 JSON 載荷(緯度/經度/精度/時間戳)。 - `run` 參數:`command` argv 數組;可選 `cwd`、`env`(`KEY=VAL`)、`commandTimeoutMs`、`invokeTimeoutMs`、`needsScreenRecording`。 示例(`run`): ```json { "action": "run", "node": "office-mac", "command": ["echo", "你好"], "env": ["FOO=bar"], "commandTimeoutMs": 12000, "invokeTimeoutMs": 45000, "needsScreenRecording": false } ``` ### `image` 使用配置的圖像模型分析圖像。 核心參數: - `image`(必需路徑或 URL) - `prompt`(可選;默認為 "描述圖像。") - `model`(可選覆蓋) - `maxBytesMb`(可選大小上限) 注意事項: - 僅當配置了 `agents.defaults.imageModel`(主要或備用)時可用,或者當可以從您的默認模型 + 配置的認證推斷出隱式圖像模型時可用(盡力配對)。 - 直接使用圖像模型(獨立於主要聊天模型)。 ### `message` 跨 Discord/Google Chat/Slack/Telegram/WhatsApp/Signal/iMessage/MS Teams 發送消息和頻道操作。 核心操作: - `send`(文本 + 可選媒體;MS Teams 還支持 `card` 用於自適應卡) - `poll`(WhatsApp/Discord/MS Teams 投票) - `react` / `reactions` / `read` / `edit` / `delete` - `pin` / `unpin` / `list-pins` - `permissions` - `thread-create` / `thread-list` / `thread-reply` - `search` - `sticker` - `member-info` / `role-info` - `emoji-list` / `emoji-upload` / `sticker-upload` - `role-add` / `role-remove` - `channel-info` / `channel-list` - `voice-status` - `event-list` / `event-create` - `timeout` / `kick` / `ban` 注意事項: - `send` 通過網關路由 WhatsApp;其他頻道直連。 - `poll` 對 WhatsApp 和 MS Teams 使用網關;Discord 投票直連。 - 當消息工具調用綁定到活動聊天會話時,發送被限制到該會話的目標以避免跨上下文洩漏。 ### `cron` 管理網關定時任務和喚醒。 核心操作: - `status`、`list` - `add`、`update`、`remove`、`run`、`runs` - `wake`(排隊系統事件 + 可選立即心跳) 注意事項: - `add` 期望完整的定時任務對象(與 `cron.add` RPC 相同模式)。 - `update` 使用 `{ jobId, patch }`(為了兼容性接受 `id`)。 ### `gateway` 重新啟動或應用更新到正在運行的網關進程(原地)。 核心操作: - `restart`(授權 + 發送 `SIGUSR1` 進行進程內重啟;`openclaw-cn gateway` 原地重啟) - `config.get` / `config.schema` - `config.apply`(驗證 + 寫入配置 + 重啟 + 喚醒) - `config.patch`(合併部分更新 + 重啟 + 喚醒) - `update.run`(運行更新 + 重啟 + 喚醒) 注意事項: - 使用 `delayMs`(默認為 2000)以避免中斷正在進行的回復。 - `restart` 默認禁用;通過 `commands.restart: true` 啟用。 ### `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"` 確認代理運行完成,而不是公告已交付。 - `sessions_spawn` 啟動子代理運行並向請求者聊天發布公告回復。 - `sessions_spawn` 是非阻塞的,立即返回 `status: "accepted"`。 - `sessions_send` 運行回復乒乓(回復 `REPLY_SKIP` 停止;通過 `session.agentToAgent.maxPingPongTurns` 最大回合數,0–5)。 - 乒乓之後,目標代理運行**公告步驟**;回復 `ANNOUNCE_SKIP` 以抑制公告。 ### `agents_list` 列出當前會話可能通過 `sessions_spawn` 定向的代理 ID。 注意事項: - 結果受限於每代理允許列表(`agents.list[].subagents.allowAgents`)。 - 當配置了 `["*"]` 時,工具包含所有配置的代理並標記 `allowAny: true`。 ## 參數(通用) 網關支持的工具(`canvas`、`nodes`、`cron`): - `gatewayUrl`(默認 `ws://127.0.0.1:18789`) - `gatewayToken`(如果啟用了認證) - `timeoutMs` 注意:當設置 `gatewayUrl` 時,顯式包含 `gatewayToken`。工具不會繼承配置 或環境憑據進行覆蓋,缺少顯式憑據是錯誤。 瀏覽器工具: - `profile`(可選;默認為 `browser.defaultProfile`) - `target`(`sandbox` | `host` | `node`) - `node`(可選;固定特定節點 ID/名稱) ## 推薦的代理流程 瀏覽器自動化: 1. `browser` → `status` / `start` 2. `snapshot`(ai 或 aria) 3. `act`(click/type/press) 4. 如需視覺確認則 `screenshot` 畫布渲染: 1. `canvas` → `present` 2. `a2ui_push`(可選) 3. `snapshot` 節點定向: 1. `nodes` → `status` 2. 對所選節點 `describe` 3. `notify` / `run` / `camera_snap` / `screen_record` ## 安全 - 避免直接 `system.run`;僅在明確用戶同意下使用 `nodes` → `run`。 - 尊重用戶對相機/屏幕捕獲的同意。 - 在調用媒體命令前使用 `status/describe` 確保權限。 ## 工具如何呈現給代理 工具通過兩個並行通道暴露: 1. **系統提示文本**:人類可讀的列表 + 指導。 2. **工具模式**:發送到模型 API 的結構化函數定義。 這意味著代理既能看到「存在哪些工具」也能看到「如何調用它們」。如果工具 不出現在系統提示或模式中,模型無法調用它。