Route · Available
Build Stack
Orchestrating two or more machines with Claude Code: from a shared monitor to jobs that travel to the Mac and come back as branches.
Part of the Claude Code Ecosystem →
Goal
End up with a Windows PC that edits and dispatches and a Mac mini that works on its own, joined by SSH and git, with rules enforced by mechanism rather than by memory.
For: Anyone who already uses Claude Code on one computer and has another one sitting idle.
Before you start
- Claude Code installed on one machine
- A terminal and basic git
- A second computer on the same network
Lessons
0 of 24 done in this browser
- 01
A split ultrawide monitor: Windows on the left, the Mac on the right.
- 02 Deskflow In preparation ✓ Done
One keyboard and mouse for both machines.
- 03
Homebrew, Claude Code, gh, and a PATH that also works over SSH.
- 04 SSH In preparation ✓ Done
ssh mac without a password.
- 05 Network and DHCP In preparation ✓ Done
Same subnet, and an IP that does not change.
- 06
A photo copy with sha256 on an external disk.
- 07
macOS 15.3.1 to 27.0.1 and what changed.
- 08
Repos by git bundle, port, tests, layered config.
- 09
enjambre run: Windows sends, a branch and a ledger entry come back.
- 10
A night of unsupervised work, with rules and a report.
- 11 Remote-SSH In preparation ✓ Done
VS Code on Windows, compute on the Mac.
- 12
claude, gh and git over SSH with a tmux that is born in your session; the first real job.
- 13
Blender on Metal: STL to PNG with one line from Windows, Onshape to render, algorithms on both machines.
- 14
enjambre watch knows which nodes are ready; jobs for a downed node wait in a queue.
- 15
Five MLX models with sha256, served one at a time by a manager that Windows reaches through a tunnel.
- 16
Audio to text with renamable Speaker N labels; about 24 hours of audio per hour, measured against known truth.
- 17
The same tasks on both machines; cloud vs local in claude -p; a local coding model vs Claude Code.
- 18 Shared disks In preparation ✓ Done
The Mac mounts Windows folders over SMB with a dedicated user; automatic mount, watch monitors it, firewall.
- 19
One page with nodes, open sessions, usage, queue and a comparison by task type; a summary in the statusline.
- 20
From five hand-picked models to a catalogue, a benchmark with identical inputs and a manager that picks each task's model.
- 21 The router In preparation ✓ Done
enjambre run without --node picks the machine from a table and live state, and explains why in one line.
- 22
Every Claude Code session on both machines knows the Mac exists; a bare ssh mac is blocked by a hook.
- 23
A viewer with two costs and its own history, a redacted web copy with an allowlist, and a tray to drop tasks from the phone.
- 24
enjambre script (a command declared in AGENTS.md, $0) and run --detach (an agent with a USD cap): they return at once, heartbeat, resume if they die and leave a line in the ledger; kind: tests gets exactly one Bash command.
- 25
A persistent Claude Code on the Mac that Windows talks to (enjambre chat/send/sessions), with Playwright, a ledger per turn and gui yes/no in status; the key's threat model.
- 26
Every failure with its cause, grouped; tests kept apart; projects sortable by spend from the phone; a zoomable timeline; usage through lenses and a heat map; local models with logo, state and an editable note.
- 27
What is running right now, on top and in green, every 10 s; per node: CPU, GPU, RAM with pressure and swap, thermals, network, 4-hour charts and processes tagged with their job or session.
- 28
Four job classes, high > normal > low > night: a low job starts only on a free machine, a high one pauses or evicts it, and it resumes by itself 60 s later. The viewer says why.
- 29 Unattended startup In preparation ✓ Done
What starts by itself on each machine after a reboot, watch and live on the PC with nobody logged in, and a Mac that only reads as ready once its keychain can run an agent.
- 30
Every number in the viewer says when it was measured and where it comes from: the age of each gauge, each chart's window and step measured from its data, and no user name in any screenshot.
- 31
No job should stay in unknown forever. If a job cannot run, it must fail on the spot and say why. If it dies before starting, it has to leave a state and a reason on disk.
State of the guide today: 24 lessons with a page, 3 partly done, 4 still to write.
Mini project
Your first distributed task
One command on one machine creates a worktree and a branch on the other, an agent works there and a line comes back to the ledger. It is the skeleton of enjambre; everything else is built on top of it.