ফোন থেকে Claude Code কীভাবে ব্যবহার করবেন
Claude Code ফোনে নয়, VPS-এর tmux session-এ চলে। SSH keys, দুর্বল mobile data-তে mosh, tmux attach এবং জরুরি keyboard fixes দিয়ে নির্ভরযোগ্যভাবে কাজ করুন।
আপনার ফোন থেকে Claude Code: এটি আসলে যেভাবে কাজ করে
এই নির্দেশিকায় আপনার ফোনে একটি terminal app ব্যবহার করা হয়। Claude Code একটি VPS (virtual private server)-এর ভেতরে খোলা থাকা tmux session-এ চলে। আপনি যতক্ষণ session-টি দেখছেন, আপনার ফোন সেই session-এর সঙ্গে SSH (secure shell) connection খোলা রাখে। app বন্ধ করলেও agent কাজ চালিয়ে যায়, কারণ process-টি কখনো ফোনে চলেনি।
Claude Code-এ Remote Control-ও আছে: কোনো session-এর ভেতরে /remote-control চালালে process server-এ চলতে থাকে, আর আপনি Claude mobile app বা browser-এর মাধ্যমে সেটি ব্যবহার করতে পারেন।
এই বিভাজনই পুরো নকশার ভিত্তি। আপনি কোনো app থেকে সরে গেলে ফোনের operating system কয়েক সেকেন্ডের মধ্যে সেটিকে suspend করে। তাই ফোনে শুরু করা দীর্ঘ job বন্ধ হয়ে যায়। আপনি wifi থেকে mobile data-তে গেলে ফোনটি আবার নতুন network address-ও পায়। Process server-এ চালালে এবং ফোনে শুধু screen দেখালে এই দুই সমস্যাই দূর হয়।
Server-এ আপনার চারটি জিনিস দরকার: session ধরে রাখার জন্য tmux, প্রবেশের জন্য SSH keys, network পরিবর্তনের জন্য mosh এবং Claude Code নিজে। ফোনের পাশে এমন একটি terminal app দরকার, যেখানে সহজে পৌঁছানো যায় এমন key row আছে।
VPS-এ যা প্রয়োজন
SSH এবং tmux ব্যবহারের জন্য একটি ছোট Ubuntu 24.04 সার্ভারই যথেষ্ট। Claude Code-এর জন্য আরও বেশি সংস্থান প্রয়োজন। October 2026 অনুযায়ী অফিসিয়াল প্রয়োজনীয়তা হলো x64 বা ARM64 processor-সহ Ubuntu 20.04 বা তার পরের সংস্করণ এবং 4 GB বা তার বেশি RAM। Claude Code ব্যবহারের জন্য paid Claude account (Pro, Max, Team বা Enterprise), API access-সহ একটি Console account, অথবা Amazon Bedrock-এর মতো supported cloud provider-এর মাধ্যমে access প্রয়োজন, কারণ free Claude.ai plan-এ এটি অন্তর্ভুক্ত নয়।
সার্ভারটি root হিসেবে নয়, sudo-সক্ষম সাধারণ user হিসেবে প্রস্তুত করুন। সার্ভারটি নতুন হলে আগে নতুন VPS-এ প্রথম দশ মিনিটের কাজ সম্পন্ন করুন। কারণ user এবং firewall তৈরি হয়ে গেলে এই নির্দেশিকার পরের SSH পরিবর্তনগুলো করা সহজ হয়।
sudo apt update && sudo apt install -y tmux mosh
curl -fsSL https://claude.ai/install.sh | bash
claude --versionInstaller binary-টি ~/.local/bin/claude-এ রাখে, এবং claude --version 2.1.211 (Claude Code)-এর মতো একটি line দেখায়। যদি command not found প্রদর্শিত হয়, তাহলে ওই directory এখনও আপনার PATH-এ নেই। logout করে আবার login করুন, তারপর command -v claude দিয়ে পরীক্ষা করুন। claude doctor session শুরু না করেই installation এবং settings-এর diagnostic তথ্য দেখায়।
এখন ফোনের ওপর নির্ভর করার আগে laptop থেকে একবার login করুন। একটি project directory-তে claude চালিয়ে login prompt অনুসরণ করুন। এই প্রক্রিয়ায় browser-এ একটি URL খুলে একটি code terminal-এ ফিরিয়ে দিতে হয়। ফোনের screen-এ দুটি app পরিবর্তন করে কাজটি করা ধীরগতির। তাই একবার সরাসরি keyboard ব্যবহার করে কাজটি করুন; credentials server-এ সংরক্ষিত থাকবে।
SSH সংযোগ বিচ্ছিন্ন হলেও Claude Code বন্ধ না হওয়ার জন্য এটি tmux-এর মধ্যে চালান
tmux new -s claude
cd ~/projects/api
claudeCtrl-b দিয়ে detach করুন, তারপর d চাপুন। tmux [detached (from session claude)] দেখিয়ে আপনাকে shell-এ ফিরিয়ে দেবে। এখন অ্যাপ বন্ধ করুন, সংযোগ বিচ্ছিন্ন করুন, অথবা ফোনটি পকেটে রাখুন। pane-এর প্রক্রিয়া চলতে থাকবে।
tmux ls
tmux attach -t claudetmux 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-এর child process নয়; এগুলো tmux server-এর child process। SSH সংযোগ শেষ হলে kernel ওই সংযোগের সঙ্গে যুক্ত process-গুলোকে hangup signal, SIGHUP, পাঠায়। tmux server সেই process-গুলোর মধ্যে থাকে না। tmux ছাড়া যে screen lock আপনার সংযোগ বিচ্ছিন্ন করে, সেটিই Claude Code-কে tool call চলার মাঝখানে বন্ধ করে দেয়। tmux-এর মধ্যে VPS-এ Claude Code চালানো-তে session layout আরও বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে।
tmux সার্ভারে চালান, ফোনে নয়। আপনি ইতিমধ্যে যুক্ত থাকা session-এর ভিতরে tmux টাইপ করলে sessions should be nested with care, unset $TMUX to force দেখাবে। জোর করে চালালে কোন prefix key ব্যবহার হবে, তা নিয়ে দুটি prefix key-এর মধ্যে দ্বন্দ্ব তৈরি হবে।
প্রতিটি লগইনে স্বয়ংক্রিয়ভাবে সংযুক্ত করুন
টাচ কিবোর্ডে attach command টাইপ করতে করতে বিরক্তি আসে। সার্ভারে ~/.profile-এর শেষে এটি যোগ করুন:
if command -v tmux >/dev/null 2>&1 && [ -z "$TMUX" ] && [ -t 1 ]; then
exec tmux new-session -A -s claude
finew-session -A -s claude থাকলে claude নামের session-এ সংযুক্ত করে, আর না থাকলে session তৈরি করে। তাই একই command দুই পরিস্থিতিই সামলায়। exec login shell-কে tmux দিয়ে প্রতিস্থাপন করে। ফলে tmux থেকে বের হলে bare prompt-এ না গিয়ে connection বন্ধ হয়। কখনও সাধারণ shell প্রয়োজন হলে file-টি এড়িয়ে যান: ssh you@server -t "bash --noprofile"।
এটি ~/.profile-এ রাখুন, ~/.bashrc-এ নয়। non-interactive SSH command-এর জন্য Bash ~/.bashrc-ও পড়ে। তবে উপরের [ -t 1 ] guard file transfer চলাকালে এই block-কে tmux চালু করা থেকে বিরত রাখে। Output প্রিন্ট করা guard-বিহীন startup command Received message too long-এর মতো error দিয়ে transfer protocol নষ্ট করে। ~/.profile শুধু login shell-এর জন্য চলে, আর interactive SSH session-এর ক্ষেত্রে এটিই প্রয়োজন।
Ubuntu PATH-এ ~/.local/bin যোগ করতেও ~/.profile ব্যবহার করে। login-এর ঠিক পরেই claude কাজ করলেও tmux-এর ভেতরের shell-এ command not found দেখা গেলে, এর কারণ হলো এই ক্রম। তাই profile এড়িয়ে যাওয়া কোনো script থেকে নয়, উপরের মতো login shell থেকেই tmux চালু করুন।
iOS: Termius অথবা Blink Shell
দুটি অ্যাপই SSH এবং mosh সমর্থন করে এবং উভয় অ্যাপেই key সংরক্ষণ করা যায়। পার্থক্যটি interface-এ।
Blink Shell command-driven। এর prompt-এ `ssh you@server বা mosh you@server লিখুন। এটি desktop terminal-এর মতো একই syntax ব্যবহার করে। config` লিখলে settings খোলে, আর Keys section থেকে একটি key pair তৈরি করা যায়।
Termius form-driven। একটি host entry পূরণ করুন। এরপর host details-এ সেই host-এর protocol SSH থেকে Mosh-এ পরিবর্তন করুন। Termius নিজস্ব mosh implementation সরবরাহ করে এবং mosh 1.3.0 বা পরবর্তী version সমর্থন করে। তাই server-এ `mosh` package ইনস্টল করা থাকতে হবে।
উভয় ক্ষেত্রেই app-এর ভেতরে key তৈরি করুন। বিদ্যমান private key কখনও phone-এ copy করবেন না। app আপনাকে public half দেখাবে। এটিই একমাত্র line, যা server-এর `~/.ssh/authorized_keys`-এ যোগ করতে হবে। প্রতিটি device-এর SSH key এবং একটি key বাতিল করার পদ্ধতি-এ naming এবং revoke ধাপ ব্যাখ্যা করা হয়েছে। এই বিষয়টি laptop-এর তুলনায় phone-এর ক্ষেত্রে বেশি গুরুত্বপূর্ণ।
terminal app-এর নিজস্ব biometric বা passcode lock চালু করুন। এটি না থাকলে screen জেগে থাকা পর্যন্ত unlocked phone আপনার server-এ একটি উন্মুক্ত shell হিসেবে কাজ করবে।
Android: Termux
pkg upgrade
pkg install openssh mosh
ssh-keygen -t ed25519 -C "pixel"
cat ~/.ssh/id_ed25519.pubTermux নিজস্ব repository-তে OpenSSH এবং mosh package সরবরাহ করে। তাই ssh, ssh-keygen এবং mosh desktop-এর মতোই কাজ করে। প্রদর্শিত public key line-টি server-এর ~/.ssh/authorized_keys-এ যোগ করুন। এরপর mosh you@server দিয়ে সংযোগ করুন।
Android-এর on-screen keyboard-এ Esc key এবং Ctrl key নেই। Claude Code-এর দুটিই প্রয়োজন। Termux নিজস্ব key row দেখাতে পারে। ~/.termux/termux.properties-এ একটি line যোগ করুন:
extra-keys = [['ESC','|','/','HOME','UP','END','PGUP'],['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]এরপর termux-reload-settings চালান। Keyboard-এর উপরে row-টি দেখা যাবে। একই reload-এর সময় ~/.termux/font.ttf-এ রাখা monospace TrueType font-ও লোড হবে।
Termux background-এ থাকলে Android সেটি বন্ধ করে দিতে পারে। এই ক্ষেত্রে reconnect করা ছাড়া আপনার আর কিছু হারাবে না। Session এবং agent server-এ চলছে।
টার্মিনাল থেকে Wi‑Fi বিচ্ছিন্ন হলে এটি কেন স্থির হয়ে যায়, এবং mosh কী ঠিক করে?
একটি SSH সংযোগ হলো TCP (transmission control protocol) সংযোগ। একটি TCP সংযোগকে উভয় প্রান্তের address এবং উভয় port শনাক্ত করে। Wi‑Fi-এর range-এর বাইরে গেলে ফোনটি mobile network থেকে নতুন address পায়। ফলে পুরোনো সংযোগটি আর কোনো প্রান্তের সঙ্গে মেলে না। এ বিষয়ে কোনো notification আসে না। TCP timeout হওয়া পর্যন্ত terminal শুধু আর সাড়া দেয় না। এরপর ssh client_loop: send disconnect: Broken pipe দেখায়। স্থির হয়ে যাওয়া session সঙ্গে সঙ্গে বন্ধ করতে Enter, তারপর ~, তারপর . চাপুন।
mosh (mobile shell) এই ব্যর্থতার ধরনটি সরিয়ে দেয়। এটি একবার SSH ব্যবহার করে login করে এবং একটি mosh-server process চালু করে। এরপর server যে UDP (user datagram protocol) port বেছে নিয়েছে, সেটি পড়ে নিয়ে SSH সংযোগ বন্ধ করে। তারপর দুই প্রান্ত একটি shared session key দিয়ে authenticated UDP datagram বিনিময় করে। তাই session-টি আপনার address দিয়ে নয়, ওই key দিয়ে শনাক্ত হয়। নতুন address পেলেও session চলতে থাকে। mosh আপনার টাইপ করা অক্ষর স্থানীয়ভাবে echo করে এবং server-এর অবস্থার সঙ্গে অমিল হলে screen পুনরায় আঁকে। এই কারণে ধীর mobile link-এও এটি ব্যবহারযোগ্য থাকে।
mosh 60000 থেকে 61000-এর মধ্যে একটি UDP port ব্যবহার করে। তাই এই range খুলুন:
sudo ufw allow 60000:61000/udp
sudo ufw statusufw দিয়ে port খোলা-তে firewall-এর বাকি configuration দেওয়া আছে। আপনার provider-এর control panel-এ আলাদা network firewall থাকলে সেখানেও একই range যোগ করুন। কারণ machine-এর সামনে থাকা filter-এ ufw rule প্রভাব ফেলতে পারে না।
mosh-এর দুটি failure সাধারণ। Login সফল হওয়ার পর Nothing received from server on UDP port 60001. দেখিয়ে ঝুলে থাকলে এর অর্থ mosh-server শুরু হয়েছে, কিন্তু client ওই UDP port-এ পৌঁছাতে পারছে না। সাধারণত phone এবং server-এর মাঝখানে কোনো firewall mosh range-এর UDP block করছে। কোনো connection mosh-server not found জানালে server-এ package অনুপস্থিত, অথবা login-এর PATH-এ সেটি নেই। এটি install করুন, অথবা mosh --server=/usr/bin/mosh-server you@server দিয়ে সরাসরি তার অবস্থান নির্দিষ্ট করুন।
server-এর login locale UTF-8 না হলে mosh-server client থেকে পাঠানো locale settings ব্যবহার করে আবার পরীক্ষা করে। সেখান থেকেও UTF-8 না পেলে তবেই এটি চলতে অস্বীকার করে এবং mosh-server needs a UTF-8 native locale to run. জানায়। আগে server-এর locale ঠিক করুন।
locale
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8উভয় প্রান্তে UTF-8 locale প্রয়োজন। এছাড়া mosh-server client পাঠানো locale settings-ও প্রয়োগ করে। server ঠিক করার পরও error থাকলে phone-এর terminal app-এ LANG-কে UTF-8 value-তে সেট করুন। mosh-এর নিজস্ব FAQ-তে উল্লেখ আছে যে mosh-client-এরও এটি প্রয়োজন হতে পারে।
mosh দুটি কাজ করে না। এর README অনুযায়ী mosh X forwarding বা SSH-এর non-interactive ব্যবহার সমর্থন করে না। এর মধ্যে port forwarding-ও আছে। তাই Claude Code সদ্য চালু করা web app preview করতে এখনও সাধারণ ssh -L 8080:127.0.0.1:8080 you@server দরকার। mosh শুধু দৃশ্যমান screen synchronise করে। তাই এর নিজস্ব scrollback নেই। এখানে এই সীমাবদ্ধতার কোনো সমস্যা হয় না, কারণ tmux scrollback ধরে রাখে: Ctrl-b, তারপর [ চাপলে copy mode চালু হয়; drag বা arrow key দিয়ে scroll করা যায়; এবং q চাপলে copy mode থেকে বের হওয়া যায়।
ফোনের স্ক্রিন ব্যবহারযোগ্য করুন
সার্ভারে ~/.tmux.conf-এর চারটি লাইনই বেশিরভাগ কাজ করে:
set -g mouse on
set -g status-position top
set -g default-terminal "tmux-256color"
set -g history-limit 20000mouse on টাচ করে টানাকে scroll এবং tap-কে pane বা window নির্বাচন হিসেবে গণ্য করে। ফলে টাইপ করতে অসুবিধাজনক prefix key-এর বেশিরভাগ আর দরকার হয় না। status-position top tmux status line-কে নিচের প্রান্ত থেকে সরিয়ে দেয়, কারণ on-screen keyboard ও তার suggestion bar সেখানে সেটি ঢেকে ফেলে। default-terminal tmux যে terminal name Claude Code-কে জানায়, সেটি নির্দিষ্ট করে দেয়। এই লাইন না থাকলে tmux তার build যে নাম নির্বাচন করেছে, সেটিই জানায়। tmux 3.4-এর configure script screen থেকে শুরু করে, তারপর ক্রমানুসারে screen-256color, tmux এবং tmux-256color পরীক্ষা করে। কোনো পরীক্ষা ব্যর্থ হলে আগের নির্বাচনই রাখা হয়। তাই যে build tmux-256color terminfo entry খুঁজে পায়নি, সেটি tmux, screen-256color অথবা সাধারণ screen-এ গিয়ে শেষ হতে পারে। এর ফলে রং এবং box drawing প্রয়োজনের তুলনায় খারাপভাবে প্রদর্শিত হতে পারে।
চারটি key শিখলেই বাকি ব্যবহার আরামদায়ক হয়।
EscClaude-এর মাঝপথের response থামায় এবং ইতিমধ্যে সম্পন্ন কাজ রেখে দেয়। তাই এটি আপনার thumb-এর সবচেয়ে কাছের key হওয়া উচিত।Ctrl+Cচলমান operation-ও থামায়। Idle prompt-এ প্রথম press input মুছে দেয় এবং দ্বিতীয় press Claude Code থেকে বের করে। তাই এটি তুলনামূলকভাবে বেশি কঠোর বিকল্প।Escদুইবার চাপলে draft prompt মুছে যায়। Empty prompt-এ এটি বদলে rewind menu খোলে।- Multi-line prompt-এর জন্য
\টাইপ করে Enter চাপুন। এই পদ্ধতি সব terminal-এ কাজ করে। Shift+Enter কেবল অল্প কয়েকটি desktop terminal-এ native। Mobile client-গুলো সেই তালিকায় নেই।
Split pane এড়িয়ে চলুন। Portrait অবস্থায় ফোনের প্রস্থ প্রায় 40 columns হয়। তাই vertical split করলে প্রতিটি pane-এ 20 columns থাকে এবং প্রতিটি diff অতিরিক্ত line wrap হয়ে পড়া কঠিন হয়ে যায়। এর বদলে tmux window ব্যবহার করুন: Ctrl-b c একটি window তৈরি করে এবং Ctrl-b n পরেরটিতে যায়। দ্বিতীয় window-তে আলাদা Claude Code session চালু হলে দুইটি session সরাসরি একে অন্যের কাছে কাজ পাঠাতে পারে, ফলে touchscreen-এ window-এর মধ্যে text copy করতে হয় না। Diff ঠিকভাবে পড়তে হলে ফোনটি পাশ ফিরিয়ে ধরুন।
এই screen-এ কতটা text দেখাবে, তা ইচ্ছাকৃতভাবে নির্ধারণ করা ভালো। কারণ একটি output style প্রতিটি reply-এর পেছনে থাকা system prompt সম্পাদনা করে, এবং সংক্ষিপ্ত output style ব্যবহার করলে ফোনে কম screenful scroll করতে হয়।
ছোট screen-এ দীর্ঘ session মূলত context-এর সমস্যা। তাই train থেকে পুরো দিনের কাজ চালানোর চেষ্টা করার আগে Claude Code context window পরিচালনা করা পড়ে নেওয়া উপকারী।
শুধু key ব্যবহার করুন, password নয়
ফোনে এখন এমন একটি machine-এর key আছে, যেটি আপনার code সম্পাদনা করে এবং command চালায়। 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/00-phone.conf >/dev/null <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
EOF
sudo sshd -t && sudo systemctl reload sshDrop-in file-গুলো filename-এর ক্রম অনুযায়ী পড়া হয়। sudo sshd -T-এ passwordauthentication no, kbdinteractiveauthentication no, pubkeyauthentication yes এবং permitrootlogin no আছে কি না পরীক্ষা করুন; এগুলোর কোনো একটি সেট করা আগের file থাকলে সেটিই অগ্রাধিকার পায় এবং সেখানেই সংশোধন করতে হবে।
sshd -t configuration parse করে এবং configuration সঠিক হলে কিছুই print করে না। এটি বাদ দিলে একটি typo-এর কারণে reload-এর সময় sshd ব্যর্থ হবে। বর্তমান working session খোলা রাখুন এবং কিছু বন্ধ করার আগে দ্বিতীয় connection থেকে পরীক্ষা করুন, কারণ ভুল key দিলে এখন Permission denied (publickey). পাবেন এবং password বন্ধ থাকায় কোনো fallback থাকবে না। তখন recovery করার উপায় হলো আপনার provider-এর console। পরীক্ষামূলক connection ব্যর্থ হলে, প্রথম session খোলা থাকা অবস্থায় ssh -v দিয়ে আবার connect করুন এবং সমস্যা সমাধান করুন, কারণ ওই একটি error message পাঁচটি আলাদা fault বোঝাতে পারে এবং verbose output-এ কোন fault হয়েছে তা দেখা যায়।
প্রতিটি device-এর জন্য আলাদা key দিন। ফোন হারালে ~/.ssh/authorized_keys থেকে একটি line মুছে দিলেই হবে, আর আপনার laptop কাজ করতে থাকবে। একই key সবার জন্য ব্যবহার করলে আপনার মালিকানাধীন প্রতিটি device-এ key পরিবর্তন করতে হবে।
Ubuntu 24.04-এ SSH অন্য port-এ সরালে মনে রাখুন, listener-এর মালিক হলো ssh.socket। আপনার SSH config-এর Port line থেকে একটি systemd generator ওই socket তৈরি করে। তাই আপনার ListenStream override প্রয়োজন নেই। তবে শুধু ssh restart করলে server port 22-এ listening করতে থাকবে। একটি drop-in-এ Port line রাখুন, নতুন port-টি ufw-তে অনুমোদন করুন, তারপর sudo systemctl daemon-reload এবং তার পরে sudo systemctl restart ssh.socket চালান। VPS-এ SSH hardening-এ এই বিষয় এবং বাকি attack surface সম্পর্কে আলোচনা আছে।
SSH-এর জন্য fail2ban password বন্ধ করার পরে খুব বেশি security যোগ করে না, কারণ অনুমান করা password কোনোভাবেই গ্রহণ করা যায় না। তবে এটি log শান্ত রাখে, ফলে প্রকৃত login attempt সহজে শনাক্ত করা যায়।
আরও শক্তিশালী ব্যবস্থা হলো SSH-কে public internet থেকে দূরে রাখা। server-কে নিজে পরিচালিত একটি WireGuard VPN-এর পেছনে রাখুন, প্রয়োজন হলে ফোনে tunnel চালু করুন, এবং tunnel-এর জন্যই শুধু sshd-তে ListenAddress দিন। উভয় দিক UDP ব্যবহার করায় mosh tunnel-এর ওপর কাজ করে। একটি বিষয় মনে রাখুন: tunnel packet overhead যোগ করে। তাই বড় transfer আটকে গেলে ফোনের WireGuard config-এ MTU (maximum transmission unit) কমিয়ে দিন।
এইভাবে কাজ করার বিষয়ে শেষ একটি বিষয় আছে। ফোন থেকে আপনি এমন একটি screen-এ permission prompt অনুমোদন করেন, যেখানে একবারে diff-এর কয়েকটি line দেখা যায়। তাই guardrail বন্ধ করার বদলে সেগুলো চালু রাখাই উচিত। আপনার session কোন permission mode-এ শুরু হয় সেটিও পরীক্ষা করুন, কারণ Claude Code v2.1.283 থেকে interactive terminal session-এর built-in starting mode হলো auto mode এবং এটি থেমে অনুমতি না চেয়েই working directory-তে file edit করে। VPS-এ Claude Code নিরাপদে চালানো অংশে আপনার প্রধান প্রবেশপথ touchscreen হওয়ার আগে নির্ধারণযোগ্য user ও directory সীমা আলোচনা করা হয়েছে।
পুনরায় attach করার পরে কিছু ভুল থাকলে
tmux attach printing no server running on /tmp/tmux-1000/default দেখালে তার অর্থ, ওই socket-এ tmux কোনো server খুঁজে পায়নি। সাধারণত server আর নেই। প্রায় সব ক্ষেত্রেই এর অর্থ machine reboot হয়েছে। uptime দিয়ে পরীক্ষা করুন। machine reboot না হয়ে থাকলেও pgrep tmux-এ server দেখালে, শুধু এটুকু দেখে socket file মুছে গেছে বলা যায় না, কারণ -L এবং -S flag ব্যবহার করে server অন্য socket-এ listen করতে পারে। আপনি এগুলোর কোনো একটি দিয়ে tmux চালু করে থাকলে tmux attach-এর সঙ্গে একই flag দিন। socket সত্যিই ভুলবশত মুছে গেলে pkill -USR1 tmux server-কে সেটি পুনরায় তৈরি করতে বলে। তবে tmux manual অনুযায়ী, কোনো parent directory অনুপস্থিত থাকলে এটি ব্যর্থ হয়। automatic security updates থেকে আসা kernel update কার্যকর করতে reboot প্রয়োজন। তবে Unattended-Upgrade::Automatic-Reboot enabled থাকলেই unattended-upgrades স্বয়ংক্রিয়ভাবে reboot করে; এর default হলো false। reboot হওয়া machine-এ কোনো tmux session থাকে না। তাই যেকোনো Claude Code run-কে পুনরায় শুরু করতে পারবেন—এমন run হিসেবে বিবেচনা করুন।
can't find session: claude আলাদা বিষয়। tmux server চলছে, কিন্তু ওই নামে কোনো session নেই। বর্তমানে কী আছে তা tmux ls দেখায়।
আপনি attach করে Claude Code যেখানে চলছিল সেখানে যদি সাধারণ shell prompt দেখতে পান, তাহলে session শেষ হয়নি; process শেষ হয়ে গেছে। dmesg -T | tail-এ Out of memory: Killed process 4821 (claude)-এর মতো কোনো line আছে কি না দেখুন। এটি out-of-memory kill নিশ্চিত করে। prompt-এর উপরে shell-এর scrollback-এ অন্য কোনো exit message আছে কি না পরীক্ষা করুন।
কোনো window ভুল size-এ ফিরে এলে, edge-এ কেটে গেলে বা চারপাশে অব্যবহৃত space থাকলে, তার অর্থ হলো দুটি client ভিন্ন size-এ attached আছে। default হিসেবে tmux 3.4 সবচেয়ে সাম্প্রতিক activity-যুক্ত client-এর আকার অনুযায়ী window-এর size নির্ধারণ করে (window-size latest)। তাই 200 columns wide অবস্থায় এখনও attached থাকা laptop এবং 40 columns-এর phone পালা করে window-এর size পরিবর্তন করে। attach করার সময় অন্য client-গুলো detach করুন: tmux attach -d -t claude।
FAQ
আমি কি VPS-এ না চালিয়ে ফোনেই Claude Code চালাতে পারি?
Android বা iOS-এ terminal CLI সমর্থিত নয়। October 2026 অনুযায়ী সমর্থিত platform হলো macOS, Windows, Ubuntu 20.04 বা পরবর্তী সংস্করণ, Debian 10 বা পরবর্তী সংস্করণ এবং Alpine 3.19 বা পরবর্তী সংস্করণ; এছাড়া 4 GB বা তার বেশি RAM প্রয়োজন। Android এবং iOS এই তালিকায় নেই। ফোনের app-গুলো sleep করে এবং network address নিয়মিত পরিবর্তন করে, যা দীর্ঘ agent run-এর জন্য উপযুক্ত নয়। এটি একটি server-এ চালান এবং ফোনকে display হিসেবে ব্যবহার করুন।
আমি app বন্ধ করলে বা signal হারালে কি session চালু থাকে?
হ্যাঁ, এবং এই কাজটি দুটি আলাদা উপাদান করে। tmux server-এ process চালু রাখে, তাই connection শেষ হলেও কিছু বন্ধ হয় না। mosh address পরিবর্তনের পরও connection চালু রাখে, তাই wifi থেকে mobile data-তে switching করলেও আবার connect করতে হয় না। tmux ছাড়া সাধারণ SSH ব্যবহার করলে connection বিচ্ছিন্ন হওয়ার সময় SIGHUP পাঠানো হয় এবং Claude Code মাঝপথে কাজ বন্ধ করে।
mosh connect করার পর কিছু দেখায় না কেন?
Login সফল হওয়ার পর Nothing received from server on UDP port 60001. দেখিয়ে কাজ থেমে থাকলে এর অর্থ হলো client ওই UDP port-এ mosh-server-এ পৌঁছাতে পারছে না। সাধারণত firewall UDP 60000 থেকে 61000 পর্যন্ত port block করে রাখে। ufw-তে এই range যোগ করুন। এরপর আপনার provider-এর network firewall-এও এটি যোগ করুন, কারণ অধিকাংশ panel-এ এটি আলাদা নিয়ন্ত্রণব্যবস্থা। mosh যদি mosh-server পাওয়া যায়নি বলে জানায়, তাহলে server-এ package ইনস্টল করা নেই অথবা তার login PATH-এ এটি অন্তর্ভুক্ত নেই। sudo apt install mosh দিয়ে এটি install করুন, অথবা mosh --server=/usr/bin/mosh-server you@server ব্যবহার করুন।
Esc key না থাকা keyboard থেকে Claude Code কীভাবে interrupt করব?
একটি key row যোগ করুন। Termux-এ ~/.termux/termux.properties-এ extra-keys ব্যবহার করে এটি configure করা যায়। Termius এবং Blink উভয়েই settings-এ edit করার জন্য একটি row দেয়। Esc চলমান response interrupt করে এবং ইতিমধ্যে সম্পন্ন কাজ রেখে দেয়। Ctrl+C-ও interrupt করে, কিন্তু idle prompt-এ এটি দুবার চাপলে Claude Code বন্ধ হয়ে যায়। তাই প্রথমে Esc ব্যবহার করুন।
Internet-এর জন্য SSH খোলা কি যথেষ্ট নিরাপদ?
Password authentication বন্ধ থাকলে সফলভাবে authenticate করার একমাত্র credential হলো এমন একটি key, যা আপনার device-এর বাইরে যায় না। Rebuild করা যায় এমন একটি machine-এর ক্ষেত্রে এটি যুক্তিসংগত ঝুঁকি। প্রতিটি device-এর জন্য আলাদা key দিন, যাতে ফোন হারালে authorized_keys-এ শুধু একটি line সরাতে হয়। Public port-এ কোনো service চালু রাখতে না চাইলে box-টিকে WireGuard-এর পেছনে রাখুন এবং tunnel address-এ sshd listen করান।