Tools
Agents work through a set of built-in tools that run in the working directory (/cd to move it). Read-only tools need no permission and work in plan mode; mutating tools go through the permission gate.
Built-in tools
| Tool | What it does | Prompts? |
|---|---|---|
bash | run shell commands | yes (mode-dependent) |
read_file | read a file | no, with narrow exceptions |
write_file | create or overwrite a file | yes |
edit_file | targeted edits to a file | yes |
grep | regex search (ripgrep when installed) | no, with narrow exceptions |
glob | file matching (**/*.go, newest first) | no, with narrow exceptions |
web_search | keyless search (DuckDuckGo) | no |
web_fetch | fetch readable page text | first contact per host |
todo_write | maintain a todo list | no |
spawn_agent | delegate a task to a subagent | subagent's calls prompt normally |
The read-only exceptions exist because read tools compose into exfiltration — details in Sandboxing & Security.
Todo list
On multi-step work the agent keeps a todo list via todo_write, shown live in the plan panel and saved with the session.
Background commands
bash takes background: true for a dev server or a long build; bash_output collects what it has produced since last asked and bash_kill stops it. Polling never re-prompts, and jobs are killed when Tapioca exits.
Foreground bash calls are bounded by bash_timeout (default 180 seconds); a call can ask for more, up to 30 minutes, via its timeout argument.
External edits are respected
If you change a file in your own editor after the agent read it, write_file/edit_file refuse to overwrite it until the agent re-reads, and the next prompt carries a note listing what changed.
LSP diagnostics
Configure language servers under [[lsp]] and every file the agent writes is checked; errors come back attached to the tool result (4:2 error: undefined: doesNotExist), so the agent fixes them in the same turn rather than after a build. See MCP & LSP.
MCP tools
Tools from configured MCP servers are namespaced server__tool and offered alongside the built-ins. They prompt like built-in tools. See MCP & LSP.
Custom commands
Drop a markdown file in ~/.config/tapioca/commands/ or .tapioca/commands/ in a project and its name becomes a slash command. The first # heading is its description and $ARGUMENTS takes whatever you type after it. Project commands override personal ones.