Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/openagen/zeroclaw/llms.txt

Use this file to discover all available pages before exploring further.

Tools are the agent’s hands — the mechanism through which it interacts with the outside world. Every built-in capability and every user-defined extension is a Tool implementation registered in the same factory. Autonomy levels control which tools the agent can invoke without human confirmation.

Tool trait

The trait lives at src/tools/traits.rs. Four methods are required; spec() has a default implementation that composes the others.
// Required methods
fn name(&self) -> &str;
fn description(&self) -> &str;
fn parameters_schema(&self) -> Value;   // JSON Schema object
async fn execute(&self, args: Value) -> Result<ToolResult>;

// Default implementation provided:
// spec() — composes name, description, and parameters_schema
//           into the function-call spec sent to the model
ToolResult carries three fields: success: bool, output: String, and error: Option<String>.

Built-in tools

Shell and file system

ToolSource fileWhat it does
shellshell.rsExecute arbitrary shell commands
file_readfile_read.rsRead file contents
file_writefile_write.rsWrite or overwrite a file
file_editfile_edit.rsApply targeted edits to a file
glob_searchglob_search.rsFind files by glob pattern
content_searchcontent_search.rsSearch file contents with regex
pdf_readpdf_read.rsExtract text from PDF files

Memory

ToolSource fileWhat it does
memory_storememory_store.rsPersist a memory entry
memory_recallmemory_recall.rsQuery memories by semantic or keyword search
memory_forgetmemory_forget.rsDelete a memory entry by key

Scheduling

ToolSource fileWhat it does
scheduleschedule.rsSchedule a one-shot task
cron_addcron_add.rsAdd a recurring cron job
cron_listcron_list.rsList active cron jobs
cron_updatecron_update.rsModify an existing cron job
cron_removecron_remove.rsRemove a cron job
cron_runcron_run.rsTrigger a cron job immediately
cron_runscron_runs.rsList recent cron run history

Version control

ToolSource fileWhat it does
git_operationsgit_operations.rsGit status, diff, commit, push, pull

Network and web

ToolSource fileWhat it does
http_requesthttp_request.rsMake arbitrary HTTP requests
web_fetchweb_fetch.rsFetch a URL and return content
web_search_toolweb_search_tool.rsRun a web search query

Browser

ToolSource fileWhat it does
browserbrowser.rsFull browser automation
browser_openbrowser_open.rsOpen a URL in the system browser
screenshotscreenshot.rsCapture a screenshot
image_infoimage_info.rsExtract metadata from an image

Notifications

ToolSource fileWhat it does
pushoverpushover.rsSend push notifications via Pushover

Agent and SOP

ToolSource fileWhat it does
delegatedelegate.rsDelegate a subtask to another agent
sop_listsop_list.rsList available SOPs
sop_executesop_execute.rsBegin executing an SOP
sop_advancesop_advance.rsAdvance to the next SOP step
sop_approvesop_approve.rsApprove a pending SOP step
sop_statussop_status.rsCheck current SOP execution state

Hardware

ToolSource fileWhat it does
hardware_board_infohardware_board_info.rsRead peripheral board metadata
hardware_memory_maphardware_memory_map.rsInspect hardware memory layout
hardware_memory_readhardware_memory_read.rsRead hardware memory regions

Configuration and routing

ToolSource fileWhat it does
model_routing_configmodel_routing_config.rsInspect or adjust model routing rules
proxy_configproxy_config.rsRead or update proxy configuration
cli_discoverycli_discovery.rsDiscover available CLI tools on the host

Composio integration

Composio provides opt-in access to 1000+ OAuth-connected applications through a single tool registration. It is disabled by default.
[tools]
composio_enabled = true
composio_api_key = "your-composio-key"
Composio requires an API key and network access to the Composio service. Do not enable it in air-gapped environments.
When enabled, the composio tool (composio.rs) exposes the full Composio action catalogue to the agent. Each action appears as an individual callable operation; authentication for each connected app is handled by Composio’s OAuth flow.

Browser tool backends

The browser tool supports three execution backends, configured via tools.browser_backend:
BackendConfig valueDescription
Agent browseragent_browserZeroClaw’s built-in Rust browser automation
Rust nativerust_nativeHeadless Chrome/Firefox via native Rust bindings
Computer usecomputer_useAnthropic Computer Use — screenshot + action loop
[tools]
browser_backend = "rust_native"   # agent_browser | rust_native | computer_use
computer_use requires an Anthropic provider and consumes significantly more tokens per browser interaction due to repeated screenshot-action cycles.

Autonomy levels

Autonomy levels gate which tools the agent can invoke without pausing for human confirmation. Higher autonomy grants broader tool access.
[agent]
autonomy_level = "high"   # low | medium | high
LevelTool access
lowRead-only and non-destructive tools only
mediumMost tools; destructive operations require confirmation
highAll registered tools without confirmation prompts
autonomy_level = "high" combined with shell access grants the agent unrestricted command execution. Use only in trusted, sandboxed environments.

Implementing a custom tool

Register your tool in src/tools/mod.rs via default_tools(). See Adding providers, channels, tools, and peripherals for the complete trait signature and a full working example.
use anyhow::Result;
use async_trait::async_trait;
use serde_json::{json, Value};

pub struct MyTool;

#[async_trait]
impl Tool for MyTool {
    fn name(&self) -> &str { "my_tool" }

    fn description(&self) -> &str {
        "One-line description of what this tool does"
    }

    fn parameters_schema(&self) -> Value {
        json!({
            "type": "object",
            "properties": {
                "input": { "type": "string", "description": "The input value" }
            },
            "required": ["input"]
        })
    }

    async fn execute(&self, args: Value) -> Result<ToolResult> {
        let input = args["input"]
            .as_str()
            .ok_or_else(|| anyhow::anyhow!("Missing 'input' parameter"))?;
        Ok(ToolResult {
            success: true,
            output: format!("Processed: {input}"),
            error: None,
        })
    }
}

Build docs developers (and LLMs) love