01
SIwithin — run Claude Code unattended in a macOS sandbox that denies your home folder by default
SIwithin (Apache-2.0, Python standard library only, v0.5.0 on Monday, 8 points on Show HN) runs Claude Code or the Codex CLI on a written brief with no one watching. Each run gets a generated sandbox-exec profile, saved as fence.sb in the run folder, that denies reads and writes to your whole home directory and then re-allows only the run's folders, the CLI binary and its caches. Writes to /tmp, /usr/local, /Applications and /Volumes are refused, and open, osascript, launchctl and crontab are blocked. In the default network mode, the only socket the run can open is a loopback proxy that holds the real API key outside the fence, hands the run a token that works nowhere else, and returns HTTP 402 once --budget is spent. Every run appends a line to ledger.md and writes a receipt.json of file hashes chained to the previous one, which --verify checks.
This is Anthropic's "default configuration" pass applied to an agent run. Start from nothing reachable and add back what the brief needs, instead of starting from your whole account and hoping. The README's limits section is unusually specific about what the fence doesn't cover: what the agent sends to the API in request bodies, reads outside the home folder, and a key exposed through shell rc files. On HN one commenter asked what this adds over Claude Code's own budget flag. The README's answer is that the budget is enforced three ways: the CLI's own flag, a stop on streamed usage, and the proxy outside the fence. Another commenter running agents unattended said the harder problem was "telling 'done' apart from 'stopped'," which the ledger's status column only partly answers.
Reach for it if you already leave Claude Code running overnight on a Mac with your real home directory visible to it. Delete the throwaway macOS user account you made so an agent couldn't read ~/.ssh. Tradeoffs: macOS only, and it refuses to run elsewhere rather than run unfenced; the Codex adapter and --reconcile against the provider's usage API were built from docs and haven't been run live; the proxy stops after the response that crosses the budget, so a run can overshoot; and it is 10 commits from one author, with 3 stars.