Tool families
| Family | Tools | Boundary |
|---|---|---|
| Files | Read, Write, Edit, Delete, Move, Glob, Grep, Notebook, AttachmentRead | Folders the chat may use; protected paths ask |
| System | SystemStatus (memory, processes, disks, GPUs on this machine) | Read-only, in every mode, with no shell and no approval. Reports programs without their arguments |
| Shell | Bash, BashJobs (background jobs), BashSession (interactive terminal) | Sandboxed by default; network and host access are explicit |
| Git | GitInspect, GitMutate, Worktree, GitPublish through your gh/glab |
No force-push, default-branch push or merge |
| Code intelligence | RepoMap, CodeSearch, SymbolSearch, Definition, References, Diagnostics | Local analyzers — see Repository |
| Web | WebSearch, WebScrape, WebFetch, WebAvailability | See Web search and scraping |
| Browser | Agora tab tools | Per-tab grant — see Agora |
| Desktop | Computer (macOS, Windows) | App-scoped sessions, OS permissions |
| Orchestration | Task, TaskWait, TaskResume, ThreadStart, ThreadMessage | See Tasks and subthreads |
| Interaction | AskUserQuestion, PlanReview, Checklist, TurnWrapUp | Display and questions only |
| Services | GenerateImage, DecisionEvaluate | GenerateImage needs an image-capable provider in the chat’s Profile, such as Google or Codex; DecisionEvaluate needs a decision model and, on a connection in the chat’s Profile, runs under Approve for me without asking, even at a private address |
| Composition | ToolProgram, ToolSearch, SpecialistRead, SkillRead, CommandInvoke (with SpecialistSearch, SkillSearch, CommandSearch) | Nested calls keep ordinary policy |
The model sees a short set of tools inline; the rest are named in one line and
loaded through ToolSearch when needed. WorkflowCatalog,
RunWorkflow, WorkflowWait and WorkflowResume appear only when a registered
workflow is available; there is no ad-hoc Workflow tool. A provider
that runs its own agent loop (Cursor) gets the same deferral through a
ToolRun callback.
A few behaviors worth knowing:
- Tool results reach the model as plain text: file contents as-is, commands as exit code and output, errors first.
- A local model served over Chat Completions that writes its tool call as text
(a JSON object with
nameandarguments, bare or in<tool_call>tags) still has it run through the ordinary tool path. - Agents work in the project. A temp folder is only for a throwaway script or output the project should not keep; a Quick Chat keeps such work in the system temp folder.
- Read and AttachmentRead return the text of PDF, Word, Excel, PowerPoint, OpenDocument, EPUB and RTF files, so any model, local ones included, can read them. WebFetch does the same for a document behind a URL. Pictures and scanned PDF pages come back as images, a ZIP or tar as a listing, and a SQLite file as its schema with sample rows. Legacy .doc, .xls and .ppt files fail with what would work instead.
- GenerateImage follows long renders as jobs on a service that offers them, and stopping the turn stops the render. A refusal shows the service’s own reason.
- On Windows a command is limited in what it can change but not in what it can read or send, in a project you have trusted, once a self-test has proved that works on your machine. See Windows sandbox. Otherwise every Bash call asks.
- Bash runs confined first. If a model asks to leave the sandbox, the command
still runs confined, and you are asked only once the sandbox has refused
something in that turn.
A write refused on
.git, such asgit commit, does not wait for the model: the turn itself asks to run the command outside the sandbox. - On macOS and Linux, a project folder that is a linked Git worktree, or holds
one up to two folders down (an Ergon company’s projects), can read the Git
metadata its
.gitfile points to, read-only, sogit statusandgit diffwork there. - AttachmentRead with
asFilesaves a read-only copy that the chat’s Bash can run programs on. It is deleted with the chat. - Edit takes
replaceAllto change every match, andeditsto make several changes to one file in one call, all or none; a miss says why the text did not match. Grep takesregex: truefor a per-line regular expression. - A Bash call can run in the background. While it runs, the thread rail’s Processes card counts it; open the card to Stop a command.
- A BashSession line runs only when it ends with a newline. A model that
escapes the newline twice sends a trailing
\nas two characters; that one ending becomes Enter, so the line still runs. - The desktop adopts your login-shell environment at startup, so tools on your
PATHwork when the app is opened from the Dock. It also shipsrg(ripgrep); one you installed yourself comes first.
The canonical inventories live in the specification index.