Programmieren mit KI aus der Ferne auf einem Mac mini M4 mit Tailscale, mosh und herdr
·
Ein Mac mini M4 kann zu Hause stehen, eingesteckt und immer an, und den Code, die Container und die KI-Coding-Agenten halten, die ein Notebook sonst mit sich herumtragen müsste. Das Notebook wird zum Thin Client: ein Terminal öffnen, sich wieder mit dem verbinden, was schon lief, im Zug zuklappen und später von woanders wieder verbinden. Drei Werkzeuge machen dieses Wiederverbinden zur Routine statt zum täglichen Kampf mit wechselnden IP-Adressen, abgebrochenen Shells und verlorener Agenten-Ausgabe: Tailscale für das Netzwerk zwischen den beiden Geräten, mosh für eine Shell, die übersteht, wenn sich das Netzwerk unter ihr ändert, und herdr für die Terminal-Sitzungen, die darunter die Coding-Agenten am Laufen halten.
Warum den Code auf einem Gerät halten, das man nie mitnimmt
Die Idee ist die klassische Thin-Client-Aufteilung, angewandt auf KI-Coding-Agenten: Der Mac mini M4 bleibt zu Hause eingesteckt und hält die eigentliche Arbeit, die Git-Klone, die laufenden Container, die Language-Server und die Agenten-Sitzungen, die daran lesen und schreiben. Das Notebook hält nichts davon. Es öffnet ein Terminal, verbindet sich, zeigt, was auf dem Mini schon läuft, und wird wieder zugeklappt, ohne etwas mitzunehmen.
Das funktioniert nur, wenn die Verbindung zurück zum Mini zuverlässig genug ist, dass man ihr ohne Nachdenken vertraut; dafür sind die nächsten drei Werkzeuge da.
Die drei Werkzeuge und was jedes löst
Jedes Werkzeug löst eine bestimmte Fehlerquelle bei der Arbeit an einem Gerät, das nicht vor einem steht.
- Tailscale gibt dem Notebook und dem Mini ein eigenes privates Netzwerk. Verbindungen zwischen Geräten darin „work seamlessly across firewalls and Network Address Translation (NAT) without requiring port forwarding or complex firewall rules“ (tailscale.com/kb/1151/what-is-tailscale, geprüft im September 2026), und mit aktiviertem MagicDNS „any device signed in to your network can access other devices by using their machine name“ (tailscale.com/kb/1081/magicdns, geprüft im September 2026) statt über eine IP-Adresse, die sich ändern kann.
- mosh, die Mobile Shell, ersetzt für die eigentliche Terminalarbeit die SSH-Sitzung: „you can put your laptop to sleep and wake it up later, keeping your connection intact“, und sie „automatically roams as you move between Internet connections“ (mosh.org, geprüft im September 2026); der Wechsel vom WLAN zu Hause zum Hotspot des Telefons auf dem Weg zur Tür beendet die Shell also nicht.
- herdr hält einen KI-Coding-Agenten tatsächlich am Laufen, wenn die Shell selbst schon übersteht. Es ist ein Terminal-Workspace-Manager: „Herdr keeps panes running in a background server. Your terminal client can detach and reconnect later“ (herdr.dev/docs/persistence-remote/, geprüft im September 2026), und das Verbinden von einem anderen Gerät funktioniert genauso: „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/, geprüft im September 2026). Der Agent selbst merkt nie, dass das Notebook in den Ruhezustand gegangen ist.
Die drei bauen aufeinander auf: Tailscale bringt das Notebook ins selbe private Netzwerk wie den Mini, danach gibt es zwei Wege zur eigentlichen Arbeit, beide unten beschrieben: mosh und dann herdr für eine Shell, die Ruhezustand und WLAN-Wechsel übersteht, oder herdrs eigene Option zum Verbinden aus der Ferne über einfaches SSH, wenn keine mitwandernde Shell nötig ist. So oder so hält herdr die Agenten-Sitzungen am Laufen, unabhängig davon, über welche Verbindung man sie erreicht.
1. Beide Geräte ins selbe private Netzwerk bringen
Installieren Sie Tailscale auf dem Mac mini und auf dem Notebook und melden Sie sich auf beiden mit demselben Account an.
Die Anmeldung über die Tailscale-App bringt ein Gerät ins Tailnet; dafür ist kein Schritt auf der Kommandozeile nötig. Der in der App angezeigte Gerätename ist das, womit sich mosh und herdr in den Schritten unten verbinden, statt einer IP-Adresse, die sich ändern kann. Ein tailscale-Befehl liegt auf macOS ohnehin nicht standardmäßig im PATH: Bei der Variante aus dem App Store „the CLI is bundled inside the Tailscale app“, und bei der eigenständigen Variante „you can install the CLI integration from the client settings“ (tailscale.com/kb/1080/cli, geprüft im September 2026).
2. Entfernte Anmeldung auf dem Mac mini einschalten
Beide Wege zum Mini in den Schritten 4 und 5 beginnen mit einer SSH-Anmeldung: „Mosh will log the user in via SSH“, bevor es auf seine eigene Verbindung umschaltet (mosh.org, geprüft im September 2026), und herdrs Option zum Verbinden aus der Ferne tut das, was herdrs Dokumentation das Verbinden über SSH ohne vorheriges Öffnen einer Shell nennt (herdr.dev/docs/how-to-work/, geprüft im September 2026). So oder so muss der Mini eingehende Anmeldungen annehmen.
- Auf dem Mac mini: Wählen Sie Apple-Menü > Systemeinstellungen, klicken Sie in der Seitenleiste auf „Allgemein“ und dann auf „Teilen“ (support.apple.com/guide/mac-help/allow-a-remote-computer-to-access-your-mac-mchlp1066/mac, geprüft im September 2026).
- Klicken Sie auf die Info-Taste neben „Entfernte Anmeldung“, schalten Sie sie ein und wählen Sie, welche Benutzeraccounts sich anmelden dürfen (support.apple.com/guide/mac-help/allow-a-remote-computer-to-access-your-mac-mchlp1066/mac, geprüft im September 2026).
Wer einen Freigabedienst wie diesen einschaltet, öffnet laut Apple automatisch einen bestimmten Port in der Firewall, über den der Dienst kommuniziert (support.apple.com/guide/mac-help/mh34041/mac, geprüft im September 2026); für die SSH-Hälfte der Verbindung ist also nichts weiter nötig.
3. mosh und herdr auf beiden Geräten installieren
Beide gibt es als Homebrew-Formeln.
brew install mosh
brew install herdrmosh braucht sein eigenes Programm auf beiden Seiten: „Mosh will log the user in via SSH, then start a connection on a UDP port between 60000 and 61000“ (mosh.org, geprüft im September 2026). Was herdr braucht, hängt vom Weg aus den Schritten 4 und 5 ab: Wer sich zuerst anmeldet (über mosh oder einfaches SSH) und dort herdr ausführt, braucht das Programm schon auf dem Mini. Wer stattdessen mit herdr --remote verbindet, braucht das Programm auf dem Notebook, um diesen Befehl auszuführen, und es kann anbieten, sich selbst auf dem Mini zu installieren: „if no compatible binary exists, interactive runs prompt to install one to ~/.local/bin/herdr“ (herdr.dev/docs/persistence-remote/, geprüft im September 2026). Die Installation über Homebrew auf beiden Geräten deckt beide Wege ab, ohne diese Abfrage zu brauchen.
4. Mit mosh verbinden
Der Hauptweg: die mitwandernde Shell öffnen und nach der Anmeldung herdr starten.
mosh macmini
herdrmacmini ist hier ein Platzhalter: Ersetzen Sie ihn durch den Gerätenamen Ihres Mini aus der Tailscale-App oder aus tailscale status, wenn die Kommandozeile installiert ist. mosh macmini öffnet die mitwandernde Shell; herdr, nach der Anmeldung ausgeführt, verbindet sich mit den herdr-Sitzungen, die auf dem Mini schon laufen, Agenten eingeschlossen, über eine Verbindung, die Ruhezustand und WLAN-Wechsel übersteht.
5. Oder direkt mit herdrs Remote-Option verbinden
Die Alternative: die Anmelde-Shell überspringen und direkt vom Notebook aus verbinden, über einfaches SSH statt mosh.
herdr --remote macminiDas ist, was herdrs Dokumentation das Verbinden über SSH ohne vorheriges Öffnen einer Shell nennt (herdr.dev/docs/how-to-work/, geprüft im 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/, geprüft im September 2026). Da es über einfaches SSH läuft, wandert es nicht mit wie mosh.
6. Den Mini wach und bereit halten
- Energie: Ein Mac mini ist ein Desktop-Mac, seine Energieeinstellungen liegen also in den Systemeinstellungen unter „Energie“ statt unter „Batterie“; schalten Sie „Automatischen Ruhezustand verhindern, wenn der Bildschirm ausgeschaltet ist“ ein (support.apple.com/guide/mac-help/set-sleep-and-wake-settings-mchle41a6ccd/mac, geprüft im September 2026), sonst schläft der Mini ein und verschwindet aus dem Netzwerk, bis jemand davorsitzt.
- Nochmals Energie: Schalten Sie auch „Nach Stromausfall automatisch starten“ ein (support.apple.com/guide/mac-help/mchlp1168/mac, geprüft im September 2026), damit er nach einem Stromausfall wieder hochfährt, statt aus zu bleiben. Manche Macs zeigen das zusätzlich oder stattdessen als Menü „Starten, wenn die Stromversorgung angeschlossen ist“ mit „Nie“, „Nach Stromausfall“ und „Immer“ (support.apple.com/guide/mac-help/mchlp1168/mac, geprüft im September 2026); in jedem Fall sind laut Apple je nach Mac nicht alle Optionen verfügbar (support.apple.com/guide/mac-help/mchlp1168/mac, geprüft im September 2026).
- Anmeldeobjekte: Fügen Sie herdr oder das, was die Agenten-Sitzungen startet, unter „Anmeldeobjekte & Erweiterungen“ hinzu; dort wählen Sie, welche Objekte bei jeder Anmeldung automatisch geöffnet werden (support.apple.com/guide/mac-help/mh15189/mac, geprüft im September 2026). Das greift erst, wenn jemand angemeldet ist: Ohne automatische Anmeldung wartet der Mac nach einem Neustart weiter im Anmeldefenster, und wenn FileVault eingeschaltet ist, ist die automatische Anmeldung deaktiviert (support.apple.com/guide/mac-help/set-up-users-groups-accounts-mtusr001/mac, geprüft im September 2026). Mit FileVault braucht ein Neustart oder Stromausfall also weiterhin jemanden an der Tastatur, bevor herdrs Anmeldeobjekt starten kann.
Warum das ein Laufwerk schneller füllt als ein Notebook
Ein Notebook, das für ein Projekt nach dem anderen genutzt wird, löscht und installiert unterwegs neu; ein Mac mini als feste Basis für Coding-Agenten tut das nicht, weil ihn nichts dazu zwingt. Ein Worktree, der für eine Aufgabe mit eigenen installierten Abhängigkeiten angelegt wurde, verschwindet nicht, wenn die Aufgabe erledigt ist; genauso wenig ein Container-Image, das einmal zum Testen geladen wurde, ein Build-Cache eines Projekts, das seit Wochen niemand angefasst hat, oder der Klon eines Projekts, das man sich nur ansehen wollte. Jede Zeile unten ist unsere eigene Planungsschätzung für ein Setup wie dieses, keine Messung eines bestimmten Geräts; die beiden Zeilen, die auf einem echten Projekt beruhen, sagen das und nennen den Prüfmonat.
Parallele Agenten machen diesen Multiplikator sichtbar: Geben Sie jedem Agenten einen eigenen Git-Worktree, damit zwei Agenten nicht denselben Checkout bearbeiten. Laut Git teilt ein verknüpfter Worktree das Repository bis auf Dateien pro Worktree wie HEAD und den Index, er dupliziert also nicht die Objekthistorie, bringt aber einen weiteren Checkout mit, plus jede Abhängigkeit und jeden Build-Cache, den das Projekt dort installiert (git-scm.com/docs/git-worktree, geprüft im September 2026). Der Worktree-Modus von Claude Code folgt diesem Modell und legt isolierte Checkouts unter .claude/worktrees an, die das .git-Verzeichnis des Repositorys teilen (code.claude.com/docs/en/worktrees, geprüft im September 2026). Ist ein Agent fertig, sichern oder mergen Sie seine Änderungen, beenden Sie ihn und entfernen Sie den sauberen Worktree über Git; Pruning ist für veraltete Verwaltungsdaten, nachdem ein Worktree-Verzeichnis verschwunden ist. Für stärkere Grenzen als getrennte Checkouts siehe den Ratgeber zu Agenten-Sandboxes.
| Was es belegt | Eingeplanter Platz (unsere Schätzung) | Rest bei 256 GB | Rest bei 512 GB | Rest bei 2 TB |
|---|---|---|---|---|
| macOS, ein Code-Editor, Xcode oder andere Plattform-SDKs und alltägliche Kommandozeilenwerkzeuge | 40 GB | 216 GB | 472 GB | 1960 GB |
| Eine Container-Laufzeit samt einem kleinen Satz geladener Images | 20 GB | 196 GB | 452 GB | 1940 GB |
| Klone der bearbeiteten Projekte mit installierten Abhängigkeiten (unsere eigene Messung der Abhängigkeiten eines mittelgroßen TypeScript-Projekts, September 2026: etwa 1 GB pro Klon; hier sind vier Klone eingeplant) | 4 GB | 192 GB | 448 GB | 1936 GB |
Ein Worktree pro aktiver Aufgabe, jeder eine zweite Kopie der Abhängigkeiten und des Build-Caches eines Projekts neben dem Hauptklon (unsere eigene Messung desselben mittelgroßen TypeScript-Projekts, September 2026: etwa 0,93 GB node_modules plus etwa 0,42 GB Build-Ausgabe pro Worktree, also rund 4,05 GB für drei Worktrees, hier mit Reserve aufgerundet) | 5 GB | 187 GB | 443 GB | 1931 GB |
| Build- und Bundler-Caches, die mit jedem Build wachsen und selten von Hand geleert werden | 10 GB | 177 GB | 433 GB | 1921 GB |
| Lokale Modell-Caches, falls der Agent oder seine Werkzeuge auch etwas lokal ausführen (siehe die belegte Tabelle im Ratgeber zu lokaler KI für die ganze Bandbreite) | 20 GB | 157 GB | 413 GB | 1901 GB |
Das sind nach unserer Schätzung 99 GB, zusätzlich zu allem, was das Gerät sonst speichert: 157 GB Rest bei 256 GB, 413 GB bei 512 GB, 1901 GB bei 2 TB. Dockers eigene Dokumentation erklärt, warum die Container-Zeile nur wächst: Images, Container, Volumes und Build-Cache „are generally not removed unless you explicitly ask Docker to do so“ (docs.docker.com/engine/manage-resources/pruning/, geprüft im September 2026). Ein macOS-Update braucht vorübergehend ebenfalls einen Teil dieses freien Platzes, während es installiert wird (support.apple.com/en-us/102624, geprüft im September 2026).
Die ehrlichen Einschränkungen
- mosh hat keinen eigenen Scrollback: Es „synchronizes only the visible state of the terminal“, und seine eigene FAQ verweist für vollständigen Scrollback auf „screen or tmux on the remote side“ (mosh.org, geprüft im September 2026). Diese Rolle übernimmt hier herdr: Jeder Bereich behält einen Scrollback-Puffer „per pane terminal“, standardmäßig 10.000.000 Bytes und über die Konfigurationsdatei einstellbar (herdr.dev/docs/config-reference/, geprüft im September 2026); das Zurückscrollen durch frühere Ausgaben eines Agenten ist also Aufgabe von herdr, nicht von mosh.
- Die entfernte Anmeldung einzuschalten, kann den Mac laut Apple weniger sicher machen (support.apple.com/guide/mac-help/allow-a-remote-computer-to-access-your-mac-mchlp1066/mac, geprüft im September 2026). Eine Tailscale-Verbindung ist nicht das offene Internet, aber eine Anmeldung per SSH-Schlüssel statt Passwort lohnt sich trotzdem zusätzlich; keins von beiden schaltet das von selbst ein.
- Die Anwendungs-Firewall von macOS blockiert, wenn sie eingeschaltet ist, ansonsten unerwünschte Verbindungsversuche von anderen Computern (support.apple.com/guide/mac-help/mh34041/mac, geprüft im September 2026); die entfernte Anmeldung öffnet ihren eigenen Port, aber moshs UDP-Bereich, standardmäßig „a UDP port between 60000 and 61000“ (mosh.org, geprüft im September 2026), sollten Sie prüfen, wenn eine einfache
mosh-Verbindung direkt nach dem SSH-Handshake hängen bleibt. - Der kostenlose Tarif von Tailscale deckt ein Setup mit zwei Geräten locker ab: „unlimited user devices“ für „up to 6 users“, „$0 free forever“ (tailscale.com/pricing, geprüft im September 2026).
Verwandte Fragen
Brauche ich zu Hause eine feste IP-Adresse, damit das funktioniert?
Ersetzt mosh SSH vollständig?
Was passiert mit einer Agenten-Sitzung, wenn der Akku des Notebooks mitten in der Aufgabe leer ist?
Ist das etwas anderes, als den Mac mini als Heimserver zu betreiben?
Welche Kapazität sollte ich für ein solches Setup bestellen?
Bereit für das Upgrade?
Weitere Ratgeber
- Mac mini M4 als Heimserver: Warum zuerst der Speicher ausgehtWenig Strom im Leerlauf, leise und klein genug, um im Regal zu verschwinden. Was ein Heimserver tatsächlich speichert und warum die 256 GB der Basis weg sind, bevor die eigentliche Arbeit beginnt.
- Lokale KI-Modelle auf dem Mac mini M4: die SpeicherrechnungDer Arbeitsspeicher entscheidet, welches Modell Sie ausführen können; der Speicher entscheidet, wie viele Sie behalten, dazu die Caches, die daneben wachsen. Belegte Download-Größen und ein berechnetes Speicherbudget für 256 GB, 512 GB und 2 TB.
- KI-Coding-Agenten in der Sandbox auf dem Mac mini M4: Tart-VMs, Apple container und der Speicher, den sie brauchenTart klont vollständige virtuelle Maschinen mit macOS oder Linux aus einem einzigen geladenen Image und nutzt dabei APFS-Copy-on-Write, sodass ein Klon günstig bleibt, bis er von seiner Basis abweicht; Apples container und Devcontainer von Claude Code sind leichtere Alternativen mit eigenen Grenzen. Befehle zur Einrichtung, ehrliche Einschränkungen und ein berechnetes Speicherbudget.