Overview
| Mode | Flag | Parent Sandboxed | Rollback | Expansion | Attack Surface |
|---|---|---|---|---|---|
| Direct | --exec | N/A (no parent) | No | No | Minimal |
| Monitor | (default) | Yes | No | No | Small |
| Supervised | --rollback / --supervised | No | --rollback only | Linux only | Larger |
Direct Mode
exec()s directly into the target command. nono disappears from the process tree entirely - there is no parent process.
When to use:
- Scripts and CI/CD where you want minimal overhead
- Backward compatibility with tools that expect to be PID 1
- Maximum security (smallest attack surface)
- No diagnostic footer on errors
- No rollback snapshots
- No capability expansion
interactive = true (like claude-code) use Direct mode by default to preserve TTY behavior.
Monitor Mode (default)
- Interactive AI agents (default for most usage)
- When you want diagnostic output on failures
- Small overhead (parent process stays alive)
- Cannot write rollback snapshots (parent is sandboxed too)
- Cannot do capability expansion (parent is sandboxed too)
- Diagnostic footer on non-zero exit explaining what went wrong
- Signal forwarding to child process
Supervised Mode
--rollback or --supervised (or both) triggers supervised execution.
--rollback enables atomic rollback snapshots - content-addressable filesystem snapshots that let you restore files to their pre-session state.
--supervised enables the approval sidecar - on Linux, the parent can grant additional capabilities at runtime via seccomp user notification.
Trade-offs:
- Larger attack surface (unsandboxed parent, mitigated by ptrace hardening)
- Incompatible with
--env-credential(keyring threads deadlock across fork)
- Rollback snapshots (baseline + final) with
--rollback - Interactive post-exit review of changes with
--rollback - Capability expansion prompts (Linux only) with
--supervised - Diagnostic footer on non-zero exit
Choosing a Mode
--rollback when you want the safety net of atomic rollback snapshots.