Agent config backup — RayDataCo/ray-config
The Ray Data Co Claude Code agent identity is now backed up to a private GitHub repo, syncing nightly. This makes the AGENT itself portable, not just the data.
What’s backed up
Repo: github.com/RayDataCo/ray-config (private)
Captures everything that makes this Mac mini’s Claude Code instance “Ray”:
- All 30+ custom skills (
~/.claude/skills/) - All wrapper + audit + ingestion scripts (
~/.claude/scripts/, excluding Python venvs) - Cron state files, audit logs, ledgers, graph.duckdb (
~/.claude/state/) - Discord + iMessage access policies (
~/.claude/channels/*/access.json) - The 24 auto-memory feedback files — the irreplaceable accumulated “Ray personality” (
~/.claude/projects/-Users-ray/memory/) - Claude Code harness config (
~/.claude/settings.json+settings.local.json) ~/CLAUDE.md,~/SOUL.md,~/.zshrc,~/.tmux.conf- LaunchAgent plists (channels-agent, hq-tunnel, sync job)
Total: ~172 files, 16MB.
What’s deliberately excluded
- Secrets (.env files, API tokens) — live in 1Password “Ray Agent” vault, never on disk
- Python virtualenvs — rebuildable from package lists during bootstrap
- Session transcripts (raw conversation logs) — ephemeral, not config
- Discord inbox attachments (~30MB cached images) — transient
- Caches — regenerated on demand
- Vault — separate repo (
RayDataCo/rdco-vault)
How it stays current
LaunchAgent co.raydata.ray-config-sync.plist runs ~/Projects/ray-config/bin/sync.sh nightly at 3:33am ET (after 3:17am graph-reingest, before 4am channels-agent restart). Each run rsyncs from canonical locations into the repo, commits with a timestamped message, and pushes to origin/main. If nothing changed, exits cleanly.
Manual run: ~/Projects/ray-config/bin/sync.sh
Disaster recovery
Full step-by-step at ~/Projects/ray-config/SETUP.md (also visible at github.com/RayDataCo/ray-config/blob/main/SETUP.md).
Critical-path summary on a fresh Mac:
- Install Xcode CLT + Homebrew (~10 min)
brew install gh tmux yt-dlp ffmpeg python@3.12 jq rsync duckdb && brew install --cask 1password 1password-cli(~5 min)- Install Claude Code from claude.ai/code, sign in with ben@raydata.co (~5 min)
gh auth login+ 1Password sign-in (~5 min)gh repo clone RayDataCo/ray-config ~/Projects/ray-config && gh repo clone RayDataCo/rdco-vault ~/rdco-vault(~3 min)bash ~/Projects/ray-config/bin/bootstrap.sh(~1 min)- Rebuild Python venvs + rehydrate channel tokens from 1Password + start tmux session (~10 min)
Total critical-path: ~30-45 min to fully-functional agent.
Tier in the 3-2-1 backup stack
| Tier | What | Where | Cadence |
|---|---|---|---|
| 1 | Agent identity (this repo) | GitHub RayDataCo/ray-config | nightly auto-commit |
| 2 | System-wide image | Time Machine on local USB | hourly/daily/weekly |
| 3 | Off-site insurance | Backblaze Personal ($9/mo) | continuous |
Tier 1 (this) is the highest-leverage piece: it makes the AGENT portable, not just the data. Tier 2 (founder ordered USB drives 2026-04-28) and tier 3 (optional) cover total system loss / hardware destruction.
Why this matters
Before today, the Mac mini was a single point of failure for the entire RDCO autonomous-COO setup. The vault was backed up, the project repos were backed up, but the AGENT — the skills + memory + cron loops + channel access policies + LaunchAgent plists — only existed on this one machine. Mac mini SSD dies → reconstruction is days, not minutes.
After today: agent is portable. Mac mini SSD dies → buy new Mac → 30-45 min to fully restored.
Related
- ../01-projects/squarely-puzzles/README — Mac mini also runs the Squarely workflows
~/Projects/ray-config/README.md— repo-level overview~/Projects/ray-config/SETUP.md— complete fresh-Mac walkthrough~/Projects/ray-config/bin/sync.sh— the nightly sync script~/Projects/ray-config/bin/bootstrap.sh— the restore script- 1Password “Ray Agent” vault — secret store (DO NOT commit secrets to ray-config)