Een externe AI-codeeropstelling op een Mac Mini M4 met Tailscale, mosh en herdr

Een Mac Mini M4 kan thuis staan, aangesloten en altijd aan, met daarop de code, de containers en de AI-codeeragents die een laptop anders zou moeten meedragen. De laptop wordt een thin client: open een terminal, sluit weer aan op wat al draaide, klap het deksel dicht in de trein, sluit later ergens anders weer aan. Drie tools maken dat opnieuw aansluiten routine in plaats van een dagelijks gevecht met wisselende IP-adressen, weggevallen shells en verloren agent-output: Tailscale voor het netwerk tussen de twee machines, mosh voor een shell die het overleeft als het netwerk eronder verandert, en herdr voor de terminalsessies die de codeeragents onder dat alles blijven draaien.

Waarom de code op een machine houden die je nooit meedraagt

Het idee is de klassieke thin-clientsplitsing, toegepast op AI-codeeragents: de Mac Mini M4 blijft thuis aangesloten en bevat het eigenlijke werk, de git-clones, de draaiende containers, de language servers, en de agentsessies die ze lezen en beschrijven. De laptop bevat niets daarvan. Hij opent een terminal, verbindt, en toont wat al draait op de Mini, en sluit daarna weer zonder iets mee te nemen.

Dit werkt alleen als de verbinding terug naar de Mini betrouwbaar genoeg is om er niet over na te hoeven denken, en daar zijn de volgende drie tools voor.

De drie tools, en wat elk ervan oplost

Elke tool lost één specifiek faalscenario op van werken op een machine die niet voor je neus staat.

  • Tailscale geeft de laptop en de Mini een eigen privénetwerk. Verbindingen tussen apparaten daarop "work seamlessly across firewalls and Network Address Translation (NAT) without requiring port forwarding or complex firewall rules" (tailscale.com/kb/1151/what-is-tailscale, gecontroleerd september 2026), en met MagicDNS aan geldt dat "any device signed in to your network can access other devices by using their machine name" (tailscale.com/kb/1081/magicdns, gecontroleerd september 2026), in plaats van een IP-adres dat kan wijzigen.
  • mosh, mobile shell, vervangt de SSH-sessie voor het eigenlijke terminalwerk: "you can put your laptop to sleep and wake it up later, keeping your connection intact", en het "automatically roams as you move between Internet connections" (mosh.org, gecontroleerd september 2026), dus overschakelen van thuiswifi naar een hotspot op de telefoon onderweg naar buiten breekt de shell niet af.
  • herdr is wat een AI-codeeragent daadwerkelijk laat doordraaien zodra de shell zelf het overleeft. Het is een terminal workspace manager: "Herdr keeps panes running in a background server. Your terminal client can detach and reconnect later" (herdr.dev/docs/persistence-remote/, gecontroleerd september 2026), en aansluiten vanaf een andere machine werkt op dezelfde manier: "the remote server owns the running panes and sends their terminal content and session state over SSH. Your local Herdr draws the UI" (herdr.dev/docs/persistence-remote/, gecontroleerd september 2026). De agent zelf merkt niet dat de laptop in slaap is gegaan.

Tailscale brengt de laptop op hetzelfde privénetwerk als de Mini, en dan zijn er twee manieren om bij het eigenlijke werk te komen, allebei hieronder behandeld: mosh gevolgd door herdr voor een shell die sluimerstand en wisselende wifi overleeft, of herdr's eigen remote-attach-vlag over gewone SSH, als een roamende shell niet nodig is. Hoe dan ook houdt herdr de agentsessies draaiend, los van welke verbinding er ook wordt gebruikt.

1. Zet beide machines op hetzelfde privénetwerk

Installeer Tailscale op de Mac Mini en op de laptop en log op beide in met hetzelfde account.

Inloggen via de Tailscale-app zet een apparaat op het tailnet; voor dit onderdeel is geen CLI-stap nodig. De machinenaam die de app toont is waarmee mosh en herdr in de stappen hieronder verbinden, in plaats van met een IP-adres dat kan wijzigen. Een tailscale-commando staat sowieso niet standaard op het PATH op macOS: bij de App Store-variant "the CLI is bundled inside the Tailscale app", en bij de Standalone-variant "you can install the CLI integration from the client settings" (tailscale.com/kb/1080/cli, gecontroleerd september 2026).

2. Schakel Extern inloggen in op de Mac Mini

Beide manieren om in stappen 4 en 5 bij de Mini te komen beginnen met een SSH-login: "Mosh will log the user in via SSH" voordat het overschakelt op zijn eigen verbinding (mosh.org, gecontroleerd september 2026), en de remote-attach-vlag van herdr doet hetzelfde, wat herdr's eigen documentatie omschrijft als aansluiten via SSH zonder eerst een shell te openen (herdr.dev/docs/how-to-work/, gecontroleerd september 2026). Hoe dan ook moet de Mini inkomende logins accepteren.

  1. Op de Mac Mini: kies Apple-menu, Systeeminstellingen, klik op Algemeen in de navigatiekolom en dan op Delen (support.apple.com/nl-nl/guide/mac-help/allow-a-remote-computer-to-access-your-mac-mchlp1066/mac, gecontroleerd september 2026).
  2. Klik op de infoknop naast Extern inloggen, schakel het in, en kies welke gebruikersaccounts mogen inloggen (support.apple.com/nl-nl/guide/mac-help/allow-a-remote-computer-to-access-your-mac-mchlp1066/mac, gecontroleerd september 2026).

Het inschakelen van zo'n deelfunctie "opens a specific port for the service to communicate through" automatisch door de firewall heen (support.apple.com/guide/mac-help/mh34041/mac, gecontroleerd september 2026), dus voor de SSH-kant van de verbinding is verder niets nodig.

3. Installeer mosh en herdr op beide machines

Beide zijn beschikbaar als Homebrew-formules.

brew install mosh
brew install herdr

mosh heeft aan beide kanten zijn eigen binary nodig: "Mosh will log the user in via SSH, then start a connection on a UDP port between 60000 and 61000" (mosh.org, gecontroleerd september 2026). Wat herdr nodig heeft hangt af van welk pad uit stappen 4 en 5 wordt gebruikt: eerst inloggen (via mosh of gewone SSH) en daar herdr uitvoeren heeft de binary vooraf al op de Mini geïnstalleerd nodig. Aansluiten met herdr --remote heeft in plaats daarvan de binary op de laptop nodig, om dat commando uit te voeren, en het kan aanbieden zichzelf op de Mini te installeren: "if no compatible binary exists, interactive runs prompt to install one to ~/.local/bin/herdr" (herdr.dev/docs/persistence-remote/, gecontroleerd september 2026). Installeren met Homebrew op beide machines vooraf dekt beide paden zonder die prompt nodig te hebben.

4. Verbind met mosh

Het hoofdpad: open de roamende shell, en voer daarna, eenmaal ingelogd, herdr uit.

mosh macmini
herdr

macmini is hier een plaatshouder: vervang het door de machinenaam van je Mini uit de Tailscale-app, of uit tailscale status als de CLI geïnstalleerd is. mosh macmini opent de roamende shell; herdr, eenmaal ingelogd uitgevoerd, sluit aan op welke herdr-sessies er al draaien op de Mini, agents inbegrepen, over een verbinding die blijft werken bij sluimerstand en wisselende wifi.

5. Of sluit direct aan met herdr's remote-optie

Het alternatief: sla de inlogshell over en sluit rechtstreeks aan vanaf de laptop, over gewone SSH in plaats van mosh.

herdr --remote macmini

Dit is wat herdr's eigen documentatie omschrijft als aansluiten via SSH zonder eerst een shell te openen (herdr.dev/docs/how-to-work/, gecontroleerd september 2026): "the remote server owns the running panes and sends their terminal content and session state over SSH. Your local Herdr draws the UI" (herdr.dev/docs/persistence-remote/, gecontroleerd september 2026). Dit roamt niet zoals mosh, omdat het over gewone SSH draait.

6. Houd de Mini wakker en klaar

  • Energie: een Mac mini is een desktop-Mac, dus de energie-instellingen staan in Systeeminstellingen onder Energie in plaats van Batterij; zet de optie "Schakel sluimerstand niet automatisch in als het beeldscherm is uitgeschakeld" aan (support.apple.com/nl-nl/guide/mac-help/set-sleep-and-wake-settings-mchle41a6ccd/mac, gecontroleerd september 2026), anders sluimert de Mini in en valt hij van het netwerk tot er iemand voor staat.
  • Energie, nogmaals: zet ook "Start automatisch op na stroomstoring" aan (support.apple.com/nl-nl/guide/mac-help/mchlp1168/mac, gecontroleerd september 2026), zodat de Mini na een stroomstoring vanzelf terugkomt in plaats van uit te blijven staan tot iemand er de aan/uit-knop indrukt. Op sommige Macs is dit ook, of in plaats daarvan, een pop-upmenu "Start op wanneer aangesloten op een stroombron" met drie opties, "Nooit", "Na een stroomstoring" en "Altijd" (support.apple.com/nl-nl/guide/mac-help/mchlp1168/mac, gecontroleerd september 2026); hoe dan ook geldt: "Het is mogelijk dat niet alle opties beschikbaar zijn. Dit is afhankelijk van je Mac" (support.apple.com/nl-nl/guide/mac-help/mchlp1168/mac, gecontroleerd september 2026).
  • Inlogonderdelen: voeg herdr toe, of wat de agentsessies opstart, onder Inlogonderdelen en extensies; daar "kun je kiezen welke onderdelen automatisch worden geopend wanneer je inlogt" (support.apple.com/nl-nl/guide/mac-help/mh15189/mac, gecontroleerd september 2026). Dat werkt pas zodra iemand is ingelogd: zonder automatisch inloggen wacht de Mac na een herstart nog steeds bij het inlogvenster, en "wanneer FileVault is ingeschakeld, is de functie voor automatisch inloggen uitgeschakeld" (support.apple.com/nl-nl/guide/mac-help/set-up-users-groups-accounts-mtusr001/mac, gecontroleerd september 2026), dus met FileVault aan moet iemand bij een herstart of stroomonderbreking alsnog bij het toetsenbord zijn voordat het inlogonderdeel van herdr kan starten.

Waarom dit een schijf sneller vult dan een laptop

Een laptop die voor één project tegelijk wordt gebruikt, verwijdert en installeert onderweg opnieuw; een Mac Mini die als vaste basis voor codeeragents dient doet dat niet, omdat niets hem daartoe dwingt. Een worktree die voor één taak wordt geopend, met zijn eigen geïnstalleerde afhankelijkheden, verdwijnt niet zodra de taak klaar is; net zomin als een container-image die ooit is gedownload om iets te testen, een buildcache van een project dat al weken niet is aangeraakt, of de clone van een project dat alleen even bekeken moest worden. Elke rij hieronder is onze eigen planningsinschatting voor een opstelling zoals deze, geen meting van één specifieke machine; de twee rijen die van een echt project komen, zeggen dat erbij en geven de maand waarin dat gecontroleerd is.

Wat het gebruiktBegroot (onze inschatting)Over op 256GBOver op 512GBOver op 2TB
macOS, een code-editor, Xcode of andere platform-SDK's, en dagelijkse CLI-tools40GB216GB472GB1960GB
Een containerruntime-app plus een kleine werkset gedownloade images20GB196GB452GB1940GB
Clones van de projecten waaraan gewerkt wordt, met afhankelijkheden geïnstalleerd (onze eigen meting van de afhankelijkheden van een middelgroot TypeScript-project, september 2026: ongeveer 1GB per clone; hier begroot voor vier clones)4GB192GB448GB1936GB
Een worktree per actieve taak, elk een tweede kopie van de afhankelijkheden en buildcache van één project naast de hoofdclone (onze eigen meting van hetzelfde middelgrote TypeScript-project, september 2026: ongeveer 0,93GB aan node_modules plus ongeveer 0,42GB aan buildoutput per worktree, dus rond de 4,05GB voor drie worktrees, hier naar boven afgerond voor speelruimte)5GB187GB443GB1931GB
Build- en bundlercaches die met elke build groeien en zelden met de hand worden opgeruimd10GB177GB433GB1921GB
Lokale modelcaches, als de agent of zijn tools ook iets lokaal draaien (zie de eigen, onderbouwde tabel in de lokale-AI-gids voor de volle bandbreedte)20GB157GB413GB1901GB

Dat is 99GB volgens onze inschatting, boven op wat de machine al opslaat: 157GB over op 256GB, 413GB op 512GB, 1901GB op 2TB. Docker's eigen documentatie legt uit waarom de containerregel alleen maar groeit: images, containers, volumes en buildcache "are generally not removed unless you explicitly ask Docker to do so" (docs.docker.com/engine/manage-resources/pruning/, gecontroleerd september 2026). Een macOS-update heeft tijdelijk ook wat van die vrije ruimte nodig, tijdens de installatie (support.apple.com/en-us/102624, gecontroleerd september 2026).

De eerlijke kanttekeningen

  • mosh heeft geen eigen scrollback: het "synchronizes only the visible state of the terminal", en de eigen FAQ wijst naar "screen or tmux on the remote side" voor volledige scrollback (mosh.org, gecontroleerd september 2026). herdr vult die rol hier in plaats daarvan in: elke pane houdt een scrollbackbuffer bij "per pane terminal", standaard 10.000.000 bytes en aanpasbaar via het configuratiebestand (herdr.dev/docs/config-reference/, gecontroleerd september 2026), dus terugscrollen door de eerdere output van een agent is het werk van herdr, niet van mosh.
  • Extern inloggen inschakelen "can make it less secure", in Apple's eigen woorden (support.apple.com/guide/mac-help/allow-a-remote-computer-to-access-your-mac-mchlp1066/mac, gecontroleerd september 2026). Een Tailscale-verbinding is niet het open internet, maar SSH-sleutelauthenticatie in plaats van een wachtwoord is er nog steeds de moeite waard bovenop; geen van beide schakelt dat vanzelf in.
  • De applicatiefirewall van macOS blokkeert, wanneer aan, anders "unwanted contact initiated by other computers" (support.apple.com/guide/mac-help/mh34041/mac, gecontroleerd september 2026); Extern inloggen opent zijn eigen poort, maar het UDP-bereik van mosh, standaard "a UDP port between 60000 and 61000" (mosh.org, gecontroleerd september 2026), is het checken waard als een gewone mosh-verbinding vastloopt vlak na de SSH-handshake.
  • Het gratis plan van Tailscale dekt een opstelling met twee machines ruim voldoende: "unlimited user devices" voor "up to 6 users", "$0 free forever" (tailscale.com/pricing, gecontroleerd september 2026).

Bijbehorende vragen

Heb ik thuis een statisch IP-adres nodig om dit te laten werken?
Nee. Dat is precies wat de MagicDNS-namen van Tailscale vervangen: "any device signed in to your network can access other devices by using their machine name" (tailscale.com/kb/1081/magicdns, gecontroleerd september 2026), en die naam blijft het apparaat volgen, ook als het publieke IP-adres van het thuisnetwerk verandert.
Vervangt mosh SSH volledig?
Nee, het steunt erop: mosh "will log the user in via SSH, then start a connection on a UDP port" voor de eigenlijke sessie (mosh.org, gecontroleerd september 2026). Extern inloggen moet aan blijven staan, anders werkt mosh helemaal niet.
Wat gebeurt er met een agentsessie als de accu van de laptop leegloopt tijdens een taak?
Niets, aan de kant van de Mini. "Herdr keeps panes running in a background server" ongeacht of er een client is aangesloten (herdr.dev/docs/persistence-remote/, gecontroleerd september 2026); sluit vanaf elke machine weer aan zodra de laptop terug is.
Is dit anders dan de Mac Mini als thuisserver draaien?
Het netwerk en het altijd-aan-gedeelte overlappen, maar de thuisservergids gaat over de containers en back-ups die een Mini kan hosten; deze gids gaat over het bereiken, en levend houden, van de codeeragents die het werk doen. Beide samen draaien telt op bij het opslagbudget hierboven.
Welke capaciteit moet ik bestellen voor een opstelling zoals deze?
Reken terug vanaf de tabel hierboven met de projecten en agents die daadwerkelijk tegelijk draaien. Het voorbeeldbudget in deze gids komt uit op 99GB, wat 901GB overlaat op de 1TB-module, €302,50, tegenover 157GB op 256GB, 413GB op 512GB, en 1901GB op de 2TB-module, €399,30. Controleer eerst welke Mac Mini-modellen compatibel zijn, en zie daarna de installatiegids voor de moduleswap zelf.

Klaar om te upgraden?

Meer gidsen