SSD Nodes Learn 8GB RAM — $66/سال
تعلیمی Matt Connorتحریر: Matt Connor · اپ ڈیٹ شدہ 2026-08-01

فون سے Claude Code کیسے چلائیں؟

Claude Code فون پر نہیں، VPS کے tmux سیشن میں چلتا ہے۔ SSH keys، mobile data کے لیے mosh، tmux attach اور موبائل keyboard کی اہم اصلاحات جانیں۔

اپنے فون سے Claude Code: یہ حقیقت میں کیسے کام کرتا ہے

اپنے فون سے Claude Code کوئی موبائل ایپ نہیں ہے۔ Claude Code ایک VPS (virtual private server) پر چلتا ہے، ایک کھلے رہنے والے tmux سیشن کے اندر، اور آپ کا فون اس سیشن سے SSH (secure shell) کنکشن قائم رکھتا ہے جب تک آپ اسے دیکھ رہے ہوتے ہیں۔ ایپ بند کرنے کے بعد بھی ایجنٹ کام کرتا رہتا ہے، کیونکہ یہ عمل کبھی فون پر چل ہی نہیں رہا تھا۔

یہ تقسیم پورے ڈیزائن کی بنیاد ہے۔ فون کا آپریٹنگ سسٹم ایپ سے دوسری ایپ پر جاتے ہی چند سیکنڈ بعد اسے معطل کر دیتا ہے، اس لیے فون پر شروع کیا گیا کوئی بھی طویل کام رک جاتا ہے۔ جب آپ wifi سے mobile data پر جاتے ہیں تو فون کو ہر بار نیا network address بھی ملتا ہے۔ جب عمل server پر چلتا ہے اور فون صرف اسکرین دکھاتا ہے تو دونوں مسائل ختم ہو جاتے ہیں۔

server پر آپ کو چار چیزیں درکار ہیں: سیشن برقرار رکھنے کے لیے tmux، اندر داخل ہونے کے لیے SSH keys، network changes کے لیے mosh، اور خود Claude Code۔ فون کی طرف ایک ایسی terminal app کافی ہے جس میں key row تک رسائی ہو۔

VPS پر آپ کو کیا درکار ہے

SSH اور tmux کے حصوں کے لیے ایک چھوٹا Ubuntu 24.04 سرور کافی ہے۔ Claude Code کے لیے زیادہ وسائل درکار ہیں۔ جولائی 2026 تک سرکاری تقاضوں کے مطابق x64 یا ARM64 پروسیسر پر Ubuntu 20.04 یا اس کے بعد کا ورژن، اور کم از کم 4 GB RAM درکار ہے۔ 1 GB پلان اسے انسٹال تو کر دیتا ہے، لیکن زیادہ بوجھ کے دوران kernel اس کے process کو ختم کر دیتا ہے۔ Claude Code کے لیے paid Claude account (Pro، Max، Team یا Enterprise) یا API access والا Console account بھی درکار ہے، کیونکہ مفت Claude.ai پلان میں یہ شامل نہیں ہے۔

سرور کو sudo کے ساتھ ایک عام user کے طور پر configure کریں، root کے طور پر نہیں۔ اگر سرور نیا ہے تو پہلے نئے VPS پر پہلے دس منٹ مکمل کریں، کیونکہ اس گائیڈ میں بعد کی SSH تبدیلیاں user اور firewall کے موجود ہونے کے بعد زیادہ آسان ہوں گی۔

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

installer binary کو ~/.local/bin/claude میں رکھتا ہے، اور claude --version، 2.1.211 (Claude Code) جیسی line دکھاتا ہے۔ اگر یہ command not found دکھائے تو وہ directory ابھی آپ کے PATH میں شامل نہیں ہے: log out کریں، دوبارہ log in کریں، پھر command -v claude سے جانچ کریں۔ claude doctor، session شروع کیے بغیر installation اور settings کی diagnostics دکھاتا ہے۔

اب phone پر انحصار کرنے سے پہلے laptop سے ایک بار log in کریں۔ کسی project directory میں claude چلائیں اور login prompt کی ہدایات پر عمل کریں۔ اس عمل میں browser میں ایک URL کھولنے اور code واپس terminal میں درج کرنے کو کہا جاتا ہے، اور phone کی screen پر دو apps کے درمیان یہ کام کرنا سست ہوتا ہے۔ یہ کام ایک بار حقیقی keyboard پر کر لیں؛ credentials سرور پر محفوظ رہیں گے۔

tmux میں Claude Code شروع کریں تاکہ منقطع ہونے سے یہ بند نہ ہو

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

Ctrl-b سے الگ ہوں، پھر d چلائیں۔ tmux [detached (from session claude)] دکھاتا ہے اور آپ کو shell واپس دے دیتا ہے۔ اب ایپ بند کریں، سگنل ختم ہو جائے، یا فون جیب میں رکھ دیں۔ pane چلتا رہے گا۔

tmux ls
tmux attach -t claude

tmux ls ہر session کے لیے ایک سطر دکھاتا ہے، مثلاً claude: 1 windows (created Thu Jul 30 09:14:02 2026)۔ tmux attach -t claude آپ کو عین اسی جگہ واپس لے آتا ہے جہاں آپ نے کام چھوڑا تھا، جس میں ادھوری edit بھی شامل ہے۔

یہ اس لیے کام کرتا ہے کہ tmux اپنا الگ server process چلاتا ہے، اور آپ کا shell اور Claude Code sshd کے بجائے اسی server کے child processes ہوتے ہیں۔ SSH connection ختم ہونے پر kernel اس connection سے منسلک processes کو hangup signal، SIGHUP، بھیجتا ہے، لیکن tmux server ان میں شامل نہیں ہوتا۔ tmux کے بغیر، connection ختم کرنے والا وہی screen lock Claude Code کو tool call کے دوران روک دیتا ہے۔ VPS پر tmux کے اندر Claude Code چلانا میں session layout کی مزید تفصیل موجود ہے۔

tmux server پر چلائیں، فون پر کبھی نہیں۔ پہلے سے attached session کے اندر tmux ٹائپ کرنے سے sessions should be nested with care, unset $TMUX to force دکھتا ہے، اور اسے زبردستی چلانے پر آپس میں مقابلہ کرنے والی دو prefix keys مل جاتی ہیں۔

ہر لاگ اِن پر خودکار طور پر منسلک ہوں

ٹچ کی بورڈ پر attach کمانڈ لکھنا مشکل ہو جاتا ہے۔ سرور پر اسے ~/.profile کے آخر میں شامل کریں:

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 موجود ہونے کی صورت میں claude نامی سیشن سے منسلک ہوتا ہے، اور موجود نہ ہونے کی صورت میں اسے بناتا ہے۔ اس طرح ایک ہی کمانڈ دونوں صورتوں کا احاطہ کرتی ہے۔ exec لاگ اِن shell کو tmux سے تبدیل کر دیتا ہے۔ اس لیے tmux سے نکلنے پر آپ کو خالی prompt کے بجائے کنکشن بند ہو جاتا ہے۔ عام shell درکار ہو تو فائل کو چھوڑ دیں: ssh you@server -t "bash --noprofile"۔

اسے ~/.profile میں شامل کریں، ~/.bashrc میں نہیں۔ ~/.bashrc غیر تعاملی سیشنز کے لیے بھی چلتا ہے، اس لیے فائل کی منتقلی ناکام ہو جاتی ہے: scp اور sftp غیر متوقع output کو پروٹوکول ڈیٹا سمجھتے ہیں اور Received message too long کے ساتھ ناکام ہو جاتے ہیں۔ ~/.profile صرف login shells کے لیے چلتا ہے، اور interactive SSH session بھی اسی نوعیت کا ہوتا ہے۔

Ubuntu، PATH میں ~/.local/bin شامل کرنے کے لیے بھی ~/.profile استعمال کرتا ہے۔ اگر لاگ اِن کے فوراً بعد claude کام کرتا ہے، لیکن tmux کے اندر موجود shell command not found بتاتا ہے، تو اس کی وجہ یہی ترتیب ہے۔ اس لیے tmux کو اوپر بیان کردہ طریقے کے مطابق login shell سے شروع کریں، نہ کہ ایسی script سے جو profile کو چھوڑ دیتی ہو۔

دونوں ایپس SSH اور mosh استعمال کرتی ہیں اور دونوں keys کو ایپ میں محفوظ کرتی ہیں۔ فرق interface کا ہے۔

Blink Shell کمانڈ پر مبنی ہے۔ اس کے prompt پر ssh you@server یا mosh you@server ٹائپ کریں۔ اس کا syntax desktop terminal جیسا ہی ہے۔ Settings کھولنے کے لیے config ٹائپ کریں۔ Keys section آپ کے لیے ایک pair بناتا ہے۔

Termius فارم پر مبنی ہے۔ آپ host entry مکمل کرتے ہیں، پھر host details میں اس host کو SSH سے Mosh پر تبدیل کرتے ہیں۔ Termius اپنی mosh implementation فراہم کرتا ہے اور mosh 1.3.0 یا اس کے بعد کے versions کو support کرتا ہے۔ اس لیے server پر mosh package اب بھی installed ہونا چاہیے۔

دونوں صورتوں میں key ایپ کے اندر generate کریں۔ موجودہ private key کو phone پر کبھی copy نہ کریں۔ ایپ آپ کو public half دکھاتی ہے۔ یہی وہ واحد line ہے جسے آپ server پر ~/.ssh/authorized_keys میں شامل کرتے ہیں۔ ہر device کے لیے SSH keys اور کسی key کو revoke کرنے کا طریقہ naming اور revoke کے مرحلے کی وضاحت کرتا ہے۔ یہ بات laptop کے مقابلے میں phone کے لیے زیادہ اہم ہے۔

terminal app کا اپنا biometric یا passcode lock فعال کریں۔ اس کے بغیر unlocked phone آپ کے server پر ایک open shell بن جاتا ہے، جب تک screen روشن رہتی ہے۔

Android: Termux

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

Termux اپنے ریپوزٹری میں OpenSSH اور mosh پیکیجز فراہم کرتا ہے، اس لیے ssh، ssh-keygen اور mosh ڈیسک ٹاپ کی طرح کام کرتے ہیں۔ پرنٹ کی گئی عوامی کلید کی لائن سرور پر ~/.ssh/authorized_keys میں شامل کریں، پھر mosh you@server کے ذریعے کنیکٹ کریں۔

Android کے آن اسکرین کی بورڈ میں Esc کلید اور Ctrl کلید نہیں ہوتیں، جبکہ Claude Code کو دونوں درکار ہیں۔ Termux اپنی کلیدوں کی قطار دکھا سکتا ہے۔ ~/.termux/termux.properties میں ایک لائن شامل کریں:

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

پھر termux-reload-settings چلائیں، اور یہ قطار کی بورڈ کے اوپر ظاہر ہو جائے گی۔ یہی reload عمل ~/.termux/font.ttf میں رکھی گئی monospace TrueType فونٹ فائل کو بھی شامل کر لیتا ہے۔

Android Termux کو پس منظر میں رہتے ہوئے روک سکتا ہے، لیکن اس صورت میں صرف دوبارہ کنیکٹ کرنا پڑتا ہے۔ سیشن اور agent سرور پر موجود رہتے ہیں۔

جب میں Wi-Fi سے دور ہوتا ہوں تو ٹرمینل کیوں منجمد ہو جاتا ہے، اور mosh اسے کیسے درست کرتا ہے؟

SSH کنکشن TCP (transmission control protocol) کنکشن ہوتا ہے، اور TCP کنکشن کی شناخت دونوں addresses اور دونوں ports سے ہوتی ہے۔ Wi-Fi کی حد سے باہر جائیں تو فون کو mobile network سے نیا address مل جاتا ہے، اس لیے پرانا کنکشن کسی بھی سرے پر موجود کسی چیز سے مطابقت نہیں رکھتا۔ اس تبدیلی کا کوئی اعلان نہیں ہوتا۔ TCP کے ہار ماننے تک ٹرمینل جواب دینا بند کر دیتا ہے، پھر ssh client_loop: send disconnect: Broken pipe دکھاتا ہے۔ منجمد سیشن کو فوراً ختم کرنے کے لیے Enter دبائیں، پھر ~، اور پھر .۔

mosh (mobile shell) اس خرابی کی صورتِ حال کو ختم کرتا ہے۔ یہ لاگ اِن کرنے اور mosh-server process شروع کرنے کے لیے ایک بار SSH استعمال کرتا ہے، سرور کی جانب سے منتخب کیا گیا UDP (user datagram protocol) port واپس پڑھتا ہے، اور SSH کنکشن بند کر دیتا ہے۔ اس کے بعد دونوں سرے مشترکہ session key سے authenticated UDP datagrams کا تبادلہ کرتے ہیں، اس لیے سیشن کی شناخت آپ کے address کے بجائے اس key سے ہوتی ہے۔ نیا address ملنے پر سیشن جاری رہتا ہے۔ mosh آپ کی typing مقامی طور پر بھی دکھاتا ہے اور جب سرور کا نتیجہ مختلف ہو تو اسکرین دوبارہ بناتا ہے۔ اسی وجہ سے یہ سست mobile link پر بھی قابلِ استعمال رہتا ہے۔

mosh، 60000 اور 61000 کے درمیان UDP port استعمال کرتا ہے، اس لیے یہ range کھولیں:

sudo ufw allow 60000:61000/udp
sudo ufw status

ufw کے ذریعے ports کھولنا میں firewall کی باقی ترتیب بیان کی گئی ہے۔ اگر آپ کا provider اپنے control panel میں الگ network firewall فراہم کرتا ہے تو وہاں بھی یہی range شامل کریں، کیونکہ ufw کا rule اس filter پر اثر نہیں ڈال سکتا جو machine کے سامنے موجود ہو۔

mosh کے ساتھ دو failures عام ہیں۔ اگر login کامیاب ہو جائے اور پھر رک جائے، اور Nothing received from server on UDP port 60001. دکھائی دے، تو اس کا مطلب ہے کہ UDP range فون اور سرور کے درمیان کہیں blocked ہے۔ اگر connection mosh-server not found کی اطلاع دے تو اس کا مطلب ہے کہ package سرور پر موجود نہیں یا login PATH میں شامل نہیں ہے۔ اسے install کریں، یا mosh --server=/usr/bin/mosh-server you@server کے ذریعے براہِ راست اس کا path فراہم کریں۔

اگر login locale UTF-8 نہ ہو تو mosh چلنے سے بھی انکار کرتا ہے اور یہ پیغام دیتا ہے: mosh-server needs a UTF-8 native locale to run. locale کو فون پر نہیں بلکہ سرور پر درست کریں۔

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

mosh دو کام نہیں کرتا۔ اس کی README کے مطابق mosh X forwarding یا SSH کے non-interactive استعمالات، بشمول port forwarding، support نہیں کرتا۔ اس لیے Claude Code کے شروع کیے ہوئے web app کا preview دیکھنے کے لیے اب بھی سادہ ssh -L 8080:127.0.0.1:8080 you@server درکار ہے۔ mosh صرف نظر آنے والی screen کو synchronize کرتا ہے، اس لیے اس کا اپنا scrollback نہیں ہوتا۔ یہاں اس دوسری حد سے کوئی مسئلہ نہیں ہوتا، کیونکہ tmux scrollback محفوظ رکھتا ہے: Ctrl-b، پھر [ copy mode داخل کرتا ہے؛ drag یا arrow keys سے scroll کریں، اور q سے باہر نکلیں۔

فون کی اسکرین کو قابلِ استعمال بنائیں

سرور پر ~/.tmux.conf میں موجود چار سطریں زیادہ تر کام کرتی ہیں:

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

mouse on ٹچ ڈریگ کو اسکرول اور ٹیپ کو پین یا ونڈو کے انتخاب میں تبدیل کرتا ہے۔ اس سے وہ زیادہ تر prefix keys غیر ضروری ہو جاتی ہیں جنہیں ٹائپ کرنا مشکل ہوتا ہے۔ status-position top tmux کی status line کو نچلے کنارے سے ہٹا دیتا ہے، جہاں on-screen keyboard اور اس کا suggestion bar اسے ڈھانپ دیتے ہیں۔ default-terminal اہم ہے، کیونکہ بصورتِ دیگر tmux Claude Code کو screen terminal بتاتا ہے، جس کی وجہ سے رنگ اور box drawing اپنی مطلوبہ شکل سے خراب ہو جاتے ہیں۔ اگر tmux اس کے بعد missing or unsuitable terminal: tmux-256color کے ساتھ شروع ہونے سے انکار کرے تو terminfo entry موجود نہیں ہے: sudo apt install ncurses-term۔

چار keys سیکھ لیں، باقی استعمال آسان ہو جائے گا۔

  • Esc Claude کے جاری جواب کو روکتا ہے اور پہلے سے مکمل کام برقرار رکھتا ہے۔ اس لیے یہی وہ key ہے جسے انگوٹھے کے قریب رکھنا چاہیے۔
  • Ctrl+C بھی جاری operation کو روکتا ہے۔ idle prompt پر پہلی press input صاف کرتی ہے، جبکہ دوسری press Claude Code سے exit کرتی ہے۔ اس لیے یہ زیادہ سخت طریقہ ہے۔
  • Esc کو دو بار دبانے سے draft prompt صاف ہو جاتا ہے۔ خالی prompt پر یہ اس کے بجائے rewind menu کھولتا ہے۔
  • multi-line prompt کے لیے \ ٹائپ کریں، پھر Enter دبائیں۔ یہ طریقہ ہر terminal میں کام کرتا ہے۔ Shift+Enter صرف desktop terminals کی ایک مختصر فہرست میں native ہے، اور mobile clients اس فہرست میں شامل نہیں ہیں۔

split panes سے گریز کریں۔ portrait حالت میں فون کی چوڑائی تقریباً 40 columns ہوتی ہے، اس لیے vertical split ہر pane کے لیے 20 columns چھوڑتا ہے اور ہر diff کا متن بےترتیب wrap ہونے لگتا ہے۔ اس کے بجائے tmux windows استعمال کریں: Ctrl-b c ایک window بناتا ہے اور Ctrl-b n اگلی window پر لے جاتا ہے۔ جب diff کو درست طور پر پڑھنا ہو تو فون کو sideways کر لیں۔

چھوٹی اسکرین پر طویل session کا مسئلہ زیادہ تر context کا ہوتا ہے، اس لیے ٹرین میں پورا دن کام چلانے کی کوشش سے پہلے Claude Code context window کا انتظام پڑھ لینا مفید ہے۔

اسے سخت محفوظ کریں: صرف keys، passwords نہیں

اب فون میں اس machine کی key موجود ہے جو آپ کے code میں ترمیم کرتی اور commands چلاتی ہے۔ password authentication بند کر دیں۔ براہِ راست sshd_config میں ترمیم کرنے کے بجائے drop-in file استعمال کرنا زیادہ محفوظ ہے، کیونکہ Ubuntu کی sshd_config کے شروع میں /etc/ssh/sshd_config.d/*.conf شامل ہوتا ہے، اور کسی setting کے لیے ملنے والی پہلی value استعمال ہوتی ہے۔

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

sshd -t config کو parse کرتا ہے اور config درست ہونے پر کچھ بھی print نہیں کرتا۔ اسے چھوڑنے پر ایک typo کے باعث reload کے وقت sshd ناکام ہو جاتا ہے۔ اپنی موجودہ working session کھلی رکھیں اور کچھ بھی بند کرنے سے پہلے دوسری connection سے test کریں، کیونکہ غلط key اب آپ کو Permission denied (publickey). دیتی ہے، اور passwords بند ہونے کی صورت میں کوئی fallback نہیں رہتا۔ اس مرحلے پر recovery path آپ کے provider کا console ہے۔

ہر device کے لیے الگ key دیں۔ فون گم ہونے کی صورت میں ~/.ssh/authorized_keys سے صرف ایک line حذف کرنی ہوگی، جبکہ laptop کام کرتا رہے گا۔ ایک مشترک key استعمال کرنے کا مطلب ہے کہ اپنے ہر device پر key تبدیل کرنا ہوگی۔

اگر Ubuntu 24.04 پر SSH کو کسی دوسرے port پر منتقل کریں، تو یاد رکھیں کہ listener کا تعلق ssh.socket سے ہے۔ اس لیے صرف Port line شامل کرنے سے کچھ تبدیل نہیں ہوگا۔ sudo systemctl edit ssh.socket چلائیں، خالی ListenStream= کے ذریعے default صاف کریں، پھر اگلی line میں اپنا port set کریں۔ VPS پر SSH کو سخت محفوظ کرنا اس عمل اور باقی attack surface کا احاطہ کرتا ہے۔

SSH کے لیے fail2ban passwords بند ہونے کے بعد کم ہی اضافی security فراہم کرتا ہے، کیونکہ guessed password کو بالکل قبول نہیں کیا جا سکتا۔ البتہ یہ quiet logs فراہم کرتا ہے، جس سے login کی حقیقی کوشش آسانی سے نظر آ جاتی ہے۔

زیادہ مضبوط طریقہ یہ ہے کہ SSH کو public internet سے دور رکھا جائے۔ server کو اپنے زیرِ انتظام WireGuard VPN کے پیچھے رکھیں، ضرورت کے وقت فون پر tunnel فعال کریں، اور sshd کو صرف tunnel پر ListenAddress دیں۔ mosh tunnel کے ذریعے کام کرتا ہے، کیونکہ دونوں اطراف UDP استعمال کرتے ہیں۔ ایک احتیاط یہ ہے کہ tunnel packet overhead بڑھاتا ہے۔ اس لیے اگر بڑی transfers رک جائیں تو فون کی WireGuard config میں MTU (maximum transmission unit) کم کریں۔

اس طریقۂ کار کے بارے میں ایک آخری نکتہ۔ فون سے آپ ایسے screen پر permission prompts منظور کرتے ہیں جس پر ایک وقت میں diff کی صرف چند lines دکھائی دیتی ہیں۔ یہ guardrails بند کرنے کی وجہ نہیں، بلکہ انہیں برقرار رکھنے کی وجہ ہے۔ VPS پر Claude Code کو محفوظ طریقے سے چلانا ان user اور directory limits کا احاطہ کرتا ہے جو touchscreen کو آپ کے main access path بننے سے پہلے set کرنا مناسب ہے۔

جب آپ دوبارہ منسلک ہوں اور کچھ درست نہ ہو

tmux attach کا no server running on /tmp/tmux-1000/default پرنٹ ہونا اس بات کی علامت ہے کہ tmux server ختم ہو چکا ہے۔ اس کا تقریباً ہمیشہ مطلب ہوتا ہے کہ machine reboot ہوئی ہے۔ uptime سے تصدیق کریں۔ خودکار سیکیورٹی اپ ڈیٹس کی kernel updates box کو reboot کرتی ہیں۔ reboot ہونے والی box میں tmux session نہیں ہوتا۔ اس لیے Claude Code run کو ایسی چیز سمجھیں جسے آپ دوبارہ شروع کر سکتے ہیں۔

can't find session: claude مختلف صورت ہے۔ tmux server چل رہا ہے، لیکن وہ نام موجود نہیں ہے۔ tmux ls موجود sessions دکھاتا ہے۔

اگر آپ attach کریں اور وہاں سادہ shell prompt ملے جہاں پہلے Claude Code تھا، تو process session ختم ہوئے بغیر ختم ہو گیا ہے۔ dmesg -T | tail میں Out of memory: Killed process 4821 (claude) جیسی line دیکھیں۔ 4 GB کی requirement سے کم box بڑے edit کے دوران یہی کرتی ہے۔ ایسی line نہ ہونے کا مطلب ہے کہ Claude Code خود ختم ہوا ہے۔ prompt کے اوپر shell کا scrollback وجہ دکھاتا ہے۔

اگر window واپس آ کر بہت چھوٹی ہو اور اس کے اردگرد خالی جگہ ہو، تو اس کا مطلب ہے کہ دو clients مختلف sizes کے ساتھ attached ہیں۔ tmux window کا size سب سے چھوٹے attached client کے مطابق رکھتا ہے۔ آپ کا laptop اب بھی session کو 200 columns چوڑا رکھے ہوئے ہے، جبکہ phone 40 کا مطالبہ کر رہا ہے۔ attach کرتے وقت دوسرے clients کو detach کریں: tmux attach -d -t claude۔

FAQ

کیا میں VPS کے بجائے Claude Code فون پر ہی چلا سکتا ہوں؟

نہیں۔ July 2026 تک معاونت یافتہ پلیٹ فارم macOS، Windows، Ubuntu 20.04 یا اس کے بعد کے ورژنز، Debian 10 یا اس کے بعد کے ورژنز، اور Alpine 3.19 یا اس کے بعد کے ورژنز ہیں، اور کم از کم 4 GB RAM درکار ہے۔ Android اور iOS اس فہرست میں شامل نہیں ہیں۔ فون اپنی ایپس کو sleep میں بھیج دیتا ہے اور اس کا network address مسلسل تبدیل ہوتا رہتا ہے۔ طویل agent run کے لیے یہ دونوں مسائل ناقابلِ قبول ہیں۔ اسے server پر چلائیں اور فون کو display کے طور پر استعمال کریں۔

کیا app بند کرنے یا signal ختم ہونے پر session برقرار رہتا ہے؟

ہاں، اور یہ کام دو الگ اجزا کرتے ہیں۔ tmux server پر process کو چلتا رکھتا ہے، اس لیے connection ختم ہونے پر کچھ بند نہیں ہوتا۔ mosh خود connection کو address change کے دوران برقرار رکھتا ہے، اس لیے wifi سے mobile data پر منتقل ہونے سے reconnect بھی درکار نہیں ہوتا۔ plain SSH اور tmux کے بغیر، connection ختم ہونے پر SIGHUP بھیجا جاتا ہے اور Claude Code کام کے درمیان رک جاتا ہے۔

mosh connect ہونے کے بعد کچھ کیوں نہیں دکھاتا؟

اگر login کامیاب ہو جائے اور پھر Nothing received from server on UDP port 60001. کے ساتھ عمل رک جائے، تو UDP 60000 سے 61000 تک ports کھلے نہیں ہیں۔ یہ range ufw میں شامل کریں، اور اپنے provider کے network firewall میں بھی دوبارہ شامل کریں۔ زیادہ تر panels میں یہ الگ control ہوتا ہے۔ اگر mosh اس کے بجائے بتائے کہ mosh-server نہیں ملا، تو server پر package موجود نہیں ہے: sudo apt install mosh۔

Esc key کے بغیر keyboard سے Claude Code کو کیسے interrupt کروں؟

ایک key row شامل کریں۔ Termux میں ~/.termux/termux.properties کے اندر extra-keys کے ذریعے یہ row configure کی جا سکتی ہے، جبکہ Termius اور Blink دونوں ایسی row فراہم کرتے ہیں جسے settings میں edit کیا جا سکتا ہے۔ Esc چلتے ہوئے response کو interrupt کرتا ہے اور پہلے سے مکمل کیا گیا کام برقرار رکھتا ہے۔ Ctrl+C بھی interrupt کرتا ہے، لیکن idle prompt پر اسے دو بار دبانے سے Claude Code بند ہو جاتا ہے۔ اس لیے پہلے Esc استعمال کریں۔

کیا SSH کو internet پر کھولنا اس کام کے لیے کافی محفوظ ہے؟

Password authentication بند ہونے پر کامیاب ہونے والی واحد credential وہ key ہے جو آپ کے devices سے باہر نہیں جاتی۔ اس machine کے لیے، جسے آپ دوبارہ build کر سکتے ہیں، یہ ایک معقول risk ہے۔ ہر device کے لیے الگ key بنائیں، تاکہ فون گم ہونے پر authorized_keys میں صرف ایک line حذف کرنا پڑے۔ اگر آپ public port پر بالکل بھی جواب نہیں دینا چاہتے، تو box کو WireGuard کے پیچھے رکھیں اور sshd کو tunnel address پر listen کرنے دیں۔