Docs/Advanced: command line/Tools

Tools

Dynamo has built-in tools that the AI model uses to interact with your project. Run /tools to see the full list.

File Tools

ToolDescription
read_fileRead file contents — text (line-numbered), images (vision), PDFs, notebooks
write_fileCreate or overwrite a file
edit_fileFind-and-replace edit within a file
list_filesList files matching a glob pattern
search_filesSearch for patterns across files (ripgrep-backed)
move_fileMove a file (records a VCS rename; carries engine-paired siblings like Unity .meta)
rename_fileRename a file in place (alias of move_file)
delete_fileDelete a file (carries engine-paired siblings)
directory_summarySummarize a directory: file count, total size, breakdown by extension — in one call

read_file

Reads any file type. Dispatches by extension:

File TypeBehavior
Text (.cs, .ts, .yaml, etc.)Line-numbered content with offset/limit params
Image (.png, .jpg, .gif, .webp)Base64 sent to vision models. RGBA PNGs flattened to RGB.
PDF (.pdf)Text extraction with optional pages param ("1-5", "3")
Notebook (.ipynb)Parsed cells with code blocks, markdown, and outputs
Binary (.fbx, .exe, .mp3, etc.)Rejected with file info

search_files

Powered by ripgrep (rg). Falls back to basic JS regex if rg is not installed.

ParameterDescription
patternRegex pattern to search for
pathDirectory to search (default: project root)
globGlob filter (e.g. "*.ts", "*.{cs,shader}")
typeFile type shorthand (ts, cs, py, json, hlsl, etc.)
output_modefiles_with_matches (default), content, count
contextLines of context before and after each match
case_insensitiveCase-insensitive search
head_limitMax results (default: 250)
offsetSkip first N results
multilineEnable multiline mode (. matches newlines)

Shell

A chat turn with several steps, one opened to show what it asked for and what came back
In the app: every tool call is a step you can open

run_command executes shell commands with:

  • ●Two invocation modes — command: "string" (shell-wrapped, supports pipes/glob/redirect) or argv: ["array", "form"] (direct spawn, no escaping needed for paths with spaces). Exactly one must be provided.
  • ●Persistent working directory — cd carries across tool calls. Reset on /clear.
  • ●Configurable timeout — default 2 minutes, max 10 minutes. Set in dynamo.yaml under ai.shell.defaultTimeout.
  • ●Background execution — long commands can run in the background. Model gets notified when they finish.
  • ●Middle truncation — large output keeps the first and last 25K chars, truncates the middle.
  • ●Shell detection — uses your $SHELL, not a hardcoded shell. On Windows it uses cmd unless SHELL names another; the model can ask for PowerShell.
  • ●`DYNAMO=1` environment variable set so your scripts can detect they're running inside Dynamo.

Background Jobs

When the model runs a command with run_in_background: true:

  1. 1.The command starts immediately and the model continues responding
  2. 2.The jobs bar shows at the bottom: Jobs: 1 Ctrl+G to focus
  3. 3.Press Ctrl+G to open the jobs picker with progress bars
  4. 4.When the job finishes, the model auto-responds with the result
  5. 5.Press Ctrl+K in the jobs picker to kill a running job

The model manages background jobs with these tools:

ToolDescription
job_listList background jobs with their status
job_outputRead a job's accumulated output
job_killKill a running background job

Web Tools

ToolDescription
web_fetchFetch a URL and return content as markdown
web_searchSearch the web (provider-native, runs on the provider's servers — Anthropic, OpenAI, Gemini)

web_fetch

Fetches a URL, extracts article content with Readability, converts HTML to markdown.

  • ●HTTPS upgrade — http:// URLs auto-upgraded to https://
  • ●15-minute cache — same URL returns cached result
  • ●Readability extraction — strips nav, ads, sidebars, returns article content only
  • ●50K char cap — large pages truncated with notice
  • ●30s timeout — prevents hanging on slow servers

web_search

Server-side search — the provider runs the search, not Dynamo. No separate API key needed.

ProviderHow it works
Anthropic (Claude)Server-side tool. Returns structured results with title, URL, and page age.
OpenAI (GPT)Responses API with web search. Citations embedded inline in response text.
GeminiGoogle Search grounding (google_search). No separate API key. Results parsed from the response's grounding metadata.
OpenRouter / OllamaNo server-side search. The model can still use the client-side web_fetch tool with known URLs.

Interactive

ToolDescription
ask_userAsk the user a structured question with selectable options

The model calls ask_user when it needs a decision — choosing between approaches, confirming a plan, selecting config options. Shows an interactive picker you navigate with arrow keys.

  • ●Single or multi-question — up to 4 questions per call
  • ●Tab navigation — switches between questions
  • ●Option selection — arrow keys to navigate, Enter to select
  • ●Custom input — "Other..." option opens inline text field for free-form answers

Task Management

ToolDescription
task_createCreate a task to track a unit of work
task_listList all tasks with status
task_updateUpdate status, subject, description, or dependencies
task_getGet full task details
task_stopStop/cancel a task
task_clearClear tasks by status or all

Tasks track multi-step work with status and dependencies:

pending → in_progress → completed
                      → stopped

When a blocking task completes, dependent tasks auto-unblock. IDs are sequential — adding or deleting renumbers all tasks.

Use /tasks for an interactive task manager overlay, or let the model manage tasks via tool calls.

Git Tools

ToolDescription
git_statusShow branch, tracking info, staged/unstaged changes
git_diffShow file changes with diff rendering
git_logShow recent commit history
git_addStage files
git_unstageUnstage files
git_commitStage files and create a commit
git_pushPush commits. A push to a protected branch, a force-push, a branch deletion, or an unknown remote escalates to dangerous; a force-push to a protected branch is blocked
git_lfs_pushPush Git LFS objects

GitHub Tools

These need the GitHub CLI (gh) installed and authenticated. The seven list/view/diff tools are safe; the five that post something — gh_pr_create, gh_pr_comment, gh_pr_review, gh_issue_create, gh_issue_comment — are write.

ToolDescription
gh_pr_createCreate a pull request for the current branch
gh_pr_listList pull requests, filtered by state, head or base branch, author, label, or a search
gh_pr_viewView one PR: author, state, review decision, review verdicts, CI check rollup
gh_pr_diffFetch a PR's unified diff, or just its changed-file list
gh_pr_commentPost a comment on a PR
gh_pr_reviewSubmit a review — approve, request changes, or comment
gh_run_listList GitHub Actions runs, filtered by branch, workflow, status or event
gh_run_viewView one run: status, conclusion, per-job results, and the failed steps' logs
gh_issue_createOpen a new issue
gh_issue_listList issues, filtered by state, label, author or assignee
gh_issue_viewView one issue: state, labels, assignees, body, and its comments
gh_issue_commentPost a comment on an issue

The CI check rollup in gh_pr_view needs your GitHub token's "Checks: Read" permission. Without it, that one line says the rollup was denied and the rest of the PR still comes back. When a PR has no checks yet, it says none are reported instead of staying silent. gh_run_list and gh_run_view read Actions, a separate permission, and answer CI status either way.

Permissions

Tools are classified by risk level:

LevelBehaviorExamples
SafeAuto-executeread_file, list_files, search_files, git_status, web_search
WritePrompt once per tool, per modelwrite_file, edit_file, web_fetch, git_commit
DangerousPrompts every time; "Allow every" is never offered and no grant covers itrun_command (every command), move_file, rename_file, delete_file, checkpoint_restore, job_kill; git_push to a protected branch, with a force flag, deleting a branch, or to an unknown remote; git_lfs_unlock --force
BlockedNever runs, in any modeshell strings matching sudo, command substitution ($(), backticks), parameter expansion (${}), or process substitution (<(…), >(…)); any force-push to a protected branch, by run_command or git_push

Any force-push to a protected branch — the default branch, a permissions.protected_branches pattern, or a GitHub-protected branch — is blocked in every spelling and argument order, by run_command and git_push alike. Set permissions.allow_force_push_protected: true in dynamo.yaml to make it ask every time instead. A plain push to a protected branch is dangerous, which Auto Mode approves.

"Allow every" is scoped per tool, per model, and persists across session resume. It never covers a dangerous call. Switching models doesn't wipe approvals — each model keeps its own grants.

--auto (-y) approves the safe, write and dangerous tiers as they come, so a task runs without step-by-step confirmation. Note that every run_command sits in the dangerous tier — ls as much as rm — so Auto Mode is one trust decision about the shell, not a per-command judgement. Unchanged by it: blocked patterns never run, and Dynamo still asks before it touches protected files like .env or keys, restores or deletes a checkpoint, stops a job, turns a skill back on, force-pushes to a protected branch you allowed, and during a compile-error cascade.

See Permissions & Security for the full security model.

Sandbox Mode

Controls filesystem access for all tools including shell commands.

Moderead_filewrite/editlist/searchrun_command
projectproject onlyproject onlyproject onlyblocks paths outside the project
full (default)project onlyproject onlyanywhereblocks paths outside the project
unrestrictedanywhereanywhereanywhereno path checks (still permission gated)

Set via CLI (--sandbox project), config (ai.sandbox: project), or at runtime (/sandbox).

Checkpoints

Auto-checkpoint before file edits — snapshot the file's pre-write state so you can undo.

  • ●Auto-checkpoint — created once per prompt, before the first write_file/edit_file and before destructive shell commands
  • ●File-level snapshots — copies file content before modification. New files snapshot as "didn't exist"
  • ●Rollback — restores files to pre-write state. Also rewinds conversation history.
  • ●Disk persistence — survives restarts, stored under your config dir (per project)
  • ●30-day cleanup — old checkpoints auto-purged on startup

Use /checkpoint for an interactive overlay to rollback, delete, or create manual checkpoints.

Configurable: ai.auto_checkpoint: false in dynamo.yaml to disable.

Syntax Highlighting

Tool results and model responses are syntax highlighted:

  • ●Code blocks highlighted with Catppuccin Mocha theme (191 languages)
  • ●File reads highlighted by file extension
  • ●Diffs rendered with line numbers, background tints, and word-level inline diff
  • ●Markdown rendered inline: headers, bold, inline code, links