DIY स्टैक

tmux, mosh और Tailscale: फ़ोन पर कोडिंग एजेंट के लिए DIY स्टैक

फ़ोन से Claude Code या Codex चलाने का पारंपरिक तरीक़ा है: एक टर्मिनल ऐप, एक निजी नेटवर्क, नेटवर्क बदलने पर भी टिकने वाला कनेक्शन, और बाक़ी सब कुछ झेल लेने वाला सेशन। हर हिस्सा मुफ़्त है और अच्छी तरह समझा हुआ है। यहाँ सटीक कमांड के साथ सेटअप है, और इस पर एक ईमानदार नज़र कि यह कहाँ तकलीफ़ देता है।

tmux, mosh और Tailscale: फ़ोन पर कोडिंग एजेंट के लिए DIY स्टैक

छोटा जवाब

सर्वर और फ़ोन पर Tailscale इंस्टॉल करें, फिर tailscale set --ssh चालू करें ताकि सर्वर सिर्फ़ आपके निजी tailnet पर पहुँच में रहे। एजेंट को tmux new -A -s main के अंदर चलाएँ ताकि वह आपके कनेक्शन के बाद भी चलता रहे। Claude Code के लिए ~/.tmux.conf में set -g allow-passthrough on और extended-keys वाली लाइनें जोड़ें। Blink, Termius या Termux से mosh के ज़रिए कनेक्ट करें (mosh dev@server -- tmux new -A -s main)। यह अच्छी तरह चलता है। इसकी कमज़ोरियाँ हैं छोटी स्क्रीन पर फ़ुल-स्क्रीन TUI, और जब तक आप hooks न जोड़ें, कोई पुश नोटिफ़िकेशन नहीं।

अगर आपने खोजा है कि फ़ोन से Claude Code कैसे इस्तेमाल करें, तो शायद आपने यह स्टैक दर्जन भर ब्लॉग पोस्ट में देखा होगा। वजह यह है कि यह काम करता है। Tailscale आपके फ़ोन को बिना खुले पोर्ट के सर्वर तक एक निजी, एन्क्रिप्टेड रास्ता देता है। mosh Wi-Fi से 4G पर जाने या फ़ोन लॉक करने पर भी कनेक्शन ज़िंदा रखता है। tmux कनेक्शन टूट जाने पर भी एजेंट को चलता रखता है। तीनों को ठीक से जोड़ने का तरीक़ा यह है।

स्टैक

परतटूलयह क्या हल करता हैइसे छोड़ें अगर…
नेटवर्कTailscale (Tailscale SSH)NAT के पीछे भी सर्वर तक निजी रूप से पहुँचें; कोई सार्वजनिक SSH पोर्ट नहीं; SSO पर आधारित ऐक्सेससर्वर पर पहले से सुरक्षित किया गया सार्वजनिक SSH है और आप उससे संतुष्ट हैं
ट्रांसपोर्टmoshनेटवर्क बदलना, स्लीप और ख़राब सिग्नल झेलता है; लोकल echo देरी छिपाता हैआप सिर्फ़ स्थिर नेटवर्क से कनेक्ट करते हैं
सेशनtmuxडिस्कनेक्ट होने पर भी एजेंट चलता रहता है; हर प्रोजेक्ट के लिए कई विंडोकभी नहीं। सबसे अहम परत यही है।
क्लाइंटBlink, Termius, Termux…फ़ोन पर एक टर्मिनल—

tmux सेटअप

इसे इंस्टॉल करें और एक नाम वाला सेशन शुरू करें, जिससे आप कहीं से भी दोबारा जुड़ सकें:

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 से वही कमांड पहली बार और उसके बाद हर बार काम करती है, इसलिए इसे फ़ोन के टर्मिनल ऐप में स्निपेट के रूप में सहेजना अच्छा है। फिर tmux को वे सेटिंग्स दें जो एजेंट को चाहिए। Anthropic के टर्मिनल कॉन्फ़िगरेशन दस्तावेज़ कहते हैं कि tmux के अंदर Shift+Enter नई लाइन जोड़ने के बजाय सबमिट कर देता है, और नोटिफ़िकेशन बाहरी टर्मिनल तक कभी नहीं पहुँचते, जब तक आप ये लाइनें न जोड़ें:

# ~/.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

इसे tmux source-file ~/.tmux.conf से लागू करें। extended keys के साथ भी कई फ़ोन कीबोर्ड Shift+Enter भेज ही नहीं पाते। नई लाइन के लिए Claude Code Ctrl+J, या \ के बाद Enter, भी स्वीकार करता है, और दोनों किसी भी टर्मिनल में चलते हैं।

हर प्रोजेक्ट या हर एजेंट के लिए एक tmux विंडो रखें। Ctrl-b c नई विंडो खोलता है और Ctrl-b n अगली पर ले जाता है। एक ही रिपॉज़िटरी पर कई सेशन के लिए हर एक को उसका अपना git worktree दें। 24/7 गाइड यह बताती है और यह भी कि रीबूट पर क्या होता है। tmux सेशन रीबूट नहीं झेलते।

mosh बनाम ssh

सादा SSH एक TCP कनेक्शन पर चलता है। जब आपका फ़ोन नेटवर्क बदलता है, या iOS ऐप को कुछ देर के लिए सस्पेंड कर देता है, तो वह कनेक्शन टूट जाता है, और आप दोबारा कनेक्ट होकर फिर से जुड़ते हैं। mosh SSH से लॉगिन करता है, सर्वर पर mosh-server शुरू करता है, और फिर अपने UDP प्रोटोकॉल पर चला जाता है, जो IP बदलने और स्लीप के दौरान भी चलता रहता है। यह आपकी टाइपिंग को लोकल रूप से भी दिखाता है, इसलिए 200 ms का लिंक भी फुर्तीला लगता है।

# 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 UDP पोर्ट 60000–61000 इस्तेमाल करता है। सार्वजनिक IP पर आपको इन्हें अपने फ़ायरवॉल में खोलना होगा, उदाहरण के लिए sudo ufw allow 60000:61000/udp से, साथ में अपने क्लाउड प्रदाता के फ़ायरवॉल में। Tailscale पर ट्रैफ़िक tailnet के अंदर रहता है, इसलिए कोई सार्वजनिक पोर्ट नहीं चाहिए। एक सीमा: mosh सिर्फ़ दिखने वाली स्क्रीन सिंक करता है, इसलिए ख़ुद mosh में कोई स्क्रॉलबैक नहीं है। mosh के अपने दस्तावेज़ इतिहास के लिए tmux या screen की सलाह देते हैं, जो दोनों चलाने की एक और वजह है।

Tailscale SSH

Tailscale आपके सर्वर और फ़ोन को एक निजी WireGuard नेटवर्क (एक tailnet) पर रखता है। Tailscale SSH एक क़दम आगे जाता है: Tailscale आपकी tailnet पहचान से SSH ऑथेंटिकेशन संभालता है, इसलिए आपको 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

Tailscale के दस्तावेज़ों के अनुसार, tailscale set --ssh से tailscaled आपके tailnet से आने वाले ट्रैफ़िक के लिए पोर्ट 22 संभाल लेता है। फिर कोई भी सामान्य SSH क्लाइंट मशीन के MagicDNS नाम से ssh dev@my-server के ज़रिए कनेक्ट करता है। कुछ बातें:

  • Check मोड। डिफ़ॉल्ट पॉलिसी "action": "check" इस्तेमाल करती है, इसलिए समय-समय पर आपसे ब्राउज़र में दोबारा ऑथेंटिकेट करने को कहा जाता है। टर्मिनल में लॉगिन URL दिखना सामान्य है।
  • सर्वर प्लेटफ़ॉर्म। Linux पूरी तरह सपोर्टेड है। macOS पर सिर्फ़ ओपन-सोर्स tailscale + tailscaled CLI बिल्ड ही Tailscale SSH सर्वर बन सकता है, इसलिए App Store वाले ऐप के साथ Mac mini को tailnet पर सामान्य SSH इस्तेमाल करना चाहिए।
  • सार्वजनिक पोर्ट बंद करें। जब पक्का हो जाए कि आप tailnet पर मशीन तक पहुँच सकते हैं, तो अपने प्रदाता के फ़ायरवॉल में सार्वजनिक पोर्ट 22 बंद करें। यह इसी क्रम में करें, एक दूसरा सेशन खोलकर, ताकि आप ख़ुद को बाहर न कर लें।

फ़ोन पर Tailscale ऐप इंस्टॉल करें, उसी tailnet में साइन इन करें और उसे कनेक्टेड छोड़ दें। तब आपका टर्मिनल ऐप my-server तक ऐसे पहुँचता है जैसे वह आपके लोकल नेटवर्क पर हो।

iOS और Android क्लाइंट

क्लाइंटप्लेटफ़ॉर्मmoshटिप्पणी
Blink ShelliPhone, iPadहाँmosh के इर्द-गिर्द बना; iPad पर हार्डवेयर कीबोर्ड का मज़बूत सपोर्ट। blink.sh के अनुसार दो हफ़्ते के ट्रायल के बाद $19.99/साल।
TermiusiOS, Android, डेस्कटॉपहाँमुफ़्त Starter टियर में SSH और mosh शामिल; डिवाइसों के बीच सिंक Pro में है (termius.com/pricing के अनुसार सालाना बिलिंग पर $10/महीना)
TermuxAndroidहाँ (pkg install openssh mosh)फ़ोन पर पूरा Linux userland; मुफ़्त और ओपन सोर्स
JuiceSSHAndroidहाँmosh.org पर mosh क्लाइंट के रूप में सूचीबद्ध

आप कोई भी क्लाइंट चुनें, Esc, Ctrl, Tab और ऐरो वाली एक अतिरिक्त कुंजी पंक्ति सेट करें। Claude Code रोकने के लिए Esc और अनुमति मोड बदलने के लिए Shift+Tab इस्तेमाल करता है, और दोनों में से कोई भी सामान्य फ़ोन कीबोर्ड पर नहीं है।

यह कहाँ टूटता है

स्टैक भरोसेमंद है। दिक़्क़त भरोसेमंदी के आस-पास की हर चीज़ में है।

  • 6 इंच की स्क्रीन पर डेस्कटॉप TUI। Claude Code, Codex और agy 100+ कॉलम के लिए बने हैं। फ़ोन पर आप लिपटे हुए diff पढ़ रहे होते हैं, अँगूठे से tool आउटपुट स्क्रॉल कर रहे होते हैं और इनपुट लाइन ढूँढ रहे होते हैं।
  • कोई पुश नोटिफ़िकेशन नहीं। जब एजेंट काम पूरा करता है या उसे मंज़ूरी चाहिए, तो जब तक आप hook न जोड़ें, कुछ भी आपको नहीं बताता। टर्मिनल सिर्फ़ तब सूचना देता है जब ऐप सामने हो। फ़ोन से अनुरोध मंज़ूर करने पर हमारी गाइड वे ntfy hooks बताती है जो लोग ऊपर से जोड़ते हैं।
  • स्क्रॉलबैक में दबी मंज़ूरियाँ। अनुमति अनुरोध एक व्यस्त पैन में बस कुछ लाइनें होता है। घंटे भर बाद लौटें, तो आपको उसे ढूँढना, पढ़ना और ऐरो कुंजियों से जवाब देना पड़ता है।
  • बैकग्राउंड की समस्या। iOS टर्मिनल ऐप को छोड़ने के थोड़ी देर बाद सस्पेंड कर देता है। लौटने पर mosh ठीक हो जाता है, लेकिन बैकग्राउंड में रहते ऐप आपके लिए सेशन पर नज़र नहीं रख सकता।
  • कॉपी और पेस्ट। tmux, mosh और फ़ोन टर्मिनल के पार टेक्स्ट चुनना तकलीफ़देह है। लंबे URL, जैसे लॉगिन लिंक, सबसे बुरे हैं।
  • कई सर्वर, कई एजेंट। हर नई मशीन का मतलब है एक और Tailscale नोड, एक और होस्ट एंट्री और याद रखने के लिए एक और tmux लेआउट।

इनमें से कुछ भी इस स्टैक से बचने की वजह नहीं है। यह मुफ़्त है, हर एजेंट के साथ काम करता है, और हर हिस्सा आपके नियंत्रण में है। बस यह जानने की वजह है कि आप किस चीज़ के लिए हाँ कह रहे हैं। SSH टर्मिनल ऐप और Maude की हमारी तुलना इस समझौते को विस्तार से देखती है।

या इसी के लिए बना ऐप इस्तेमाल करें

एजेंट के काम के लिए Maude क्लाइंट और सेशन वाली परतों की जगह ले लेता है। सर्वर पर एक छोटा daemon सेशन का मालिक होता है, इसलिए वे बिना tmux के चलते रहते हैं, और ऐप उन्हें चैट के रूप में दिखाता है — tool कार्ड, diff, “अनुमति दें / अस्वीकार करें” वाले पुश नोटिफ़िकेशन और एक इनबॉक्स के साथ। आप Tailscale रख सकते हैं: Maude, tailnet और LAN सर्वरों के साथ काम करता है क्योंकि सर्वर बाहर की ओर Maude के रिले से जुड़ता है, और SSH बैकअप रहता है। और जब आपको शेल चाहिए, तो हर सेशन में एक असली टर्मिनल है। यह Claude Code, Codex, OpenCode, Grok Build और Antigravity के साथ काम करता है।

अक्सर पूछे जाने वाले सवाल

Claude Code के लिए tmux या screen?
दोनों सेशन को ज़िंदा रखते हैं, लेकिन tmux बेहतर विकल्प है: Anthropic, Claude Code को चाहिए tmux सेटिंग्स (allow-passthrough और extended-keys) का दस्तावेज़ देता है, इसे बाँटना और स्क्रिप्ट करना आसान है, और ज़्यादातर फ़ोन-टर्मिनल गाइड इसी को मानकर चलती हैं।
क्या Tailscale के साथ भी mosh चाहिए?
दोनों अलग समस्याएँ हल करते हैं। Tailscale आपको एक स्थिर निजी पता देता है और कोई खुला पोर्ट नहीं; उस पर आपका SSH कनेक्शन फिर भी टूटता है जब फ़ोन नेटवर्क बदलता है या कुछ देर स्लीप में रहता है। mosh यह झेल लेता है। अगर आप ज़्यादातर स्थिर Wi-Fi से कनेक्ट करते हैं, तो Tailscale पर SSH और tmux काफ़ी हैं।
Claude Code के लिए सबसे अच्छा iOS टर्मिनल कौन-सा है?
iPhone और iPad पर Blink Shell सबसे ज़्यादा mosh-केंद्रित विकल्प है, और Termius से शुरुआत करना सबसे आसान है (मुफ़्त टियर, क्रॉस-प्लेटफ़ॉर्म)। दोनों Tailscale के साथ चलते हैं। जो भी चुनें, Esc, Ctrl और Shift+Tab के लिए एक अतिरिक्त कुंजी पंक्ति सेट करें।
क्या mosh के लिए मुझे पोर्ट खोलने होंगे?
सार्वजनिक IP पर, हाँ: UDP 60000–61000। Tailscale tailnet पर, नहीं — ट्रैफ़िक tailnet के अंदर चलता है और इंटरनेट पर कुछ भी एक्सपोज़ नहीं करना पड़ता।
क्या Tailscale SSH, Mac mini सर्वर पर चलता है?
Tailscale के दस्तावेज़ों के अनुसार सिर्फ़ macOS पर ओपन-सोर्स tailscale/tailscaled CLI बिल्ड के साथ। सामान्य ऐप के साथ, इसके बजाय tailnet पर Mac का सामान्य SSH सर्वर इस्तेमाल करें।

फ़ोन पर TUI से छुटकारा

अपना सर्वर और tailnet रखें, बस टर्मिनल की जगह एजेंट के लिए बना ऐप लें। iOS और Android।

Download Maude on the App Store Get Maude on Google Play