SSD Nodes Learn Hosting plans →
Mga Gabay Matt ConnorNi Matt Connor · Na-update 2026-10-06

Claude Code sa Phone: Setup Gamit ang VPS at tmux

Alamin kung paano gumagana ang Claude Code sa phone: tumatakbo ito sa VPS sa loob ng tmux, gamit ang SSH keys, mosh, tmux attach, at keyboard fixes.

Claude Code mula sa phone: kung paano talaga ito gumagana

Ang Claude Code mula sa phone ay hindi isang mobile app. Gumagana ang Claude Code sa isang VPS (virtual private server), sa loob ng bukas na tmux session, at nagbubukas ang phone mo ng SSH (secure shell) connection sa session na iyon habang tinitingnan mo ito. Kapag isinara mo ang app, patuloy na gumagana ang agent dahil hindi kailanman tumatakbo ang process sa phone.

Iyan ang buong disenyo. Sinususpinde ng operating system ng phone ang isang app ilang segundo matapos kang lumipat dito, kaya humihinto ang anumang matagal na job na sinimulan sa phone. Nagkakaroon din ito ng bagong network address sa tuwing lumilipat ka mula wifi papunta sa mobile data. Nawawala ang dalawang problemang ito kapag sa server tumatakbo ang process at screen lamang ang ipinapakita ng phone.

Apat na bagay ang kailangan mo sa server: tmux para panatilihin ang session, SSH keys para makapasok, mosh para sa mga pagbabago sa network, at Claude Code mismo. Sa phone, isang terminal app lamang ang kailangan, kasama ang key row na madali mong maaabot.

Mga kailangan sa VPS

Sapat na ang isang maliit na Ubuntu 24.04 box para sa SSH at tmux. Mas mataas ang kailangan ng Claude Code. Ayon sa opisyal na requirements noong July 2026, kailangan nito ng Ubuntu 20.04 o mas bago sa x64 o ARM64 processor, na may 4 GB o higit pang RAM. Naii-install ito sa isang 1 GB plan, pero nawawala ang process sa kernel kapag mataas ang load. Kailangan din ng Claude Code ng bayad na Claude account (Pro, Max, Team, o Enterprise) o Console account na may API access, dahil hindi kasama ang Claude Code sa libreng Claude.ai plan.

I-set up ang box bilang ordinary user na may sudo, hindi bilang root. Kung bago ang server, sundin muna ang unang sampung minuto sa bagong VPS, dahil mas madaling gawin ang mga pagbabago sa SSH sa susunod kapag mayroon na ang user at firewall.

sudo apt update && sudo apt install -y tmux mosh
curl -fsSL https://claude.ai/install.sh | bash
claude --version

Inilalagay ng installer ang binary sa ~/.local/bin/claude, at nagpi-print ang claude --version ng linyang gaya ng 2.1.211 (Claude Code). Kung i-print nito ang command not found, wala pa sa iyong PATH ang directory na iyon: mag-log out, mag-log in ulit, saka tingnan gamit ang command -v claude. Ipi-print ng claude doctor ang diagnostics para sa installation at settings nang hindi nagsisimula ng session.

Mag-log in muna ngayon mula sa laptop, bago ka umasa sa phone. Patakbuhin ang claude sa isang project directory at sundin ang login prompt. Hihilingin sa flow na magbukas ka ng URL sa browser at ibalik ang isang code sa terminal. Mabagal itong gawin sa phone dahil kailangang magpalipat-lipat sa dalawang app. Gawin ito minsan gamit ang totoong keyboard, at mananatili ang credentials sa server.

Simulan ang Claude Code sa loob ng tmux para hindi ito mapahinto kapag naputol ang koneksyon

tmux new -s claude
cd ~/projects/api
claude

Mag-detach gamit ang Ctrl-b at pagkatapos ay d. Ipinapakita ng tmux ang [detached (from session claude)] at ibinabalik ka sa shell. Maaari mo nang isara ang app, mawalan ng signal, o ilagay ang phone sa iyong bulsa. Patuloy na tatakbo ang pane.

tmux ls
tmux attach -t claude

Ang tmux ls ay nagpi-print ng isang linya para sa bawat session, gaya ng claude: 1 windows (created Thu Jul 30 09:14:02 2026). Ibinabalik ka ng tmux attach -t claude sa eksaktong lugar kung saan ka tumigil, kasama ang hindi pa tapos na edit.

Gumagana ito dahil may sarili nitong server process ang tmux. Ang shell at Claude Code ay mga child process ng server na iyon, hindi ng sshd. Kapag natapos ang SSH connection, ipinapadala ng kernel ang hangup signal na SIGHUP sa mga prosesong nakakabit sa connection na iyon. Hindi kabilang dito ang tmux server. Kung walang tmux, ang parehong screen lock na nagpuputol ng koneksyon ay magpapahinto sa Claude Code habang nagsasagawa ito ng tool call. Mas detalyadong ipinapaliwanag ng Pagpapatakbo ng Claude Code sa VPS sa loob ng tmux ang session layout.

Patakbuhin ang tmux sa server, hindi sa phone. Kapag nag-type ka ng tmux sa loob ng session na nakakabit ka na, magpi-print ito ng sessions should be nested with care, unset $TMUX to force. Kapag pinilit mo ito, magkakaroon ka ng dalawang prefix key na kailangang pagpalitin.

Awtomatikong i-attach sa bawat pag-login

Nakakasawa ang paulit-ulit na pag-type ng attach command sa touch keyboard. Idagdag ito sa dulo ng ~/.profile sa server:

if command -v tmux >/dev/null 2>&1 && [ -z "$TMUX" ] && [ -t 1 ]; then
  exec tmux new-session -A -s claude
fi

new-session -A -s claude kumokonekta sa session na may pangalang claude kung umiiral ito, at ginagawa ito kung wala pa, kaya isang command lang ang sumasaklaw sa parehong sitwasyon. Pinapalitan ng exec ang login shell ng tmux, kaya kapag umalis ka sa tmux, isinasara ang connection sa halip na ibalik ka sa isang walang laman na prompt. Kapag kailangan mo ng plain shell, laktawan ang file: ssh you@server -t "bash --noprofile".

Ilagay ito sa ~/.profile at hindi sa ~/.bashrc. Tumatakbo rin ang ~/.bashrc para sa mga non-interactive session, kaya nasisira ang file transfer: binabasa ng scp at sftp ang hindi inaasahang output bilang protocol data at nagfa-fail sa Received message too long. Tumatakbo ang ~/.profile para lamang sa login shell, na siyang ginagamit ng interactive SSH session.

~/.profile ay siya ring bahagi kung saan idinaragdag ng Ubuntu ang ~/.local/bin sa PATH. Kung gumagana ang claude agad pagkatapos mag-login ngunit nagsasabing command not found ang shell sa loob ng tmux, ang pagkakasunod-sunod na iyon ang dahilan. Kaya simulan ang tmux mula sa login shell gaya ng nasa itaas, sa halip na mula sa script na lumalaktaw sa profile.

Parehong gumagamit ng SSH at mosh ang dalawang app, at parehong nag-iimbak ng mga key sa app. Ang pinagkaiba ay ang interface.

Command-driven ang Blink Shell. Sa prompt nito, i-type ang ssh you@server o mosh you@server, gamit ang parehong syntax ng desktop terminal. Buksan ang settings sa pag-type ng config, pagkatapos ay gumawa ng key pair sa seksyong Keys.

Form-driven ang Termius. Maglagay ng host entry, pagkatapos ay palitan ang protocol ng host mula SSH patungong Mosh sa host details. May sarili itong mosh implementation at sinusuportahan nito ang mosh 1.3.0 at mas bago, kaya kailangan pa ring naka-install sa server ang mosh package.

Gumawa ng key sa loob ng app sa parehong sitwasyon, at huwag kailanman mag-copy ng existing private key papunta sa phone. Ipinapakita ng app ang public half, na siyang iisang line na idaragdag mo sa ~/.ssh/authorized_keys sa server. Saklaw ng Mga SSH key bawat device at kung paano bawiin ang isa ang naming at revoke step. Mas mahalaga ito sa phone kaysa sa laptop.

I-on ang sariling biometric o passcode lock ng terminal app. Kung wala ito, ang unlocked phone ay nagbibigay ng bukas na shell sa server habang naka-on ang screen.

Android: Termux

pkg upgrade
pkg install openssh mosh
ssh-keygen -t ed25519 -C "pixel"
cat ~/.ssh/id_ed25519.pub

Ang Termux ay nag-aalok ng OpenSSH at mosh sa sarili nitong repository, kaya gumagana ang ssh, ssh-keygen, at mosh gaya ng sa desktop. Idagdag ang inilabas na linya ng public key sa ~/.ssh/authorized_keys sa server, pagkatapos ay kumonekta gamit ang mosh you@server.

Walang Esc key at Ctrl key ang on-screen keyboard ng Android, at kailangan ng Claude Code ang dalawang ito. Maaaring magpakita ang Termux ng sarili nitong key row. Maglagay ng isang linya sa ~/.termux/termux.properties:

extra-keys = [['ESC','|','/','HOME','UP','END','PGUP'],['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]

Pagkatapos, patakbuhin ang termux-reload-settings at lilitaw ang row sa ibabaw ng keyboard. Sa parehong reload, makikilala rin ang monospace TrueType font na inilagay sa ~/.termux/font.ttf.

Maaaring ihinto ng Android ang Termux habang nasa background ito, at dito, reconnect lang ang kailangan. Nasa server ang session at ang agent.

Bakit nagha-hang ang terminal kapag lumabas ako sa saklaw ng Wi-Fi, at ano ang inaayos ng mosh?

Ang SSH connection ay isang TCP (transmission control protocol) connection, at nakikilala ang TCP connection gamit ang parehong address at parehong port. Kapag lumabas ka sa saklaw ng Wi-Fi, bagong address ang nakukuha ng phone mula sa mobile network, kaya wala nang tumutugma sa lumang connection sa magkabilang dulo. Walang nag-aanunsyo nito. Humihinto lang sa pagtugon ang terminal hanggang sumuko ang TCP, at pagkatapos ay ipinapakita ng ssh ang client_loop: send disconnect: Broken pipe. Para agad wakasan ang nag-hang na session, pindutin ang Enter, kasunod ang ~, at pagkatapos ang ..

Inaalis ng mosh (mobile shell) ang ganitong uri ng failure. Isang beses nitong ginagamit ang SSH para mag-login at magsimula ng mosh-server process, kinukuha ang UDP (user datagram protocol) port na pinili ng server, at isinasara ang SSH connection. Pagkatapos nito, nagpapalitan ang dalawang panig ng UDP datagrams na authenticated gamit ang shared session key, kaya ang key na iyon ang ginagamit upang tukuyin ang session, hindi ang iyong address. Kapag nagbago ang address, nagpapatuloy lang ang session. Lokal ding ipinapakita ng mosh ang iyong tina-type at nire-repaint nito ang screen kapag hindi tugma ang server, kaya nananatili itong magagamit kahit mabagal ang mobile link.

Gumagamit ang mosh ng UDP port sa pagitan ng 60000 at 61000, kaya buksan ang range na iyon:

sudo ufw allow 60000:61000/udp
sudo ufw status

Nasa Pagbubukas ng mga port gamit ang ufw ang iba pang bahagi ng firewall configuration. Kung may hiwalay na network firewall ang provider mo sa control panel nito, idagdag din doon ang parehong range, dahil hindi maaapektuhan ng ufw rule ang filter na nasa unahan ng machine.

Karaniwan ang dalawang mosh failure. Kapag matagumpay ang login ngunit nagha-hang pagkatapos at ipinapakita ang Nothing received from server on UDP port 60001., nangangahulugan itong may humaharang sa UDP range sa pagitan ng phone at server. Kapag sinabing hindi nakita ang mosh-server, maaaring wala ang package sa server o wala ito sa login PATH. I-install ito, o direktang ituro rito gamit ang mosh --server=/usr/bin/mosh-server you@server.

Hindi rin tatakbo ang mosh kapag hindi UTF-8 ang login locale, at malinaw nitong ipinapakita ang dahilan: mosh-server needs a UTF-8 native locale to run. Ayusin ang locale sa server, hindi sa phone.

locale
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8

May dalawang bagay na hindi ginagawa ng mosh. Ayon sa README nito, hindi sinusuportahan ng mosh ang X forwarding o ang mga non-interactive na gamit ng SSH, kabilang ang port forwarding. Kaya kailangan pa rin ang plain ssh -L 8080:127.0.0.1:8080 you@server para sa pag-preview ng web app na kakasimula lang ng Claude Code. Sini-synchronize rin nito ang nakikitang screen lamang, kaya wala itong sariling scrollback. Walang epekto ang ikalawang limitasyong ito rito dahil pinapanatili ng tmux ang scrollback: Ctrl-b, pagkatapos ay pumapasok sa copy mode ang [; ginagamit ang drag o arrow keys para mag-scroll, at lumalabas gamit ang q.

Gawing maginhawa gamitin ang screen ng phone

Apat na linya sa ~/.tmux.conf sa server ang gumagawa ng karamihan ng trabaho:

set -g mouse on
set -g status-position top
set -g default-terminal "tmux-256color"
set -g history-limit 20000

Ginagawang scroll ng mouse on ang pag-drag sa touch screen at ginagawang pagpili ng pane o window ang pag-tap. Pinapalitan nito ang karamihan sa mga prefix key na mahirap i-type. Inililipat ng status-position top ang tmux status line mula sa pinakailalim, kung saan natatakpan ito ng on-screen keyboard at suggestion bar nito. Mahalaga ang default-terminal dahil kung hindi, nag-aanunsyo ang tmux ng screen terminal kay Claude Code. Dahil dito, mas pangit kaysa dapat ang mga kulay at box drawing. Kung tumanggi namang magsimula ang tmux gamit ang missing or unsuitable terminal: tmux-256color, nawawala ang terminfo entry: sudo apt install ncurses-term.

Apat na key lang ang kailangang matutuhan para maging maginhawa ang paggamit.

  • Ini-interrupt ng Esc si Claude habang bumubuo ito ng sagot at pinananatili ang nagawa na. Ito ang key na dapat pinakamalapit sa iyong hinlalaki.
  • Ini-interrupt din ng Ctrl+C ang kasalukuyang operation. Kapag idle ang prompt, nililinis ng unang pindot ang input at lumalabas sa Claude Code ang pangalawang pindot. Mas marahas itong opsyon.
  • Dalawang pindot sa Esc ang naglilinis ng draft prompt. Kapag walang laman ang prompt, binubuksan naman nito ang rewind menu.
  • Para sa multi-line prompt, i-type ang \ at pagkatapos ay Enter. Gumagana ang paraang ito sa lahat ng terminal. Native lamang ang Shift+Enter sa maikling listahan ng mga desktop terminal, at wala rito ang mobile client.

Iwasan ang split panes. Humigit-kumulang 40 columns ang lapad ng phone kapag portrait, kaya 20 columns lamang ang matitira sa bawat pane sa vertical split. Dahil dito, nagiging magulong teksto ang bawat diff kapag nag-wrap. Sa halip, gumamit ng tmux windows: gumagawa ang Ctrl-b c ng window at inililipat ka ng Ctrl-b n sa kasunod. Kung mapunta sa pangalawang window ang sarili nitong Claude Code session, maaaring direktang magpasa ng trabaho ang dalawang session sa isa’t isa sa halip na ikaw ang kumopya ng text sa pagitan ng mga window gamit ang touchscreen. Ihiga ang phone kapag kailangan mong basahin nang maayos ang diff.

Mahalagang sadyang itakda kung gaano karaming text ang lalabas sa screen, dahil binabago ng output style ang system prompt sa likod ng bawat reply at mas kaunting screenful ang kailangang i-scroll kapag mas maikli ang output.

Ang mahabang session sa maliit na screen ay kadalasang problema sa context. Kaya sulit basahin ang pag-manage sa Claude Code context window bago subukang magpatakbo ng buong araw ng trabaho mula sa tren.

I-lock down ito: keys lang, walang password

May hawak na ngayong key ang phone para sa isang machine na nag-e-edit ng code mo at nagpapatakbo ng mga command. I-off ang password authentication. Mas ligtas ang drop-in file kaysa direktang mag-edit ng sshd_config, dahil kasama sa Ubuntu's sshd_config ang /etc/ssh/sshd_config.d/*.conf sa itaas, at ang unang value na makita para sa isang setting ang ginagamit.

sudo tee /etc/ssh/sshd_config.d/99-phone.conf >/dev/null <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
EOF
sudo sshd -t && sudo systemctl reload ssh

Pino-parse ng sshd -t ang config at walang pini-print kapag valid ito. Kapag nilaktawan mo ito, maaaring maging dahilan ang isang typo para mabigo ang sshd sa reload. Panatilihing bukas ang kasalukuyan mong session at mag-test mula sa pangalawang connection bago ka magsara ng anuman, dahil ang maling key ay magbibigay sa iyo ng Permission denied (publickey). at, kapag naka-off ang mga password, wala kang fallback. Ang recovery path sa puntong iyon ay ang console ng provider mo. Kapag nabigo rin ang test connection na iyon, kumonekta muli gamit ang ssh -v at ayusin ang problema habang bukas pa ang unang session, dahil ang isang error message na iyon ay maaaring tumukoy sa limang magkakaibang fault at ipinapakita ng verbose output kung alin sa mga ito ang mayroon ka.

Bigyan ng sariling key ang bawat device. Kapag nawala ang phone, nangangahulugan ito na isang line lang ang tatanggalin mo mula sa ~/.ssh/authorized_keys, at patuloy na gagana ang laptop mo. Kapag iisang shared key ang ginamit, kailangan mong palitan ang key sa bawat device na pagmamay-ari mo.

Kung ililipat mo ang SSH sa ibang port sa Ubuntu 24.04, tandaan na ang listener ay pagmamay-ari ng ssh.socket, kaya walang mababago ang isang Port line lang. Patakbuhin ang sudo systemctl edit ssh.socket, alisin ang default gamit ang isang empty ListenStream=, at pagkatapos ay itakda ang port mo sa kasunod na line. Sinasaklaw ng Pag-hardening ng SSH sa isang VPS ang prosesong ito at ang iba pang bahagi ng attack surface.

Maliit na dagdag na seguridad ang ibinibigay ng fail2ban para sa SSH kapag naka-off na ang mga password, dahil hindi talaga matatanggap ang nahulaang password. Ang idinaragdag nito ay mas tahimik na logs, kaya mas madaling mapansin ang isang tunay na login attempt.

Mas matibay na opsyon ang panatilihing wala ang SSH sa public internet. Ilagay ang server sa likod ng WireGuard VPN na ikaw mismo ang nagho-host, i-up ang tunnel sa phone kapag kailangan, at bigyan ang sshd ng ListenAddress sa tunnel lang. Gumagana ang mosh sa tunnel dahil UDP ang ginagamit ng magkabilang panig. Isang dapat tandaan: nagdaragdag ng packet overhead ang tunnel, kaya kung humihinto ang malalaking transfer, babaan ang MTU (maximum transmission unit) sa WireGuard config ng phone.

May isa pang mahalagang punto tungkol sa ganitong paraan ng pagtatrabaho. Mula sa phone, nag-a-approve ka ng permission prompts sa screen na ilang linya lang ng diff ang ipinapakita sa bawat pagkakataon. Dahilan ito para panatilihin ang mga guardrail, hindi para i-off ang mga ito. Tiyakin din kung aling permission mode ang ginagamit sa pagsisimula ng mga session mo, dahil magiging default ng Claude Code ang auto mode sa 14 August 2026 at mag-a-apply ito ng mga file edit nang hindi humihinto para magtanong. Sinasaklaw ng Ligtas na pagpapatakbo ng Claude Code sa isang VPS ang mga limitasyon sa user at directory na dapat itakda bago maging touchscreen ang pangunahing paraan mo ng pag-access.

Kapag muli kang kumonekta at may problema

tmux attach na nagpi-print ng no server running on /tmp/tmux-1000/default ay nangangahulugang wala na ang tmux server. Halos palaging nangangahulugan ito na nag-reboot ang machine. Suriin gamit ang uptime. Maaaring i-reboot ng kernel updates mula sa automatic security updates ang box. Kapag nag-reboot ang box, wala nang tmux session. Kaya ituring ang anumang Claude Code run bilang isang bagay na maaari mong simulan muli.

Iba ang can't find session: claude. Tumatakbo ang tmux server, pero wala roon ang pangalang iyon. Ipinapakita ng tmux ls kung ano ang mga session na mayroon.

Kung kumonekta ka at plain shell prompt ang makita mo kung saan dating tumatakbo ang Claude Code, natapos ang process nang hindi nagtatapos ang session. Tingnan ang dmesg -T | tail para sa linyang gaya ng Out of memory: Killed process 4821 (claude). Ito ang nangyayari sa box na mas mababa sa 4 GB requirement habang may malaking edit. Kung walang ganoong linya, kusang nag-exit ang Claude Code. Nasa scrollback ng shell sa itaas ng prompt ang dahilan.

Kung maliit ang window pagbalik nito at may bakanteng espasyo sa paligid, nangangahulugan itong may dalawang client na nakakonekta sa magkaibang laki. Sinusukat ng tmux ang window ayon sa pinakamaliit na client na nakakonekta. Hawak pa rin ng laptop mo ang session sa lapad na 200 columns, habang 40 columns naman ang hinihingi ng phone. I-detach ang iba habang kumokonekta ka: tmux attach -d -t claude.

FAQ

Maaari ko bang patakbuhin ang Claude Code sa mismong phone sa halip na sa VPS?

Hindi. Ang mga suportadong platform hanggang July 2026 ay macOS, Windows, Ubuntu 20.04 o mas bago, Debian 10 o mas bago, at Alpine 3.19 o mas bago, na may 4 GB o higit pang RAM. Wala sa listahang iyon ang Android at iOS. Isinususpinde rin ng phone ang mga app nito at palaging binabago ang network address, na hindi kayang tiisin ng matagal na agent run. Patakbuhin ito sa server at gamitin ang phone bilang display.

Mananatili ba ang session kung isasara ko ang app o mawalan ako ng signal?

Oo, at dalawang magkahiwalay na bahagi ang gumagawa nito. Pinananatiling tumatakbo ng tmux ang process sa server, kaya walang namamatay kapag natapos ang connection. Pinananatili naman ng mosh na buhay ang mismong connection kahit magbago ang address, kaya hindi na kailangan ng reconnect kapag lumipat mula wifi patungo sa mobile data. Sa plain SSH na walang tmux, nagpapadala ang naputol na connection ng SIGHUP at humihinto ang Claude Code sa kalagitnaan ng task.

Bakit kumokonekta ang mosh pero walang ipinapakita?

Ang login na nagtatagumpay at pagkatapos ay nagha-hang na may Nothing received from server on UDP port 60001. ay nangangahulugang hindi bukas ang UDP 60000 hanggang 61000. Idagdag ang range sa ufw, at idagdag din ito sa network firewall ng provider mo, na hiwalay na control sa karamihan ng mga panel. Kung nag-uulat naman ang mosh na hindi nakita ang mosh-server, nawawala ang package sa server: sudo apt install mosh.

Paano ko ihihinto ang Claude Code gamit ang keyboard na walang Esc key?

Magdagdag ng key row. Nagko-configure ang Termux ng isa gamit ang extra-keys sa ~/.termux/termux.properties, at parehong may kasamang row ang Termius at Blink na maaari mong i-edit sa settings. Ini-interrupt ng Esc ang kasalukuyang response at pinananatili ang natapos nang work. Nag-i-interrupt din ang Ctrl+C, pero kapag pinindot ito nang dalawang beses habang idle ang prompt, lumalabas ang Claude Code, kaya Esc muna ang gamitin.

Ligtas na ba para dito ang pagbubukas ng SSH sa internet?

Kapag naka-off ang password authentication, ang tanging credential na maaaring magtagumpay ay isang key na hindi kailanman umaalis sa mga device mo. Makatuwirang risk ito para sa machine na maaari mong i-rebuild. Bigyan ang bawat device ng sarili nitong key upang isang linya lamang sa authorized_keys ang kailangang alisin kapag nawala ang phone. Kung ayaw mong tumanggap ng connection sa public port, ilagay ang box sa likod ng WireGuard at ipalisten ang sshd sa tunnel address.