Installation¶
berth runs on macOS and needs two things: Apple container (the VM runtime) and the berth CLI.
1. Install Apple container¶
Install the signed .pkg from Apple's GitHub Releases:
2. Install berth¶
This installs:
| Binary | Purpose |
|---|---|
berth |
the CLI — everything goes through it |
berth-claude / berth-codex |
one-line spawn shortcuts (auto-enable --ssh for git@ URLs) |
berth-tui |
the dashboard binary, launched via berth tui |
Check the install:
3. Build the sandbox¶
berth setup is idempotent and safe to re-run. It:
- starts Apple container and creates the
berthmachine - applies VM hardening (Docker
userns-remap, masked host paths) - configures host NAT so the VM and nested Docker have egress
- builds the local agent image
Administrator prompt
Setup may ask for macOS administrator approval to enable IP forwarding and load a com.apple/berth PF NAT anchor. A macOS reboot resets these; berth vm start re-applies them.
Verify everything is healthy:
diagnose checks the VM, egress, image, worktree posture, and flags risky spawn defaults. If anything fails later, its output is the first thing to look at.
Keeping it up to date¶
brew upgrade berth # new CLI release
berth update # rebuild the agent image (cached)
berth update --quick # rebuild only the AI CLI layer
berth update --full # full rebuild, no cache
Migrating from safe-agentic¶
berth is the renamed safe-agentic; old GitHub URLs redirect. Binaries went from safe-ag* to berth*, env vars from SAFE_AGENTIC_* to BERTH_*, the config home from ~/.safe-ag to ~/.berth, and the VM is now named berth.
brew uninstall safe-agentic && brew install 0x666c6f/tap/berth
mv ~/.safe-ag ~/.berth # keeps config, templates, and state (merge if ~/.berth exists)
berth setup # creates the new VM and image
container machine stop safe-agentic && container machine rm safe-agentic
If defaults.worktrees_dir in config.toml points under ~/.safe-ag, update it after the move.
Next¶
- Quickstart — spawn your first agent
- Configuration — defaults, policy rules, profiles