Eigenbau-Stack
tmux, mosh und Tailscale: der Eigenbau-Stack für Coding-Agenten auf dem Handy
Der klassische Weg, Claude Code oder Codex vom Handy aus zu betreiben: eine Terminal-App, ein privates Netz, eine Verbindung, die den Netzwechsel übersteht, und eine Session, die alles andere übersteht. Jedes Teil ist kostenlos und gut verstanden. Hier das Setup mit genauen Befehlen und ein ehrlicher Blick darauf, wo es wehtut.
Kurze Antwort
Installiere Tailscale auf dem Server und deinem Handy und schalte dann tailscale set --ssh ein, damit der Server nur über dein privates Tailnet erreichbar ist. Betreib den Agenten in tmux new -A -s main, damit er deine Verbindung überlebt. Ergänze set -g allow-passthrough on und die extended-keys-Zeilen in ~/.tmux.conf für Claude Code. Verbinde dich mit mosh (mosh dev@server -- tmux new -A -s main) aus Blink, Termius oder Termux. Das funktioniert gut. Die Schwachstellen sind eine Vollbild-TUI auf einem kleinen Bildschirm und keine Push-Benachrichtigungen, solange du keine Hooks ergänzt.
Hast du gesucht, wie man Claude Code vom Handy aus nutzt, hast du diesen Stack wahrscheinlich in einem Dutzend Blogposts gesehen. Das liegt daran, dass er funktioniert. Tailscale gibt deinem Handy einen privaten, verschlüsselten Weg zum Server ohne offene Ports. mosh hält die Verbindung am Leben, wenn du von WLAN auf 4G wechselst oder das Handy sperrst. tmux hält den Agenten am Laufen, wenn die Verbindung doch abbricht. So setzt du die drei richtig zusammen.
Der Stack
| Ebene | Tool | Was es löst | Lass es weg, wenn… |
|---|---|---|---|
| Netzwerk | Tailscale (Tailscale SSH) | Den Server privat erreichen, auch hinter NAT; kein öffentlicher SSH-Port; Zugang über SSO | Der Server schon ein gehärtetes öffentliches SSH hat und du damit zufrieden bist |
| Transport | mosh | Übersteht Netzwechsel, Ruhezustand und schlechten Empfang; lokales Echo kaschiert Latenz | Du dich nur aus einem stabilen Netz verbindest |
| Session | tmux | Der Agent läuft weiter, wenn du dich trennst; mehrere Fenster pro Projekt | Nie. Das ist die Ebene, die am meisten zählt. |
| Client | Blink, Termius, Termux… | Ein Terminal auf dem Handy | — |
tmux einrichten
Installiere es und starte eine benannte Session, an die du dich von überall wieder anhängen kannst:
sudo apt install tmux # Debian/Ubuntu (dnf / apk elsewhere)
tmux new -A -s main # attach to "main", or create it
cd ~/src/my-app && claude # or: codex, agy, opencode…
# detach with Ctrl-b then d — the agent keeps running
Mit -A funktioniert derselbe Befehl beim ersten Mal und jedes weitere Mal – gut, um ihn als Snippet in der Terminal-App auf deinem Handy zu speichern. Gib tmux dann die Einstellungen, die Agenten brauchen. Laut Anthropics Doku zur Terminal-Konfiguration sendet Shift+Enter in tmux ab, statt einen Zeilenumbruch einzufügen, und Benachrichtigungen erreichen das äußere Terminal nie – außer du ergänzt diese Zeilen:
# ~/.tmux.conf
set -g allow-passthrough on
set -s extended-keys on
set -as terminal-features 'xterm*:extkeys'
# quality of life on a phone
set -g mouse on # scroll and pick panes with your finger
set -g history-limit 50000 # agents print a lot
Übernimm sie mit tmux source-file ~/.tmux.conf. Auch mit Extended Keys können viele Handytastaturen Shift+Enter gar nicht senden. Claude Code akzeptiert für einen Zeilenumbruch auch Strg+J oder \ gefolgt von Enter, und beides funktioniert in jedem Terminal.
Nutze ein tmux-Fenster pro Projekt oder pro Agent. Ctrl-b c öffnet ein neues Fenster, Ctrl-b n wechselt zum nächsten. Für mehrere Sessions im selben Repository gib jeder ihren eigenen git-Worktree. Die Anleitung für den 24/7-Betrieb behandelt das und was bei einem Neustart passiert. tmux-Sessions überstehen keinen Neustart.
mosh vs. ssh
Einfaches SSH läuft über eine TCP-Verbindung. Wechselt dein Handy das Netz oder hält iOS die App eine Weile an, stirbt diese Verbindung, und du verbindest dich neu und hängst dich wieder an. mosh meldet sich per SSH an, startet mosh-server auf dem Server und wechselt dann auf sein eigenes UDP-Protokoll, das IP-Wechsel und Ruhezustand übersteht. Außerdem zeigt es deine Eingaben lokal an, sodass sich eine Verbindung mit 200 ms flüssig anfühlt.
# on the server
sudo apt install mosh # Fedora: sudo dnf install mosh · Alpine: apk add mosh
# from a client
mosh dev@my-server -- tmux new -A -s main
mosh nutzt die UDP-Ports 60000–61000. Über eine öffentliche IP müsstest du sie in deiner Firewall öffnen, etwa mit sudo ufw allow 60000:61000/udp plus der Firewall deines Cloud-Anbieters. Über Tailscale bleibt der Verkehr im Tailnet, es braucht also keinen öffentlichen Port. Eine Grenze: mosh synchronisiert nur den sichtbaren Bildschirm, über mosh selbst gibt es also keinen Scrollback. Die Doku von mosh empfiehlt tmux oder screen für die Historie – ein Grund mehr, beides zu nutzen.
Tailscale SSH
Tailscale setzt deinen Server und dein Handy in ein privates WireGuard-Netz (ein Tailnet). Tailscale SSH geht einen Schritt weiter: Tailscale übernimmt die SSH-Authentifizierung mit deiner Tailnet-Identität, du verteilst also gar keine SSH-Schlüssel.
# on the server (Linux)
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up # log in to your tailnet
sudo tailscale set --ssh # enable Tailscale SSH
Laut Tailscales Doku sorgt tailscale set --ssh dafür, dass tailscaled Port 22 für Verkehr aus deinem Tailnet übernimmt. Jeder normale SSH-Client verbindet sich dann mit ssh dev@my-server, über den MagicDNS-Namen des Rechners. Ein paar Details:
- Check-Modus. Die Standardrichtlinie nutzt
"action": "check", du wirst also ab und zu gebeten, dich im Browser neu zu authentifizieren. Eine Login-URL im Terminal ist normal. - Server-Plattformen. Linux wird voll unterstützt. Unter macOS kann nur der Open-Source-CLI-Build aus
tailscale+tailscaledals Tailscale-SSH-Server dienen; ein Mac mini mit der App aus dem App Store sollte also normales SSH über das Tailnet nutzen. - Schließ den öffentlichen Port. Sobald du bestätigt hast, dass du den Rechner über das Tailnet erreichst, schließ den öffentlichen Port 22 in der Firewall deines Anbieters. In genau dieser Reihenfolge und mit einer zweiten offenen Session, damit du dich nicht aussperrst.
Installiere auf dem Handy die Tailscale-App, melde dich im selben Tailnet an und lass sie verbunden. Deine Terminal-App erreicht my-server dann, als wäre er in deinem lokalen Netz.
Clients für iOS und Android
| Client | Plattformen | mosh | Hinweise |
|---|---|---|---|
| Blink Shell | iPhone, iPad | Ja | Um mosh herum gebaut; starke Unterstützung für Hardware-Tastaturen auf dem iPad. $19.99/Jahr nach zwei Wochen Testphase, laut blink.sh. |
| Termius | iOS, Android, Desktop | Ja | Die kostenlose Stufe Starter enthält SSH und mosh; Synchronisierung zwischen Geräten gibt es mit Pro ($10/Monat bei jährlicher Abrechnung, laut termius.com/pricing) |
| Termux | Android | Ja (pkg install openssh mosh) | Ein vollständiges Linux-Userland auf dem Handy; kostenlos und Open Source |
| JuiceSSH | Android | Ja | Auf mosh.org als mosh-Client aufgeführt |
Welchen Client du auch wählst, richte eine zusätzliche Tastenleiste mit Esc, Strg, Tab und Pfeiltasten ein. Claude Code nutzt Esc zum Unterbrechen und Shift+Tab zum Durchschalten der Berechtigungsmodi, und beides fehlt auf einer Standard-Handytastatur.
Wo es hakt
Der Stack ist zuverlässig. Die Reibung liegt in allem rund um die Zuverlässigkeit.
- Eine Desktop-TUI auf einem 6-Zoll-Bildschirm. Claude Code, Codex und agy sind für 100+ Spalten gebaut. Auf dem Handy liest du umgebrochene Diffs, scrollst mit dem Daumen durch Tool-Ausgaben und suchst die Eingabezeile.
- Keine Push-Benachrichtigungen. Ist der Agent fertig oder braucht er eine Freigabe, sagt dir das nichts, solange du keinen Hook ergänzt. Das Terminal benachrichtigt dich nur, solange die App im Vordergrund ist. Unsere Anleitung, Anfragen vom Handy freizugeben, behandelt die ntfy-Hooks, die man dafür nachrüstet.
- Freigaben im Scrollback vergraben. Eine Berechtigungsanfrage sind ein paar Zeilen in einem vollen Pane. Kommst du nach einer Stunde zurück, musst du sie finden, lesen und mit Pfeiltasten beantworten.
- Das Hintergrundproblem. iOS hält Terminal-Apps kurz nach dem Verlassen an. mosh erholt sich, wenn du zurückkommst, aber die App kann die Session im Hintergrund nicht für dich beobachten.
- Kopieren und Einfügen. Text über tmux, mosh und ein Handy-Terminal hinweg zu markieren ist mühsam. Lange URLs wie Login-Links sind der schlimmste Fall.
- Mehrere Server, mehrere Agenten. Jeder neue Rechner heißt ein weiterer Tailscale-Knoten, ein weiterer Host-Eintrag und ein weiteres tmux-Layout, das du dir merken musst.
Nichts davon ist ein Grund, den Stack zu meiden. Er ist kostenlos, funktioniert mit jedem Agenten, und du kontrollierst jedes Teil. Es ist ein Grund zu wissen, worauf du dich einlässt. Unser Vergleich von SSH-Terminal-Apps und Maude geht im Detail auf die Abwägung ein.
Oder nimm eine App, die dafür gebaut ist
Maude ersetzt für die Arbeit mit Agenten die Client- und Session-Ebene. Ein kleiner Daemon auf dem Server besitzt die Sessions, sie laufen also ohne tmux weiter, und die App zeigt sie als Chat an, mit Tool-Karten, Diffs, Push-Benachrichtigungen mit Erlauben/Ablehnen und einer Inbox. Tailscale kannst du behalten: Maude funktioniert mit Servern im Tailnet und im LAN, weil der Server selbst die Verbindung zu Maudes Relay aufbaut, mit SSH als Fallback. Und wenn du eine Shell brauchst, hat jede Session ein echtes Terminal. Es funktioniert mit Claude Code, Codex, OpenCode, Grok Build und Antigravity.
Häufige Fragen
tmux oder screen für Claude Code?
allow-passthrough und extended-keys), es lässt sich leichter teilen und skripten, und die meisten Anleitungen für Handy-Terminals setzen es voraus.