4.0 KiB
nono-opencode-tinfoil
A nono sandbox profile for running
OpenCode with access to Tinfoil
enclaves and other LLM providers.
Quick Start
git clone https://github.com/autonomic/nono-opencode-tinfoil.git
cd nono-opencode-tinfoil
make install
# Ensure ~/.local/bin is in your PATH
opencode
Install
macOS / Linux
git clone https://github.com/autonomic/nono-opencode-tinfoil.git
cd nono-opencode-tinfoil
make install
This installs:
- The sandbox profile to
~/.config/nono/profiles/opencode-tinfoil.json - A wrapper script to
~/.local/bin/opencode
Requirements
- nono installed e.g.
brew install nono opencodeinstalled globally. If not already installed, you can use any of:- Homebrew:
brew install opencode - npm:
npm i -g opencode-ai - Other: Any Node version manager (Volta, fnm, etc.)
- Homebrew:
How it works
you type: opencode
↓
~/.local/bin/opencode (wrapper)
↓
scans PATH for the real opencode binary
(skips itself — finds brew, npm, volta, etc.)
↓
exec nono run --profile opencode-tinfoil --allow-cwd -- <real-opencode>
↓
opencode runs inside the sandbox
The wrapper resolves the real opencode binary at runtime by scanning every
directory in your PATH. It skips itself, so it works regardless of:
- Where opencode is installed (Homebrew on macOS/Linux, npm global, Volta, etc.)
- PATH ordering between the wrapper and the real binary
- opencode version bumps
You just type opencode from any project directory and it runs sandboxed.
PATH ordering
If a non-sandboxed opencode appears earlier on your PATH than the
wrapper, typing opencode will bypass the sandbox. The installer detects and
warns about this. Fix it by adding this to your shell config file (e.g., ~/.bashrc or ~/.zshrc):
export PATH="$HOME/.local/bin:$PATH"
Or add an alias to your shell profile:
alias opencode="$HOME/.local/bin/opencode"
Usage
From any project directory:
opencode
Or use the profile directly with any opencode binary:
nono run --profile opencode-tinfoil --allow-cwd -- opencode
You can also point it at a specific binary:
# Homebrew (macOS)
nono run --profile opencode-tinfoil --allow-cwd -- /opt/homebrew/bin/opencode
# Homebrew (Linux)
nono run --profile opencode-tinfoil --allow-cwd -- /home/linuxbrew/.linuxbrew/bin/opencode
# npm global
nono run --profile opencode-tinfoil --allow-cwd -- $(npm root -g)/opencode/bin/opencode
Tinfoil integration
The profile allows network access to:
*.tinfoil.shinference.tinfoil.shcontainers.tinfoil.sh127.0.0.1(supports Tinfoil local proxy athttp://127.0.0.1:3301/v1)ghcr.io
It also grants read/write access to ~/.tinfoil for Tinfoil credentials.
Other LLM provider network options (Anthropic, GLM, Kimi, etc.) are provided as commented-out entries in the profile for easy activation.
Security model
- Current working directory: read/write
- OpenCode config: read/write
- Tinfoil config: read/write
- SSH private keys, AWS/GCP/Azure credentials, kubeconfig: denied
sudo,su,doas,passwd, disk tools: denied
Environment Variables
| Status | Variables / Patterns |
|---|---|
| Allowed | PATH, HOME, USER, SHELL, TERM |
| Denied | AWS_*, GOOGLE_*, AZURE_*, KUBECONFIG, SSH_AUTH_SOCK |
Uninstall
make uninstall
License
GPL-3.0
Troubleshooting
"command not found: opencode"
Ensure ~/.local/bin is in your PATH. Add export PATH="$HOME/.local/bin:$PATH" to your .bashrc or .zshrc and restart your terminal.
Sandbox is being bypassed
If you have another version of opencode installed (e.g. via Homebrew) that appears earlier in your PATH than the wrapper, the sandbox will be bypassed. Check this using which -a opencode. The wrapper at ~/.local/bin/opencode must come first.