--- summary: "OpenClaw tools and plugins overview: what the agent can do and how to extend it" read_when: - You want to understand what tools OpenClaw provides - You need to configure, allow, or deny tools - You are deciding between built-in tools, skills, and plugins title: "Tools and Plugins" --- # Tools and Plugins Everything the agent does beyond generating text happens through **tools**. Tools are how the agent reads files, runs commands, browses the web, sends messages, and interacts with devices. ## Tools, skills, and plugins OpenClaw has three layers that work together: A tool is a typed function the agent can invoke (e.g. `exec`, `browser`, `web_search`, `message`). OpenClaw ships a set of **built-in tools** and plugins can register additional ones. The agent sees tools as structured function definitions sent to the model API. A skill is a markdown file (`SKILL.md`) injected into the system prompt. Skills give the agent context, constraints, and step-by-step guidance for using tools effectively. Skills live in your workspace, in shared folders, or ship inside plugins. [Skills reference](/tools/skills) | [Creating skills](/tools/creating-skills) A plugin is a package that can register any combination of capabilities: channels, model providers, tools, skills, speech, image generation, and more. Some plugins are **core** (shipped with OpenClaw), others are **external** (published on npm by the community). [Install and configure plugins](/tools/plugin) | [Build your own](/plugins/building-plugins) ## Built-in tools These tools ship with OpenClaw and are available without installing any plugins: | Tool | What it does | Page | | ---------------------------- | -------------------------------------------------------- | --------------------------------- | | `exec` / `process` | Run shell commands, manage background processes | [Exec](/tools/exec) | | `browser` | Control a Chromium browser (navigate, click, screenshot) | [Browser](/tools/browser) | | `web_search` / `web_fetch` | Search the web, fetch page content | [Web](/tools/web) | | `read` / `write` / `edit` | File I/O in the workspace | | | `apply_patch` | Multi-hunk file patches | [Apply Patch](/tools/apply-patch) | | `message` | Send messages across all channels | [Agent Send](/tools/agent-send) | | `canvas` | Drive node Canvas (present, eval, snapshot) | | | `nodes` | Discover and target paired devices | | | `cron` / `gateway` | Manage scheduled jobs, restart gateway | | | `image` / `image_generate` | Analyze or generate images | | | `sessions_*` / `agents_list` | Session management, sub-agents | [Sub-agents](/tools/subagents) | ### Plugin-provided tools Plugins can register additional tools. Some examples: - [Lobster](/tools/lobster) — typed workflow runtime with resumable approvals - [LLM Task](/tools/llm-task) — JSON-only LLM step for structured output - [Diffs](/tools/diffs) — diff viewer and renderer - [OpenProse](/prose) — markdown-first workflow orchestration ## Tool configuration ### Allow and deny lists Control which tools the agent can call via `tools.allow` / `tools.deny` in config. Deny always wins over allow. ```json5 { tools: { allow: ["group:fs", "browser", "web_search"], deny: ["exec"], }, } ``` ### Tool profiles `tools.profile` sets a base allowlist before `allow`/`deny` is applied. Per-agent override: `agents.list[].tools.profile`. | Profile | What it includes | | ----------- | ------------------------------------------- | | `full` | All tools (default) | | `coding` | File I/O, runtime, sessions, memory, image | | `messaging` | Messaging, session list/history/send/status | | `minimal` | `session_status` only | ### Tool groups Use `group:*` shorthands in allow/deny lists: | Group | Tools | | ------------------ | ------------------------------------------------------------------------------ | | `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` | All built-in OpenClaw tools (excludes plugin tools) | ### Provider-specific restrictions Use `tools.byProvider` to restrict tools for specific providers without changing global defaults: ```json5 { tools: { profile: "coding", byProvider: { "google-antigravity": { profile: "minimal" }, }, }, } ```