Zrób to sam
tmux, mosh i Tailscale: samodzielny zestaw do agentów kodujących na telefonie
Klasyczny sposób na Claude Code lub Codexa z telefonu to aplikacja terminalowa, sieć prywatna, połączenie, które przetrwa zmianę sieci, i sesja, która przetrwa całą resztę. Każdy element jest darmowy i dobrze znany. Oto konfiguracja z dokładnymi poleceniami i uczciwe spojrzenie na to, gdzie robi się uciążliwie.
Krótka odpowiedź
Zainstaluj Tailscale na serwerze i telefonie, a potem włącz tailscale set --ssh, żeby serwer był dostępny tylko przez Twój prywatny tailnet. Uruchamiaj agenta w tmux new -A -s main, żeby przetrwał Twoje połączenie. Dodaj set -g allow-passthrough on i linie extended-keys do ~/.tmux.conf dla Claude Code. Łącz się przez mosh (mosh dev@server -- tmux new -A -s main) z Blink, Termius lub Termux. To dobrze działa. Słabe punkty to pełnoekranowy TUI na małym ekranie i brak powiadomień push, dopóki nie dodasz hooków.
Jeśli szukasz sposobu na Claude Code z telefonu, ten zestaw pewnie przewinął Ci się już w kilkunastu wpisach na blogach. Dzieje się tak, bo działa. Tailscale daje telefonowi prywatną, szyfrowaną drogę do serwera bez otwartych portów. mosh utrzymuje połączenie, gdy przechodzisz z Wi-Fi na 4G albo blokujesz telefon. tmux utrzymuje agenta w działaniu, gdy połączenie jednak się zerwie. Oto jak porządnie złożyć te trzy elementy.
Zestaw
| Warstwa | Narzędzie | Co rozwiązuje | Pomiń, jeśli… |
|---|---|---|---|
| Sieć | Tailscale (Tailscale SSH) | Prywatny dostęp do serwera, nawet za NAT-em; brak publicznego portu SSH; dostęp oparty na SSO | Serwer ma już utwardzone publiczne SSH i to Ci odpowiada |
| Transport | mosh | Przetrwa zmianę sieci, uśpienie i słaby zasięg; lokalne echo ukrywa opóźnienia | Łączysz się tylko ze stabilnej sieci |
| Sesja | tmux | Agent działa dalej po rozłączeniu; kilka okien na projekt | Nigdy. To warstwa, która liczy się najbardziej. |
| Klient | Blink, Termius, Termux… | Terminal na telefonie | — |
Konfiguracja tmux
Zainstaluj go i uruchom nazwaną sesję, do której możesz podłączyć się z dowolnego miejsca:
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 sprawia, że to samo polecenie działa za pierwszym razem i za każdym kolejnym, więc warto zapisać je jako snippet w aplikacji terminalowej na telefonie. Następnie daj tmux ustawienia, których potrzebują agenty. Dokumentacja konfiguracji terminala od Anthropic mówi, że w tmux Shift+Enter wysyła wiadomość zamiast dodawać nową linię, a powiadomienia nigdy nie docierają do zewnętrznego terminala, chyba że dodasz te linie:
# ~/.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
Zastosuj je przez tmux source-file ~/.tmux.conf. Nawet z rozszerzonymi klawiszami wiele klawiatur telefonów w ogóle nie potrafi wysłać Shift+Enter. Claude Code przyjmuje też Ctrl+J albo \ i Enter jako nową linię i oba działają w każdym terminalu.
Używaj jednego okna tmux na projekt lub na agenta. Ctrl-b c otwiera nowe okno, a Ctrl-b n przechodzi do następnego. Dla kilku sesji na tym samym repozytorium daj każdej własny git worktree. Opisuje to poradnik o pracy 24/7, razem z tym, co dzieje się przy restarcie. Sesje tmux nie przetrwają restartu.
mosh czy ssh
Zwykłe SSH działa na jednym połączeniu TCP. Gdy telefon zmienia sieć albo iOS na chwilę wstrzymuje aplikację, to połączenie ginie, a Ty łączysz się i podłączasz ponownie. mosh loguje się przez SSH, uruchamia mosh-server na serwerze, a potem przełącza się na własny protokół UDP, który działa dalej mimo zmian IP i uśpienia. Wyświetla też lokalnie to, co piszesz, więc łącze z opóźnieniem 200 ms wydaje się responsywne.
# 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 używa portów UDP 60000–61000. Przy publicznym IP trzeba by je otworzyć w firewallu, na przykład przez sudo ufw allow 60000:61000/udp plus firewall dostawcy chmury. Przez Tailscale ruch zostaje w tailnecie, więc żaden publiczny port nie jest potrzebny. Jedno ograniczenie: mosh synchronizuje tylko widoczny ekran, więc w samym mosh nie ma przewijania historii. Dokumentacja mosh zaleca do historii tmux lub screen, co jest kolejnym powodem, by używać obu.
Tailscale SSH
Tailscale umieszcza Twój serwer i telefon w prywatnej sieci WireGuard (tailnecie). Tailscale SSH idzie o krok dalej: Tailscale obsługuje uwierzytelnianie SSH za pomocą Twojej tożsamości w tailnecie, więc w ogóle nie rozdajesz kluczy 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
Według dokumentacji Tailscale tailscale set --ssh sprawia, że tailscaled przejmuje port 22 dla ruchu z Twojego tailnetu. Każdy zwykły klient SSH łączy się wtedy przez ssh dev@my-server, używając nazwy MagicDNS maszyny. Kilka szczegółów:
- Tryb check. Domyślna polityka używa
"action": "check", więc od czasu do czasu musisz ponownie uwierzytelnić się w przeglądarce. URL logowania pojawiający się w terminalu to normalne zachowanie. - Platformy serwerowe. Linux jest w pełni obsługiwany. Na macOS serwerem Tailscale SSH może być tylko build open source CLI
tailscale+tailscaled, więc Mac mini z aplikacją z App Store powinien używać zwykłego SSH przez tailnet. - Zamknij publiczny port. Gdy potwierdzisz, że masz dostęp do maszyny przez tailnet, zamknij publiczny port 22 w firewallu dostawcy. Zrób to w tej kolejności, z otwartą drugą sesją, żeby nie odciąć sobie dostępu.
Na telefonie zainstaluj aplikację Tailscale, zaloguj się do tego samego tailnetu i zostaw ją połączoną. Aplikacja terminalowa dociera wtedy do my-server tak, jakby był w Twojej sieci lokalnej.
Klienty na iOS i Androida
| Klient | Platformy | mosh | Uwagi |
|---|---|---|---|
| Blink Shell | iPhone, iPad | Tak | Zbudowany wokół mosh; świetna obsługa klawiatury sprzętowej na iPadzie. $19.99/rok po dwutygodniowym okresie próbnym, według blink.sh. |
| Termius | iOS, Android, desktop | Tak | Darmowy plan Starter obejmuje SSH i mosh; synchronizacja między urządzeniami jest w Pro ($10/miesiąc przy płatności rocznej, według termius.com/pricing) |
| Termux | Android | Tak (pkg install openssh mosh) | Pełne środowisko Linux na telefonie; darmowe i open source |
| JuiceSSH | Android | Tak | Wymieniony jako klient mosh na mosh.org |
Niezależnie od wybranego klienta skonfiguruj dodatkowy rząd klawiszy z Esc, Ctrl, Tab i strzałkami. Claude Code używa Esc do przerywania i Shift+Tab do przełączania trybów uprawnień, a żadnego z nich nie ma na standardowej klawiaturze telefonu.
Gdzie to zawodzi
Zestaw jest niezawodny. Tarcie dotyczy wszystkiego wokół niezawodności.
- Desktopowy TUI na 6-calowym ekranie. Claude Code, Codex i agy są zaprojektowane na 100+ kolumn. Na telefonie czytasz zawinięte diffy, przewijasz kciukiem wyjście narzędzi i szukasz linii wprowadzania.
- Brak powiadomień push. Gdy agent skończy lub potrzebuje zatwierdzenia, nic Ci o tym nie powie, dopóki nie dodasz hooka. Terminal powiadamia tylko wtedy, gdy aplikacja jest na pierwszym planie. Nasz poradnik o zatwierdzaniu próśb z telefonu opisuje hooki ntfy, które ludzie do tego dokręcają.
- Zatwierdzenia zakopane w historii. Prośba o uprawnienie to kilka linii w zatłoczonym panelu. Jeśli wracasz po godzinie, musisz ją znaleźć, przeczytać i odpowiedzieć strzałkami.
- Problem z działaniem w tle. iOS wstrzymuje aplikacje terminalowe wkrótce po ich opuszczeniu. mosh odzyskuje połączenie po powrocie, ale aplikacja nie może pilnować sesji za Ciebie, gdy jest w tle.
- Kopiowanie i wklejanie. Zaznaczanie tekstu przez tmux, mosh i terminal na telefonie to męka. Długie URL-e, takie jak linki logowania, to najgorszy przypadek.
- Kilka serwerów, kilka agentów. Każda nowa maszyna to kolejny węzeł Tailscale, kolejny wpis hosta i kolejny układ tmux do zapamiętania.
Nic z tego nie jest powodem, by unikać tego zestawu. Jest darmowy, działa z każdym agentem, a Ty kontrolujesz każdy element. To powód, by wiedzieć, na co się piszesz. Nasze porównanie aplikacji terminalowych SSH i Maude szczegółowo omawia ten kompromis.
Albo użyj aplikacji stworzonej do tego
Maude zastępuje warstwy klienta i sesji przy pracy z agentami. Mały demon na serwerze jest właścicielem sesji, więc działają bez tmux, a aplikacja pokazuje je jako czat z kartami narzędzi, diffami, powiadomieniami push z Zezwól/Odmów i skrzynką. Tailscale możesz zachować: Maude działa z serwerami w tailnecie i sieci LAN, bo serwer sam łączy się z przekaźnikiem Maude, z SSH jako rozwiązaniem zapasowym. A gdy potrzebujesz powłoki, każda sesja ma prawdziwy terminal. Działa z Claude Code, Codexem, OpenCode, Grok Build i Antigravity.
Najczęściej zadawane pytania
tmux czy screen dla Claude Code?
allow-passthrough i extended-keys), łatwiej go dzielić i skryptować, a większość poradników o terminalach na telefonie go zakłada.