Technical companion · The what and the how

The Pocket Fleet: How It Actually Works

Infographic: phone connects via Blink and mosh to a Tailscale/Headscale mesh of Macs, with Claude and a wiki
The mesh, drawn by the machines on it.

The essay tells the story. This is the parts list and the wiring. Everything below runs today; nothing is aspirational. Where a piece is open source, I link it.

The fleet

Seven kinds of device, one private network:

DeviceRole
Mac mini "Ada" (the hand-me-down)Always-on house manager: scheduled agent jobs, nightly wiki compile, Home Assistant control, push notifications, exit node
Mac mini "Vera"Dev workstation
Mac mini "Max" hardware sibling, MacBook ProTravel laptop
iPhone + iPadThe doorway (Blink fork + mosh)
Raspberry Pi (Pi-hole)DNS for the whole network, everywhere
Raspberry Pi (Home Assistant)House automation; standby subnet router
GL.iNet pocket routerTravel router; joins the network from hotel ethernet

The network: Headscale, not Tailscale

Tailscale's clients are open source; its coordination server is not, and the hosted service holds your device list, keys, and access map. Headscale is the open-source reimplementation of that coordination server. Mine runs on the same $10-class AWS Lightsail VM that serves this website.

The deployment is smaller than people expect:

Useful details the docs will not volunteer:

The session: mosh

Mosh is the piece nobody needs convincing about once they feel it. SSH dies when your IP changes; mosh runs over UDP with its own sequence numbers, so the session survives wifi-to-cellular handoffs, sleep, and elevators. It is fifteen years old, free, and exactly as good as its reputation. The terminal session I am typing into has been alive for four days across two states.

The doorway: a fleet-native Blink fork

Blink is the GPL iOS terminal with first-class mosh support. My fork is public at github.com/nateober/blink. What it adds, in rough order of usefulness:

One war story worth the retelling: the App Intent originally hung and died with iOS's generic "unknown error." The cause was that Blink's SSH stack only makes progress while the RunLoop captured at client init is actually running - the interactive path spins it, a headless Swift-concurrency task does not. The fix was a dedicated thread driving its run loop until the dial completes. The AI assistant diagnosed that by reading the framework source. I would not have found it.

Distribution note: it is a GPL fork of trademarked software, so it ships to my own devices via TestFlight, not the App Store. That is the honest path for personal forks of GPL iOS apps.

The agent: claude -p is the whole RPC protocol

The piece that ties the fleet together is embarrassingly simple:


ssh ada 'claude -p "compile last night's notes into the wiki"'

Claude Code runs on every Mac in the fleet. One sentence in, work out. Because it is just SSH, it composes with everything above: Siri Shortcuts run it, scheduled jobs run it, and the phone runs it from a hotel in Seattle. Each machine has a persona file defining its role; the always-on mini runs the scheduled work.

The memory layer is a plain Obsidian-compatible wiki - about 143 pages of Markdown with a schema file that tells the agent how to behave: pages under ~200 lines, hub-and-satellite structure, every fact traceable to a source document, append-only logs. A nightly job compiles new information into pages; a weekly lint hunts stale pages, broken links, orphans, and contradictions. The agent maintains its own memory the way an engineer maintains a codebase.

This is also what made the model handoff a non-event. The infrastructure was built this spring with Claude Opus; the model improving it now is Fable. The new model read the wiki and the runbooks and continued - yesterday it fixed a macOS DNS quirk (standalone tailscaled sets the search domain but never creates the /etc/resolver entry; one tee and a killall -HUP mDNSResponder later, names resolve). The system's knowledge lives in files, so the intelligence layer is swappable.

Cost

PieceCost
Headscale, mosh, Pi-hole, Home AssistantFree, open source
Blink forkFree to build; Apple developer account $99/yr to sideload
Lightsail VM~$10/mo (was already hosting this site)
Mac minisAlready owned; one inherited
ClaudeThe one subscription that replaced many

If you want a version of this

Start with the rented versions and the defaults: stock Tailscale, stock Blink, Claude Code on one always-on machine. That is one afternoon and zero forks. Self-host the coordination server when you have a reason to own it. Fork the terminal when you have a feature you actually want. Let the assistant do the unfamiliar parts, and make it write down what it did - the notes are the part you will still own when every model and product in this article has been replaced.