Skip to main content

Tools & Permissions

Toporic comes with a built-in set of tools that let the agent read files, edit code, run shell commands, search the web, and more. The agent decides which tools to use on its own — you don’t need to know tool names or parameters.

What you do control is which tools and commands run automatically versus which ones ask for your approval.

Tool categories

CategoryWhat the agent can doExamples
FilesystemRead, write, edit, delete files; list directoriesEditing source files, creating new components
ShellRun commands in your workspaceTests, builds, git operations, package installs
SearchSearch your codebaseFinding functions, tracing references, grep
WebFetch URLs, search the webLooking up documentation, API references
LSPQuery language serversGo-to-definition, find references, hover info
GitRead and write gitStatus, diff, commit, push, pull
TodoTrack tasks and load skillsTask planning, skill activation

Permission modes

Choose how much the agent can do without asking:

ModeBehaviorHow to enable
AutoAll tools run without confirmationDefault for --goal. In TUI, press Tab until [AUTO] shows.
BuildMutating tools prompt for permission before each run--goal --build "..." or /build in TUI
PlanAgent shows a plan but executes nothing--goal --plan "..." or /plan in TUI

In Build mode, when the agent wants to run a command or edit a file, you see a confirmation dialog:

Allow tool execution?

run_command: cargo test

[Y] Yes    [N] No

Press Y to allow it this once, or N to deny. If you trust the agent’s judgment, use Auto mode.

Fine-grained permissions

You can go beyond the basic mode toggle. In ~/.toporic/config.json, the permissions section gives you precise control:

{
  "permissions": {
    "auto_approve_reads": true,
    "enable_llm_classifier": false,
    "safe_commands": [
      "cargo test",
      "cargo build",
      "npm test",
      "npm run build",
      "npm run lint",
      "pytest",
      "go test",
      "git status",
      "git diff",
      "git log",
      "ls",
      "cat",
      "echo"
    ],
    "allowed_outside_paths": ["/tmp", "/var/log"]
  }
}

auto_approve_reads

When true (default), all read-only tools run without prompts — even in Build mode. This includes read_file, list_dir, search_files, and similar. The agent can explore your codebase freely without interrupting you, while writes and commands still need approval.

safe_commands

A list of shell command prefixes that are always safe to run without confirmation. When the agent runs a command that starts with one of these prefixes, it auto-approves regardless of the current mode.

"cargo test"      matches  cargo test --all
"npm run build"   matches  npm run build --watch
"git status"      matches  git status --short
"ls"              matches  ls -la

This is the most common way to reduce permission fatigue: add your project’s test and lint commands, and they’ll run without prompts even in Build mode.

enable_llm_classifier

When true, Toporic uses a second LLM call to classify each shell command as SAFE, RISKY, or DANGEROUS before running it. SAFE commands auto-approve; the rest prompt you.

This is a “smart” alternative to safe_commands — it handles edge cases without you having to list every variation of every command. The trade-off is an extra ~200–500ms of latency and a small API cost per command.

allowed_outside_paths

By default, all tool operations must be within your workspace root. If the agent needs to read or write files outside the workspace (e.g. /tmp, /var/log, ~/Downloads), list those paths here. The tilde ~ expands to your home directory.

Tool policies in skills

Each skill can declare its own tool policy, restricting which tools the agent can use when that skill is active:

tool_policy:
  allowed:
    - read_file
    - write_file
    - run_command
    - search_files
  denied:
    - delete_file

This is useful for limiting a skill to its intended scope — for example, a code-review skill might only allow read-only tools plus git operations.

Command allowlist

For security, run_command only permits a predefined set of programs. Unrecognized commands are rejected before execution. The built-in allowlist includes:

cargo, git, python3, python, node, npm, make, pytest,
rg, ls, cat, echo, mkdir, rm, cp, mv, touch, grep, find,
curl, wget, pwd, true, rustfmt, clippy, jq, tar, unzip, zip, wc

If you need a program not listed here, contact support or open an issue — the allowlist is maintained based on community feedback.