MoriMori

Tool reference

Every capability Mori can call — 154 tools, generated straight from the app's live tool registry. These descriptions are the exact ones her model reads, so what you see here is what she knows.

Tools from your connected MCP servers appear alongside these automatically — on every provider.

Coding & projects

23

Projects, git, worktrees, dev servers, previews, self-tests.

run_script
Write JavaScript that orchestrates MANY steps in ONE turn — the fast path for anything multi-step over files/data/APIs. Inside, an async `mori` object bridges to the machine: await mori.readFile({path}), mori.writeFile({path,content}), mori.listDir({path}), mori.searchFiles({path,query,file_pattern}), mori.httpRequest({url,method,headers,body}), mori.runTerminal({command}), mori.readPdf({path}), mori.ocrImage({path}), mori.queryCsv({path,sql}). Loop, branch, transform, aggregate — normal JS. ONLY what you console.log() comes back to you (intermediate results stay out of your context, so this is far faster than many separate tool calls). Limits: 5-min/50-call cap, no secrets in env, and NO sends/purchases/memory here — those stay as their own tools so approvals apply. Use for: 'rename every file matching X', 'pull these 10 URLs and summarize', 'crunch this CSV then write a report'. Use normal tools for single actions.
git_status
Show the git status of a repo (branch + changed/staged/untracked files). Use before committing or to see what changed.
git_diff
Show the git diff of unstaged (or staged) changes. Use to review edits before committing.
git_commit
Stage all changes (unless add_all is "false") and commit with a message. Use after finishing a unit of work.
git_log
Show recent commits (one line each).
git_branch
List all git branches (local + remote).
git_checkout
Switch to a branch, or create one with create="true".
git_init
Initialize a new git repository in a folder.
create_workspace
Make an isolated git-worktree WORKSPACE for a big or risky code job — its own branch + directory, so changes never clobber the main checkout (and parallel subagents don't collide). Afterward, shell/git/relative-file tools default to it. Use before a large refactor or an experiment.
list_workspaces
List the isolated git-worktree workspaces and which one is active.
enter_workspace
Switch into a workspace (by id, name, or branch) — shell/git/relative-file tools then default to its directory.
exit_workspace
Leave the current workspace — tools go back to their normal working directories.
merge_workspace
Merge a workspace's branch back into its base (commits pending work first, then a no-ff merge). Set delete_after='true' to remove the worktree once merged.
remove_workspace
Remove a workspace's worktree directory (refuses if it has uncommitted changes unless force='true'). The branch is kept.
run_python
Run a Python 3 snippet and get its output — for data work, quick math, scripts, using Python libraries. (JavaScript orchestration → run_script; shell commands → run_terminal_command.)
open_project_in_vscode
Open a folder/project in VS Code (opens the folder AND reveals its main file)
open_preview
Show the user what you built in the Mori Preview window. Pass a project folder or an .html file path to render it live, OR a localhost URL (e.g. http://localhost:3000) to show a running dev server. ALWAYS call this right after building a web project so the user instantly sees the result without opening anything.
create_project_folder
Create a new named project folder
scaffold_simple_html_project
Create a simple HTML project with index.html, style.css, and script.js
scaffold_simple_js_project
Create a simple Node.js project with package.json and src/index.js
vscode_create_project
Create a new project with HTML/CSS/JS files and open it in VS Code. A complete workflow shortcut — creates files, opens VS Code, opens the main file.
vscode_open_and_write
Create a file with content and open it in VS Code immediately.
scaffold_web_app
START HERE for any website/web-app build: scaffolds a designed Vite + React + Tailwind v4 project — design tokens, shadcn-style components, Lucide icons, Inter, scroll motion, and a reference layout. Then build the real content inside that system (README-DESIGN.md is the contract). Never hand-roll blank HTML/CSS for a web project.

Files & data

47

Read, write, search, transform — plus PDFs, spreadsheets, zips, and deliverables.

list_files
List files and folders in a directory
read_file
Read the contents of a file. Large files are returned in line-numbered chunks — pass offset to continue where the previous read stopped.
create_folder
Create a directory (and parent directories if needed)
create_file
Create a new file with optional content
write_file
Write content to a file (creates or overwrites)
update_file
Update an existing file with new content
edit_file
Make a PRECISE, surgical edit to an existing file by replacing an exact snippet. STRONGLY PREFER this over write_file when changing a file that already exists — it edits in place instead of rewriting the whole file, which is faster and avoids losing or breaking other code. Read the file first, then pass old_string copied EXACTLY (including indentation/whitespace). old_string must be unique in the file unless replace_all is true.
search_files
Search a directory tree for a string or regex and return matching file:line results. Use this to find where code lives before editing it.
draft_social_post
Draft a social-media post for the user's BRAND/BUSINESS account and add it to their approval queue. Use when they ask you to write/schedule a post, run their socials, or plan content. It does NOT publish — everything waits for the user's one-click approval in Settings → Business (nothing goes out autonomously). Only for real, disclosed brand accounts via official channels — NEVER fake personas, bought engagement, or manipulation.
list_business_drafts
List the social posts currently in the approval queue (pending or approved). Use to review what you have drafted for the user before they approve.
business_status
Report which of the user's business accounts are connected (X, Meta, LinkedIn, Stripe, Resend, Shopify) and how many drafts await approval. Use before business tasks so you know what's actually wired up.
read_any
Open ANY file and understand it — the smart, universal reader. Hand it a path and it auto-detects the type and does the right thing: code in any language (reads the text), images (SEES them with vision), PDFs and Word/PowerPoint/Excel (extracts the text), CSVs (previews + points you at query_csv), zips/archives (lists what's inside), audio/video (metadata), a folder (lists it), or raw binary (identifies it). This is your DEFAULT when the user gives you a file or you don't know the type. For a specific known type you can still use read_file / read_pdf / read_image / query_csv directly.
read_image
LOOK at an image file with your own eyes — the actual picture is attached to the conversation so you can see layouts, photos, charts, UI, colors, anything visual. Use for 'what's in this image', design reviews, checking a screenshot you took (take_screenshot returns a path — read_image it to verify your own work). For pulling text out of an image, ocr_image is cheaper.
download_file
Download a file from a URL to disk. Defaults to the Downloads folder if no path is given.
append_to_file
Append text to the end of a file (creating it if needed). Use for logs, notes, or adding to an existing file without rewriting it.
get_file_info
Get a file or folder's size, type, and modified/created times, without reading its contents.
unzip_file
Extract a .zip archive to a folder.
rollback_file
Undo Mori's last change to a file — restores it to the state right before the most recent write/edit/delete. Mori auto-checkpoints every file before changing it, so this is a real undo. The current state is itself checkpointed first (so a rollback can be undone).
list_checkpoints
List the saved checkpoints (auto-backups) for a file, newest first — so you know what rollback_file would restore.
search_history
Search ALL of your past conversations with this user for something discussed before — a decision, a fact, a project detail, 'what did we say about X last week'. Returns matching snippets with the chat title + date. Use this to recall context beyond your live memory. Zero cost to your context window.
read_pdf
Extract the TEXT from a PDF file so you can read, summarize, or answer questions about it. Use for any .pdf the user mentions — reports, papers, invoices, contracts. If the PDF is scanned images (no text layer), it says so — use ocr_image on a page screenshot instead.
ocr_image
Read the TEXT inside an image (png/jpg/screenshot) using the OS's built-in OCR — for screenshots, photos of documents, scanned pages, error dialogs. Give it a file path; get the recognized text back.
query_csv
Run a real SQL SELECT over a CSV file — filter, aggregate, group, sort actual data instead of eyeballing it. The table is '?', e.g. "SELECT city, COUNT(*) AS n FROM ? GROUP BY city ORDER BY n DESC LIMIT 10". Numeric columns are auto-typed so SUM/AVG work. Use for any data question about a .csv.
create_document
Generate a polished, ready-to-send DOCUMENT (Word .docx or .pdf) — reports, letters, briefs, proposals, memos. Write the FULL body yourself as rich Markdown (use # / ## headings, **bold**, bullet/numbered lists, > quotes, and | tables |). Saves a real file the user can open. Prefer this over write_file when the user wants an actual document/report/deliverable.
create_spreadsheet
Generate a real SPREADSHEET (Excel .xlsx or .csv) — tables, budgets, trackers, data exports. Saves a file the user can open in Excel/Numbers/Sheets.
create_slides
Generate a PowerPoint DECK (.pptx) — pitch decks, presentations, reports as slides. Saves a file the user can open in PowerPoint/Keynote.
remember
Save a durable fact or preference about the user/project to long-term memory so you recall it in FUTURE sessions (their name, stack, preferences, key project details). Use for lasting facts — not transient task steps.
skill_view
Open one of your skills (how-to procedures) in full. Your turn context lists the skills you have — call this when a listed skill looks relevant but its body wasn't injected.
skill_manage
Create, update, or delete one of your skills — durable how-to procedures you follow in future sessions. AUTHOR A SKILL when you complete something non-trivial that took 5+ tool calls, recover from a dead end, or the user corrects your approach: capture the WINNING procedure, not the story. Writes may go to a pending queue for the user's approval.
search_sessions
Search your summaries of PAST conversations with this user ('what did we do last week', 'that site we built'). Complements memory: memory = facts, sessions = what happened when.
forget
Remove saved memories matching the given text (stale or wrong facts).
save_playbook
Record HOW you solved a non-trivial, multi-step task — a reusable recipe. Different from remember (which is for facts): this saves the working APPROACH so you handle similar requests faster and more consistently next time. Call it after you finish something involved (a build, a multi-step automation, a tricky workflow).
schedule_task
Schedule a RECURRING or future task that you'll run on your own and report back — e.g. 'every morning at 8am brief me on my calendar', 'every Monday summarize my unread email', 'in 2 hours remind me to stretch'. These run UNATTENDED, so use them for prep/reporting (briefs, summaries, drafts, reminders) — they will NOT send messages, make purchases, or do irreversible actions without you present. Give a clear prompt of what to do each run.
cancel_schedule
Cancel a scheduled task by its label or id.
list_schedules
List the tasks you have scheduled to run on their own.
create_goal
Create a DURABLE GOAL — a long-lived objective that spans many tasks and sessions (e.g. 'finish the product launch', 'keep the docs accurate'). Goals persist across restarts and devices. Use for multi-session objectives, NOT for one-off tasks.
update_goal
Update a goal after meaningful work: progress %, status (active|paused|complete|blocked|failed), blocker, next action, or completion evidence. Always record evidence when marking complete.
list_goals
List all durable goals with status, progress, blockers and next actions.
create_task
Add a task card to Mori's task board (the durable Kanban — survives restarts, visible on every device). Use when work should be tracked/queued rather than done immediately, or to break a goal into pieces.
update_task
Move/update a board task: change lane, record the latest action, set a blocker or result. Use lane=completed with a result when done; lane=waiting_user when you need the user.
list_tasks
List Mori's task board (optionally one lane) with ids, lanes, priorities, blockers.
list_dev_servers
List the dev servers you currently have running (pid, command, uptime).
list_memories
List everything you currently remember about the user/project.
move_file
Move or rename a file
copy_file
Copy a file to a new location
delete_file
Delete a file or directory (use with caution)
create_zip
Zip a folder or file into a .zip archive — use this to PACKAGE a site/app/project you built before emailing or uploading it. Pass the folder or file as source: a full path, a name, or 'the site/app you just made'. Returns the .zip path, and the zip is remembered — so right after, you can send_email it (attachmentPath: 'the zip you just made') or upload it. Typical flow: build the site (files) → create_zip the folder → send_email the zip.

Web & browser

30

Search, extract, operate sites, shop to the approval gate.

open_url
Open a URL in the default browser
search_google
Search Google for a query and open results in browser
open_browser
Open a specific or default browser
use_mori_chrome
Run a web task in the user's REAL Chrome via the Mori Chrome extension — their actual logged-in sessions (Gmail, GitHub, banking-free sites, etc.). Prefer this for web tasks that benefit from the user's real browser/login. Only offered when Mori Chrome is connected. Pass the full task as 'task'; returns Mori Chrome's result.
open_site_by_name
Open a well-known website by friendly name. Supports: Google, YouTube, GitHub, Reddit, Twitter/X, Discord, Amazon, Netflix, Twitch, LinkedIn, Facebook, Instagram, TikTok, Wikipedia, Gmail, Notion, Figma, Spotify, WhatsApp, Telegram, Slack, StackOverflow, npm, ChatGPT, Claude, Hacker News, Vercel, Codepen, Replit, and more. For unknown sites, opens https://www.{name}.com.
send_bulk_email
Send the SAME email to a LIST of recipients (up to 25 per run) through the user's signed-in Gmail — sequential, throttled, with a per-recipient sent/failed ledger returned at the end. MANDATORY FLOW: (1) draft it, (2) show the user the FULL recipient list + subject + body and ask for approval, (3) ONLY after they explicitly say yes, call this tool. It will refuse if the user's latest message isn't an approval. Never call it unattended or on a schedule.
deep_research
Do THOROUGH, autonomous research on a question — Mori breaks it into angles, sends parallel researcher sub-agents to search the live web and READ the best sources, then synthesizes a clear answer WITH a Sources list. Use for anything that needs real, cited findings across multiple sources (market/competitor research, 'find the best X and why', deep how-does-Y-work). For a single quick fact use web_search instead.
http_request
Call a URL or API directly and get the raw response back — JSON APIs, RSS/XML feeds, raw file contents, webhooks, status endpoints. Use this (not web_search) when you have an exact URL or API endpoint and want its actual payload. Supports method, headers, and body. 15s timeout, response capped at 200KB, local/private addresses blocked.
web_extract
Fetch a specific web page and return its clean readable TEXT (article body, stripped of scripts/markup). Use when you have a URL and want to READ it — deeper than a web_search snippet. For raw JSON/APIs use http_request instead.
focus_default_browser
Focus/bring to foreground the user's real default browser window (Chrome, Edge, Firefox, Brave). Use after opening a URL to interact with the browser.
browser_search_site
Search a specific website by opening the search results URL directly in the default browser. Supports: Amazon, GitHub, Google, YouTube, Reddit, X/Twitter, Wikipedia, npm, LinkedIn, and more. Uses direct search URLs — no UI interaction needed.
browser_compose
Open a compose/create view on a website in the default browser. Supports: X/Twitter (new tweet), Gmail (new email). After opening, use focus_default_browser + type_text to type content.
send_email
Send a real email through the user's signed-in Gmail in Chrome — the reliable ONE-STEP way to email someone, INCLUDING with a file ATTACHMENT (PDF, image, doc). Use this whenever asked to email/send something to an address. ATTACHMENTS: whenever the user references a file to send, pass that reference as attachmentPath — you do NOT need a full path. It accepts a full path, JUST a filename ('Nighttime_Routine.pdf' or even 'the nighttime routine pdf'), or a phrase like 'the pdf you just made' / 'the file you just created'. Mori resolves it by searching Desktop/Downloads/Documents and by remembering the last file it created this session — so right after you build a PDF you can send it without restating the path. Returns JSON {ok, status, message}: status 'sent' = really sent (say so confidently); 'not_signed_in' = the user must sign into Gmail in Chrome (tell them, offer to resend); 'attach_failed' = the file couldn't be found or the attachment couldn't be confirmed — report exactly what it says, do NOT claim it sent. Only claim it sent when status is 'sent'.
upload_to_drive
Upload a file to the user's signed-in Google Drive (My Drive) through the browser. Use this when asked to upload/put/save/back-up a file to Google Drive. Pass the file as a full path, a bare filename, or 'the zip/file you just made' — Mori resolves it. Returns JSON {ok, status, message}: 'sent' = upload confirmed; 'not_signed_in' = tell the user to sign into Drive in Chrome; 'attach_failed' = file not found / couldn't drive the uploader. Only claim it uploaded when status is 'sent'. Common flow: build a site → create_zip → upload_to_drive the zip.
web_search
Search the web and READ the results back as text — the way to ANSWER questions with current/live info you don't reliably know: crypto/stock prices, 'today/now/latest/current' values, exchange rates, weather, sports scores, breaking news, or any fact you're unsure of. It returns the page's answer box + snippets so you can read the REAL number/fact and report it. ALWAYS use this for live or uncertain data instead of answering from memory (a remembered price/stat is a fabrication). Unlike search_google (which only opens a tab), this gives you the text to read.
operator_search
Open a real controllable browser and search a shopping site, then return the top listings (title, price, rating). Use this for "find the best X", "compare prices", "shop for Y". Supported sites: amazon, ebay, walmart, bestbuy, target, etsy, google. After this, COMPARE the results and present the best options to the user.
operator_read_results
Re-read the product listings on the current operator-browser page (after it loads more, or after navigating). Returns numbered results.
operator_add_to_cart
Add a product to the cart in the operator browser. PREFER passing query = the product's name/title (it matches the right item even if numbering shifted); index is a fallback. Opens the product and clicks Add to Cart. After this you MUST STOP — never proceed to checkout or payment; the user completes the purchase themselves.
operator_goto
Navigate the operator browser to a specific URL.
operator_screenshot
Capture what the operator browser currently shows (for you to inspect the page).
operator_status
Get the operator browser current URL and page title.
operator_close
Close the operator browser when finished.
chrome_read_page
Read the ACTUAL page in the user's real Chrome (their logins, their sessions) via the Mori Chrome extension: full structured extraction — title, headings, every interactive element (indexed), links, page text. Pass url to navigate first, omit to read what's open. Use when the page context or a login matters; plain lookups should use web_search/web_extract instead. TELL the user before using Chrome. The first Chrome action each turn asks the user for an OK.
chrome_act
Act inside the user's real Chrome via the extension: click / type / select / press / scroll on an element by its [index] from the last chrome_read_page. Returns the action outcome + a fresh page read. Only works on sites the user has approved in the side panel; never touches payment or credentials.
chrome_screenshot
Screenshot the visible tab of the user's real Chrome via the extension (downscaled). Use to SEE a page when the structured read isn't enough (canvas apps, visual checks).
github_search
Search GitHub repositories by keywords (sorted by stars). REAL research: find libraries, reference implementations, prior art. Follow up with github_read to read the winning repo.
github_read
Read a GitHub repo directly: without "path" returns metadata + README + the full file tree; with "path" returns that file's contents (via the CDN — effectively unlimited). The real way to study how a library works.
package_lookup
Look up packages on npm / PyPI / crates.io: version, description, weekly downloads, deps, install command. Exact name gives full metadata; keywords search (npm/crates).
stack_answers
Search StackOverflow and return the top-voted FULL answer for a technical question or error message — ground truth for debugging, not search snippets.
hn_search
Search Hacker News discussions — prior art, library sentiment, "has anyone hit this" discourse. Returns stories with points/comments; web_extract a link to read further.

Terminal

11

The login shell — builds, installs, scripts, processes.

list_processes
List running processes (pid, CPU, memory). Optionally filter by name.
kill_process
Terminate a process by PID. Use to stop a runaway or stuck process (get the PID from list_processes).
start_dev_server
Start a project's dev server (e.g. vite/next/expo) and leave it RUNNING in the background. Returns the pid and the local URL (e.g. http://localhost:5173) once it prints one. Use open_preview or http_request against that URL to check it. Stop it later with stop_dev_server.
stop_dev_server
Stop a running dev server by pid, or by a fragment of its command/folder. Omit to stop all.
run_terminal_command
Execute a shell command and return the output. Use for npm, git, build tools, tests. Default timeout 300s (max 600 via timeout_seconds). For servers/watchers that never exit, use start_dev_server instead — never run them here.
terminal_open
Open a NAMED, persistent shell session that survives across turns (cd, env vars, and running processes all persist). Reuse the same name to keep working in it. Backend 'local' = the user's own shell; 'docker' = a hardened throwaway container (needs Docker); 'ssh' = a remote host (needs key auth). The user's MoriTerminal UI shares these exact sessions with you.
terminal_run
Run a command in a named session (opened via terminal_open) and wait for it to finish. Returns the exit code and bounded output (head+tail; the middle of very long output is elided). State persists between calls in the same session. For servers that never exit, prefer start_dev_server.
terminal_read
Read the most recent output lines from a named session without running anything — useful to check on a long-running command or catch up on a session the user has been typing into.
terminal_list
List all open terminal sessions as JSON: name, backend, current working directory, whether a command is running (busy), and when it was created.
terminal_close
Close a named terminal session and reap its shell (and, for docker/ssh, the container/connection). Always close sessions you no longer need.
install_npm_dependencies
Run npm install in a project directory

Apps & system

15

Open, focus, and drive desktop applications.

open_app
Open any desktop application by friendly name. Supports: Discord, Chrome, Edge, Firefox, Brave, VS Code, Notepad, Calculator, Paint, Explorer, PowerShell, CMD, Terminal, Spotify, VLC, Slack, Telegram, Teams, Zoom, Steam, Word, Excel, OBS, Task Manager, and more. The backend handles Windows path resolution automatically.
focus_app
Bring a running application window to the foreground
close_app
Force close a running application by process name
open_vscode
Open Visual Studio Code
open_new_vscode_window
Open a new VS Code window
open_terminal
Open Windows Terminal or Command Prompt
open_powershell
Open PowerShell
open_cmd
Open Command Prompt
system_control
Control the machine itself: set_volume (0-100, pass 'value'), mute, unmute, dark_mode_on, dark_mode_off, sleep_displays, lock_screen, wifi_on, wifi_off. Use when the user says 'turn it down', 'dark mode', 'lock my screen', etc.
music_control
Control music playback: play, pause, playpause, next, previous, or now_playing (returns the current track). Works with Spotify and Apple Music — auto-picks whichever is running, or pass 'app'.
get_calendar_events
Read the user's upcoming calendar events (macOS Calendar) — for 'what's on my calendar', daily briefs, scheduling around their day. Returns events in the next N days.
create_calendar_event
Add an event to the user's calendar (macOS Calendar). Give a title and an ISO start time; duration defaults to 60 minutes.
create_reminder
Add a reminder to the user's Reminders app (macOS) — for 'remind me to call mom tomorrow at 5'. Optional ISO due time; otherwise it lands undated in the default list.
focus_app_window
Find a running application by process name and bring its window to the foreground. Returns NOT_RUNNING if the app is not open.
is_app_running
Check if an application is currently running. Returns RUNNING:count or NOT_RUNNING.

Screen & input

25

See the screen, click, type — the computer-use layer.

send_discord_message
Send a Discord message to a person or channel (works while the Discord bot is running). Use when the owner asks you to message / DM / tell / reply-to someone on Discord. Resolve the recipient by @mention, username, user ID, or channel ID.
send_discord_file
DELIVER a FILE (zip, pdf, doc, image, spreadsheet, anything) to the owner over Discord — the reliable way to actually hand over something you built or found when the conversation is on Discord. Defaults to the CURRENT Discord chat, so you usually just pass the file. The file ref resolves like email attachments: a full path, a bare filename ('site.zip'), or a phrase like 'the zip you just made' / 'the file you just created'. Optionally add a short caption. Prefer this over email when the owner is on Discord, and use it instead of only saying a file is 'saved on disk'. Returns a confirmation; only claim it was sent when it confirms.
run_self_test
Run Mori's built-in DIAGNOSTICS — actually exercises the terminal, file access, keyboard, mouse, app-detection, active-window, and screen-capture subsystems on THIS machine and reports which pass/fail. Use when the user asks you to 'test yourself', 'run diagnostics', 'check what works', 'are your tools working', or when troubleshooting why actions keep failing (especially on Windows).
run_subtask
Delegate an INDEPENDENT chunk of a big job to an isolated SUBAGENT with its own fresh context — use for parallelizable or self-contained pieces (research one of several topics, build one module of a larger app, draft one document of a set) so your own context stays focused. The subagent has your full tools, works autonomously without asking questions, and returns a compact result (with file paths for anything it created). Call up to THREE run_subtask calls in a single response to run them IN PARALLEL. Pass everything it needs in 'goal' + 'context' — it cannot see this conversation. It cannot spawn further subtasks or edit memory. Optionally give it a specialist 'role': researcher (gathers facts, read-only), coder (implements and runs code), critic (reviews and finds problems, read-only), designer (shapes look/feel/UX).
read_clipboard
Read the current text on the system clipboard — whatever the user last copied. Use when they say 'the thing I copied', 'paste it here', 'what's on my clipboard', or hand you content by copying it.
write_clipboard
Put text ON the system clipboard so the user can paste it anywhere with Cmd/Ctrl+V — great for handing them a link, a snippet, a password-free config, or anything they'll paste into another app. Verified after writing.
configure_app
Change SAFE, cosmetic/UX app settings for the user by chat. You can set ONLY these: theme (say "dark", "light", or a preset name: Mori, Midnight, Paper, Terminal, Sakura, Slate), thinking stage (spark|flow|forge|trance), spoken replies on/off, ElevenLabs voice id, sidebar density (simple|standard|pro), chat font size (sm|md|lg), scheduled-run notification level (info|warning|alert), and the active model id for the CURRENT provider. Pass only the fields you want to change; omit the rest. Changes apply and persist immediately. This can NOT touch autonomy/permissions, provider API keys, spend caps, bot tokens/ownership, or the account — those are refused, and you should tell the user to change them in Settings themselves.
mouse_drag
Drag the mouse from one screen point to another (press, move, release) — for drag-and-drop, sliders, moving items between panes, drawing. Coordinates are absolute screen pixels.
take_screenshot
FALLBACK ONLY — Capture a screenshot of the current screen. Do NOT use this as a first action. Use direct tools (open_app, open_url, create_file, etc.) first. Only use screenshots when direct tools have failed and you need to see the screen state.
inspect_screen
FALLBACK ONLY — Capture and inspect the current screen state. Do NOT use this as a first action. Use direct tools first. Only use when you need to observe the screen after direct tools have failed.
get_active_window
Get info about the currently active/foreground window (title, process name, PID).
screen_elements
PREFERRED way to drive apps: list the interactive elements (buttons, fields, links, menus…) of the frontmost window as a numbered list, read from the OS accessibility tree. Works with ANY model — no screenshot or vision needed. Then act with click_element. Re-run after every navigation: ids go stale when the screen changes.
click_element
Click an element from the last screen_elements list, by id (preferred) or by (partial) name. Resolves to the element center and clicks it. Call screen_elements first; re-list after the screen changes.
mouse_move
Move the mouse cursor to screen coordinates (x, y).
mouse_click
Move mouse to (x, y) and perform a left click. Use for clicking buttons, links, input fields, etc.
mouse_double_click
Move mouse to (x, y) and perform a double left click.
mouse_right_click
Move mouse to (x, y) and perform a right click (context menu).
scroll
Scroll the mouse wheel. Positive = scroll down, negative = scroll up. Amount is in "clicks" (1-10 typical).
wait
Wait/pause for a specified number of milliseconds before the next action.
hotkey
Press a keyboard hotkey/shortcut using SendKeys format (e.g. "^s" for Ctrl+S, "%{F4}" for Alt+F4, "{ENTER}", "^a" for Ctrl+A).
show_notification
Show a native desktop notification
type_text
Type text using keyboard simulation
press_keys
Press keyboard key combinations (e.g. {ENTER}, ^c for Ctrl+C)
send_keys_to_app
Focus a running application and send keyboard keys to it. Use SendKeys format (e.g. "^k" for Ctrl+K, "{ENTER}", "^a").
type_into_app
Focus a running application and type/paste text into it. Better than type_text for long text or special characters because it uses clipboard paste.

Other

3

Memory, messaging, scheduling, and everything else.

tool_search
Your tool schema shows only the core tools — MANY more exist (git suite, calendar, PDFs/OCR/CSV, music/system control, browser operator, zip, drive, workspaces, MCP servers…). Search the full catalog by capability, e.g. "calendar event", "ocr image", "zip folder". Returns matching tool names + descriptions. Then call tool_describe for the schema and tool_call to run it.
tool_describe
Get the full parameter schema of one tool from the catalog (found via tool_search) before calling it with tool_call.
tool_call
Run a catalog tool that is not in your visible schema (found via tool_search / tool_describe). Same permissions and approval gates as calling it directly.