Your First Sandbox
The
-- separator is recommended. Everything after it is the command to run.Commands
| Command | Description |
|---|---|
nono run | Run a command inside the sandbox |
nono shell | Start an interactive shell inside the sandbox |
nono why | Check why a path/network operation would be allowed or denied |
nono undo | Manage undo sessions - list, show, restore, verify, cleanup snapshots |
nono audit | View audit trail - list and inspect past sandboxed sessions |
nono learn | Discover required paths - trace a command to find what it accesses (Linux only) |
nono setup | System setup and verification - generate profiles, check shell integration |
Permissions
nono provides three levels of filesystem access:| Flag | Access Level | Use Case |
|---|---|---|
--allow / -a | Read + Write | Working directories, project folders |
--read / -r | Read Only | Source code, configuration |
--write / -w | Write Only | Output directories, logs |
--allow, --read, --write) grant recursive access. File flags (--allow-file, --read-file, --write-file) grant access to a single file.
Network Access
Network is allowed by default. Use--net-block to disable outbound connections:
Network access is currently all-or-nothing. You can either allow all network access (default) or block it entirely with
--net-block.Interactive Shell (nono shell)
Start a shell with the same sandbox permissions as nono run:
Ctrl-D or exit.
Checking Path Access (nono why)
The why command checks if a path or network operation would be allowed or denied. It’s designed for both human debugging and programmatic use by AI agents.
| Flag | Description |
|---|---|
--path | Filesystem path to check |
--op | Operation: read, write, or readwrite (default: read) |
--host | Network host to check (instead of --path) |
--port | Network port (default: 443) |
--json | Output JSON for programmatic use |
--self | Query current sandbox state (inside sandbox) |
nono why --self to get a structured JSON response explaining why and how to fix it.
What Happens at Runtime
- Parse - nono parses your capability flags
- Canonicalize - All paths are resolved to absolute paths (prevents symlink escapes)
- Apply Sandbox - Kernel sandbox is initialized (irreversible)
- Execute - nono exec()s into your command, inheriting the sandbox
- Enforce - Kernel blocks any unauthorized access attempts
Sensitive Paths
The following paths are always blocked by default to protect credentials:~/.ssh- SSH keys~/.aws,~/.gcloud,~/.azure- Cloud credentials~/.gnupg- GPG keys~/.kube,~/.docker- Container credentials~/.zshrc,~/.bashrc,~/.profile- Shell configs (often contain secrets)~/.npmrc,~/.git-credentials- Package manager tokens
nono why --path <path> --op read to check if a specific path is blocked and why. See Profiles & Groups for the full list and how group policy controls these.
Agent Integration
For setting up nono with a specific AI agent:If there is an Agent you want supported please open an issue or PR to add it!
Next Steps
- CLI Reference - Complete flag documentation
- Examples - Common usage patterns
- Profiles & Groups - Pre-configured capability sets and composable security groups
- Secrets Management - Secure API key loading from system keystore
- Undo & Snapshots - Filesystem snapshots with integrity verification
- Troubleshooting - Common issues and solutions