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.

tmux, mosh i Tailscale: samodzielny zestaw do agentów kodujących na telefonie

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

WarstwaNarzędzieCo rozwiązujePomiń, jeśli…
SiećTailscale (Tailscale SSH)Prywatny dostęp do serwera, nawet za NAT-em; brak publicznego portu SSH; dostęp oparty na SSOSerwer ma już utwardzone publiczne SSH i to Ci odpowiada
TransportmoshPrzetrwa zmianę sieci, uśpienie i słaby zasięg; lokalne echo ukrywa opóźnieniaŁączysz się tylko ze stabilnej sieci
SesjatmuxAgent działa dalej po rozłączeniu; kilka okien na projektNigdy. To warstwa, która liczy się najbardziej.
KlientBlink, 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

KlientPlatformymoshUwagi
Blink ShelliPhone, iPadTakZbudowany wokół mosh; świetna obsługa klawiatury sprzętowej na iPadzie. $19.99/rok po dwutygodniowym okresie próbnym, według blink.sh.
TermiusiOS, Android, desktopTakDarmowy 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)
TermuxAndroidTak (pkg install openssh mosh)Pełne środowisko Linux na telefonie; darmowe i open source
JuiceSSHAndroidTakWymieniony 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?
Oba utrzymują sesję przy życiu, ale tmux jest lepszym wyborem: Anthropic dokumentuje ustawienia tmux potrzebne Claude Code (allow-passthrough i extended-keys), łatwiej go dzielić i skryptować, a większość poradników o terminalach na telefonie go zakłada.
Czy mosh jest nadal potrzebny z Tailscale?
Rozwiązują różne problemy. Tailscale daje stały prywatny adres i brak otwartych portów; połączenie SSH przez niego nadal się zrywa, gdy telefon zmienia sieć lub na dłużej zasypia. mosh to przetrwa. Jeśli łączysz się głównie ze stabilnego Wi-Fi, SSH przez Tailscale plus tmux wystarczy.
Jaki jest najlepszy terminal na iOS do Claude Code?
Blink Shell to opcja najmocniej nastawiona na mosh na iPhonie i iPadzie, a Termius najłatwiej zacząć (darmowy plan, wiele platform). Oba działają z Tailscale. Niezależnie od wyboru skonfiguruj dodatkowy rząd klawiszy z Esc, Ctrl i Shift+Tab.
Czy muszę otwierać porty dla mosh?
Przy publicznym IP tak: UDP 60000–61000. W tailnecie Tailscale nie — ruch płynie wewnątrz tailnetu i nic nie trzeba wystawiać do internetu.
Czy Tailscale SSH działa na serwerze Mac mini?
Według dokumentacji Tailscale tylko z buildem open source CLI tailscale/tailscaled na macOS. Ze standardową aplikacją używaj zamiast tego zwykłego serwera SSH Maca przez tailnet.

Zrezygnuj z TUI na telefonie

Zachowaj serwer i tailnet, zamień terminal na aplikację stworzoną dla agentów. iOS i Android.

Download Maude on the App Store Get Maude on Google Play