By default, sandboxed processes inherit all environment variables from the parent process. This means API keys, tokens, and other secrets present in the shell environment are visible inside the sandbox — even if the profile blocks network access or filesystem paths. Environment variable filtering lets you explicitly control which variables are passed through, so only the variables your agent needs are available.Documentation Index
Fetch the complete documentation index at: https://nono.sh/docs/llms.txt
Use this file to discover all available pages before exploring further.
How It Works
Whenenvironment.allow_vars is set in a profile, nono:
- Clears the inherited environment
- Passes through only variables matching the allow-list
- Adds back nono-injected credentials (from
env_credentials) on top
environment section is omitted entirely, all variables are passed through (backward compatible). Setting allow_vars to an empty array [] restricts the environment to only nono-injected credentials — no inherited variables are passed.
Configuration
Add theenvironment section to your profile:
Prefix Patterns
Use a trailing* to match all variables with a given prefix:
AWS_REGION, AWS_SECRET_ACCESS_KEY, and any variable starting with MYAPP_, while blocking everything else.
A bare "*" matches all variables (equivalent to not setting the environment section at all). The * wildcard is only valid as a trailing suffix — patterns like "A*B" or "*X" are rejected at profile load time.
Inheritance
allow_vars is additive across profile inheritance. A child profile appends its entries to the base profile’s list, and duplicates are removed:
Interaction with Credential Injection
Variables injected by nono — viaenv_credentials or --env-credential — always bypass the allow-list. They are explicitly configured by the user and must reach the child process regardless of filtering rules.
OPENAI_API_KEY is passed through even though it’s not in allow_vars, because it was explicitly injected via env_credentials.
Operator-configured deny-list
Usedeny_vars to strip specific variables while keeping everything else inherited — without having to enumerate an explicit allow-list:
allow_vars — only trailing * is supported:
GITHUB_TOKEN, GITHUB_ACTIONS, any var starting with ANTHROPIC_ or OPENAI_, etc. Patterns like *_TOKEN (leading wildcard) are not supported — nono will print a warning and ignore them.
Precedence: deny_vars wins over allow_vars. If a variable appears in both, it is stripped:
AWS_REGION passes through; AWS_SECRET_ACCESS_KEY is stripped.
Inheritance: like allow_vars, deny_vars is additive across profile inheritance — a child profile appends to the base’s list, and duplicates are removed.
Interaction with the Built-in Deny-List
nono maintains a built-in deny-list of dangerous environment variables (e.g.,LD_PRELOAD, DYLD_INSERT_LIBRARIES, PYTHONPATH, NODE_OPTIONS). These variables are always blocked, even if they appear in allow_vars. This prevents a compromised profile from disabling sandbox protections.
LD_PRELOAD will not be passed through, despite being in the allow-list.
Security Properties
- Default-allow: Without the
environmentsection, all variables are passed through (no regression) - Empty allow-list restricts all:
"allow_vars": []passes zero inherited variables — only nono-injected credentials reach the child - Explicit allow-list: When
allow_varshas entries, only matching variables reach the child process - Operator deny-list:
deny_varsstrips named variables even whenallow_varswould otherwise pass them through - Injected credentials bypass both lists:
env_credentialsvariables always pass through, regardless ofallow_varsordeny_vars - Built-in deny-list is non-overridable: Dangerous variables like
LD_PRELOADare always blocked and cannot be re-allowed - Precedence: built-in blocklist >
deny_vars>allow_vars - Prefix patterns reduce misconfiguration: Only
*suffix is supported (no regex), reducing risk of accidental over-permission - Bare
*matches everything: Use as an escape hatch, but prefer explicit lists
Example: Minimal Agent Environment
A typical profile for an AI agent that only needs basic shell environment and cloud credentials:AWS_* variables and the injected OPENAI_API_KEY, but no other secrets accidentally present in the parent environment.
Next: Credential Injection | Profile Authoring