tauτ

Permissions

TAU uses a pattern-based permission system with risk levels for safe agent operation.

Risk Levels

Each tool operation has an associated risk level:

LevelDescriptionExamples
NoneRead-only, safe operationsread, grep, code_search, glob
LowMinor modificationswrite (new files), webfetch
MediumFile modificationsedit, multiedit, patch
HighSystem commands, external accessbash, shadow_run, browser_*
CriticalDestructive operationsrm -rf, /etc/* writes

Permission Scopes

allow

Execute without asking. Use for safe, frequent operations.

ask

Prompt user for confirmation before executing.

deny

Block execution entirely. Use for dangerous patterns.

Pattern Rules

Define rules with glob patterns that match tool input:

# ~/.config/tau/config.toml

[permissions.patterns]
# Allow read operations everywhere
Read."**" = "allow"

# Allow grep and code_search
Grep."**" = "allow"
CodeSearch."**" = "allow"

# Ask before writing to any file
Write."**" = "ask"
Edit."**" = "ask"

# Deny dangerous bash patterns
Bash."rm -rf *" = "deny"
Bash."rm -rf /*" = "deny"
Bash."/etc/*" = "deny"
Bash."sudo *" = "deny"

# Allow specific safe commands
Bash."cargo *" = "allow"
Bash."npm *" = "allow"
Bash."git *" = "allow"

Conflict Resolution

When multiple rules match, the most restrictive wins:

deny > ask > allow
# Example: These rules...
Bash."**" = "allow"           # Allow all bash
Bash."rm *" = "deny"          # Deny rm commands

# ...mean "rm -rf foo" is DENIED (deny > allow)

Session Permissions

Permissions can be granted per-session:

# When prompted, you can choose:
# - Allow once (this execution only)
# - Allow always (save to session)
# - Reject (deny this execution)

# Stored in database:
# CREATE TABLE permissions (
#     session_id TEXT,
#     tool TEXT,
#     scope TEXT,  -- 'once', 'always', 'reject'
#     session_only INTEGER
# );

TUI Permission Prompt

┌─────────────────────────────────────────┐
│ 🔐 Permission Required                  │
├─────────────────────────────────────────┤
│                                         │
│ Tool: Bash                              │
│ Command: npm install                    │
│ Risk: Medium                            │
│                                         │
│ [A] Allow once                          │
│ [S] Allow always (this session)         │
│ [R] Reject                              │
│                                         │
└─────────────────────────────────────────┘

Default Permissions

Out of the box, TAU uses these defaults:

ToolDefault
read, grep, glob, code_searchallow
write, edit, patchask
bash (safe commands)ask
bash (rm, sudo, etc.)deny
browser_*, vision_*ask

GitHub Actions Guardrails

Extra limits when running as GitHub Actions agent:

# Max files changed per commit
export TAU_GITHUB_MAX_FILES_CHANGED=50

# Max lines changed per commit
export TAU_GITHUB_MAX_LINES_CHANGED=5000

# Block workflow file changes (security)
export TAU_GITHUB_ALLOW_WORKFLOW_CHANGES=0  # default

# Checks run before push:
# - cargo fmt --check
# - cargo clippy -D warnings
# - cargo nextest run