Your assistant can read files, run commands, browse the web, and control your screen. The permissions model controls which of those actions happen automatically and which ones need your approval.
Every permission check is deterministic — enforced by traditional software, not judged by the AI. The approval buttons you see are hard-coded responses, not natural language interpreted by the model. This means there's no way to prompt-inject past a permission boundary.
Every tool your assistant uses is classified with a risk level:
Risk classification runs in the gateway — a separate, deterministic process outside the AI sandbox. Shell commands are parsed using a tree-sitter parser; other tools are classified based on their registry metadata.
When a tool needs your approval, you see:
Your risk tolerance controls the threshold below which actions auto-approve without prompting. You can configure it in Settings > Permissions & Privacy.
| Setting | What auto-approves | What prompts |
|---|---|---|
| 🔒 Strict | Nothing | Everything — every action requires explicit approval |
| 🛡️ Default | Low-risk actions | Medium and High-risk actions (reading files and web searches auto-approve; writes, commands, and API calls prompt) |
| ⚠️ Relaxed | Low and Medium-risk actions | High-risk actions only (file writes and workspace commands auto-approve; destructive operations still prompt) |
| 🚫 Full access | Everything | Nothing — your assistant never asks for permission |
The default setting is Default, which auto-approves low-risk read-only operations and prompts for everything else.
Under the Advanced section in Settings, you can set different thresholds for different execution contexts:
This lets you give your assistant more autonomy for background tasks it runs on its own, while keeping tighter controls on API-triggered actions where external callers are involved.
When an action exceeds your risk tolerance, you see a permission prompt with two options:
git push *), clicking Allow also creates a trust rule so similar actions auto-approve in the future.The Allow button has a split menu with an additional option:
Every completed tool call (including auto-approved ones) shows a risk badge in the expanded view. Clicking the badge opens the Rule Editor, letting you proactively create or adjust rules from any tool call.
Think of your assistant's workspace as a separate computer inside your computer. It's a self-contained environment where the assistant can run freely — creating files, modifying data, running commands — without needing your approval. Anything that happens inside this inner computer stays contained.
Inside the workspace (~/.vellum/workspace/):
Outside the workspace (your host machine):
When the assistant needs to do something outside its workspace, it doesn't reach out directly. Instead, it tells a separate process — one that lives outside the sandbox — to perform the action and report back. That external process is deterministic, traditional software with no AI involved. The AI stays inside the cage at all times.
The sandbox is enforced at the OS level (sandbox-exec on macOS, bubblewrap on Linux). Path traversal attacks (using ../ to escape the workspace) and symlink escapes are blocked.
Not all shell commands are equal. Your assistant parses commands using a tree-sitter parser and classifies them based on what programs they invoke:
Low risk — read-only programs: ls, cat, grep, find, git status, git log, git diff, node, python, jq, tree, du, df, ping, dig, and similar.
Medium risk — programs that modify state: sed, awk, chmod, chown, curl, wget, non-read-only git subcommands (like git commit, git push), and any program not in the known-safe list.
High risk — dangerous programs: sudo, rm, dd, mkfs, reboot, shutdown, kill, iptables, and other system administration tools.
This parsing also generates “action keys” for pattern matching. When you approve git push, the system creates a rule that matches future git push commands without also matching git reset --hard.
Trust rules are persistent decisions that tell the system to always allow or always deny specific actions. They accumulate over time as you use your assistant — the more you approve, the fewer prompts you see.
Each rule has:
Rules are matched using glob patterns. You can have a broad “allow git everywhere” rule and a narrow “deny git push --force everywhere” rule, and the deny will win because deny takes precedence over allow at equal priority.
You can view and manage your trust rules in Settings > Permissions & Privacy.
The Rule Editor opens when you click “Allow & Create Rule” on a permission prompt, or when you click the risk badge on any completed tool call. It lets you customize exactly what the rule matches before saving.
The Rule Editor shows:
When opened via “Allow & Create Rule,” the fields are pre-populated with an LLM-suggested pattern and scope based on the action you're approving. You can adjust anything before saving.
Trust rules can be scoped to specific directories. For example, you might allow git push in your work project but not in your personal dotfiles. When a tool operates on files, the system resolves the actual filesystem paths and checks them against directory-scoped rules.
The default scope is “Everywhere,” which means the rule applies regardless of which directory the action targets. You can narrow this in the Rule Editor to scope rules to a specific project.
Tools provided by third-party skills (ones you've installed, not the ones bundled with Vellum) are always prompted by default, regardless of risk level. This prevents a malicious or buggy skill from executing actions without your knowledge.
Bundled skill tools (Browser, Gmail, Calendar, etc.) follow the normal risk-based rules.
Trust rules for skill tools are version-bound — they record the skill's content hash. If the skill's source files change, the hash changes and you're re-prompted. Modified skills can't silently inherit previous approvals.
On top of the assistant's own permission system, macOS has its own layer:
| Permission | What it unlocks | Where to grant it |
|---|---|---|
| Accessibility | Controlling mouse and keyboard | System Settings > Privacy & Security > Accessibility |
| Screen Recording | Seeing your screen content | System Settings > Privacy & Security > Screen Recording |
| Microphone | Voice input | System Settings > Privacy & Security > Microphone |
These are the “can it access this at all” layer. The assistant's Allow/Deny prompts are the “should it access this right now” layer. Both must pass for an action to execute.
When someone messages your assistant through Telegram or Slack and the assistant needs to do something that requires permission, it routes the approval request to you (the guardian) through your active channel.
Approval grants are:
Guardian approvals are always downgraded to one-time grants — they never create persistent trust rules. To create a rule that auto-approves future actions, you'd need to do that directly from the desktop app.
When you deny an action:
If you create a deny rule for a pattern, future attempts to use that tool with a matching pattern are blocked silently — the assistant won't even ask.