Permissions and Modes
Normal and yolo modes, trust, allow and deny rules.
Two modes plus scoped session rules. No path sandbox: the permission system is the control plane.
Modes
Default is normal:
- Read-only tools auto-run in every mode
- Approval tools (
write,edit,bash) pause for approval in normal mode:yonce,aalways this session,ttrust all write/edit/bash,ndeny - Every auto-approved call still renders its audit line
Tabtoggles normal/yolo./yolotoggles too./modeprints the current mode- Yolo mode never asks
/trust is a session trust tier between normal and yolo:
- First
/trustauto-approves all three approval tools at once without global yolo - Status shows
+trust - Second
/trustrevokes - In-memory only, never saved
Scoped rules
Finer than all-or-nothing trust. Session-only, in-memory, never saved.
/allow <tool[:glob]>
/deny <tool[:glob]>
/rules
/rules clear
Examples:
/allow bash:npm test*
/allow write:src/**
/deny bash:rm *
- Bare
/allow bashmatches any bash args. Bare tool name matches any call to that tool - The glob matches the tool primary string, the same primary shown in the audit line: path for
read/write/edit, pattern forglob/grep, command forbash, url/query forwebfetch/websearch, taskId forbash_output, question forask_question. Other tools have no primary, so only tool-only rules match them - Glob dialect:
*matches any sequence (including/and spaces),?matches exactly one char, everything else literal. Case-sensitive - Tool names are single lowercase tokens. Anything else is rejected loudly rather than stored as a never-matching rule
Precedence
Deny is checked first and wins over everything: yolo, session trust, always, and skill grants. Then the first allow match auto-approves. Otherwise the normal prompt flow applies.
Deny wins
A deny rule beats yolo mode, session trust, always approvals, and skill grants. When in doubt, deny first and narrow later.
Rules only take effect on approval-gated calls (write/edit/bash) because read-only tools never consult approval. A rule naming another tool is accepted but inert.
Implementation is the pure module src/permissions.ts. Matching and parsing there have unit coverage in tests/permissions.test.ts.
Denials
A denial returns the standard denial result and the model replans. Do not retry the denied call. Explain briefly and offer an alternative path.
Security notes
- File tools reach anywhere on the machine. Treat sensitive locations as untrusted input
- Never print full keys, never log them, never commit them. Masked display is last4 only
- Session files under
~/.atom/can contain pasted secrets if typed as chat. Never print their contents, never commit them