Overview
The problem
Architecture
One repo, one command center
Layers that replace instead of merging
One AGENTS.md for every agent
Owning keys, not settings files
Deploying a change
Enrolling a machine
- audit runs the read-only audit over SSH, saves it, and scans it for token-like strings.
- key creates the machine's read-only deploy key, registers it on GitHub, clones the repo and records the checkout path in inventory.yaml.
- migrate runs the one-time migrations, as a dry run first.
- deploy runs a dry-run deploy, then the real one.
- check runs the doctor.
Key design decisions
Third-party skills are vendored, with upstream merges
Secrets stay on each machine
Checks compare structure, not one value
Fleet ships the vault tooling, not the vaults
One model family writes, another reviews
What changed
Tech stack
- Bash, compatible with macOS bash 3.2, for install.sh, deploy and enrollment
- Python 3 standard library for the tool sync, doctor and skill updates, with PyYAML only in tests
- Git and GitHub with a read-only deploy key per machine
- GitHub Actions for CI on Linux and macOS, with shellcheck, actionlint and gitleaks
- SSH over Tailscale from the command center to every machine
- Homebrew on the Macs, and pacman and mise on the Arch Linux command center
- Claude Code, Codex, OMP and herdr as the tools fleet configures
- 1Password CLI for op:// secret references