TOOLS.md - Tool Definitions

July 5, 2026 · View on GitHub

Owns: tool access, skills, routing pointers, build/runtime commands. Tool params & search/GitHub/browser routing live in the system prompt — don't duplicate them here.

Tool Access — core set + on-demand discovery

When [agent] lazy_tools = true, only the CORE tools ship in every request; everything else is pulled on demand with tool_search (keeps a tool-light turn from carrying ~20k tokens of unused schemas). When the flag is off, all tools are always available and tool_search is just a no-op convenience.

Core (always available): read_file, write_file, edit_file, hashline_edit, bash, ls, glob, grep, web_search, exa_search, memory_search, task, context, plan, http_client, load_brain_file, write_opencrabs_file, config_tool, slash_command, rename_session, follow_up_question, tool_search.

Extended (call tool_search("…") to discover + activate):

CategoryWhat it coversExample query
browsernavigate / click / type / screenshot / eval on live pages"click a button on a web page"
channelsTelegram / Discord / Slack / WhatsApp / Trello — send + connect"send a telegram photo"
agentsspawn / wait / send-input / close / resume sub-agents, teams"spawn a sub-agent"
mediagenerate / analyze images, analyze video, provider vision"generate an image"
documentsgenerate XLSX (live formulas) / DOCX / PDF / PPTX with branding, parse documents, PDF to images"create a spreadsheet with formulas"
systemfeedback_record/analyze, self_improve, rebuild, evolve, tool_manage, rsi_proposals"rebuild from source"
utilitycron_manage, session_search, channel_search, mission_control_report, a2a_send"create a cron job"

Rule: if a task needs a non-core tool, call tool_search with a plain-words description FIRST — never assume the capability is missing before searching.

What belongs here

  • Skill pointers (what/where to load on demand)
  • Commands vs Tools vs Skills distinction
  • Profile-aware paths
  • Custom routing rules specific to your setup

Skills (load on demand)

SkillCommandWhat it covers
Browser CDP/browser-cdpCDP automation, selectors, screenshots
Channels/channelsTelegram, Discord, Slack, Trello, WhatsApp setup
Dynamic Tools/dynamic-toolstools.toml format, runtime tool management
SocialCrabs/socialcrabsTwitter/X, Instagram, LinkedIn automation
Google CLI/gogGmail, Calendar via gog CLI
GitHub Workflow/github_workflowCI/CD, branch protection, release workflow
A2A Gateway/a2a-gatewayAgent-to-Agent protocol reference
Servers/serversSSH aliases, Docker containers, Nginx sites

Commands vs Tools vs Skills

ConceptWhat it isExample
ToolA function the agent calls directlybash, read_file, grep
CommandA slash shortcut defined in commands.toml/check, /rebuild, /status
SkillA workflow template loaded on demand/browser-cdp, /channels

Build & Runtime Commands

  • /cd <path> — change the working directory for all tool execution (or config_tool set_working_directory); persists to config.toml
  • /rebuild — Build, test, and hot-restart from source
  • /check — Run cargo clippy and cargo test
  • /evolve — Download latest release binary (full procedure → BOOT.md)

Scheduling (Cron)

Manage scheduled jobs with the cron_manage tool (action: create / list / delete / enable / disable / test). Jobs run in isolated sessions on your configured provider/model by default — omit provider/model for the default; set thinking: off for routine jobs; use deliver_to only to send results to a channel.

Cron expression format (the common trap): 5 fields min hour dom mon dow. Day-of-week is 1-7 = Sun-Sat (1=Sunday, 7=Saturday; 0 is invalid) — use day names (Mon-Fri, Sun) instead of numbers. No @daily/@hourly macros. Set tz (IANA, e.g. America/New_York) and the job runs in that zone's local time, DST-aware. Validate before you confirm: create echoes the next run times — read them back; a wrong day-of-week parses fine but the next-run list exposes it. Fix and recreate before telling the user it's set.

Voice & Audio

STT providers: voicebox (local server) > openai_compatible > groq (Whisper API) > local (rwhisper, local-stt feature). Override with stt_fallback_chain. TTS providers: voicebox (local server) > openai_compatible > openai (OpenAI TTS) > local (Piper, local-tts feature). Override with tts_fallback_chain. Config: [providers.stt.*] / [providers.tts.*] in config.toml. Piper voices: ryan(default), amy, lessac, kristin, joe, cori. Local STT presets: local-tiny(42MB), local-base(142MB), local-small(466MB), local-medium(1.5GB). Audio: all output OGG/Opus via ffmpeg. Models: whisper in ~/.local/share/opencrabs/models/whisper/, piper in ~/.local/share/opencrabs/models/piper/. Setup: /onboard:voice.

Reporting

  • /mission-control: analytics (tool usage, failure rates, RSI improvements, brain files), activity feed, inbox proposals, and scheduled cron jobs. Works in the TUI (opens the Mission Control Analytics panel) and in every channel (returns the report as a message). The same data is also available as the mission_control_report agent tool, so you can ask in plain language (for example "send me my analytics") and the agent ships the report to the chat.

Profile-Aware Paths

WhatPath
Brain files~/.opencrabs/{SOUL,USER,AGENTS,TOOLS,MEMORY,CODE,SECURITY}.md
Config~/.opencrabs/config.toml
Keys~/.opencrabs/keys.toml
Commands~/.opencrabs/commands.toml
Plans~/.opencrabs/agents/session/.opencrabs_plan_<id>.json
Logs~/.opencrabs/logs/opencrabs.YYYY-MM-DD