Skip to main content

CLI Reference

Synopsis

greywall [flags] [--] <command> [args...]
greywall -c "<shell string>"
greywall <subcommand> [args...]

Global Flags

FlagShortDescription
--settings <path>-sPath to a JSON/JSONC config file. Defaults to ~/.config/greywall/greywall.json (macOS: ~/Library/Application Support/greywall/greywall.json)
--profile <names>Comma-separated list of profiles to apply (e.g., --profile claude,python). Also accepts a learned profile name from --learning.
--auto-profileSilently apply a saved or built-in profile for the command without prompting on first run
--proxy <url>Override the SOCKS5 proxy URL (default: socks5://localhost:43052)
--http-proxy <url>Override the HTTP CONNECT proxy URL (default: http://localhost:43051)
--dns <addr>Override the host-side DNS server address (default: localhost:43053)
--port <port>-pExpose a port for inbound connections into the sandbox (repeatable)
--forward <port>-fForward a host localhost port into the sandbox (Linux only, repeatable)
--command <cmd>-cRun a shell command string (supports &&, ;, pipes)
--debug-dVerbose output: proxy activity, filter decisions, sandbox command
--monitor-mShow only violations and blocked requests (audit mode)
--learningTrace filesystem access with strace/eslogger and auto-generate a profile
--secret <VAR>Treat an environment variable as a credential even if it doesn't match the auto-detection rules (repeatable). See Credential Protection.
--inject <LABEL>Inject a credential stored in the greyproxy dashboard into the sandbox by label (repeatable)
--ignore-secret <VAR>Exclude a variable from credential detection even if it matches the heuristics (repeatable)
--no-credential-protectionDisable credential substitution entirely; real values are visible inside the sandbox
--linux-featuresPrint the Linux kernel security features available on the current system and exit
--version-vPrint the greywall version and exit
--help-hShow help

-t/--template is a hidden, deprecated alias for --profile. New scripts should use --profile.

-m and -d together

You can combine both flags to get violation monitoring and the full sandbox command:

greywall -m -d -- npm install

-p / --port

Expose ports for sandboxed servers so external processes can connect:

# Single port
greywall -p 3000 -c "npm run dev"

# Multiple ports
greywall -p 3000 -p 8080 -c "make start"

-f / --forward (Linux only)

Forward a host localhost port into the sandbox so the sandboxed process can reach a host service (database, cache, and so on). This is the Linux equivalent of allowLocalOutbound on macOS, which only works there because the macOS sandbox shares the host network stack.

# Reach a host Postgres from inside the sandbox
greywall -f 5432 -- psql -h localhost

# Forward multiple ports
greywall -f 5432 -f 6379 -- make test

See Concepts for the full explanation of the platform difference.

Subcommands

greywall check

Check that greywall and its dependencies are correctly installed.

greywall check

Verifies:

  • Required binaries (bwrap, socat on Linux)
  • Linux kernel security features (Landlock, seccomp, eBPF)
  • Greyproxy installation and service status

greywall setup

Download and install Greyproxy, then start it as a service.

greywall setup

Installs greyproxy to ~/.local/bin/greyproxy and registers it as a systemd user service (Linux) or launchd agent (macOS).

greywall --linux-features

Print the Linux kernel security features available on the current system.

greywall --linux-features

Example output:

Linux Sandbox Features:
Kernel: 6.8
Bubblewrap (bwrap): true
Socat: true
Seccomp: true (log level: 2)
Landlock: true (ABI v4)
eBPF: true (CAP_BPF: true, root: false)

Feature Status:
✓ Minimum requirements met (bwrap + socat)
✓ Landlock available for enhanced filesystem control
✓ Violation monitoring available
✓ eBPF monitoring available (enhanced visibility)

greywall profiles list

List all available and saved profiles. This covers built-in agent profiles (Claude Code, Codex, Cursor, Aider, and so on), built-in toolchain profiles (Node, Python, Go, Rust, and so on), and any profiles you have saved with --learning. The templates name is accepted as an alias for backwards compatibility.

greywall profiles list

greywall profiles show <name>

Print the JSONC content of a profile.

greywall profiles show opencode

greywall profiles edit <name>

Open a saved profile in $EDITOR for direct editing.

greywall profiles edit opencode

Environment Variables

VariableDescription
GREYWALL_SANDBOXSet to 1 inside sandboxed processes. Lets commands detect they are running under greywall.
GREYWALL_TEST_NETWORKSet to 1 in smoke tests to enable network-dependent tests.
HTTP_PROXY / HTTPS_PROXYSet by greywall to point to the local HTTP proxy (macOS and Linux fallback mode).
ALL_PROXYSet by greywall to point to the SOCKS5 proxy.
GIT_SSH_COMMANDSet by greywall on macOS to route SSH through the proxy.

Exit Codes

CodeMeaning
0Success
1Greywall error (config invalid, dependency missing, command blocked by policy)
OtherThe exit code of the sandboxed command itself

Examples

# Sandbox a single command
greywall -- curl https://example.com

# Sandbox a shell pipeline
greywall -c "cat package.json | grep name"

# Use a built-in profile
greywall --profile code -- claude

# Combine multiple profiles (agent + toolchain)
greywall --profile claude,python -- claude

# Override proxy
greywall --proxy socks5://proxy.internal:1080 -- npm install

# Monitor what gets blocked without stopping the command
greywall -m -- pip install -r requirements.txt

# Learn filesystem access, then run normally
greywall --learning -- cargo build
greywall -- cargo build # auto-loads learned profile

# Expose dev server port
greywall -p 5173 -c "npm run dev"

# Debug with custom config
greywall -d -s ./greywall.json -- go test ./...

Config File Locations

PlatformDefault path
Linux~/.config/greywall/greywall.json
macOS~/Library/Application Support/greywall/greywall.json
Legacy (both)~/.greywall.json

Pass --settings <path> to use any other location. Config files support JSONC (JSON with comments).