Tools (Clawdbot)
Clawdbot exposes first-class agent tools for browser, canvas, nodes, and cron. These replace the oldclawdbot-* skills: the tools are typed, no shelling,
and the agent should rely on them directly.
Disabling tools
You can globally allow/deny tools viatools.allow / tools.deny in clawdbot.json
(deny wins). This prevents disallowed tools from being sent to model providers.
Tool profiles (base allowlist)
tools.profile sets a base tool allowlist before tools.allow/tools.deny.
Per-agent override: agents.list[].tools.profile.
Profiles:
minimal:session_statusonlycoding:group:fs,group:runtime,group:sessions,group:memory,imagemessaging:group:messaging,sessions_list,sessions_history,sessions_send,session_statusfull: no restriction (same as unset)
Tool groups (shorthands)
Tool policies (global, agent, sandbox) supportgroup:* entries that expand to multiple tools.
Use these in tools.allow / tools.deny.
Available groups:
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:ui:browser,canvasgroup:automation:cron,gatewaygroup:messaging:messagegroup:nodes:nodesgroup:clawdbot: all built-in Clawdbot tools (excludes provider plugins)
Plugins + tools
Plugins can register additional tools (and CLI commands) beyond the core set. See Plugins for install + config, and Skills for how tool usage guidance is injected into prompts. Some plugins ship their own skills alongside tools (for example, the voice-call plugin).Tool inventory
apply_patch
Apply structured patches across one or more files. Use for multi-hunk edits.
Experimental: enable via tools.exec.applyPatch.enabled (OpenAI models only).
exec
Run shell commands in the workspace.
Core parameters:
command(required)yieldMs(auto-background after timeout, default 10000)background(immediate background)timeout(seconds; kills the process if exceeded, default 1800)elevated(bool; run on host if elevated mode is enabled/allowed; only changes behavior when the agent is sandboxed)- Need a real TTY? Use the tmux skill.
- Returns
status: "running"with asessionIdwhen backgrounded. - Use
processto poll/log/write/kill/clear background sessions. - If
processis disallowed,execruns synchronously and ignoresyieldMs/background. elevatedis gated bytools.elevatedplus anyagents.list[].tools.elevatedoverride (both must allow) and runs on the host.elevatedonly changes behavior when the agent is sandboxed (otherwise it’s a no-op).
process
Manage background exec sessions.
Core actions:
list,poll,log,write,kill,clear,remove
pollreturns new output and exit status when complete.logsupports line-basedoffset/limit(omitoffsetto grab the last N lines).processis scoped per agent; sessions from other agents are not visible.
browser
Control the dedicated clawd browser.
Core actions:
status,start,stop,tabs,open,focus,closesnapshot(aria/ai)screenshot(returns image block +MEDIA:<path>)act(UI actions: click/type/press/hover/drag/select/fill/resize/wait/evaluate)navigate,console,pdf,upload,dialog
profiles— list all browser profiles with statuscreate-profile— create new profile with auto-allocated port (orcdpUrl)delete-profile— stop browser, delete user data, remove from config (local only)reset-profile— kill orphan process on profile’s port (local only)
controlUrl(defaults from config)profile(optional; defaults tobrowser.defaultProfile) Notes:- Requires
browser.enabled=true(default istrue; setfalseto disable). - Uses
browser.controlUrlunlesscontrolUrlis passed explicitly. - All actions accept optional
profileparameter for multi-instance support. - When
profileis omitted, usesbrowser.defaultProfile(defaults to “clawd”). - Profile names: lowercase alphanumeric + hyphens only (max 64 chars).
- Port range: 18800-18899 (~100 profiles max).
- Remote profiles are attach-only (no start/stop/reset).
snapshotdefaults toaiwhen Playwright is installed; useariafor the accessibility tree.snapshotalso supports role-snapshot options (interactive,compact,depth,selector) which return refs likee12.actrequiresreffromsnapshot(numeric12from AI snapshots, ore12from role snapshots); useevaluatefor rare CSS selector needs.- Avoid
act→waitby default; use it only in exceptional cases (no reliable UI state to wait on). uploadcan optionally pass arefto auto-click after arming.uploadalso supportsinputRef(aria ref) orelement(CSS selector) to set<input type="file">directly.
canvas
Drive the node Canvas (present, eval, snapshot, A2UI).
Core actions:
present,hide,navigate,evalsnapshot(returns image block +MEDIA:<path>)a2ui_push,a2ui_reset
- Uses gateway
node.invokeunder the hood. - If no
nodeis provided, the tool picks a default (single connected node or local mac node). - A2UI is v0.8 only (no
createSurface); the CLI rejects v0.9 JSONL with line errors. - Quick smoke:
clawdbot nodes canvas a2ui push --node <id> --text "Hello from A2UI".
nodes
Discover and target paired nodes; send notifications; capture camera/screen.
Core actions:
status,describepending,approve,reject(pairing)notify(macOSsystem.notify)run(macOSsystem.run)camera_snap,camera_clip,screen_recordlocation_get
- Camera/screen commands require the node app to be foregrounded.
- Images return image blocks +
MEDIA:<path>. - Videos return
FILE:<path>(mp4). - Location returns a JSON payload (lat/lon/accuracy/timestamp).
runparams:commandargv array; optionalcwd,env(KEY=VAL),commandTimeoutMs,invokeTimeoutMs,needsScreenRecording.
run):
image
Analyze an image with the configured image model.
Core parameters:
image(required path or URL)prompt(optional; defaults to “Describe the image.”)model(optional override)maxBytesMb(optional size cap)
- Only available when
agents.defaults.imageModelis configured (primary or fallbacks), or when an implicit image model can be inferred from your default model + configured auth (best-effort pairing). - Uses the image model directly (independent of the main chat model).
message
Send messages and channel actions across Discord/Slack/Telegram/WhatsApp/Signal/iMessage/MS Teams.
Core actions:
send(text + optional media)poll(WhatsApp/Discord/MS Teams polls)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
sendroutes WhatsApp via the Gateway; other channels go direct.polluses the Gateway for WhatsApp and MS Teams; Discord polls go direct.- When a message tool call is bound to an active chat session, sends are constrained to that session’s target to avoid cross-context leaks.
cron
Manage Gateway cron jobs and wakeups.
Core actions:
status,listadd,update,remove,run,runswake(enqueue system event + optional immediate heartbeat)
addexpects a full cron job object (same schema ascron.addRPC).updateuses{ id, patch }.
gateway
Restart or apply updates to the running Gateway process (in-place).
Core actions:
restart(sendsSIGUSR1to the current process;clawdbot gatewayrestart in-place)config.get/config.schemaconfig.apply(validate + write config + restart + wake)update.run(run update + restart + wake)
- Use
delayMs(defaults to 2000) to avoid interrupting an in-flight reply. restartis disabled by default; enable withcommands.restart: true.
sessions_list / sessions_history / sessions_send / sessions_spawn / session_status
List sessions, inspect transcript history, or send to another session.
Core parameters:
sessions_list:kinds?,limit?,activeMinutes?,messageLimit?(0 = none)sessions_history:sessionKey,limit?,includeTools?sessions_send:sessionKey,message,timeoutSeconds?(0 = fire-and-forget)sessions_spawn:task,label?,agentId?,model?,runTimeoutSeconds?,cleanup?session_status:sessionKey?(default current),model?(defaultclears override)
mainis the canonical direct-chat key; global/unknown are hidden.messageLimit > 0fetches last N messages per session (tool messages filtered).sessions_sendwaits for final completion whentimeoutSeconds > 0.- Delivery/announce happens after completion and is best-effort;
status: "ok"confirms the agent run finished, not that the announce was delivered. sessions_spawnstarts a sub-agent run and posts an announce reply back to the requester chat.sessions_spawnis non-blocking and returnsstatus: "accepted"immediately.sessions_sendruns a reply‑back ping‑pong (replyREPLY_SKIPto stop; max turns viasession.agentToAgent.maxPingPongTurns, 0–5).- After the ping‑pong, the target agent runs an announce step; reply
ANNOUNCE_SKIPto suppress the announcement.
agents_list
List agent ids that the current session may target with sessions_spawn.
Notes:
- Result is restricted to per-agent allowlists (
agents.list[].subagents.allowAgents). - When
["*"]is configured, the tool includes all configured agents and marksallowAny: true.
Parameters (common)
Gateway-backed tools (canvas, nodes, cron):
gatewayUrl(defaultws://127.0.0.1:18789)gatewayToken(if auth enabled)timeoutMs
controlUrl(defaults from config)
Recommended agent flows
Browser automation:browser→status/startsnapshot(ai or aria)act(click/type/press)screenshotif you need visual confirmation
canvas→presenta2ui_push(optional)snapshot
nodes→statusdescribeon the chosen nodenotify/run/camera_snap/screen_record
Safety
- Avoid direct
system.run; usenodes→runonly with explicit user consent. - Respect user consent for camera/screen capture.
- Use
status/describeto ensure permissions before invoking media commands.
How tools are presented to the agent
Tools are exposed in two parallel channels:- System prompt text: a human-readable list + guidance.
- Tool schema: the structured function definitions sent to the model API.