tools bundles all five tools keyed by name:
Sandboxing
All tools are sandboxed torootDir (defaults to the workflow directory). Paths are resolved relative to this root; escapes via symlinks are rejected.
| Policy | Behavior |
|---|---|
| Path resolution | Relative paths resolve against rootDir. Absolute paths must fall within root. |
| Symlinks | Rejected if target is outside sandbox. |
| Output size | Truncated to maxOutputBytes (default 200KB). |
| Timeouts | bash and grep default to 60s; exceeded processes killed with SIGKILL. |
| Network | bash blocks network commands by default. See bash. |
Tool Call Logging
Every invocation is logged to_smithers_tool_calls:
| Field | Description |
|---|---|
runId | Workflow run ID |
nodeId | Task node that invoked the tool |
iteration | Loop iteration |
attempt | Retry attempt number |
seq | Sequential call counter within the task |
toolName | read, write, edit, grep, or bash |
inputJson | Serialized input arguments |
outputJson | Serialized output (truncated if over limit) |
startedAtMs | Start timestamp |
finishedAtMs | End timestamp |
status | "success" or "error" |
errorJson | Error details (if "error") |
read
Read a file from the sandbox."File too large" if size exceeds maxOutputBytes.
write
Write content to a file. Creates parent directories as needed."ok". Throws "Content too large" if content exceeds maxOutputBytes. Logs content hash (SHA-256) and byte size; full content is not stored.
edit
Apply a unified diff patch to an existing file."ok". The file must exist. Reads current contents, applies the patch via applyPatch, writes back. Throws on size limits ("Patch too large", "File too large") or mismatched context ("Failed to apply patch"). Logs patch hash and byte size.
grep
Search for a regex pattern usingripgrep.
rg -n format). Exit code 1 (no matches) returns empty string. Exit code 2 throws stderr as error. Requires ripgrep in PATH.
bash
Execute a shell command.rootDir. Timeout: 60s (killed with SIGKILL via process group). Non-zero exit codes throw.
Network Blocking
Controlled byallowNetwork in RunOptions, --allow-network on CLI, or server config. Default: blocked.
When blocked, the command string (executable + args) is checked against these fragments:
| Category | Blocked strings |
|---|---|
| HTTP clients | curl, wget |
| URL prefixes | http://, https:// |
| Package managers | npm, bun, pip |
| Git remote ops | git push, git pull, git fetch, git clone, git remote |
git status, git diff, git log) are allowed.
Using Tools with Agents
Pass tools to an AI SDK agent, assign the agent to a<Task>:
Configuration
| Option | Default | Description |
|---|---|---|
rootDir | Workflow directory | Sandbox root |
allowNetwork | false | Allow network commands in bash |
maxOutputBytes | 200000 (200KB) | Max output size per tool |
toolTimeoutMs | 60000 (60s) | Timeout for bash and grep |