Fixes
- Linked git worktrees are usable again. A worktree keeps its object
database, refs and packed-refs in the shared common dir, which v1.18.0 began
mounting read-only, so everygit addandgit commitinside a worktree
failed witherror: unable to create temporary file: Read-only file system.
Both the per-worktree git dir and the common dir are writable again outside
lockdown;--lockdownstill keeps both read-only. Thanks to @zinga666 for
the report (#101). - Claude Code works on macOS again. The seatbelt profile denied
ioctlon
the child's own terminal, so the agent could not put its stdin into raw mode,
and it had no write access to the/tmp/claude-<uid>directory Claude Code
creates unconditionally at startup. Thanks to @dwbessa (#100). - Nix support.
bwrapis now resolved from immutable Nix store paths and
fromPATH, base mounts that do not exist on a host (/usr,/opt) are
skipped instead of aborting the launch, and the sandbox-escape tests build
hermetically. Thanks to @pqitr (#99).
Security
- The macOS terminal
ioctlgrant is scoped by path to the single PTY ai-jail
allocated for the run. A pattern covering every/dev/ttys*would also reach
the user's other terminals, and since SBPL cannot filter by ioctl request
number that would permitTIOCSTIkeystroke injection into another shell.
When ai-jail is not proxying a PTY, no terminal ioctl is granted at all. - The non-root
/nix/storeexception forBWRAP_BINnow also requires a store
the invoking user cannot write. A single-user store owned by that user does
not qualify, because anything running as them could otherwise supply a fake
bwrapand silently disable the sandbox. - Sandbox-escape assertions stay strict: the skip path is limited to the two
probes that can legitimately have no read-only system directory, instead of
applying to every escape test. - A missing literal
maskordeny_pathsentry is reported through the
security warning channel, so a dropped rule stays visible under--exec. - CI keyring detection no longer fails open. It used
ls <file>.asc *.gpg,
whose unmatched glob madelsexit non-zero even with a key present, so tag
signatures were never actually verified. v1.18.2 is the first release whose
tag signature CI verifies against the pinned key.
Documentation
- Herdr integration: what it detects, why the working directory already
matches, and why its control socket must not be mounted into the sandbox. - Corrected the linked-worktree,
BWRAP_BIN, macOS temp, and macOS display
descriptions, and restored the install and troubleshooting content dropped in
the v1.18.0 README rewrite.
Checksums (SHA256)
2bef06396e039e4ef99f5f1e9d3be9794e22214ff8535bc59ac926ad88f2f386 ai-jail-linux-x86_64.tar.gz
9c1f5028d1ac8dd2c6595b54ce25dd5a20f166cea073ec2a4dfb565b52722b09 ai-jail-macos-aarch64.tar.gz
Install
brew tap akitaonrails/tap && brew install ai-jail
yay -S ai-jail-bin
cargo install --locked ai-jail