The two classes
Current examples include Claude Code, Codex, and Antigravity (
agy) in the
trusted tier, and Gemini and Cursor Agent in the untrusted tier. These are
public products; naming them is what makes the tier assignment auditable.
Cursor Agent has no local install. The local Cursor command-line tool was removed in
nix-ai#2483, and cursor-agent
runs only in a sandbox container, through the dispatch path.
OpenCode has wrappers with different trust boundaries. opencode is the trusted
local launcher defined in the host configuration. opencode-remote starts a
fresh sandbox session through the dispatcher.
opencode-wall is the local Seatbelt-walled launcher for untrusted use
(nix-ai).
See Agent identity and access for the
command and identity details.
opencode-wall is the untrusted local tier. It runs under a deny-default macOS
Seatbelt profile, enabled by default on macOS through the
programs.opencode.sandbox.enable option in nix-ai. The profile denies the
keychain, ~/.doppler, ~/.ssh, the ssh-agent socket, and loopback except the
configured model proxy. It blocks app launches through open, AppleEvents
through osascript, launchd job creation through launchctl, and sudo. It
also denies:
- creating, removing, and renaming
.gitentries; - hooks and config under any gitdir name;
- hard links;
- writes to
CLAUDE.md,AGENTS.md,GEMINI.md, and.cursor.
opencode-wall’s .git hardening and FSEvents mach-lookup allowance are in
nix-ai#2484. File watching still
works while the profile denies git metadata changes and writes to git
hooks/config. By default, opencode-wall accepts only standalone clones under
~/opencode-work. The profile limits what opencode-wall can reach. It does
not separate an identity because it runs as the operator’s account.
Trusted git in an OpenCode work rootDo not run trusted Or fetch into a separate trusted repository, outside the work root.
git in the OpenCode work root with the clone’s own config.
Run it with hooks and fsmonitor turned off: