nono well in practice.
The core ideas are:
- prefer one sandbox authority
- use live detached sessions for long-running work
- pair detached sessions with rollback when the agent may make broad changes
Use One Sandbox Layer
When an agent already ships with its own sandbox, the best practice is usually to letnono be the outer and only filesystem/network boundary.
Why:
- nested sandboxes make denials harder to reason about
- the inner sandbox may have escape hatches or retry behavior that are separate from
nono - one kernel-enforced boundary is easier to audit than two overlapping ones
nono is already enforcing the real boundary.
Claude Code
Recommended pattern:nono, prefer using nono as the real sandbox boundary and keep Claude Code’s native sandbox disabled, or at minimum configured not to fall back to unsandboxed execution.
The important operational point is:
- let
nonoenforce filesystem and network restrictions - do not let Claude Code silently switch to an unsandboxed retry path
Codex
Recommended pattern:nono enforce the filesystem and network boundary, and avoid layering another independent sandbox on top unless you have a specific reason.
For Codex specifically:
- keep Codex approvals enabled if you want the normal operator prompt flow
- disable Codex’s own sandbox so
nonoremains the single source of filesystem and network enforcement
Think of Detached Sessions as a Sandboxed tmux-Like Workflow
Detached sessions give you a workflow that feels a lot liketmux for agent runs:
- start a long-running session
- let it continue in the background
- inspect it later from another terminal
- reattach only when you need to guide, debug, or stop it
nono runtime model:
- the child remains sandboxed
- the supervisor keeps managing the PTY and session state
- attach connects to the supervisor’s PTY relay, not directly to an unrestricted child
Start Detached
Start Attached, Then Detach
~/.config/nono/config.toml:
Runtime Control Loop
The lifecycle commands are what make this feel like a sandboxedtmux workflow:
nono ps: what is still live right now?nono inspect: what exactly is this session running, and with what profile?nono attach: reconnect to the live terminal to guide or debugnono stop: end the supervised session cleanly
Recommended Workflows
1. Short Interactive Coding Session
Use this when you expect to stay attached the whole time:- quick debugging
- one-shot code edits
- review or exploration
2. Long-Running Agent Session
Use this when the agent may run for a while and you do not want to babysit the terminal:- migrations
- large refactors
- broad repo analysis
- slower unattended coding loops
3. Long-Running Session With Rollback Safety
This is the safest default for agents that may modify a lot of code:- a live detached session
- later attach/detach/inspect/stop control
- filesystem rollback if the result goes wrong
- risky edits across many files
- agents working unattended
- sessions where you may only inspect the result after the fact
4. Inspect and Recover a Session
If a session is still alive but behaving badly:Best Practices
Prefer Profiles Over Ad Hoc Flags
Use built-in or custom profiles for repeatable workflows:Use --allow-cwd Deliberately
--allow-cwd is convenient, but it means “grant the current repository read+write access”.
That is often the right choice for coding agents, but treat it as an explicit workspace grant, not as boilerplate.
Keep Login/Bootstrap Permissions Temporary
Some flows, especially browser-based login on macOS, need temporary extra permissions:Prefer nono stop Over Killing the Child
If a session has to end, stop the supervisor-managed session:
Use Rollback For Unattended Work
If you are going to let an agent run while detached,--rollback is usually worth the extra bookkeeping:
- broad refactors
- migrations
- repository-wide codemods
- unattended sessions you only plan to inspect later
A Good Default
If you want one strong default workflow for powerful coding agents, use this:- one kernel-enforced sandbox boundary
- a long-running attach/detach workflow
- later inspection and recovery
- rollback if the session goes astray
nono currently provides.