::docs :: reference

tools

All 47 built-in tools and their risk tiers, the toolkits you can turn off, and what each tool does: files, shell, web, knowledge, memory and skills, the loop's own tools, and the macOS apps.

Every capability is a tool call you can watch in the rail. Each one faces the same approval gate, runs locally where it can, and lands in a trace you can replay. Reading runs without asking; anything that changes or sends something asks first. /tools --all prints the live registry with each tool's tier, and /policy risk <tool> <tier> [--save] overrides a tier, except for run_shell, run_shortcut, send_message, create_skill, add_document, and remove_document, which always keep theirs. untrusted marks a tool whose output is outside content: it passes through the injection quarantine.

::toolkits

Tools come in toolkits, and any toolkit you don't use can be turned off. A toolkit that is off is unbound: the model isn't shown its tools and can't call them, the prompt is smaller, and Saturn can never reach that app. Ask for something it would do ("what's on my calendar tomorrow?") and Saturn says the toolkit is off and names the command that turns it back on. Everything starts on.

commands
/tools                      the toolkits: how many tools, on or off, what each is for
/tools mail                 one toolkit's tools, each with its risk tier
/tools off messages mail    turn toolkits off (saved to config.yaml)
/tools on messages          turn one back on
/tools off shell --session  for this session only
/tools --all                every tool in one list, with its toolkit

The toolkits are files, web, shell, knowledge, notes, calendar, mail, contacts, reminders, messages, shortcuts, desktop (the browser tab and the Finder selection), notifications, and skills. The core (the checklist, ask_user, memory, the calculator, and the clock) is always on. The choice is saved under toolkits: in config.yaml, and a change applies to your next request. Turning a toolkit on never changes what the gate asks about: its tools keep their tiers. An MCP server is listed as a toolkit too, and turned on and off from /mcp.

::files

tooltierdoes
read_fileread_only · untrustedread a file; PDF, Word (.docx), and Excel (.xlsx) come back as text. Other binary files are refused by name.
write_fileside_effectingcreate, replace, or append to a file (the gate shows a diff)
edit_fileside_effectinganchored string replace inside a file
move_fileside_effectingrename or move a file or folder; /undo moves it back
delete_fileside_effectingmove a file or folder to the Trash, never erase it; /undo puts it back, which is why it isn't destructive
list_directoryread_onlylist a folder
search_filesread_only · untrustedregex search across file contents
find_filesread_onlyfind files by name glob

::shell, web, math

tooltierdoes
run_shelldestructive · untrustedrun a shell command in the working folder. It always faces the gate.
web_searchread_only · untrustedkeyless DuckDuckGo search
web_extractread_only · untrustedfetch a page and extract its text locally (trafilatura)
calculateread_onlyarithmetic through a whitelisted AST, never eval
current_timeread_onlythe machine's own clock, timezone, and weekday

::knowledge, memory, skills

tooltierdoes
search_knowledge_baseread_only · untrustedretrieve passages from your ingested documents; with no query, list the documents it holds
add_document · remove_documentside_effectingadd a file to the knowledge base, or move one of its documents to the Trash. Both always ask, and headless runs refuse them.
rememberside_effectingstore a durable fact in a memory layer. It asks first, unless you typed the fact yourself (see memory).
recallread_onlyread durable facts back
create_skillside_effectingsave a procedure as one of your skills. You read the whole skill first, and it always asks.

::the loop

tooltierdoes
planread_onlythe agent's checklist for a multi-step task, shown in the rail
ask_userread_onlypause with one question; your answer resumes the turn

::your mac

tooltierdoes
search_notes · read_noteread_only · untrustedfind and read Apple Notes
create_note · append_noteside_effectingstart a note, or add to the one with exactly that title
list_calendar_eventsread_only · untrustedevents in a window, optionally narrowed to named calendars
create_calendar_event · update_calendar_eventside_effectingadd an event; move, rename, relocate, or rewrite the notes of one
delete_calendar_eventdestructiveremove an event
list_mail · search_mail · read_mailread_only · untrustedlist, search, and read Apple Mail
draft_mail · reply_mailside_effectingopen an unsent draft or threaded reply. You press Send.
update_mailside_effectingmark read/unread, flag, move, or trash a list of messages in one approval
search_contactsread_only · untrusteda name to the addresses, numbers, and birthday on the card
list_remindersread_only · untrustedopen and overdue reminders
create_reminder · complete_reminderside_effectingadd a reminder, tick one off
read_messagesread_only · untrustedyour Messages history (needs Full Disk Access)
find_group_chatsread_only · untrustedyour group chats and who is in them
send_messagedestructivesend an iMessage to one person or one existing group chat. It always asks.
list_shortcutsread_onlythe Shortcuts you have built
run_shortcutdestructive · untrustedrun one of them; it asks unless you allowed it by name
read_browser_tabread_only · untrustedthe page in your front browser tab
finder_selectionread_onlythe files selected in Finder
schedule_notificationside_effectinga one-off desktop alert at a time you name

Plus any tool from a configured MCP server, registered as mcp_<server>_<tool> at the tier you declare (destructive by default). See mcp servers.

::working with files

The file tools reach the working folder (where you launched Saturn) and any folder added with /add-dir, nothing else. Every write, edit, move, and delete is snapshotted first, so /undo reverts the turn. Searches skip ~/Library, dependency folders (node_modules, .venv, …), and hidden folders, and stop at 50,000 entries. A content search has a 10-second budget and says when it was partial. On macOS it also asks Spotlight's index, which finds text inside PDF, Word, and Excel files. Every Spotlight hit is re-checked against the file itself and the same folder limits. Saturn refuses to write its own control files. See the trust stack.

::running commands

run_shell hands the command to /bin/sh in the working folder. It's destructive, so it always faces the gate: you seeing and approving the exact command is the safety boundary. Every run is a bounded foreground run with a timeout (shell.timeout, default 60 s). A command never reads your terminal: a prompt for input gets end-of-input at once. A non-zero exit or a timeout is a failed call the answer tells you about. The child's environment is stripped of secret-shaped variables (shell.env_scrub), and each run is recorded as untracked on the egress ledger. Shell effects can't be undone with /undo.

::the web, without a key

The web tools need no API key, by design: a product whose pitch is "your data stays yours" shouldn't route your queries through a keyed SaaS backend. web_extract contacts only the page's own host plus any host its redirects reach. Saturn follows each redirect itself, so every host is checked against the air-gap and written to the egress ledger before it's contacted. It stops reading at 5 MB. For deeper research the agent issues several search and read calls, each visible in the rail, instead of hiding them in one research tool. web.max_results (default 5) sets results per search.

::what is not a tool

  • –There's no clipboard tool. Saturn reads the clipboard only when you type @clipboard, and /copy writes the last answer to it.
  • –There's no send_mail. Mail is drafted, never sent: you press Send.
  • –There's no generic http_request. MCP is the integration surface, with your own trust declaration per server.