

Questo sono io che scrivo questo post. Dal telefono. Via SSH. Dalla vasca da bagno, probabilmente.
Claude Code è un tool CLI. Gira in un terminale. E tanto mi bastava.
Il setup
Ho un Raspberry Pi 5 con Debian Trixie a casa. Si chiama nowhere (lunga storia). Claude Code gira lì, dentro tmux, 24/7. Lo raggiungo da qualsiasi dispositivo — telefono, tablet, laptop — con un SSH e un reattach:
ssh nowhere
tmux -u at
Tutto qui. Due comandi e sono esattamente dove ho lasciato. Il flag -u abilita il supporto Unicode (emoji nelle status line, caratteri box-drawing), e at è abbreviazione di attach -t 0. La sessione persiste attraverso disconnessioni, riavvii dei dispositivi client, cambi di rete — tutto. Posso iniziare un task sul laptop, continuarlo dal telefono mentre porto fuori il cane, e finirlo sul tablet dal divano.
Roaming totale delle sessioni tra dispositivi. Zero stato perso. Mai.
La filosofia Unix, viva e vegeta
Ecco lo stack, dal basso verso l’alto:
- Debian Trixie (aarch64) — perché ho un tatuaggio Debian sul braccio e a questo punto è un impegno
- Unit systemd utente per
ssh-agent— parte al login, attivata via socket,SSH_AUTH_SOCKprevedibile a/run/user/1000/openssh_agent - tmux — multiplexer, persistenza della sessione, scrollback, copia-incolla, gestione finestre
- Claude Code — l’AI che fa il lavoro vero
- SSH — il trasporto universale
Niente Docker. Niente Kubernetes. Niente tunnel remoti di VS Code. Niente IDE cloud. Niente Electron. Solo Unix.
Il trucco dell’SSH agent
L’agent è gestito da systemd e il path del socket è hardcodato in .bashrc:
export SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/openssh_agent"
Questo significa che Claude Code — che gira dentro tmux, dentro una shell — ha automaticamente accesso alle mie chiavi SSH. Può fare git push, ssh sui miei server, deploy su staging e produzione, tutto senza agent forwarding. Le chiavi stanno sul Pi, l’agent è sempre in esecuzione, e ogni shell (inclusa quella di Claude) eredita il path del socket.
Nessun flag -A necessario dal lato client. Nessun rischio di sicurezza da agent forwarding. Il Pi è l’agent.
tmux: il vero IDE
Il mio tmux usa Ctrl-F come prefix key (scusa, find, sei morto per me) e tengo finestre multiple con etichette descrittive:
0:sysadm 1:gastone 2:sindrome 3:gastone-logs
Ogni finestra è un progetto. Ogni progetto ha Claude Code in esecuzione. Posso saltare tra una e l’altra con ^F 0, ^F 1, ecc. Pane split per log, htop, o una shell parallela quando serve.
Le killer feature per questo workflow:
- Scrollback —
Shift-PageUpentra in copy mode. Posso scorrere migliaia di righe di output di Claude, log del terminale, output dei build.history-limitsettato a 10.000 righe. - Copia-incolla — il copy mode nativo di tmux con keybinding vi. Seleziona, yank, paste. Nessun mouse necessario (anche se il mouse mode è attivo per lo scroll pigro occasionale).
- Sync dei pane —
^F Ctrl-Yattiva/disattiva l’input sincronizzato su tutti i pane. Utile per mandare lo stesso comando su viste split.
WireGuard: mobilità seamless
Ho una VPN WireGuard configurata come on-demand su tutti i miei dispositivi. Quando sono sul WiFi di casa, il traffico va diretto sulla LAN. Quando esco, WireGuard si attiva automaticamente e mi tunnella a casa.
La connessione SSH cade quando l’endpoint cambia da un IP LAN locale a uno VPN — il TCP non sopravvive. Ma non importa: su Termius tocchi “Start over”, la connessione si ristabilisce in un secondo, scrivi tmux -u at, e sei esattamente dove eri prima. La sessione tmux non è andata da nessuna parte. Tempo totale: tre secondi.
Il mio ~/.ssh/config sul laptop e le connessioni salvate in Termius usano entrambi l’IP LAN locale del Pi. WireGuard gestisce il routing indipendentemente da dove mi trovo fisicamente. Stesso IP, stessa connessione, che sia in salotto o al bar.
Il setup da telefono
Su iOS uso Termius (versione free). Connessione salvata a nowhere, chiave SSH importata, fatto. Il trucco fondamentale: ho mappato Ctrl-F (il mio prefix tmux) su un pulsante sopra la tastiera. Questo mi dà il controllo completo di tmux dal telefono — cambiare finestre, splittare pane, entrare in copy mode, tutto.
Lo scrolling funziona benissimo — Termius converte gli eventi touch in scroll, quindi scorro su e giù nell’output di Claude col dito. Sensazione completamente naturale.
Il telefono è sorprendentemente usabile per questo workflow. Non scrivo codice da lì (quello lo fa Claude), ma posso rivedere diff, approvare tool call, leggere output dei build, controllare staging, e dare istruzioni a Claude. Che è il 90% di quello che faccio comunque.
E qui c’è il bello della scrittura da telefono: faccio un numero assurdo di typo. Guardate lo screenshot qui sopra — quel prompt è pieno di errori. Ma non importa. I LLM sono fuzzy matcher per natura. Interpretano l’intento, non i singoli tasti. “stsging” è “staging”, “tge” è “the”, “donMr” è “don’t” — Claude non batte ciglio. Questo trasforma quella che sarebbe normalmente una tortura (tastierina, dita grosse, autocorrect che ti rema contro) in un non-problema. Scrivi veloce, non correggi, e funziona. I typo diventano una feature del workflow, non un bug.
I risultati
Negli ultimi 30 giorni, ho fatto più di 5.000 commit su una dozzina di progetti — tutto da questo setup:
- Rifatto completamente questo blog — tradotti 69 post, ridisegnato il layout, aggiunto l’Easter egg della sequenza di boot. Nessun IDE, nessun Figma, nessun tool di design. Solo Claude Code e il live preview di Superpowers per il lavoro visuale.
- Scritto un componente custom per Home Assistant per Verisure Italy — reverse-engineered le loro API GraphQL, scritto l’intero componente Python, pubblicato su PyPI.
- Creato WiFi Dethrash, un analizzatore di reti mesh per OpenWrt.
- Scritto un sistema di rilevamento presenza WiFi per Home Assistant.
- Costruito tool per modem 5G per OpenWrt.
- Riprocessato due anni di log attraverso una pipeline di enrichment completa.
Ogni singolo progetto fatto dal terminale. CSS, Python, Go, Lua, shell script, template Hugo, config nginx, unit systemd, codice di networking kernel-adjacent. L’intero stack, dall’alto al basso, da riga di comando.
Perché funziona
L’intuizione è che Claude Code non ha bisogno di un IDE perché è l’IDE. Legge file, li modifica, lancia test, controlla l’output dei build, itera. Il terminale è il suo habitat naturale. Aggiungere un layer grafico sopra non aiuta — si mette in mezzo.
E tmux è il compagno perfetto perché ti dà tutto quello che il concetto di “workspace” di un IDE moderno offre — sessioni persistenti, contesti multipli, cronologia ricercabile, layout dei pane — senza nessun bloat.
Ho iniziato a programmare in QBasic su un Olivetti Prodest PC1 — un 8088 — nel 1988. Avevo sette anni, fissavo un terminale ambra 80x25, e pensavo fosse la cosa più magica del mondo. Poi l’industria ha speso 35 anni a convincermi che avevo bisogno di GUI, mouse, IDE, debugger visuali, tool di deploy point-and-click. Adesso l’AI mi riporta a un terminale, una tastiera, e la capacità di descrivere quello che voglio in linguaggio naturale.
Ho chiuso il cerchio, e non sono mai stato più felice a giocare con i computer.