Owner-script sandbox hardening
Parent: structure
Owner-authored skill scripts (skill_run_script, see skills-progressive-disclosure) are untrusted, so they run hard-sandboxed: --network=none (can't exfiltrate), --read-only root (can't persist), --tmpfs /tmp bounded scratch (64 MB), --memory=256m --cpus=0.5 (runaway loops capped), --rm (auto-cleaned). The interpreter is a 3-language whitelist (python3 -c / node -e / bash -c) — no arbitrary binaries, so the shell-injection surface outside the boundary is zero. These are docker run flags assembled by DockerRunner in internal/capabilities/sandbox/sandbox.go (the package moved under capabilities/ with the domain-module split; the bwrap workspaces of the MCP capability sandboxes are a different package, capabilities/sandboxws).
Same instinct as the network-isolated MCP capability sandboxes (mcp-capability-plugins): untrusted code runs caged, reaching the host only through narrow, declared channels.