Deployment plan
Deployment follows the cluster standard: the mld orchestrator on the gateway (M1M32) with a manifest, PM2 on the node,
and a MacLustr Tunnel route. Nothing else on the cluster is modified.
| Step | Action | Affects |
|---|---|---|
| 1 | Node tools: tmux, ripgrep, PostgreSQL 17 (brew service), Claude Code CLI | M5M36 only (done 2026-11-09) |
| 2 | Database: role claude_remote, database claude_remote (random password, local only) |
M5M36 |
| 3 | Directories: ~/apps/claude-remote (code, git clone), ~/claude-remote-data (0700: socket, hook token, task directories, setup token), ~/backups/claude-remote (encrypted backups), ~/workspace (project root) |
M5M36 |
| 4 | Manifest M1M32:~/dispatch/apps/claude-remote.json: pinned to M5M36, two PM2 processes (claude-remote-runtime, claude-remote-server) + nightly backup, secrets generated on the gateway (never committed) |
M1M32 manifest store |
| 5 | mld stage → mld deploy claude-remote → build on node, migrations, PM2 start, local health check |
M5M36 |
| 6 | Tunnel route https://claude.spboucher.ai → M5M36:8620 (DNS A record already points to the gateway) — only after the security test suite passes |
BHS64 Caddy (one route added) |
| 7 | mld adopt claude-remote → the node directory becomes the source of truth (git origin = spbgit) |
M1M32 git server (new bare repo) |
| 8 | Owner: read the one-time setup token on the node, create the admin account, enrol passkey/TOTP, run /login inside the first Claude session |
— |
| 9 | Independence test from a phone with the laptop off | — |
Rollback: mld retire claude-remote removes the route and the processes; data stays in ~/claude-remote-data and Postgres.
Items that need the owner's explicit approval (not done automatically):
- authorising an SSH key of M5M36 on other nodes (remote task execution), i.e. filling
CR_EXEC_HOSTS; - copying any credential from the laptop (MCP API keys, tokens);
- migrating research repositories that are not already on the git server.