Files
Selig 4c966a3ad2 Initial commit: OpenClaw Skill Collection
6 custom skills (assign-task, dispatch-webhook, daily-briefing,
task-capture, qmd-brain, tts-voice) with technical documentation.
Compatible with Claude Code, OpenClaw, Codex CLI, and OpenCode.
2026-03-13 10:58:30 +08:00

162 lines
26 KiB
JSON
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"title": "Tools (OpenClaw)",
"content": "OpenClaw exposes **first-class agent tools** for browser, canvas, nodes, and cron.\nThese replace the old `openclaw-*` skills: the tools are typed, no shelling,\nand the agent should rely on them directly.\n\nYou can globally allow/deny tools via `tools.allow` / `tools.deny` in `openclaw.json`\n(deny wins). This prevents disallowed tools from being sent to model providers.\n\n* Matching is case-insensitive.\n* `*` wildcards are supported (`\"*\"` means all tools).\n* If `tools.allow` only references unknown or unloaded plugin tool names, OpenClaw logs a warning and ignores the allowlist so core tools stay available.\n\n## Tool profiles (base allowlist)\n\n`tools.profile` sets a **base tool allowlist** before `tools.allow`/`tools.deny`.\nPer-agent override: `agents.list[].tools.profile`.\n\n* `minimal`: `session_status` only\n* `coding`: `group:fs`, `group:runtime`, `group:sessions`, `group:memory`, `image`\n* `messaging`: `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status`\n* `full`: no restriction (same as unset)\n\nExample (messaging-only by default, allow Slack + Discord tools too):\n\nExample (coding profile, but deny exec/process everywhere):\n\nExample (global coding profile, messaging-only support agent):\n\n## Provider-specific tool policy\n\nUse `tools.byProvider` to **further restrict** tools for specific providers\n(or a single `provider/model`) without changing your global defaults.\nPer-agent override: `agents.list[].tools.byProvider`.\n\nThis is applied **after** the base tool profile and **before** allow/deny lists,\nso it can only narrow the tool set.\nProvider keys accept either `provider` (e.g. `google-antigravity`) or\n`provider/model` (e.g. `openai/gpt-5.2`).\n\nExample (keep global coding profile, but minimal tools for Google Antigravity):\n\nExample (provider/model-specific allowlist for a flaky endpoint):\n\nExample (agent-specific override for a single provider):\n\n## Tool groups (shorthands)\n\nTool policies (global, agent, sandbox) support `group:*` entries that expand to multiple tools.\nUse these in `tools.allow` / `tools.deny`.\n\n* `group:runtime`: `exec`, `bash`, `process`\n* `group:fs`: `read`, `write`, `edit`, `apply_patch`\n* `group:sessions`: `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`, `session_status`\n* `group:memory`: `memory_search`, `memory_get`\n* `group:web`: `web_search`, `web_fetch`\n* `group:ui`: `browser`, `canvas`\n* `group:automation`: `cron`, `gateway`\n* `group:messaging`: `message`\n* `group:nodes`: `nodes`\n* `group:openclaw`: all built-in OpenClaw tools (excludes provider plugins)\n\nExample (allow only file tools + browser):\n\nPlugins can register **additional tools** (and CLI commands) beyond the core set.\nSee [Plugins](/plugin) for install + config, and [Skills](/tools/skills) for how\ntool usage guidance is injected into prompts. Some plugins ship their own skills\nalongside tools (for example, the voice-call plugin).\n\nOptional plugin tools:\n\n* [Lobster](/tools/lobster): typed workflow runtime with resumable approvals (requires the Lobster CLI on the gateway host).\n* [LLM Task](/tools/llm-task): JSON-only LLM step for structured workflow output (optional schema validation).\n\nApply structured patches across one or more files. Use for multi-hunk edits.\nExperimental: enable via `tools.exec.applyPatch.enabled` (OpenAI models only).\n\nRun shell commands in the workspace.\n\n* `command` (required)\n* `yieldMs` (auto-background after timeout, default 10000)\n* `background` (immediate background)\n* `timeout` (seconds; kills the process if exceeded, default 1800)\n* `elevated` (bool; run on host if elevated mode is enabled/allowed; only changes behavior when the agent is sandboxed)\n* `host` (`sandbox | gateway | node`)\n* `security` (`deny | allowlist | full`)\n* `ask` (`off | on-miss | always`)\n* `node` (node id/name for `host=node`)\n* Need a real TTY? Set `pty: true`.\n\n* Returns `status: \"running\"` with a `sessionId` when backgrounded.\n* Use `process` to poll/log/write/kill/clear background sessions.\n* If `process` is disallowed, `exec` runs synchronously and ignores `yieldMs`/`background`.\n* `elevated` is gated by `tools.elevated` plus any `agents.list[].tools.elevated` override (both must allow) and is an alias for `host=gateway` + `security=full`.\n* `elevated` only changes behavior when the agent is sandboxed (otherwise its a no-op).\n* `host=node` can target a macOS companion app or a headless node host (`openclaw node run`).\n* gateway/node approvals and allowlists: [Exec approvals](/tools/exec-approvals).\n\nManage background exec sessions.\n\n* `list`, `poll`, `log`, `write`, `kill`, `clear`, `remove`\n\n* `poll` returns new output and exit status when complete.\n* `log` supports line-based `offset`/`limit` (omit `offset` to grab the last N lines).\n* `process` is scoped per agent; sessions from other agents are not visible.\n\nSearch the web using Brave Search API.\n\n* `query` (required)\n* `count` (110; default from `tools.web.search.maxResults`)\n\n* Requires a Brave API key (recommended: `openclaw configure --section web`, or set `BRAVE_API_KEY`).\n* Enable via `tools.web.search.enabled`.\n* Responses are cached (default 15 min).\n* See [Web tools](/tools/web) for setup.\n\nFetch and extract readable content from a URL (HTML → markdown/text).\n\n* `url` (required)\n* `extractMode` (`markdown` | `text`)\n* `maxChars` (truncate long pages)\n\n* Enable via `tools.web.fetch.enabled`.\n* `maxChars` is clamped by `tools.web.fetch.maxCharsCap` (default 50000).\n* Responses are cached (default 15 min).\n* For JS-heavy sites, prefer the browser tool.\n* See [Web tools](/tools/web) for setup.\n* See [Firecrawl](/tools/firecrawl) for the optional anti-bot fallback.\n\nControl the dedicated OpenClaw-managed browser.\n\n* `status`, `start`, `stop`, `tabs`, `open`, `focus`, `close`\n* `snapshot` (aria/ai)\n* `screenshot` (returns image block + `MEDIA:<path>`)\n* `act` (UI actions: click/type/press/hover/drag/select/fill/resize/wait/evaluate)\n* `navigate`, `console`, `pdf`, `upload`, `dialog`\n\n* `profiles` — list all browser profiles with status\n* `create-profile` — create new profile with auto-allocated port (or `cdpUrl`)\n* `delete-profile` — stop browser, delete user data, remove from config (local only)\n* `reset-profile` — kill orphan process on profile's port (local only)\n\n* `profile` (optional; defaults to `browser.defaultProfile`)\n* `target` (`sandbox` | `host` | `node`)\n* `node` (optional; picks a specific node id/name)\n Notes:\n* Requires `browser.enabled=true` (default is `true`; set `false` to disable).\n* All actions accept optional `profile` parameter for multi-instance support.\n* When `profile` is omitted, uses `browser.defaultProfile` (defaults to \"chrome\").\n* Profile names: lowercase alphanumeric + hyphens only (max 64 chars).\n* Port range: 18800-18899 (\\~100 profiles max).\n* Remote profiles are attach-only (no start/stop/reset).\n* If a browser-capable node is connected, the tool may auto-route to it (unless you pin `target`).\n* `snapshot` defaults to `ai` when Playwright is installed; use `aria` for the accessibility tree.\n* `snapshot` also supports role-snapshot options (`interactive`, `compact`, `depth`, `selector`) which return refs like `e12`.\n* `act` requires `ref` from `snapshot` (numeric `12` from AI snapshots, or `e12` from role snapshots); use `evaluate` for rare CSS selector needs.\n* Avoid `act` → `wait` by default; use it only in exceptional cases (no reliable UI state to wait on).\n* `upload` can optionally pass a `ref` to auto-click after arming.\n* `upload` also supports `inputRef` (aria ref) or `element` (CSS selector) to set `<input type=\"file\">` directly.\n\nDrive the node Canvas (present, eval, snapshot, A2UI).\n\n* `present`, `hide`, `navigate`, `eval`\n* `snapshot` (returns image block + `MEDIA:<path>`)\n* `a2ui_push`, `a2ui_reset`\n\n* Uses gateway `node.invoke` under the hood.\n* If no `node` is provided, the tool picks a default (single connected node or local mac node).\n* A2UI is v0.8 only (no `createSurface`); the CLI rejects v0.9 JSONL with line errors.\n* Quick smoke: `openclaw nodes canvas a2ui push --node <id> --text \"Hello from A2UI\"`.\n\nDiscover and target paired nodes; send notifications; capture camera/screen.\n\n* `status`, `describe`\n* `pending`, `approve`, `reject` (pairing)\n* `notify` (macOS `system.notify`)\n* `run` (macOS `system.run`)\n* `camera_snap`, `camera_clip`, `screen_record`\n* `location_get`\n\n* Camera/screen commands require the node app to be foregrounded.\n* Images return image blocks + `MEDIA:<path>`.\n* Videos return `FILE:<path>` (mp4).\n* Location returns a JSON payload (lat/lon/accuracy/timestamp).\n* `run` params: `command` argv array; optional `cwd`, `env` (`KEY=VAL`), `commandTimeoutMs`, `invokeTimeoutMs`, `needsScreenRecording`.\n\nAnalyze an image with the configured image model.\n\n* `image` (required path or URL)\n* `prompt` (optional; defaults to \"Describe the image.\")\n* `model` (optional override)\n* `maxBytesMb` (optional size cap)\n\n* Only available when `agents.defaults.imageModel` is configured (primary or fallbacks), or when an implicit image model can be inferred from your default model + configured auth (best-effort pairing).\n* Uses the image model directly (independent of the main chat model).\n\nSend messages and channel actions across Discord/Google Chat/Slack/Telegram/WhatsApp/Signal/iMessage/MS Teams.\n\n* `send` (text + optional media; MS Teams also supports `card` for Adaptive Cards)\n* `poll` (WhatsApp/Discord/MS Teams polls)\n* `react` / `reactions` / `read` / `edit` / `delete`\n* `pin` / `unpin` / `list-pins`\n* `permissions`\n* `thread-create` / `thread-list` / `thread-reply`\n* `search`\n* `sticker`\n* `member-info` / `role-info`\n* `emoji-list` / `emoji-upload` / `sticker-upload`\n* `role-add` / `role-remove`\n* `channel-info` / `channel-list`\n* `voice-status`\n* `event-list` / `event-create`\n* `timeout` / `kick` / `ban`\n\n* `send` routes WhatsApp via the Gateway; other channels go direct.\n* `poll` uses the Gateway for WhatsApp and MS Teams; Discord polls go direct.\n* When a message tool call is bound to an active chat session, sends are constrained to that sessions target to avoid cross-context leaks.\n\nManage Gateway cron jobs and wakeups.\n\n* `status`, `list`\n* `add`, `update`, `remove`, `run`, `runs`\n* `wake` (enqueue system event + optional immediate heartbeat)\n\n* `add` expects a full cron job object (same schema as `cron.add` RPC).\n* `update` uses `{ id, patch }`.\n\nRestart or apply updates to the running Gateway process (in-place).\n\n* `restart` (authorizes + sends `SIGUSR1` for in-process restart; `openclaw gateway` restart in-place)\n* `config.get` / `config.schema`\n* `config.apply` (validate + write config + restart + wake)\n* `config.patch` (merge partial update + restart + wake)\n* `update.run` (run update + restart + wake)\n\n* Use `delayMs` (defaults to 2000) to avoid interrupting an in-flight reply.\n* `restart` is disabled by default; enable with `commands.restart: true`.\n\n### `sessions_list` / `sessions_history` / `sessions_send` / `sessions_spawn` / `session_status`\n\nList sessions, inspect transcript history, or send to another session.\n\n* `sessions_list`: `kinds?`, `limit?`, `activeMinutes?`, `messageLimit?` (0 = none)\n* `sessions_history`: `sessionKey` (or `sessionId`), `limit?`, `includeTools?`\n* `sessions_send`: `sessionKey` (or `sessionId`), `message`, `timeoutSeconds?` (0 = fire-and-forget)\n* `sessions_spawn`: `task`, `label?`, `agentId?`, `model?`, `runTimeoutSeconds?`, `cleanup?`\n* `session_status`: `sessionKey?` (default current; accepts `sessionId`), `model?` (`default` clears override)\n\n* `main` is the canonical direct-chat key; global/unknown are hidden.\n* `messageLimit > 0` fetches last N messages per session (tool messages filtered).\n* `sessions_send` waits for final completion when `timeoutSeconds > 0`.\n* Delivery/announce happens after completion and is best-effort; `status: \"ok\"` confirms the agent run finished, not that the announce was delivered.\n* `sessions_spawn` starts a sub-agent run and posts an announce reply back to the requester chat.\n* `sessions_spawn` is non-blocking and returns `status: \"accepted\"` immediately.\n* `sessions_send` runs a replyback pingpong (reply `REPLY_SKIP` to stop; max turns via `session.agentToAgent.maxPingPongTurns`, 05).\n* After the pingpong, the target agent runs an **announce step**; reply `ANNOUNCE_SKIP` to suppress the announcement.\n\nList agent ids that the current session may target with `sessions_spawn`.\n\n* Result is restricted to per-agent allowlists (`agents.list[].subagents.allowAgents`).\n* When `[\"*\"]` is configured, the tool includes all configured agents and marks `allowAny: true`.\n\n## Parameters (common)\n\nGateway-backed tools (`canvas`, `nodes`, `cron`):\n\n* `gatewayUrl` (default `ws://127.0.0.1:18789`)\n* `gatewayToken` (if auth enabled)\n* `timeoutMs`\n\nNote: when `gatewayUrl` is set, include `gatewayToken` explicitly. Tools do not inherit config\nor environment credentials for overrides, and missing explicit credentials is an error.\n\n* `profile` (optional; defaults to `browser.defaultProfile`)\n* `target` (`sandbox` | `host` | `node`)\n* `node` (optional; pin a specific node id/name)\n\n## Recommended agent flows\n\n1. `browser` → `status` / `start`\n2. `snapshot` (ai or aria)\n3. `act` (click/type/press)\n4. `screenshot` if you need visual confirmation\n\n1. `canvas` → `present`\n2. `a2ui_push` (optional)\n3. `snapshot`\n\n1. `nodes` → `status`\n2. `describe` on the chosen node\n3. `notify` / `run` / `camera_snap` / `screen_record`\n\n* Avoid direct `system.run`; use `nodes` → `run` only with explicit user consent.\n* Respect user consent for camera/screen capture.\n* Use `status/describe` to ensure permissions before invoking media commands.\n\n## How tools are presented to the agent\n\nTools are exposed in two parallel channels:\n\n1. **System prompt text**: a human-readable list + guidance.\n2. **Tool schema**: the structured function definitions sent to the model API.\n\nThat means the agent sees both “what tools exist” and “how to call them.” If a tool\ndoesnt appear in the system prompt or the schema, the model cannot call it.",
"code_samples": [
{
"code": "Notes:\n\n* Matching is case-insensitive.\n* `*` wildcards are supported (`\"*\"` means all tools).\n* If `tools.allow` only references unknown or unloaded plugin tool names, OpenClaw logs a warning and ignores the allowlist so core tools stay available.\n\n## Tool profiles (base allowlist)\n\n`tools.profile` sets a **base tool allowlist** before `tools.allow`/`tools.deny`.\nPer-agent override: `agents.list[].tools.profile`.\n\nProfiles:\n\n* `minimal`: `session_status` only\n* `coding`: `group:fs`, `group:runtime`, `group:sessions`, `group:memory`, `image`\n* `messaging`: `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status`\n* `full`: no restriction (same as unset)\n\nExample (messaging-only by default, allow Slack + Discord tools too):",
"language": "unknown"
},
{
"code": "Example (coding profile, but deny exec/process everywhere):",
"language": "unknown"
},
{
"code": "Example (global coding profile, messaging-only support agent):",
"language": "unknown"
},
{
"code": "## Provider-specific tool policy\n\nUse `tools.byProvider` to **further restrict** tools for specific providers\n(or a single `provider/model`) without changing your global defaults.\nPer-agent override: `agents.list[].tools.byProvider`.\n\nThis is applied **after** the base tool profile and **before** allow/deny lists,\nso it can only narrow the tool set.\nProvider keys accept either `provider` (e.g. `google-antigravity`) or\n`provider/model` (e.g. `openai/gpt-5.2`).\n\nExample (keep global coding profile, but minimal tools for Google Antigravity):",
"language": "unknown"
},
{
"code": "Example (provider/model-specific allowlist for a flaky endpoint):",
"language": "unknown"
},
{
"code": "Example (agent-specific override for a single provider):",
"language": "unknown"
},
{
"code": "## Tool groups (shorthands)\n\nTool policies (global, agent, sandbox) support `group:*` entries that expand to multiple tools.\nUse these in `tools.allow` / `tools.deny`.\n\nAvailable groups:\n\n* `group:runtime`: `exec`, `bash`, `process`\n* `group:fs`: `read`, `write`, `edit`, `apply_patch`\n* `group:sessions`: `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`, `session_status`\n* `group:memory`: `memory_search`, `memory_get`\n* `group:web`: `web_search`, `web_fetch`\n* `group:ui`: `browser`, `canvas`\n* `group:automation`: `cron`, `gateway`\n* `group:messaging`: `message`\n* `group:nodes`: `nodes`\n* `group:openclaw`: all built-in OpenClaw tools (excludes provider plugins)\n\nExample (allow only file tools + browser):",
"language": "unknown"
},
{
"code": "## Plugins + tools\n\nPlugins can register **additional tools** (and CLI commands) beyond the core set.\nSee [Plugins](/plugin) for install + config, and [Skills](/tools/skills) for how\ntool usage guidance is injected into prompts. Some plugins ship their own skills\nalongside tools (for example, the voice-call plugin).\n\nOptional plugin tools:\n\n* [Lobster](/tools/lobster): typed workflow runtime with resumable approvals (requires the Lobster CLI on the gateway host).\n* [LLM Task](/tools/llm-task): JSON-only LLM step for structured workflow output (optional schema validation).\n\n## Tool inventory\n\n### `apply_patch`\n\nApply structured patches across one or more files. Use for multi-hunk edits.\nExperimental: enable via `tools.exec.applyPatch.enabled` (OpenAI models only).\n\n### `exec`\n\nRun shell commands in the workspace.\n\nCore parameters:\n\n* `command` (required)\n* `yieldMs` (auto-background after timeout, default 10000)\n* `background` (immediate background)\n* `timeout` (seconds; kills the process if exceeded, default 1800)\n* `elevated` (bool; run on host if elevated mode is enabled/allowed; only changes behavior when the agent is sandboxed)\n* `host` (`sandbox | gateway | node`)\n* `security` (`deny | allowlist | full`)\n* `ask` (`off | on-miss | always`)\n* `node` (node id/name for `host=node`)\n* Need a real TTY? Set `pty: true`.\n\nNotes:\n\n* Returns `status: \"running\"` with a `sessionId` when backgrounded.\n* Use `process` to poll/log/write/kill/clear background sessions.\n* If `process` is disallowed, `exec` runs synchronously and ignores `yieldMs`/`background`.\n* `elevated` is gated by `tools.elevated` plus any `agents.list[].tools.elevated` override (both must allow) and is an alias for `host=gateway` + `security=full`.\n* `elevated` only changes behavior when the agent is sandboxed (otherwise its a no-op).\n* `host=node` can target a macOS companion app or a headless node host (`openclaw node run`).\n* gateway/node approvals and allowlists: [Exec approvals](/tools/exec-approvals).\n\n### `process`\n\nManage background exec sessions.\n\nCore actions:\n\n* `list`, `poll`, `log`, `write`, `kill`, `clear`, `remove`\n\nNotes:\n\n* `poll` returns new output and exit status when complete.\n* `log` supports line-based `offset`/`limit` (omit `offset` to grab the last N lines).\n* `process` is scoped per agent; sessions from other agents are not visible.\n\n### `web_search`\n\nSearch the web using Brave Search API.\n\nCore parameters:\n\n* `query` (required)\n* `count` (110; default from `tools.web.search.maxResults`)\n\nNotes:\n\n* Requires a Brave API key (recommended: `openclaw configure --section web`, or set `BRAVE_API_KEY`).\n* Enable via `tools.web.search.enabled`.\n* Responses are cached (default 15 min).\n* See [Web tools](/tools/web) for setup.\n\n### `web_fetch`\n\nFetch and extract readable content from a URL (HTML → markdown/text).\n\nCore parameters:\n\n* `url` (required)\n* `extractMode` (`markdown` | `text`)\n* `maxChars` (truncate long pages)\n\nNotes:\n\n* Enable via `tools.web.fetch.enabled`.\n* `maxChars` is clamped by `tools.web.fetch.maxCharsCap` (default 50000).\n* Responses are cached (default 15 min).\n* For JS-heavy sites, prefer the browser tool.\n* See [Web tools](/tools/web) for setup.\n* See [Firecrawl](/tools/firecrawl) for the optional anti-bot fallback.\n\n### `browser`\n\nControl the dedicated OpenClaw-managed browser.\n\nCore actions:\n\n* `status`, `start`, `stop`, `tabs`, `open`, `focus`, `close`\n* `snapshot` (aria/ai)\n* `screenshot` (returns image block + `MEDIA:<path>`)\n* `act` (UI actions: click/type/press/hover/drag/select/fill/resize/wait/evaluate)\n* `navigate`, `console`, `pdf`, `upload`, `dialog`\n\nProfile management:\n\n* `profiles` — list all browser profiles with status\n* `create-profile` — create new profile with auto-allocated port (or `cdpUrl`)\n* `delete-profile` — stop browser, delete user data, remove from config (local only)\n* `reset-profile` — kill orphan process on profile's port (local only)\n\nCommon parameters:\n\n* `profile` (optional; defaults to `browser.defaultProfile`)\n* `target` (`sandbox` | `host` | `node`)\n* `node` (optional; picks a specific node id/name)\n Notes:\n* Requires `browser.enabled=true` (default is `true`; set `false` to disable).\n* All actions accept optional `profile` parameter for multi-instance support.\n* When `profile` is omitted, uses `browser.defaultProfile` (defaults to \"chrome\").\n* Profile names: lowercase alphanumeric + hyphens only (max 64 chars).\n* Port range: 18800-18899 (\\~100 profiles max).\n* Remote profiles are attach-only (no start/stop/reset).\n* If a browser-capable node is connected, the tool may auto-route to it (unless you pin `target`).\n* `snapshot` defaults to `ai` when Playwright is installed; use `aria` for the accessibility tree.\n* `snapshot` also supports role-snapshot options (`interactive`, `compact`, `depth`, `selector`) which return refs like `e12`.\n* `act` requires `ref` from `snapshot` (numeric `12` from AI snapshots, or `e12` from role snapshots); use `evaluate` for rare CSS selector needs.\n* Avoid `act` → `wait` by default; use it only in exceptional cases (no reliable UI state to wait on).\n* `upload` can optionally pass a `ref` to auto-click after arming.\n* `upload` also supports `inputRef` (aria ref) or `element` (CSS selector) to set `<input type=\"file\">` directly.\n\n### `canvas`\n\nDrive the node Canvas (present, eval, snapshot, A2UI).\n\nCore actions:\n\n* `present`, `hide`, `navigate`, `eval`\n* `snapshot` (returns image block + `MEDIA:<path>`)\n* `a2ui_push`, `a2ui_reset`\n\nNotes:\n\n* Uses gateway `node.invoke` under the hood.\n* If no `node` is provided, the tool picks a default (single connected node or local mac node).\n* A2UI is v0.8 only (no `createSurface`); the CLI rejects v0.9 JSONL with line errors.\n* Quick smoke: `openclaw nodes canvas a2ui push --node <id> --text \"Hello from A2UI\"`.\n\n### `nodes`\n\nDiscover and target paired nodes; send notifications; capture camera/screen.\n\nCore actions:\n\n* `status`, `describe`\n* `pending`, `approve`, `reject` (pairing)\n* `notify` (macOS `system.notify`)\n* `run` (macOS `system.run`)\n* `camera_snap`, `camera_clip`, `screen_record`\n* `location_get`\n\nNotes:\n\n* Camera/screen commands require the node app to be foregrounded.\n* Images return image blocks + `MEDIA:<path>`.\n* Videos return `FILE:<path>` (mp4).\n* Location returns a JSON payload (lat/lon/accuracy/timestamp).\n* `run` params: `command` argv array; optional `cwd`, `env` (`KEY=VAL`), `commandTimeoutMs`, `invokeTimeoutMs`, `needsScreenRecording`.\n\nExample (`run`):",
"language": "unknown"
}
],
"headings": [
{
"level": "h2",
"text": "Disabling tools",
"id": "disabling-tools"
},
{
"level": "h2",
"text": "Tool profiles (base allowlist)",
"id": "tool-profiles-(base-allowlist)"
},
{
"level": "h2",
"text": "Provider-specific tool policy",
"id": "provider-specific-tool-policy"
},
{
"level": "h2",
"text": "Tool groups (shorthands)",
"id": "tool-groups-(shorthands)"
},
{
"level": "h2",
"text": "Plugins + tools",
"id": "plugins-+-tools"
},
{
"level": "h2",
"text": "Tool inventory",
"id": "tool-inventory"
},
{
"level": "h3",
"text": "`apply_patch`",
"id": "`apply_patch`"
},
{
"level": "h3",
"text": "`exec`",
"id": "`exec`"
},
{
"level": "h3",
"text": "`process`",
"id": "`process`"
},
{
"level": "h3",
"text": "`web_search`",
"id": "`web_search`"
},
{
"level": "h3",
"text": "`web_fetch`",
"id": "`web_fetch`"
},
{
"level": "h3",
"text": "`browser`",
"id": "`browser`"
},
{
"level": "h3",
"text": "`canvas`",
"id": "`canvas`"
},
{
"level": "h3",
"text": "`nodes`",
"id": "`nodes`"
},
{
"level": "h3",
"text": "`image`",
"id": "`image`"
},
{
"level": "h3",
"text": "`message`",
"id": "`message`"
},
{
"level": "h3",
"text": "`cron`",
"id": "`cron`"
},
{
"level": "h3",
"text": "`gateway`",
"id": "`gateway`"
},
{
"level": "h3",
"text": "`sessions_list` / `sessions_history` / `sessions_send` / `sessions_spawn` / `session_status`",
"id": "`sessions_list`-/-`sessions_history`-/-`sessions_send`-/-`sessions_spawn`-/-`session_status`"
},
{
"level": "h3",
"text": "`agents_list`",
"id": "`agents_list`"
},
{
"level": "h2",
"text": "Parameters (common)",
"id": "parameters-(common)"
},
{
"level": "h2",
"text": "Recommended agent flows",
"id": "recommended-agent-flows"
},
{
"level": "h2",
"text": "Safety",
"id": "safety"
},
{
"level": "h2",
"text": "How tools are presented to the agent",
"id": "how-tools-are-presented-to-the-agent"
}
],
"url": "llms-txt#tools-(openclaw)",
"links": []
}