Status: partly live. The profiles, the Mac container path, and the GitHub
secrets engine are in use; the Proxmox agent pool and its egress proxy are
declared in infrastructure code with the converge role written, pending a first
canary run. The roadmap tracks each workstream.
Stop asking the agent for permission. Put it somewhere it can’t hurt anything, then let it run.Today’s safety model is fine-grained permission lists — roughly 640 allow/ask/deny entries rendered into Claude Code, Codex CLI, and the Antigravity (
agy) CLI — running on a trusted
Mac with the user’s full credentials a keychain prompt away. That model assumes a
human is watching. Autonomous agents invert it: safety becomes the container
boundary, and tool permissions inside it become maximally lenient. The agent gets
--dangerously-skip-permissions precisely because there is nothing dangerous left
to skip into.
The vendors all converged on this
All three CLI vendors publish the same guidance: bypass flags belong only inside an isolated environment, and the real controls are credentials, network egress, and git.
The convergent model: the container is the boundary; bypass flags only inside it;
default-deny egress; short-lived scoped credentials injected from outside; git as
the safety net.
Three profiles
Profiles are defined once innix-ai and rendered to all three tools by the
existing formatter layer. See nix-ai for the rendering pipeline.
One exception breaks the “configs only, no flags” shape: Antigravity has no
settings key that can carry the posture — its predecessor hard-errors on the
equivalent key and refuses to start — so every autonomous
agy run must pass
--dangerously-skip-permissions on the command line, and the launcher asserts
the flag is present. The rendered settings block for it exists for parity, not
effect.
What happens to the 640 entries
They survive only ininteractive. The autonomous profile keeps a residual deny of
roughly ten entries — gh repo delete, gh secret, force-push, registry publish —
as a tripwire, not a wall. In autonomous, the real protection is:
- Credential scoping — the agent holds only short-lived, narrowly scoped tokens. See Secrets.
- Network boundary — an allowlisting egress proxy is the only way out. See Runtime.
Structural guarantees
Two invariants are enforced in code, not convention:- Autonomous configs exist only inside a boundary — baked into the container image, or rendered by the converge role onto a pool guest. No code path writes a bypass-mode settings file onto a workstation filesystem. You cannot accidentally run yolo on the Mac host because the config to do so does not exist there.
- The entrypoint refuses to start unless
AGENT_SANDBOX=1is set and the uid is not 0. Claude Code independently hard-rejects bypass as root; the image runs asagent(uid 1000) with no sudo.
In this section
Runtime
The Mac container path, the static LXC pool, the egress proxy, and the run lifecycle.
Secrets
OpenBao as the single machine-secrets backbone — headless reads, short-TTL credentials — and the four-tier model behind it.
GitHub access
A separate OpenBao service engine issues short-lived GitHub App installation tokens.
Roadmap
Phases 1–7 and the repo ownership map.