2025-12-22 23:40:57 +00:00
---
2026-03-20 10:54:48 -07:00
summary: "OpenClaw tools and plugins overview: what the agent can do and how to extend it"
2025-12-22 23:40:57 +00:00
read_when:
2026-03-20 10:54:48 -07:00
- 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"
2025-12-22 23:40:57 +00:00
---
2026-03-20 10:54:48 -07:00
# Tools and Plugins
2026-03-20 11:00:53 -07:00
Everything the agent does beyond generating text happens through **tools ** .
2026-03-20 10:54:48 -07:00
Tools are how the agent reads files, runs commands, browses the web, sends
2026-03-20 11:00:53 -07:00
messages, and interacts with devices.
## Tools, skills, and plugins
OpenClaw has three layers that work together:
<Steps>
<Step title="Tools are what the agent calls">
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.
</Step>
<Step title="Skills teach the agent when and how">
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 )
</Step>
<Step title="Plugins package everything together">
A plugin is a package that can register any combination of capabilities:
2026-04-04 20:03:08 +01:00
channels, model providers, tools, skills, speech, realtime transcription,
realtime voice, media understanding, image generation, video generation,
web fetch, web search, and more. Some plugins are **core ** (shipped with
OpenClaw), others are **external ** (published on npm by the community).
2026-03-20 11:00:53 -07:00
[Install and configure plugins ](/tools/plugin ) | [Build your own ](/plugins/building-plugins )
</Step>
</Steps>
## Built-in tools
These tools ship with OpenClaw and are available without installing any plugins:
2026-04-05 18:42:08 +01:00
| Tool | What it does | Page |
| ------------------------------------------ | --------------------------------------------------------------------- | ------------------------------------------- |
| `exec` / `process` | Run shell commands, manage background processes | [Exec ](/tools/exec ) |
| `code_execution` | Run sandboxed remote Python analysis | [Code Execution ](/tools/code-execution ) |
| `browser` | Control a Chromium browser (navigate, click, screenshot) | [Browser ](/tools/browser ) |
| `web_search` / `x_search` / `web_fetch` | Search the web, search X posts, 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; inspect, patch, restart, or update the gateway | |
| `image` / `image_generate` | Analyze or generate images | [Image Generation ](/tools/image-generation ) |
2026-04-06 01:46:25 +01:00
| `music_generate` | Generate music tracks | [Music Generation ](/tools/music-generation ) |
2026-04-05 18:42:08 +01:00
| `video_generate` | Generate videos | [Video Generation ](/tools/video-generation ) |
| `tts` | One-shot text-to-speech conversion | [TTS ](/tools/tts ) |
| `sessions_*` / `subagents` / `agents_list` | Session management, status, and sub-agent orchestration | [Sub-agents ](/tools/subagents ) |
| `session_status` | Lightweight `/status` -style readback and session model override | [Session Tools ](/concepts/session-tool ) |
2026-03-20 11:00:53 -07:00
2026-03-22 18:10:07 -07:00
For image work, use `image` for analysis and `image_generate` for generation or editing. If you target `openai/*` , `google/*` , `fal/*` , or another non-default image provider, configure that provider's auth/API key first.
2026-04-06 01:46:25 +01:00
For music work, use `music_generate` . If you target `google/*` , `minimax/*` , or another non-default music provider, configure that provider's auth/API key first.
2026-04-05 18:42:08 +01:00
For video work, use `video_generate` . If you target `qwen/*` or another non-default video provider, configure that provider's auth/API key first.
2026-04-06 01:42:46 +01:00
For workflow-driven audio generation, use `music_generate` when a plugin such as
ComfyUI registers it. This is separate from `tts` , which is text-to-speech.
2026-04-04 11:49:08 +01:00
`session_status` is the lightweight status/readback tool in the sessions group.
It answers `/status` -style questions about the current session and can
optionally set a per-session model override; `model=default` clears that
2026-04-04 12:42:42 +01:00
override. Like `/status` , it can backfill sparse token/cache counters and the
active runtime model label from the latest transcript usage entry.
2026-04-04 11:49:08 +01:00
2026-04-04 20:31:34 +01:00
`gateway` is the owner-only runtime tool for gateway operations:
- `config.schema.lookup` for one path-scoped config subtree before edits
- `config.get` for the current config snapshot + hash
- `config.patch` for partial config updates with restart
- `config.apply` only for full-config replacement
- `update.run` for explicit self-update + restart
For partial changes, prefer `config.schema.lookup` then `config.patch` . Use
`config.apply` only when you intentionally replace the entire config.
2026-04-04 21:43:09 +01:00
The tool also refuses to change `tools.exec.ask` or `tools.exec.security` ;
legacy `tools.bash.*` aliases normalize to the same protected exec paths.
2026-04-04 20:31:34 +01:00
2026-03-20 11:00:53 -07:00
### 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
2026-04-06 02:01:03 +01:00
- [Music Generation ](/tools/music-generation ) — shared `music_generate` tool with workflow-backed providers
2026-03-20 11:00:53 -07:00
- [Diffs ](/tools/diffs ) — diff viewer and renderer
- [OpenProse ](/prose ) — markdown-first workflow orchestration
2026-03-20 10:54:48 -07:00
## 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.
2026-01-31 21:13:13 +09:00
2026-01-13 06:28:15 +00:00
``` json5
{
tools: {
2026-03-20 10:54:48 -07:00
allow: ["group:fs", "browser", "web_search"],
deny: ["exec"],
2026-01-31 21:13:13 +09:00
},
2026-01-13 06:28:15 +00:00
}
```
2026-03-20 10:54:48 -07:00
### Tool profiles
2026-01-31 21:13:13 +09:00
2026-03-20 10:54:48 -07:00
`tools.profile` sets a base allowlist before `allow` /`deny` is applied.
Per-agent override: `agents.list[].tools.profile` .
2026-01-13 06:28:15 +00:00
2026-04-06 01:46:25 +01:00
| Profile | What it includes |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `full` | No restriction (same as unset) |
| `coding` | `group:fs` , `group:runtime` , `group:web` , `group:sessions` , `group:memory` , `cron` , `image` , `image_generate` , `music_generate` , `video_generate` |
| `messaging` | `group:messaging` , `sessions_list` , `sessions_history` , `sessions_send` , `session_status` |
| `minimal` | `session_status` only |
2026-01-31 21:13:13 +09:00
2026-03-20 10:54:48 -07:00
### Tool groups
2026-01-13 06:28:15 +00:00
2026-03-20 10:54:48 -07:00
Use `group:*` shorthands in allow/deny lists:
2026-01-13 09:59:36 +00:00
2026-03-23 10:38:31 -07:00
| Group | Tools |
| ------------------ | --------------------------------------------------------------------------------------------------------- |
2026-04-04 21:28:05 +01:00
| `group:runtime` | exec, process, code_execution (`bash` is accepted as an alias for `exec` ) |
2026-03-23 10:38:31 -07:00
| `group:fs` | read, write, edit, apply_patch |
| `group:sessions` | sessions_list, sessions_history, sessions_send, sessions_spawn, sessions_yield, subagents, session_status |
| `group:memory` | memory_search, memory_get |
2026-03-27 12:41:02 -04:00
| `group:web` | web_search, x_search, web_fetch |
2026-03-23 10:38:31 -07:00
| `group:ui` | browser, canvas |
| `group:automation` | cron, gateway |
| `group:messaging` | message |
| `group:nodes` | nodes |
2026-04-04 20:09:24 +01:00
| `group:agents` | agents_list |
2026-04-06 01:46:25 +01:00
| `group:media` | image, image_generate, music_generate, video_generate, tts |
2026-03-23 10:38:31 -07:00
| `group:openclaw` | All built-in OpenClaw tools (excludes plugin tools) |
2026-01-13 09:59:36 +00:00
2026-04-04 19:26:37 +01:00
`sessions_history` returns a bounded, safety-filtered recall view. It strips
2026-04-04 19:33:13 +01:00
thinking tags, `<relevant-memories>` scaffolding, plain-text tool-call XML
2026-04-04 22:21:26 +01:00
payloads (including `<tool_call>...</tool_call>` ,
`<function_call>...</function_call>` , `<tool_calls>...</tool_calls>` ,
`<function_calls>...</function_calls>` , and truncated tool-call blocks),
downgraded tool-call scaffolding, leaked ASCII/full-width model control
tokens, and malformed MiniMax tool-call XML from assistant text, then applies
2026-04-04 19:26:37 +01:00
redaction/truncation and possible oversized-row placeholders instead of acting
as a raw transcript dump.
2026-04-04 19:20:34 +01:00
2026-03-20 10:54:48 -07:00
### Provider-specific restrictions
2026-01-13 09:59:36 +00:00
2026-03-20 10:54:48 -07:00
Use `tools.byProvider` to restrict tools for specific providers without
changing global defaults:
2026-01-31 21:13:13 +09:00
2026-01-13 09:59:36 +00:00
``` json5
{
tools: {
profile: "coding",
byProvider: {
2026-01-31 21:13:13 +09:00
"google-antigravity": { profile: "minimal" },
},
},
2026-01-13 09:59:36 +00:00
}
```