Skip to Content

Tools

v1 status: hand-written from src/tools/mod.rs. Will be generated by introspecting the tool registry — each tool’s name(), description(), and parameters_schema() — in a later iteration.

Always-on tools

These register unconditionally:

NameDescription
shellExecute a shell command. Sandboxed (via the auto-detected sandbox) and command-allowlisted.
file_readRead a file from the workspace
file_writeWrite a file to the workspace
glob_searchGlob over workspace paths
cron_addSchedule a recurring job
cron_listList scheduled jobs
cron_removeRemove a scheduled job
cron_updateUpdate a scheduled job
cron_runRun a scheduled job ad-hoc
cron_runsInspect job run history
memory_storePersist a fact to long-term memory
memory_recallHybrid lexical+vector search over memory
memory_forgetDelete a memory entry
scheduleSchedule an action
proxy_configRead or update HTTP proxy config
git_operationsGit commands wrapped as tool calls
pushoverSend a Pushover notification
pdf_readExtract text from a PDF
screenshotCapture a screenshot
image_infoInspect image metadata
skills_listList installed skills
skill_viewRead the prompt/metadata of an installed skill
skills_searchSearch across installed skill prompts
skills_installInstall a skill from a git URL or local path
skills_install_depsRun a skill’s brew/npm/uv/go/download install recipes

Conditional tools

These only register when their gate is satisfied:

ToolGate
browser_open, browser[browser].enabled = true
http_request[http_request].enabled = true
web_search_tool[web_search].enabled = true (note the _tool suffix)
composio[composio].api_key is set (gives access to ~150 app integrations)
delegate[[agents]] is configured (multi-agent dispatch)
list_tasks, get_task, create_task, update_task_status, create_subtask, complete_subtask, review_task, add_comment, read_comments[tasks].enabled = true

Default vs all

  • default_tools()shell, file_read, file_write, glob_search. Used when the agent runs in minimal mode.
  • all_tools_with_runtime() — every always-on tool plus all conditionals whose gates are satisfied.

The factory functions live in src/tools/mod.rs.

Notes on validation

Tool parameter schemas (returned by parameters_schema()) are what the LLM is told about. They are not validated by the runtime at execute time — tools manually pull args via args.get("foo").and_then(...) patterns. Consequently:

  • Schema correctness is a discipline matter, not a runtime guarantee.
  • Tools handle their own missing-arg / wrong-type errors; they return ToolResult { success: false, error: Some(...) } rather than panicking.

For full parameter schemas of each tool, see the implementation at src/tools/<name>.rs.

Peripheral-contributed tools

When [peripherals] is configured, each registered board contributes additional tools via its Peripheral::tools() implementation. Common ones:

ToolSource
hardware_board_infoAny registered peripheral
hardware_memory_mapBoards that expose a memory map
hardware_memory_readBoards that expose readable memory

Boards may also contribute flash/upload tools (Arduino, Nucleo). The exact set depends on which boards are enabled — see Reference → CLI (rantaiclaw hardware, rantaiclaw peripheral) and src/peripherals/.

Skill-defined tools

Skills installed under <profile>/skills/<slug>/ can declare their own tools in SKILL.toml. These are exposed to the LLM with the prefix skill_<skill>_<tool> and run via SkillToolAdapter. Only kind = "shell" and kind = "http" are executable today; other kinds (including kind = "builtin" in legacy SKILL.md prose) are not.

See Tools & Skills for the model and Reference → Skills for the schema.

Last updated on