shared/steps/sandbox_runtime.mjs passes SRT a filesystem/network config but sets neither allowUnixSockets nor allowAllUnixSockets, so SRT's Linux default applies: the vendored seccomp filter blocks socket(AF_UNIX, …) with EPERM for the whole lifecycle (@anthropic-ai/sandbox-runtime@0.0.75 README, "Unix Socket Restrictions (Linux)"). That is correct as a default, but it silently removes an adopter's ability to talk to a system daemon from sandbox_setup: or from the agent — and there is no lever to grant it back.
Concrete case, on a repo pinning 0.2.5: max-sixty/worktrunk's tend-weekly bumps the Rust toolchain and refreshes flake.lock with nix flake update rust-overlay. Its setup: action installs Nix multi-user precisely so the tool crosses the boundary — root owns /nix, and /nix/var/nix/profiles/default/bin is a system path that survives tend's PATH derivation. But the client reaches the store by connecting to /nix/var/nix/daemon-socket/socket, which needs a fresh AF_UNIX socket. Under the filter that call returns EPERM.
The failure mode is quiet rather than loud. command -v nix still resolves, so the adopter's sandbox_setup: probe passes and the lifecycle starts normally; the breakage surfaces only in the one weekly job that actually runs nix, as an errno the session has to work backwards from.
Ask: expose the SRT lever as an action input. On Linux only allowAllUnixSockets: true has an effect — the README notes allowUnixSockets path allowlisting is ignored there, since seccomp can't filter by path — so the honest shape is a single blunt opt-in (allow_unix_sockets: false by default), not a path list that would work on macOS and no-op on the runners tend targets. An adopter enabling it is knowingly trading the IPC restriction for daemon access; documenting it that way seems better than the current position, where the only way to find out is a red weekly job.
Happy to send a PR if the input shape sounds right.
shared/steps/sandbox_runtime.mjspasses SRT afilesystem/networkconfig but sets neitherallowUnixSocketsnorallowAllUnixSockets, so SRT's Linux default applies: the vendored seccomp filter blockssocket(AF_UNIX, …)withEPERMfor the whole lifecycle (@anthropic-ai/sandbox-runtime@0.0.75README, "Unix Socket Restrictions (Linux)"). That is correct as a default, but it silently removes an adopter's ability to talk to a system daemon fromsandbox_setup:or from the agent — and there is no lever to grant it back.Concrete case, on a repo pinning 0.2.5: max-sixty/worktrunk's
tend-weeklybumps the Rust toolchain and refreshesflake.lockwithnix flake update rust-overlay. Itssetup:action installs Nix multi-user precisely so the tool crosses the boundary — root owns/nix, and/nix/var/nix/profiles/default/binis a system path that survives tend's PATH derivation. But the client reaches the store by connecting to/nix/var/nix/daemon-socket/socket, which needs a freshAF_UNIXsocket. Under the filter that call returnsEPERM.The failure mode is quiet rather than loud.
command -v nixstill resolves, so the adopter'ssandbox_setup:probe passes and the lifecycle starts normally; the breakage surfaces only in the one weekly job that actually runsnix, as an errno the session has to work backwards from.Ask: expose the SRT lever as an action input. On Linux only
allowAllUnixSockets: truehas an effect — the README notesallowUnixSocketspath allowlisting is ignored there, since seccomp can't filter by path — so the honest shape is a single blunt opt-in (allow_unix_sockets: falseby default), not a path list that would work on macOS and no-op on the runners tend targets. An adopter enabling it is knowingly trading the IPC restriction for daemon access; documenting it that way seems better than the current position, where the only way to find out is a red weekly job.Happy to send a PR if the input shape sounds right.