Stack fai-da-te

tmux, mosh e Tailscale: lo stack fai-da-te per gli agenti di coding sul telefono

Il modo classico per usare Claude Code o Codex dal telefono è un'app di terminale, una rete privata, una connessione che sopravvive al roaming e una sessione che sopravvive a tutto il resto. Ogni pezzo è gratuito e ben conosciuto. Ecco la configurazione con i comandi esatti, e uno sguardo onesto su dove diventa faticosa.

tmux, mosh e Tailscale: lo stack fai-da-te per gli agenti di coding sul telefono

In breve

Installa Tailscale sul server e sul telefono, poi attiva tailscale set --ssh così il server è raggiungibile solo dalla tua tailnet privata. Esegui l'agente dentro tmux new -A -s main così sopravvive alla connessione. Aggiungi set -g allow-passthrough on e le righe extended-keys a ~/.tmux.conf per Claude Code. Collegati con mosh (mosh dev@server -- tmux new -A -s main) da Blink, Termius o Termux. Funziona bene. I suoi punti deboli sono una TUI a schermo intero su uno schermo piccolo e nessuna notifica push a meno di aggiungere degli hook.

Se hai cercato come usare Claude Code dal telefono, probabilmente hai visto questo stack in una dozzina di articoli. È perché funziona. Tailscale dà al telefono un percorso privato e cifrato verso il server, senza porte aperte. mosh tiene viva la connessione quando passi dal Wi-Fi al 4G o blocchi il telefono. tmux tiene l'agente in esecuzione quando la connessione cade comunque. Ecco come mettere insieme bene i tre pezzi.

Lo stack

LivelloStrumentoCosa risolveSaltalo se…
ReteTailscale (Tailscale SSH)Raggiungere il server in privato, anche dietro NAT; nessuna porta SSH pubblica; accesso basato su SSOIl server ha già un SSH pubblico ben protetto e ti va bene così
TrasportomoshSopravvive a roaming, stop e segnale scarso; l'eco locale nasconde la latenzaTi colleghi solo da una rete stabile
SessionetmuxL'agente continua a girare quando ti disconnetti; più finestre per progettoMai. È il livello che conta di più.
ClientBlink, Termius, Termux…Un terminale sul telefono—

Configurazione di tmux

Installalo e avvia una sessione con nome a cui ricollegarti da ovunque:

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

-A fa funzionare lo stesso comando la prima volta e tutte le successive, il che lo rende ottimo da salvare come snippet nell'app di terminale del telefono. Poi dai a tmux le impostazioni che servono agli agenti. La documentazione sulla configurazione del terminale di Anthropic dice che dentro tmux Shift+Invio invia il messaggio invece di andare a capo, e le notifiche non raggiungono mai il terminale esterno, a meno che tu non aggiunga queste righe:

# ~/.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

Applicale con tmux source-file ~/.tmux.conf. Anche con gli extended keys, molte tastiere da telefono non riescono proprio a inviare Shift+Invio. Claude Code accetta anche Ctrl+J, oppure \ seguito da Invio, per andare a capo, ed entrambi funzionano in qualsiasi terminale.

Usa una finestra tmux per progetto o per agente. Ctrl-b c apre una nuova finestra e Ctrl-b n passa alla successiva. Per più sessioni sullo stesso repository, dai a ciascuna il proprio worktree git. La guida 24/7 copre questo e cosa succede al riavvio. Le sessioni tmux non sopravvivono a un riavvio.

mosh o ssh

SSH semplice usa una sola connessione TCP. Quando il telefono cambia rete, o iOS sospende l'app per un po', quella connessione muore, e devi ricollegarti e riagganciarti. mosh accede via SSH, avvia mosh-server sul server e poi passa al proprio protocollo UDP, che continua attraverso cambi di IP e stop. Mostra anche in locale ciò che digiti, così un collegamento da 200 ms sembra reattivo.

# 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 usa le porte UDP 60000–61000. Su un IP pubblico dovresti aprirle nel firewall, per esempio con sudo ufw allow 60000:61000/udp più il firewall del tuo provider cloud. Tramite Tailscale il traffico resta dentro la tailnet, quindi non serve alcuna porta pubblica. Un limite: mosh sincronizza solo lo schermo visibile, quindi mosh di per sé non ha scrollback. La documentazione di mosh consiglia tmux o screen per la cronologia, un motivo in più per usarli entrambi.

Tailscale SSH

Tailscale mette server e telefono su una rete WireGuard privata (una tailnet). Tailscale SSH fa un passo in più: è Tailscale a gestire l'autenticazione SSH con la tua identità nella tailnet, così non devi distribuire alcuna chiave SSH.

# 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

Secondo la documentazione di Tailscale, tailscale set --ssh fa sì che tailscaled prenda in carico la porta 22 per il traffico proveniente dalla tua tailnet. Qualsiasi normale client SSH si collega poi con ssh dev@my-server, usando il nome MagicDNS della macchina. Alcuni dettagli:

  • Modalità check. La policy predefinita usa "action": "check", quindi ogni tanto ti viene chiesto di riautenticarti in un browser. Un URL di accesso che compare nel terminale è normale.
  • Piattaforme server. Linux è pienamente supportato. Su macOS solo la build CLI open source tailscale + tailscaled può fare da server Tailscale SSH, quindi un Mac mini con l'app dell'App Store dovrebbe usare il normale SSH attraverso la tailnet.
  • Chiudi la porta pubblica. Una volta verificato che raggiungi la macchina tramite la tailnet, chiudi la porta 22 pubblica nel firewall del provider. Fallo in quest'ordine, con una seconda sessione aperta, così non resti chiuso fuori.

Sul telefono, installa l'app Tailscale, accedi alla stessa tailnet e lasciala connessa. L'app di terminale raggiunge allora my-server come se fosse sulla tua rete locale.

Client per iOS e Android

ClientPiattaformemoshNote
Blink ShelliPhone, iPadSìCostruito attorno a mosh; ottimo supporto per le tastiere fisiche su iPad. $19.99/anno dopo una prova di due settimane, secondo blink.sh.
TermiusiOS, Android, desktopSìIl piano gratuito Starter include SSH e mosh; la sincronizzazione tra dispositivi è in Pro ($10/mese con fatturazione annuale, secondo termius.com/pricing)
TermuxAndroidSì (pkg install openssh mosh)Un ambiente Linux completo sul telefono; gratuito e open source
JuiceSSHAndroidSìElencato come client mosh su mosh.org

Qualunque client tu scelga, configura una riga di tasti extra con Esc, Ctrl, Tab e le frecce. Claude Code usa Esc per interrompere e Shift+Tab per scorrere le modalità di permesso, e nessuno dei due è su una tastiera standard del telefono.

Dove si inceppa

Lo stack è affidabile. L'attrito sta in tutto ciò che circonda l'affidabilità.

  • Una TUI da desktop su uno schermo da 6 pollici. Claude Code, Codex e agy sono pensati per 100 colonne o più. Sul telefono leggi diff spezzati, scorri l'output degli strumenti con il pollice e vai a caccia della riga di input.
  • Nessuna notifica push. Quando l'agente finisce o ha bisogno di un'approvazione, niente ti avvisa a meno che tu non aggiunga un hook. Il terminale ti notifica solo mentre l'app è in primo piano. La nostra guida su come approvare le richieste dal telefono copre gli hook ntfy che si aggiungono di solito.
  • Approvazioni sepolte nello scrollback. Una richiesta di permesso è qualche riga in un pannello affollato. Se torni dopo un'ora, devi trovarla, leggerla e risponderle con le frecce.
  • Il problema del background. iOS sospende le app di terminale poco dopo che le lasci. mosh si riprende quando torni, ma l'app non può tenere d'occhio la sessione per te mentre è in background.
  • Copia e incolla. Selezionare testo attraverso tmux, mosh e un terminale da telefono è penoso. Gli URL lunghi, come i link di accesso, sono il caso peggiore.
  • Più server, più agenti. Ogni nuova macchina è un altro nodo Tailscale, un'altra voce host e un altro layout tmux da ricordare.

Niente di tutto questo è un motivo per evitare lo stack. È gratuito, funziona con ogni agente e controlli tu ogni pezzo. È un motivo per sapere a cosa vai incontro. Il nostro confronto tra app di terminale SSH e Maude approfondisce il compromesso.

Oppure usa un'app pensata per questo

Maude sostituisce i livelli client e sessione per il lavoro con gli agenti. Un piccolo daemon sul server possiede le sessioni, quindi continuano a girare senza tmux, e l'app le mostra come chat, con schede degli strumenti, diff, notifiche push con Consenti/Nega e un'inbox. Puoi tenerti Tailscale: Maude funziona con server su tailnet e LAN perché è il server a collegarsi al relay di Maude, con SSH come alternativa. E quando ti serve una shell, ogni sessione ha un vero terminale. Funziona con Claude Code, Codex, OpenCode, Grok Build e Antigravity.

Domande frequenti

tmux o screen per Claude Code?
Entrambi tengono viva una sessione, ma tmux è la scelta migliore: Anthropic documenta le impostazioni tmux che servono a Claude Code (allow-passthrough ed extended-keys), si divide e si automatizza più facilmente, e la maggior parte delle guide per terminali da telefono lo dà per scontato.
Con Tailscale serve ancora mosh?
Risolvono problemi diversi. Tailscale ti dà un indirizzo privato stabile e nessuna porta aperta; la connessione SSH sopra di esso cade comunque quando il telefono cambia rete o resta in stop per un po'. mosh sopravvive a questo. Se ti colleghi soprattutto da un Wi-Fi stabile, SSH tramite Tailscale più tmux basta.
Qual è il miglior terminale iOS per Claude Code?
Blink Shell è l'opzione più orientata a mosh su iPhone e iPad, e Termius è il più semplice per iniziare (piano gratuito, multipiattaforma). Entrambi funzionano con Tailscale. Qualunque tu scelga, configura una riga di tasti extra per Esc, Ctrl e Shift+Tab.
Devo aprire porte per mosh?
Su un IP pubblico sì: UDP 60000–61000. Su una tailnet Tailscale no: il traffico viaggia dentro la tailnet e non serve esporre nulla su internet.
Tailscale SSH funziona su un server Mac mini?
Solo con la build CLI open source tailscale/tailscaled su macOS, secondo la documentazione di Tailscale. Con l'app standard, usa invece il normale server SSH del Mac attraverso la tailnet.

Lascia perdere la TUI sul telefono

Tieni il tuo server e la tua tailnet, sostituisci il terminale con un'app pensata per gli agenti. iOS e Android.

Download Maude on the App Store Get Maude on Google Play