Built-in tools for file I/O, shell commands, search, and web access
Every agent in Fabro has access to a set of built-in tools for interacting with the codebase and environment. Tools execute inside the agent’s sandbox — whether that’s the local machine, a Docker container, or a Daytona VM — so the same tool calls work identically regardless of provider.
The tools described on this page apply to the API backend (the default). When using the CLI backend, the external CLI tool (claude, codex, or gemini) provides its own tools — Fabro’s built-in tools are not used.
Executes a shell command via /bin/bash -c in the sandbox’s working directory.
Parameter
Type
Required
Description
command
string
yes
The shell command to execute
timeout_ms
integer
no
Timeout in milliseconds
description
string
no
Description of what the command does
The timeout defaults to the provider’s configured value (10s for most providers, 120s for Anthropic) and is capped at the maximum (600s / 10 minutes). If the command exceeds the timeout, Fabro kills the process and returns a “Command timed out” message along with any output captured so far.The output includes the exit code, stdout, and stderr.
Replaces a string in an existing file. Available for Anthropic and Gemini providers.
Parameter
Type
Required
Description
file_path
string
yes
Absolute path to the file
old_string
string
yes
The string to find
new_string
string
yes
The replacement string
replace_all
boolean
no
Replace all occurrences (default: false)
If old_string is not found, the tool returns an error. If multiple occurrences exist and replace_all is false, the tool returns an error asking for more context or to set replace_all.The tool reads the file internally before writing, so it satisfies the read-before-write guardrail automatically.
Fetches content from a URL and optionally summarizes it with an LLM.
Parameter
Type
Required
Description
url
string
yes
URL to fetch (must be http:// or https://)
prompt
string
no
A question about the page content; returns a concise answer instead of the full page
timeout_ms
integer
no
Timeout in milliseconds (default: 30000, max: 60000)
HTML content is automatically converted to Markdown (with script and style tags stripped). Output is capped at 100KB. When a prompt is provided and a summarizer model is configured, the fetched content is passed to a lightweight LLM call that returns a concise answer.
Fabro wraps every sandbox in a ReadBeforeWriteSandbox decorator that tracks which files the agent has seen. The rules are:
Writing to a new file (one that doesn’t exist yet) is always allowed
Writing to an existing file requires that the agent has previously read it via read_file or seen it in grep results
Deleting an existing file follows the same rule as writing
If an agent attempts to write to an existing file it hasn’t read, the tool returns an error:
Cannot write to 'src/main.rs': file exists but has not been read.Use read_file to read the file before writing to it.
This prevents agents from blindly overwriting files they haven’t inspected. The guardrail normalizes paths so that reading src/main.rs (relative) and /workspace/src/main.rs (absolute) both satisfy the check.
When an LLM returns multiple tool calls in a single response, Fabro can execute them in parallel. Independent tool calls run concurrently, while the results are collected in order. If the agent session is cancelled, pending tool calls return a “Cancelled” error.
Before executing a tool, Fabro validates the arguments against the tool’s JSON Schema. Invalid arguments are rejected with a descriptive error before the tool executor runs.
When a tool call fails, the error is returned to the agent as a tool result with an error flag — the agent loop continues. Tool errors do not fail the stage. The LLM sees the error message and decides how to respond: retry the call, try an alternative approach, or move on.Common error cases:
Error
Cause
Unknown tool
The agent called a tool that doesn’t exist
Argument validation failure
Arguments don’t match the tool’s JSON Schema
File not found
The target file doesn’t exist
Command timeout
A shell command exceeded its timeout
Read-before-write
The agent tried to write to a file it hasn’t read (see guardrail)
Additional tools can be added via MCP servers. MCP tools appear alongside built-in tools in the agent’s tool set and follow the same permission and execution model.