Global Options
These options work with all commands.--silent, -s
Suppress all nono output (banner, summary, status messages). Only the executed command’s output will be shown.
--theme
Select the CLI color theme for banners, summaries, warnings, and other styled output.
Available themes:
mochalattefrappemacchiatotokyo-nightminimal
--theme <NAME>NONO_THEME[ui] theme = "<NAME>"in~/.config/nono/config.toml- default:
mocha
mocha.
Commands
nono run
Run a command inside the sandbox.
nono shell
Start an interactive shell inside the sandbox.
nono wrap
Apply sandbox and exec into command. nono disappears from the process tree — no parent process remains. For scripts, piping, and embedding where no parent process is wanted.
nono wrap does not support proxy flags (--network-profile, --allow-domain, --credential, --upstream-proxy, --upstream-bypass). The network proxy requires a parent process. Use nono run instead.nono why
Check why a path or network operation would be allowed or denied. Designed for both human debugging and programmatic use by AI agents.
nono learn
Trace a command to discover required filesystem paths and network activity. Uses strace on Linux and fs_usage + nettop on macOS to monitor accesses and outputs paths and connections that would need to be allowed in a nono profile.
nono setup
Set up nono on this system. Verifies installation, tests sandbox support, and optionally generates example profiles.
nono policy
Inspect policy groups, profiles, and security rules.
groups- List policy groups or show details for a specific groupprofiles- List all available profiles (built-in and user)show- Show a fully resolved profilediff- Diff two profilesvalidate- Validate a profile JSON file
nono trust
Manage file attestation. Sign, verify, and manage trust for files consumed by AI agents.
init- Create a trust-policy.json in the current directorysign- Sign filessign-policy- Sign a trust policy fileverify- Verify files against the trust policylist- List files and their verification statuskeygen- Generate a new signing key pairexport-key- Export the public key for a signing key
nono learn Options
nono learn runs WITHOUT sandbox restrictions to discover what paths and network connections your application needs. On Linux it uses strace (install with apt install strace). On macOS it uses fs_usage and nettop for filesystem and network discovery (requires sudo).--profile, -p
Compare against an existing profile to show only missing paths.
--json
Output discovered paths as a JSON fragment suitable for a profile.
--timeout
Limit trace duration in seconds.
--all
Show all accessed paths, not just those that would be blocked by the sandbox.
--verbose, -v
Enable verbose output. Can be specified multiple times.
nono run Options
Directory Permissions
These flags grant recursive access to directories and all their contents.--allow, -a
Grant read and write access to a directory.
--read, -r
Grant read-only access to a directory.
--write, -w
Grant write-only access to a directory.
File Permissions
These flags grant access to individual files only (non-recursive).--allow-file
Grant read and write access to a single file.
--read-file
Grant read-only access to a single file.
--write-file
Grant write-only access to a single file.
Network Control
--block-net
Block all network access. Network is allowed by default.
--network-profile
Use a predefined network profile for host-level filtering. When set, outbound traffic is routed through a localhost proxy that only allows connections to hosts in the profile.
minimal, developer, claude-code, codex, opencode, enterprise. See Networking for details.
--network-profile and --allow-domain activate proxy mode, which forces supervised execution. The proxy runs in the unsandboxed parent process.--allow-domain
Add a domain to the proxy allowlist. Can be specified multiple times. Activates proxy mode if not already active.
--credential
Enable credential injection for a named service via the reverse proxy. The service must be either a built-in service (openai, anthropic, gemini, google-ai) or defined as a custom credential in your profile. Credentials are loaded from the system keyring under the nono service name, from 1Password when credential_key is an op:// URI, or from Apple Passwords on macOS when credential_key is an apple-password:// URI.
OPENAI_BASE_URL, ANTHROPIC_BASE_URL, etc. in the child environment so SDKs route through the proxy automatically.
Custom credentials can be defined in profiles for APIs not covered by the built-in services:
--allow-endpoint
Restrict a credential service to specific HTTP method+path patterns. When set, only requests matching at least one rule are proxied; all others receive 403 Forbidden. Can be specified multiple times.
Format: SERVICE:METHOD:PATH
- SERVICE: credential service name (e.g.,
openai,github) - METHOD: HTTP method (
GET,POST, etc.) or*for any method - PATH: URL path glob pattern (
*matches one segment,**matches zero or more)
endpoint_rules on custom credentials. See Networking — Endpoint Filtering for details.
--upstream-proxy
Chain outbound connections through an upstream (enterprise) proxy. Cloud metadata endpoints are still denied.
--upstream-bypass
Route specific domains directly instead of through the upstream proxy. Supports exact hostnames and *. wildcard suffixes (case-insensitive). Requires --upstream-proxy.
--proxy-port
Set a fixed port for the credential injection proxy (default: OS-assigned ephemeral port). Use this when the sandboxed application requires a known proxy port that can’t be configured via environment variables.
Without
--proxy-port, nono uses an OS-assigned ephemeral port and sets environment variables like GEMINI_BASE_URL=http://127.0.0.1:PORT/gemini. Applications that read these env vars don’t need --proxy-port. Use it only when the application requires manual base URL configuration.--listen-port
Allow the sandboxed process to listen on a TCP port. Required when running server applications (like AI gateways) in proxy mode.
--listen-port only has effect in proxy mode (when --network-profile or --allow-domain is active). Without proxy mode, network operations use the default OS-level allow/deny and bind is not restricted.--open-port
Allow bidirectional localhost TCP on a specific port. The sandboxed process can both connect to and bind/listen on 127.0.0.1:<PORT>. Use this for IPC between sandboxed processes (e.g., MCP servers, dev tools, AI agents running in separate sandboxes).
--block-net: The port becomes an exception to the block (localhost only)- Proxy mode: The port is allowed in addition to the proxy port
- Default (AllowAll): No-op — all ports are already reachable
nono shell Options
nono shell supports the same permission, profile, credential, and dry-run flags as nono run, plus:
--shell
Override the shell binary.
Command Blocking
--allow-command
Allow a normally-blocked dangerous command. By default, destructive commands like rm, dd, chmod are blocked. Use this flag to override for a specific command.
Even with
--allow-command, the kernel sandbox still restricts file operations to granted paths. A command can only affect files within directories you explicitly allowed.Command blocking is a best-effort surface-level control. It matches against the executable name being invoked directly. It does not prevent a process from performing the equivalent operation through language-level APIs (e.g.,
os.remove() in Python), shell built-ins, or renamed binaries. For hard protection against destructive filesystem operations, rely on kernel-enforced deny groups (deny.access, deny.unlink) and path-based sandboxing, which apply regardless of how the operation is invoked.allowed_commands field in a profile’s security config:
--block-command
Block an additional command beyond the default blocklist.
Deny Group Overrides
--override-deny
Override a deny group rule for a specific path. Required groups like deny_credentials block access to paths such as ~/.aws, ~/.config/gcloud, etc. This flag punches a targeted hole through the deny without removing the entire group.
The override path must also be explicitly granted via --allow, --read, --write, or their file equivalents. --override-deny only removes the deny rule — it does not implicitly grant access.
--override-deny without a matching grant (--allow, --read, --write, etc.) is a hard error. This prevents silent no-ops on Linux and unintended implicit grants on macOS.Credential Options
--env-credential
Load credentials from the system keystore (macOS Keychain / Linux Secret Service) by account name and inject them as environment variables. The sandboxed process can read these credentials directly.
--env-credential-map
Map an explicit credential reference to a destination environment variable.
Repeatable as --env-credential-map <CREDENTIAL_REF> <ENV_VAR>.
- Loaded before the sandbox is applied (keystore access blocked after)
- Auto-named by uppercasing for keyring names:
openai_api_keybecomes$OPENAI_API_KEY --env-credential-mapvalidates URI references (op://,apple-password://,env://) and target env var names--env-credentialURI suffix form remains supported for 1Password compatibility (op://...=VAR)- Zeroized from memory after
exec()
--credential instead for credential isolation — the agent never sees the real API key.
See Credential Injection for full documentation on storing and using credentials.
Profile Options
--profile, -p
Use a named profile (built-in or from ~/.config/nono/profiles/).
--workdir
Working directory for $WORKDIR expansion in profiles (defaults to current directory).
--allow-cwd
Allow access to the current working directory without prompting. By default, nono prompts interactively for CWD sharing. The access level is determined by the profile’s [workdir] config or defaults to read-only.
--allow-launch-services
Allow direct LaunchServices opens on macOS for this session. This is intended for temporary login or setup flows that need to open a browser from inside the sandbox.
--allow-launch-services is only supported on macOS. It requires the selected profile to opt into allow_launch_services and configure open_urls; otherwise nono fails closed with an error.Execution Mode Flags
--rollback
Enable atomic rollback snapshots for the session. Takes content-addressable snapshots of writable directories so you can restore to the pre-session state after the command exits. Automatically selects supervised execution.
--no-rollback-prompt
Suppress the interactive post-exit review when using --rollback. Snapshots are still taken but the user is not prompted to review or restore changes. Useful for scripting.
--no-rollback
Disable rollback entirely for this session. No snapshots are taken and no restore is offered. Useful when rollback overhead is not needed.
--no-audit
Disable the audit trail for this session. By default, every supervised execution records session metadata (command, timestamps, exit code, network events) to ~/.nono/rollbacks/. Use this flag to suppress audit recording entirely.
--no-audit conflicts with --rollback. Rollback requires an audit session directory for snapshot storage.--rollback-exclude
Exclude from rollback snapshots. Repeatable. Values containing glob characters (*, ?, [) are matched against filenames. Plain names match exact path components; names with / match as path substrings. Does NOT affect sandbox permissions — excluded directories are still sandboxed.
--rollback-include
Force-include a directory in rollback snapshots that would otherwise be auto-excluded. Repeatable. Accepts directory names (e.g., target, node_modules), not full paths. Use when you need rollback coverage on build artifacts or dependencies.
nono automatically excludes known regenerable directories (
.git, target, node_modules, etc.) and any directory with more than 10,000 files from rollback snapshots. This prevents rollback from hanging on large projects. Use --rollback-include to override for specific directories or --rollback-all to disable all auto-exclusions.--rollback-all
Include ALL directories in rollback snapshots, overriding all auto-exclusions. This may be very slow on large projects with build artifacts.
--skip-dir
Skip a directory name during pre-exec trust scanning and rollback preflight. Repeatable. Matches exact path components, not full paths. This is useful for large generated trees that are safe to exclude in your workflow.
--skip-dir does not change sandbox permissions. It only prunes trust discovery and rollback preflight traversal. Hidden directories are still scanned unless they are in the built-in heavy-dir list or explicitly named here.--no-diagnostics
Suppress the diagnostic footer when the command exits non-zero. Useful for scripts that parse stderr and need stable output.
--capability-elevation
Enable runtime capability elevation for this session. When active, the sandbox installs a seccomp-notify filter (Linux) and a PTY multiplexer so that file access beyond the initial capability set can be approved interactively at runtime.
capability_elevation in their security config. The CLI flag overrides the profile setting.
| Environment Variable | NONO_CAPABILITY_ELEVATION |
|---|---|
| Example | NONO_CAPABILITY_ELEVATION=true |
Operational Flags
--dry-run
Show what capabilities would be granted without actually executing the command or applying the sandbox.
--verbose, -v
Increase logging verbosity. Can be specified multiple times.
| Flag | Level | Output |
|---|---|---|
| (none) | Error | Only errors |
-v | Info | Informational messages |
-vv | Debug | Detailed debug output |
-vvv | Trace | Full trace output |
--trust-override
Disable trust verification for instruction files. Skips the pre-exec trust scan that verifies cryptographic signatures on instruction files (SKILLS*, CLAUDE*, AGENT*, .claude/**/*.md). For development and testing only.
Using
--trust-override in production is not recommended. It disables the entire instruction file attestation pipeline, allowing unsigned or tampered instruction files to be read by the sandboxed process.--config, -c
Specify a configuration file path.
Configuration file support is planned for a future release.
--help, -h
Print help information for the command.
nono why Options
The why command checks why a path or network operation would be allowed or denied. It’s designed for both human debugging and programmatic use by AI agents.
--path
The filesystem path to check.
--op
The operation to check: read, write, or readwrite. Defaults to read if not specified.
--host
Network host to check (instead of --path).
--port
Network port (default: 443). Used with --host.
--json
Output JSON instead of human-readable format. Useful for programmatic use by AI agents.
--self
Query current sandbox state from inside a sandboxed process. This allows agents to introspect their own capabilities.
Capability Context Options
When checking paths outside a sandbox, you can simulate a capability context:--allow,-a- Directories with read+write access--read,-r- Directories with read-only access--write,-w- Directories with write-only access--allow-file- Single files with read+write access--read-file- Single files with read-only access--write-file- Single files with write-only access--block-net- Block network access--allow-net- Force unrestricted network access for this run--profile,-p- Use a named profile--workdir- Working directory for$WORKDIRexpansion
nono trust Options
nono trust init
Create a trust-policy.json in the current directory. Scans for files and auto-populates patterns and publisher.
| Option | Description |
|---|---|
-r, --recursive | Scan subdirectories recursively |
--exclude-dirs <DIR...> | Additional directories to exclude (on top of .gitignore and built-in list) |
--key <KEY_ID> | Key ID to include as publisher (default: “default”) |
--force | Overwrite existing trust-policy.json |
File discovery for
init respects .gitignore to keep the generated policy clean. Hidden directories like .claude/ and .github/ are included. Common build artifact directories (node_modules, target, .venv, etc.) are skipped by default. Note: the pre-exec trust scan and sign --all/verify --all do not respect .gitignore — adding a file to .gitignore cannot bypass trust verification.nono trust sign
Sign files, producing bundles for verification.
| Option | Description |
|---|---|
--all | Sign all instruction files matching trust policy patterns |
--key <KEY_ID> | Key ID from system keystore (default: “default”) |
--keyless | Use Sigstore keyless signing (CI environments only) |
--policy <FILE> | Trust policy file (default: auto-discover) |
When signing multiple files, a single
.nono-trust.bundle multi-subject bundle is created. Single-file signing creates per-file .bundle sidecars.nono trust sign-policy
Sign a trust policy file.
| Option | Description |
|---|---|
--user | Sign the user-level trust policy at ~/.config/nono/trust-policy.json. The user-level policy anchors trust — without it, project-level policies are not authoritative |
--key <KEY_ID> | Key ID from system keystore (default: “default”) |
nono trust verify
Verify instruction files against the trust policy.
nono trust list
List instruction files and their verification status.
nono trust keygen
Generate an ECDSA P-256 signing key pair and store it in the system keystore.
nono trust export-key
Export the public key for use in trust policy public_key fields.
nono setup Options
--check-only
Only verify installation and sandbox support, don’t create any files.
--profiles
Generate example user profiles in ~/.config/nono/profiles/.
--shell-integration
Show shell integration instructions (aliases, etc.).
--verbose, -v
Show detailed information during setup. Can be specified multiple times.
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Command executed successfully |
| 1 | nono error (invalid arguments, sandbox failure) |
| * | Exit code from the executed command |
Path Resolution
All paths are canonicalized before the sandbox is applied:- Relative paths are resolved to absolute paths
- Symlinks are followed and resolved
- Parent directory references (
..) are resolved
Combining Flags
Flags can be combined freely:Environment Variables
Several CLI flags can be set via environment variables. This is useful in CI/CD pipelines, container entrypoints, and wrapper scripts where setting env vars is more natural than modifying command arguments. CLI flags always take precedence over environment variables.| Flag | Environment Variable | Example |
|---|---|---|
--allow | NONO_ALLOW | NONO_ALLOW=/tmp/a,/tmp/b (comma-separated) |
--block-net | NONO_BLOCK_NET | NONO_BLOCK_NET=true |
--profile | NONO_PROFILE | NONO_PROFILE=developer |
--network-profile | NONO_NETWORK_PROFILE | NONO_NETWORK_PROFILE=claude-code |
--allow-domain | NONO_ALLOW_DOMAIN | NONO_ALLOW_DOMAIN=api.openai.com |
--credential | NONO_CREDENTIAL | NONO_CREDENTIAL=openai |
--env-credential | NONO_ENV_CREDENTIAL | NONO_ENV_CREDENTIAL=key1,key2 |
--capability-elevation | NONO_CAPABILITY_ELEVATION | NONO_CAPABILITY_ELEVATION=true |
--upstream-proxy | NONO_UPSTREAM_PROXY | NONO_UPSTREAM_PROXY=squid.corp:3128 |
--upstream-bypass | NONO_UPSTREAM_BYPASS | NONO_UPSTREAM_BYPASS=internal.corp,*.private.net (comma-separated) |
true, false, yes, no, 1, 0.
Conflict rules apply equally whether the value comes from a flag or an environment variable. For example, setting both NONO_ALLOW_NET=true and NONO_BLOCK_NET=true is an error, just like passing both --allow-net and --block-net.
Existing environment variables
| Variable | Description |
|---|---|
NONO_NO_UPDATE_CHECK | Disable automatic update checks |
NONO_UPDATE_URL | Custom update service URL |