The safest launch path should also be the one you type without thinking.
If you opted into AgentJail’s PATH wrappers, commands such as claude, codex,
and Cursor’s agent already entered the OS sandbox. In v1.5.0, those same
commands also enter the transparent tunnel. You get network visibility without
adding --tunnel to every launch.
The terminal gets quieter at the same time. Routine startup now takes one to three useful lines. The details have not disappeared. They live in private, per-session diagnostics and can come back to stderr when you ask for them.
TL;DR
- Opted-in agent commands now use the tunnel. The PATH wrappers for Claude
Code, Codex, and Cursor route through
agentjail run --tunnel -- <agent>and preserve the arguments you pass to the agent. - Startup is compact, not silent. Routine setup moves out of the terminal, while policy failures, sandbox downgrades, required consent, and SSH scope warnings stay visible.
- Each shielded session gets a private diagnostic log. AgentJail retains the
newest 10 files under
~/.agentjail/logs/, with directory mode0700and file mode0600. - macOS brings the local UI with it. A shielded session starts the loopback dashboard on demand and adds a clickable UI link to the persistent status line when the dashboard is reachable.
- Linux config-file grants work as intended. A regular file directly under
~/.confignow receives file-scoped Landlock rights instead of an invalid directory-only grant.
The command you already use gets network visibility
The PATH shim remains opt-in:
agentjail install --with-path-shim
Once enabled, its wrappers now take this route:
claude, codex, or agent
-> agentjail run --tunnel -- <agent>
-> OS sandbox + policy hooks + transparent tunnel
That means a plain agent command gets per-host network policy and traffic visibility across the session, not only capture of the model-provider call. Child arguments still pass through unchanged:
claude -p "review this patch"
codex --full-auto
This changes the wrappers you explicitly asked AgentJail to put on your PATH.
A direct agentjail run -- <agent> launch still leaves the full tunnel
explicit. Add --tunnel when you want it there.
One to three lines, unless something needs you
Shield startup has a lot to do. It loads policy, prepares the OS sandbox, starts network capture, checks SSH delegation, and wires the session into the daemon. Printing every successful step made the guarded path feel noisier than the agent it launched.
v1.5.0 moves routine detail out of the interactive terminal. It does not hide the messages that change your security posture. You still see:
- malformed-policy failures
- a sandbox downgrade or enforcement failure
- consent that needs a human answer
- the scope of delegated SSH access
- the broad SSH-signing warning when it applies
SSH bootstrap is shorter too. The selected identity, session-only OpenSSH scope, and passphrase privacy statement now share one consent prompt. Codex hook reassertion also stops repeating guidance that belongs at install time.
The detail moved to a private log
Every shield launch writes structured session diagnostics under:
~/.agentjail/logs/
AgentJail keeps the newest 10 files. The directory is forced to mode 0700,
and each log file to 0600. Retention and file-open outcomes enter the audit
trail without copying the diagnostic path into the audit record.
When you are troubleshooting, mirror the same details to stderr:
agentjail run --verbose -- codex
Quiet output is now the everyday interface. The private JSON record is the debugging interface.
The local UI is ready on macOS
On macOS, a shielded session now starts the loopback-only UI on demand. When it
is reachable, the persistent status line includes a clickable 📊 UI link.
The dashboard still stays local. v1.5.0 also removes a small source of drift by giving UI startup and the status line one typed loopback-address contract. The link and the server no longer build the endpoint separately.
You can still start it yourself on either supported platform:
agentjail ui
A Landlock fix for real config files
Linux Landlock distinguishes rights for directories from rights for regular
files. AgentJail previously tried to apply directory-only rights to a granted
file directly under ~/.config. Landlock rejected that with EINVAL, the
grant was skipped, and legitimate reads could fail.
v1.5.0 detects that case and applies file-scoped rights. The broader credential boundary does not move. Sensitive config subdirectories remain protected, and the fix grants only the regular file AgentJail intended to allow.
Upgrade
Upgrade through the same channel you installed from:
brew upgrade agentjail
# or
agentjail update
If you use the PATH shim, open a new shell after upgrading and launch your agent normally. To inspect the setup:
agentjail doctor
agentjail run --verbose -- codex
The first checks the guard. The second shows the startup detail that v1.5.0 no longer puts in your way every time.