v0.20.4
What's new since v0.20.3
A bug-fix roll-up resolving six independent issues across the FUSE, ptrace/shim, seccomp, and cgroup layers, plus a documentation catch-up for the now-implemented PostgreSQL access control. Built from the same commit validated by v0.20.4-rc1.
Fixes
- Per-path
soft_deletenow works under FUSE — adecision: soft_deletefile rule routesrm/rmdirto the trash even when the globalsandbox.fuse.audit.modeis left at its default, matching the behavior the ptrace layer already had. Previously such a rule was silently ignored and the file was hard-deleted, leavingagentsh trash listempty (#417, #422). - Correct classification of
O_CREATwithoutO_EXCL— open-or-create on an existing file (the shell>redirection pattern) is now classified aswrite, notcreate, so the intended file rule matches (#418, #421). - Session binding in hybrid
attach_mode=pid+shim_install=auto— the session now binds to the already-traced shell instead of failing to attach (#416, #420). unixwrapdiagnostics no longer corrupt the wrapped command's stderr — diagnostic output is routed off the wrapped command's stderr stream (#415, #419).- errno
socket_rulessurviveunix_sockets.enabled: true— the catch-all AF_UNIXsocket()notify no longer shadows conditional errnosocket_rules/blocked_families; thesocket(2)notify is now scoped toAF_UNIX(#412). - Graceful degradation for unenforceable per-command cgroup limits — limits the host can't enforce now warn and continue instead of failing the command (#411, #414).
Operator-visible behavior changes
- A per-path
decision: soft_deletefile rule now diverts destructive operations to the trash under FUSE regardless of the globalsandbox.fuse.audit.mode(which still governs non-matching paths and defaults tomonitor). - Unknown keys under
sandbox.fusenow emit a startup warning — a mistypedsandbox.fuse.session.modeis flagged instead of silently dropped (soft-delete usessandbox.fuse.audit.mode/sandbox.fuse.audit.trash_path). O_CREATwithoutO_EXCLover an existing file is classified aswriterather thancreate; review any file rules that distinguish the two operations.- errno-based
socket_rules/blocked_familiesare now enforced even whenunix_sockets.enabled: true.
Docs
- Database access control spec updated to v0.9 — PostgreSQL Phase 1 + Phase 2 marked implemented (catalog-backed object resolution and safe runtime
redirectfor read-only relation replacement); current runtime scope is Postgres-family (#423). - New Windows WSL2 setup guide for running Claude Code under agentsh.
- New CVE mitigation demos — CIFSwitch, Fragnesia, DirtyDecrypt (#413).
Validation
Built from the same commit as v0.20.4-rc1 and passed the full release matrix (goreleaser, alpine-build, docker-test including FUSE-enabled Ubuntu, signed macOS app, Homebrew cask, checksums). The rc1 prerelease is retained.
Full changelog: v0.20.3...v0.20.4