You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The canonical permissions schema accepts permissions.<id>.network.unix_sockets (per #15120) and codex doctor reports the config as loaded with no warnings, but the allowlist is never injected into the generated Seatbelt SBPL. Connecting to a listed AF_UNIX socket from a sandboxed child still produces a network-outbound denial.
The equivalent CLI flag --allow-unix-socket (from #17654) works correctly, which confirms the Seatbelt-side machinery is fine — only the config → SBPL wiring is missing.
Version
codex-cli 0.135.0-alpha.1
Codex.app on macOS 26.5 (aarch64)
On my install, only :workspace was a recognized built-in; extends = ":workspace-write" failed with "cannot extend unsupported built-in profile". Documenting which built-ins ship per build flavor would help.
Defining [permissions.workspace-write] directly (without extends) triggers the warning "Permissions profile workspace-write does not define any recognized filesystem entries" and silently strips the built-in filesystem defaults — that footgun is a separate UX concern.
Summary
The canonical permissions schema accepts
permissions.<id>.network.unix_sockets(per #15120) andcodex doctorreports the config as loaded with no warnings, but the allowlist is never injected into the generated Seatbelt SBPL. Connecting to a listed AF_UNIX socket from a sandboxed child still produces anetwork-outbounddenial.The equivalent CLI flag
--allow-unix-socket(from #17654) works correctly, which confirms the Seatbelt-side machinery is fine — only the config → SBPL wiring is missing.Version
Repro
~/.codex/config.toml:The same socket via the CLI flag works:
$ codex sandbox --permissions-profile uds-test \ --allow-unix-socket /tmp/.X11-unix -- \ python3 -c 'import socket; s=socket.socket(socket.AF_UNIX); s.connect("/tmp/.X11-unix/X0")' # OKOther schema variants I tried (none work)
All accepted by the config loader, none reach Seatbelt:
permissions.<id>.network.unix_sockets = { "/path" = "allow" }— canonical per chore: refactor network permissions to use explicit domain and unix socket rule maps #15120permissions.<id>.network.allow_unix_sockets = ["/path"]— legacy array formpermissions.<id>.experimental_network.unix_sockets = {...}permissions.<id>.experimental_network.dangerously_allow_all_unix_sockets = truepermissions.<id>.network.network_access = true(also not wired)experimental_network.unix_socketsexperimental_network.allow_unix_socketsThe only working config-side switch I found is the legacy, pre-profile path:
…but that opens the entire network namespace, which is exactly the over-reach #15120's
unix_socketsmap was meant to avoid.Expected
A
permissions.<id>.network.unix_socketsentry on the active profile should produce the same SBPL allow rules as--allow-unix-socket:Notes
:workspacewas a recognized built-in;extends = ":workspace-write"failed with "cannot extend unsupported built-in profile". Documenting which built-ins ship per build flavor would help.[permissions.workspace-write]directly (withoutextends) triggers the warning "Permissions profileworkspace-writedoes not define any recognized filesystem entries" and silently strips the built-in filesystem defaults — that footgun is a separate UX concern.