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.

tmux, mosh und Tailscale: der Eigenbau-Stack für Coding-Agenten auf dem Handy

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

EbeneToolWas es löstLass es weg, wenn…
NetzwerkTailscale (Tailscale SSH)Den Server privat erreichen, auch hinter NAT; kein öffentlicher SSH-Port; Zugang über SSODer Server schon ein gehärtetes öffentliches SSH hat und du damit zufrieden bist
TransportmoshÜbersteht Netzwechsel, Ruhezustand und schlechten Empfang; lokales Echo kaschiert LatenzDu dich nur aus einem stabilen Netz verbindest
SessiontmuxDer Agent läuft weiter, wenn du dich trennst; mehrere Fenster pro ProjektNie. Das ist die Ebene, die am meisten zählt.
ClientBlink, 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 + tailscaled als 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

ClientPlattformenmoshHinweise
Blink ShelliPhone, iPadJaUm mosh herum gebaut; starke Unterstützung für Hardware-Tastaturen auf dem iPad. $19.99/Jahr nach zwei Wochen Testphase, laut blink.sh.
TermiusiOS, Android, DesktopJaDie 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)
TermuxAndroidJa (pkg install openssh mosh)Ein vollständiges Linux-Userland auf dem Handy; kostenlos und Open Source
JuiceSSHAndroidJaAuf 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?
Beide halten eine Session am Leben, aber tmux ist die bessere Wahl: Anthropic dokumentiert die tmux-Einstellungen, die Claude Code braucht (allow-passthrough und extended-keys), es lässt sich leichter teilen und skripten, und die meisten Anleitungen für Handy-Terminals setzen es voraus.
Braucht man mit Tailscale noch mosh?
Sie lösen unterschiedliche Probleme. Tailscale gibt dir eine stabile private Adresse und keine offenen Ports; deine SSH-Verbindung darüber bricht trotzdem ab, wenn das Handy das Netz wechselt oder eine Weile schläft. mosh übersteht das. Verbindest du dich meist aus stabilem WLAN, reichen SSH über Tailscale plus tmux.
Was ist das beste iOS-Terminal für Claude Code?
Blink Shell ist die am stärksten auf mosh ausgerichtete Option für iPhone und iPad, Termius ist am einfachsten für den Einstieg (kostenlose Stufe, plattformübergreifend). Beide funktionieren mit Tailscale. Richte, egal welches du wählst, eine zusätzliche Tastenleiste für Esc, Strg und Shift+Tab ein.
Muss ich für mosh Ports öffnen?
Bei einer öffentlichen IP ja: UDP 60000–61000. Über ein Tailscale-Tailnet nein – der Verkehr läuft im Tailnet, und nichts muss ins Internet freigegeben werden.
Funktioniert Tailscale SSH auf einem Mac mini als Server?
Laut Tailscales Doku nur mit dem Open-Source-CLI-Build aus tailscale/tailscaled unter macOS. Mit der Standard-App nutzt du stattdessen den normalen SSH-Server des Mac über das Tailnet.

Spar dir die TUI auf dem Handy

Behalte deinen Server und dein Tailnet, tausch das Terminal gegen eine App, die für Agenten gebaut ist. iOS und Android.

Download Maude on the App Store Get Maude on Google Play