Overview
| Mode | Flag | Parent Sandboxed | Undo | Expansion | Attack Surface |
|---|---|---|---|---|---|
| Direct | --exec | N/A (no parent) | No | No | Minimal |
| Monitor | (default) | Yes | No | No | Small |
| Supervised | --supervised | No | Yes | 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 undo 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 undo 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
- When you want undo snapshots to recover from agent mistakes
- When you want capability expansion (Linux only)
- Long-running agent sessions where recovery matters
- Larger attack surface (unsandboxed parent, mitigated by ptrace hardening)
- Incompatible with
--secrets(keyring threads deadlock across fork)
- Undo snapshots (baseline + final)
- Interactive post-exit review of changes
- Capability expansion prompts (Linux only)
- Diagnostic footer on non-zero exit