ফোন থেকে Hermes agent-এ পৌঁছানোর নিরাপদ উপায়
VPS-এ চলা Hermes agent ফোনে ব্যবহার করুন private mesh network, TLS ও login-সহ public HTTPS endpoint বা SSH দিয়ে। ফোন হারালে access কীভাবে revoke করবেন, তাও জানুন।
আপনার ফোন থেকে Hermes agent-এ পৌঁছানোর তিনটি উপায়
আপনার ফোন থেকে Hermes agent-এ পৌঁছাতে এর web dashboard ব্যবহার করুন। আসল সিদ্ধান্ত হলো, dashboard-এর সামনে কী থাকবে। প্রথম বিকল্প হলো একটি private mesh network। এতে dashboard শুধু একটি Tailscale address-এ listen করে এবং কোনো port Internet-এর দিকে উন্মুক্ত থাকে না। দ্বিতীয় বিকল্প হলো TLS (transport layer security) ও login-সহ reverse proxy-এর পেছনে একটি public endpoint। এখানে সেই login-ই আপনার server-এর terminal-এ প্রবেশাধিকার রক্ষার একমাত্র ব্যবস্থা। তৃতীয় বিকল্প হলো terminal app থেকে SSH (secure shell) ব্যবহার করা। এতে setup সবচেয়ে কম লাগে, কিন্তু সবচেয়ে বেশি access দেওয়া হয়।
এই guide শুরু হচ্ছে নিজের VPS-এ Hermes agent চালানো যেখানে শেষ হয়েছে, সেখান থেকে। agent ইনস্টল করা আছে, এটি command line-এ সাড়া দেয়, এবং এখন আপনি এটি আপনার ফোনে ব্যবহার করতে চান।
নিচের command-গুলো v2026.8.3 tag-এর ভিত্তিতে লেখা হয়েছে। এটি 3 August 2026-এ প্রকাশিত হয় এবং release notes-এ v0.20.0 হিসেবে চিহ্নিত করা হয়েছে। Hermes নিয়মিত নতুন release প্রকাশ করে। তাই main অনুসরণ না করে machine-টিকে একটি tag-এ pin করুন। Installer একটি commit গ্রহণ করে:
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -s -- --commit 3c27eb6234bf
hermes versionhermes version বাস্তবে কী ইনস্টল করা আছে তা দেখায়। এই পৃষ্ঠায় থাকা কোনো flag ব্যবহার করার আগে সেটির সঙ্গে tag মিলিয়ে নিন।
Repository-এ কী আছে এবং কী নেই
Hermes repository-তে কোনো iOS বা Android app নেই। Native client হলো hermes desktop (alias hermes gui), যা macOS, Windows এবং Linux-এর জন্য একটি Electron application। এটি local agent-এর পরিবর্তে remote agent-এর সঙ্গে সংযুক্ত হতে পারে: Settings-এর Gateway অংশে remote URL হিসেবে http://<server-address>:9119 সেট করুন, অথবা application চালু করার আগে HERMES_DESKTOP_REMOTE_URL=http://<server-address>:9119 export করুন। এতে দ্বিতীয় laptop ব্যবহারের সমস্যা সমাধান হয়। ফোনের জন্য এটি কোনো সমাধান দেয় না।
ফোন থেকে আপনি যে interface ব্যবহার করবেন, সেটি হলো hermes dashboard, অর্থাৎ browser interface। এটি configuration, session, cron job, skill, log এবং messaging platform পরিচালনা করে। এতে একটি terminal-ও আছে: server একটি PTY (pseudo-terminal)-এর পেছনে hermes --tui চালু করে এবং output page-এ stream করে। সরু screen-এ session switcher একটি slide-over panel-এ ভাঁজ হয়ে যায়। তাই phone-এও layout ঠিক থাকে।
ডিফল্টভাবে dashboard 127.0.0.1:9119-এ listen করে এবং server নিজেই একটি browser tab খোলে। headless VPS (virtual private server)-এ এটি কোনো কাজে আসে না। Browser ছাড়া এটি চালু করুন এবং socket পরীক্ষা করুন:
hermes dashboard --no-open
ss -lntp | grep 9119127.0.0.1:9119-এ থাকা listener-এ শুধু server থেকেই সংযোগ করা যায়। 0.0.0.0:9119-এ থাকা listener-এ machine যে যে network-এর সঙ্গে যুক্ত, সেগুলোর সবকটি থেকে সংযোগ করা যায়; public network-ও এর অন্তর্ভুক্ত। এই একটি line-ই আপনার exposure-এর মাত্রা নির্ধারণ করে। তাই অনুমান না করে line-টি পড়ে যাচাই করুন।
Option 1: Tailscale দিয়ে একটি private mesh
আপনার বিশেষ কোনো কারণ না থাকলে এই বিকল্পটি বেছে নিন। Tailscale হলো WireGuard-এর ওপর নির্মিত একটি mesh VPN (virtual private network)। আপনি যে প্রতিটি device mesh-এ যুক্ত করবেন, সেটি একটি স্থায়ী address পাবে এবং অন্য device-গুলোর সঙ্গে সরাসরি যোগাযোগ করবে। আপনার phone-ও একই mesh-এ যুক্ত হবে। তাই dashboard-এর জন্য কোনো public port-এর প্রয়োজন হবে না।
Server-এ:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
tailscale ip -4Phone-এ Tailscale app install করুন এবং একই account দিয়ে sign in করুন। এরপর server-এ tailscale status চালালে phone-টি তার name-সহ তালিকাভুক্ত হবে। এখন tailscale ip -4 যে address দেখিয়েছে, সেই address-এ dashboard bind করুন:
hermes dashboard --host 100.101.102.103 --port 9119 --no-open0.0.0.0-এর পরিবর্তে mesh address-এ bind করলে listening socket শুধু Tailscale interface-এ সক্রিয় থাকে। আপনার public IP address-এ port scan চালালে 9119-এ কিছু পাওয়া যাবে না, কারণ সেখানে কোনো কিছু listen করছে না। ফলে আপনাকে রক্ষা করার একমাত্র ব্যবস্থা আর firewall নয়। ss -lntp | grep 9119 দিয়ে আবার বিষয়টি নিশ্চিত করুন।
Bind address authentication-ও নির্ধারণ করে। এই বিষয়টি অনেকে উপেক্ষা করেন। 127.0.0.1-এ dashboard-এ কোনো login নেই। অন্য যেকোনো address-এ auth gate বাধ্যতামূলক। কোনো provider configure করা না থাকলে server start হতে অস্বীকার করে। Project-এর ভাষায়, এটি failing closed। প্রথমবার এটি interactive ভাবে চালালে তখনই username ও password সেট করার প্রস্তাব দেয়। ফলাফল ~/.hermes/.env-এ লেখা হয়:
HERMES_DASHBOARD_BASIC_AUTH_USERNAME=you
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD_HASH=scrypt$16384$8$1$...
HERMES_DASHBOARD_BASIC_AUTH_SECRET=a-long-random-stringopenssl rand -hex 32 দিয়ে সেই secret তৈরি করুন এবং এরপর আর পরিবর্তন করবেন না। এটি session cookie-তে স্বাক্ষর করে। তাই এটি পরিবর্তন করলে প্রতিটি device থেকে sign out হয়ে যাবে। একই file-এ আপনার model API key-গুলোও থাকে। তাই chmod 600 ~/.hermes/.env দিয়ে file-টির permission সীমিত রাখুন।
বিশ্বাস করার আগে mesh-এর অন্য একটি machine থেকে gate পরীক্ষা করুন:
curl -s http://100.101.102.103:9119/api/status | jq '.auth_required, .auth_providers'true-এর পরে ["basic"] দেখা গেলে gate চালু আছে এবং password provider-ই উত্তর দিচ্ছে। Project-এর নিজস্ব documentation ওই provider সম্পর্কে স্পষ্টভাবে সতর্ক করেছে: এটি trusted network বা VPN-এর জন্য তৈরি, public internet-এর দিকে উন্মুক্ত dashboard-এর জন্য উপযুক্ত নয়। Mesh-এ আপনি ঠিক এই পরিস্থিতিতেই আছেন।
Tailnet-এর ভেতরে HTTPS ব্যবহারের জন্য port-টি Tailscale-এর কাছে হস্তান্তর করুন:
sudo tailscale serve --bg localhost:9119
sudo tailscale serve statusTailscale machine-এর MagicDNS name-এর জন্য issue করা certificate দিয়ে TLS termination করে। তাই browser আর warning দেখায় না এবং session cookie-তে তার Secure flag যুক্ত হয়। প্রথমে Tailscale admin console-এর DNS page থেকে MagicDNS এবং HTTPS Certificates enable করুন। সেখানে acknowledgement-টিও পড়ুন: আপনার machine name এবং tailnet DNS name public certificate transparency ledger-এ প্রকাশিত হয়, যা যে কেউ পড়তে পারে।
এখানে প্রকৃত সীমাবদ্ধতা হলো coordination server। আপনার phone ও VPS-এর মধ্যকার traffic end to end encrypted থাকে এবং Tailscale-এর মধ্য দিয়ে যায় না। তবে কোন device mesh-এর অন্তর্ভুক্ত হবে, সেই সিদ্ধান্ত নেওয়া account আপনার hardware-এ থাকে না। এটি গুরুত্বপূর্ণ হলে নিজস্ব server-এ চালানো Tailscale control server Headscale ব্যবহার করে control plane নিজেই চালান এবং tailscale up --login-server https://headscale.example.com দিয়ে client-গুলোকে সেখানে নির্দেশ করুন। Mesh বাদ দিয়ে peer-গুলো হাতে configure করতে চাইলে সাধারণ WireGuard ও Tailscale-এর তুলনা-তে আপনি কী কী সুবিধা ত্যাগ করবেন তা ব্যাখ্যা করা হয়েছে।
বিকল্প 2: একটি public HTTPS endpoint এবং এর ভেতরের ফাঁদ
কখনও mesh available থাকে না। কোনো work phone-এ VPN client install করার অনুমতি নাও থাকতে পারে। তখন dashboard-কে reverse proxy-এর পেছনে রাখুন। Dashboard-কে loopback-এ রাখুন এবং certificate পরিচালনার দায়িত্ব Caddy-কে দিন:
hermes.example.com {
reverse_proxy 127.0.0.1:9119
}Caddy নিজে certificate সংগ্রহ ও renewal করে। এর reverse_proxy কোনো অতিরিক্ত directive ছাড়াই WebSocket upgrade pass through করে, যা dashboard-এর embedded terminal-এর জন্য প্রয়োজনীয়। nginx-এ Upgrade এবং Connection header নিজেকেই যোগ করতে হবে। nginx-এ Certbot দিয়ে Let's Encrypt certificate issue করা এই কাজের TLS অংশটি ব্যাখ্যা করে। Login callback যেন সঠিক host-এ নির্দেশ করে, সে জন্য Hermes-কে তার public name জানান:
dashboard:
public_url: "https://hermes.example.com"এখন ফাঁদটি দেখুন। Auth gate অনুরোধটি যে address থেকে এসেছে তার ওপর নয়, bind address-এর ওপর নির্ভর করে। 127.0.0.1-এ bind করা dashboard proxy-এর পেছনে loopback দেখতে পায়, login প্রয়োজন নেই বলে ধরে নেয় এবং proxy যাকে যেতে দেয় তাকেই dashboard পরিবেশন করে। আপনি আসলে কী public করেছেন তা পরীক্ষা করুন:
curl -s https://hermes.example.com/api/status | jq '.auth_required'এতে যদি false দেখায়, তাহলে আপনার server-এর terminal-এ internet থেকে মাত্র একটি URL দূরত্ব রয়েছে। কোনো exploit দরকার নেই এবং log-এ কিছুই error হিসেবে নাও দেখা যেতে পারে। এর দুটি সমাধান আছে; অন্তত একটি প্রয়োগ করতে হবে। হয় proxy-তে authentication বসান—forward auth ব্যবহার করে সামনে self-hosted single sign-on provider হিসেবে Authentik রাখুন—অথবা dashboard-এর নিজস্ব OIDC (OpenID Connect) provider configure করুন:
HERMES_DASHBOARD_OIDC_ISSUER=https://auth.example.com/application/o/hermes/
HERMES_DASHBOARD_OIDC_CLIENT_ID=hermes-dashboard
HERMES_DASHBOARD_OIDC_SCOPES="openid profile email"সঠিকভাবে configure করলেও এই বিকল্পের একটি ন্যূনতম ঝুঁকি থেকে যায়, যা কমানো যায় না। একটি public login page এমন একটি page, যেখানে যে কেউ পৌঁছে attack করতে পারে, এবং এর পেছনে আপনার VPS-এর shell রয়েছে। এর জন্য শুধু username ও password দুর্বল সুরক্ষা। তাই public bind-এর ক্ষেত্রে docs OAuth বা OIDC ব্যবহারের পরামর্শ দেয়। Login-এ rate limit প্রয়োগ করুন, proxy ports এবং SSH ছাড়া সব কিছুর জন্য ufw বন্ধ রাখুন, এবং সময়ে সময়ে access log পড়ুন।
বিকল্প 3: মোবাইল টার্মিনাল থেকে SSH এবং mosh
সবচেয়ে কম পরিশ্রমের পদ্ধতি হলো ফোনে একটি terminal app ইনস্টল করা, এতে একটি SSH key লোড করা এবং agent-এর নিজস্ব text interface ব্যবহার করা।
ssh you@vps.example.com
tmux new -A -s phone
hermes --tuitmux new -A -s phone phone নামের একটি session-এ সংযুক্ত হয়, অথবা session না থাকলে তা তৈরি করে। তাই connection বিচ্ছিন্ন হলেও agent চলতে থাকে এবং পরেরবার একই অবস্থানে ফিরে আসতে পারেন। ফোন থেকে Claude Code পরিচালনা করার ক্ষেত্রেও একই পদ্ধতি ব্যবহৃত হয়।
মোবাইল network-এর মাধ্যমে সাধারণ SSH ব্যবহার করা অস্বস্তিকর। ফোনের address পরিবর্তিত হলে বা ফোন sleep mode-এ গেলে connection বিচ্ছিন্ন হয়ে যায়। mosh এই সমস্যা সমাধান করে। এটি UDP (user datagram protocol)-এর মাধ্যমে চলে এবং byte stream-এর পরিবর্তে terminal state সিঙ্ক করে। তাই wifi থেকে cellular network-এ হাঁটতে হাঁটতেও session সচল থাকে:
sudo apt install -y mosh
sudo ufw allow 60000:61000/udpফোন থেকে mosh you@vps.example.com চালান। আপনার বিদ্যমান SSH login ব্যবহার করে mosh mosh-server চালু করে। এরপর এটি session-কে 60000 থেকে 61000 range-এর UDP-তে স্থানান্তর করে। তাই ওই range-টি open রাখতে হবে।
নিরাপত্তার ঝুঁকিটি সরল। একটি SSH session একটি shell, আর shell-এর মাধ্যমে ওই account যা করতে পারে, সবই করা যায়। এরপর চুরি হওয়া এবং unlock করা একটি ফোন ও আপনার ফাইলের মধ্যে agent-এর approval prompt-ই শেষ বাধা হয়ে থাকে। এ কাজের জন্য একটি dedicated non-root account ব্যবহার করুন এবং শুধু key authentication রাখুন। আপনি সঙ্গে বহন করেন এমন কোনো device-এ key রাখার আগে VPS-এ SSH hardening সম্পন্ন করুন।
মোবাইল নেটওয়ার্কে কী কী কাজ করে না
চারটি বিষয় সমস্যা তৈরি করে। এগুলোর কোনোটিই configuration পরিবর্তন করে সমাধান করা যায় না।
আপনি লক্ষ্য না করলেও dashboard আপনাকে লগ আউট করে দেয়। Access token-এর TTL (time to live) 15 মিনিট, এবং বর্তমান API contract-এ কোনো refresh token নেই। Token-এর মেয়াদ শেষ হলে page 401 response দেখতে পায় এবং আবার /login-এ চলে যায়। Dashboard খুলে ফোনটি বিশ মিনিটের জন্য পকেটে রাখুন। ফিরে এসে দেখবেন login screen দেখা যাচ্ছে এবং আপনি যা লিখছিলেন তা হারিয়ে গেছে। কিছু নষ্ট হয়নি। আবার sign in করুন।
Embedded terminal background tab টিকে থাকে না। Server একটি PTY-এর পেছনে TUI (text user interface) চালু করে। Tab বন্ধ হলে এটি সঠিকভাবে বন্ধ করে দেয়, আর আবার খুললে নতুন একটি চালু হয়। Mobile browser memory পুনরুদ্ধারের জন্য background tab বাতিল করে দিতে পারে। তাই অন্য কোনো app-এ যথেষ্ট সময় গেলে সেই terminal-ও বন্ধ হয়ে যায়। আপনার chat history নিরাপদ থাকে, কারণ session server-এ সংরক্ষিত হয় এবং hermes sessions list এখনও সেগুলো দেখায়। তবে terminal-এ আগের অবস্থায় আবার সংযুক্ত হওয়া যায় না। এমন session প্রয়োজন হলে SSH-এর মাধ্যমে tmux ব্যবহার করুন।
Idle connection নীরবে বিচ্ছিন্ন হয়ে যায়। Mobile carrier-গুলো NAT (network address translation) table-এর entry পুনরুদ্ধারের জন্য idle TCP connection বিচ্ছিন্ন করে। Screen বন্ধ হলে ফোনটি প্রায় পুরোপুরি network service দেওয়া বন্ধ করে দেয়। কিছুক্ষণ কোনো data না পাঠানো WebSocket সাধারণত ফোন unlock করার আগেই বন্ধ হয়ে যায়। Page আবার সংযোগ স্থাপন করে কেবল আপনি তাতে touch করার পরে। এ কারণেই ফোনে SSH-এর চেয়ে mosh ভালো মনে হয়: হারানোর মতো কোনো স্থায়ী connection mosh-এর ছিলই না।
কোনো notification push হয় না। Dashboard বা SSH session—কোনোটিই আপনার ফোনকে জাগাতে পারে না। Device-এ কোনো Hermes app নেই। তাই platform-এর push service-এ পৌঁছানোর কোনো পথও নেই। দীর্ঘ সময় চলা agent কাজ শেষ হয়ে গেলেও আপনি তা জানতে পারবেন পরের বার page দেখার সময়।
বার্তা gateway-এর মাধ্যমে notification পৌঁছে যায়
শেষ সমস্যাটির সমাধান হলো gateway। এটি agent-এ পৌঁছানোর সম্পূর্ণ ভিন্ন একটি পদ্ধতি। hermes gateway agent-কে Telegram, Discord, Slack, WhatsApp, Signal এবং email-সহ বিভিন্ন messaging platform-এর সঙ্গে সংযুক্ত করে। এরপর আপনি এমন একটি app-এর ভেতর agent-এর সঙ্গে কথা বলতে পারবেন, যেটির আপনার phone-এ আগে থেকেই push channel আছে, background delivery পরিচালনা করে এবং network বিচ্ছিন্ন হলেও তা সামলে নিতে পারে।
hermes gateway setup
hermes gateway install
hermes gateway statushermes gateway install gateway-কে systemd service হিসেবে নিবন্ধন করে, তাই reboot-এর পর এটি আবার চালু হয়। Hermes installer আপনার জন্য কোনো service unit তৈরি করে না। তাই restart-এর পর hermes dashboard নিজে থেকে ফিরে আসবে না। আপনি যে অংশগুলোর ওপর নির্ভর করেন, সেগুলোর জন্য unit লিখুন। VPS-এ systemd service এবং timer লেখা-এ ফাইলটি তৈরির পদ্ধতি দেখানো হয়েছে।
কোনো conversation ছাড়াই scheduled job একইভাবে একটি result পাঠাতে পারে:
hermes send -t telegram -s "Backup report" -f /home/you/report.txtএখানে authorisation-এর নিয়ম হলো deny by default। কোনো allowlist সেট না থাকলে এবং GATEWAY_ALLOW_ALL_USERS unset থাকলে প্রত্যেক user-কে প্রত্যাখ্যান করা হয়। শুরু করার জন্য এটিই সঠিক অবস্থান। ~/.hermes/.env-এ যেসব account অনুমোদন করতে চান, সেগুলোর নাম লিখুন:
TELEGRAM_ALLOWED_USERS=123456789
GATEWAY_ALLOWED_USERS=123456789অথবা numeric ID paste না করে code-based pairing চালু করুন। এর জন্য ~/.hermes/config.yaml-এ unauthorized_dm_behavior: pair সেট করুন। কোনো অজানা account agent-কে message পাঠালে একটি আট অক্ষরের code পাবে। আপনি অনুমোদন না করা পর্যন্ত আর কিছু ঘটবে না:
hermes pairing list
hermes pairing approve telegram ABC12DEF
hermes pairing revoke telegram 123456789Code এক ঘণ্টা পরে expire হয়। একজন user প্রতি দশ মিনিটে একটি code চাইতে পারে। পাঁচটি ব্যর্থ প্রচেষ্টার পর ওই account lock হয়ে যায়।
চুরি হয়ে যাওয়া ফোনের ক্ষয়ক্ষতির পরিসর সীমিত করা
যে ফোন আপনার agent-এ সংযোগ করতে পারে, সেই ফোন আপনার সার্ভারে command চালাতে পারে। আর ফোন হারিয়ে যেতে পারে। ফোনটি যার হাতে থাকবে, সে এখন কী করতে পারবে তা নির্ধারণ করুন।
Approval চালু রাখুন। approvals.mode-এর ডিফল্ট মান smart। এটি ঝুঁকি যাচাই করার জন্য একটি auxiliary model ব্যবহার করে এবং শুধু কম-ঝুঁকির command স্বয়ংক্রিয়ভাবে approve করে। এটিকে off সেট করা হলে --yolo দিয়ে সবকিছু চালানোর সমান হয়, আর HERMES_YOLO_MODE=1 একই কাজ environment-এর মাধ্যমে করে। এই অবস্থায় agent-এর সঙ্গে যোগাযোগ করে এমন ফোন সঙ্গে রাখবেন না। approvals.cron_mode: deny সেট করুন, যাতে আপনি ঘুমানোর সময় scheduled job নিজে নিজে approval দিতে না পারে।
approvals:
mode: smart
cron_mode: denyAgent-এর ক্ষতি করার মতো পরিসর কমিয়ে দিন। terminal.backend: docker command-গুলো এমন একটি container-এর মধ্যে চালায়, যেখানে অল্প কয়েকটি Linux capability ছাড়া সব capability বাদ দেওয়া হয়, no-new-privileges সেট করা হয় এবং process count সীমিত রাখা হয়। ফলে prompt-এর বদলে container-ই boundary হিসেবে কাজ করে। terminal.cwd working directory নির্দিষ্ট করে। HERMES_WRITE_SAFE_ROOT write_file এবং patch-কে আপনার নির্ধারিত directory-গুলোর মধ্যে সীমাবদ্ধ করে। এই directory-গুলোর বাইরে write করার চেষ্টা block হয় এবং সেটি override করার কোনো approval থাকে না।
export HERMES_WRITE_SAFE_ROOT=/home/you/projects:/home/you/.hermesHermes ইতিমধ্যেই ~/.ssh, ~/.aws, ~/.kube এবং /etc/sudoers-এ write block করে, disk-এর যেকোনো স্থানে .env file লিখতে অস্বীকার করে এবং approval settings যা-ই বলুক, ধ্বংসাত্মক command-এর একটি কঠোর তালিকা প্রত্যাখ্যান করে। এটিকে ন্যূনতম সুরক্ষা হিসেবে বিবেচনা করুন, আপনার পরিকল্পনা হিসেবে নয়। Agent-কে সাধারণ user হিসেবে চালান, কখনো root হিসেবে নয়। একই যুক্তি unattended অবস্থায় চালু থাকা যেকোনো coding agent-এর ক্ষেত্রেও প্রযোজ্য। আরও বিস্তারিতভাবে VPS-এ Claude Code নিরাপদে চালানো এই পদ্ধতি অনুসরণ করে।
এরপর প্রয়োজনের আগে revocation-এর ধাপগুলো লিখে রাখুন। Tailscale admin console-এ device সরিয়ে দিলে সঙ্গে সঙ্গে mesh access বন্ধ হয়। HERMES_DASHBOARD_BASIC_AUTH_SECRET পরিবর্তন করে restart করলে প্রতিটি device-এর সব dashboard session invalid হয়ে যায়, কারণ ওই value session cookie-তে স্বাক্ষর করে। ~/.ssh/authorized_keys থেকে ফোনের public key মুছে দিলে SSH বন্ধ হয়। hermes pairing revoke telegram <user-id> একটি messaging account সরিয়ে দেয়। ফোনটিতে যদি আপনার provider key পড়ার মতো কোনো উপাদান থাকে, hermes auth logout <provider> দিয়ে সেগুলো বাতিল করুন এবং upstream-এ নতুন key তৈরি করুন।
ফলাফল অনুমান না করে যাচাই করুন। এগুলো আপনার নিজের box-এ চালানোর command, এবং এগুলোর output আপনার setup-এর ওপর নির্ভর করে:
tailscale status
hermes pairing list
hermes logs gateway -n 100
hermes status --deepLog-গুলো ~/.hermes/logs/-এর অধীনে থাকে। কোনো incident ঘটলে সেগুলো পড়ুন। Incident না ঘটলেও মাঝে মাঝে পড়ুন।
FAQ
iOS বা Android-এর জন্য কি Hermes-এর কোনো অফিসিয়াল মোবাইল অ্যাপ আছে?
না। Hermes repository-তে command line interface, web dashboard এবং macOS, Windows ও Linux-এর জন্য একটি Electron desktop client রয়েছে। iOS বা Android-এর জন্য কোনো first-party build নেই। ফোন থেকে browser-এ web dashboard, SSH client অথবা hermes gateway-এর মাধ্যমে সংযুক্ত messaging platform ব্যবহার করুন। Third-party mobile client রয়েছে। তবে এগুলো third-party code এবং আপনার agent-এর credentials সংরক্ষণ করে। তাই কোনোটি install করার আগে source code পড়ুন।
ফোনে Hermes dashboard কেন আমাকে logout করে দেয়?
Access token-এর TTL 15 minute এবং বর্তমান API contract-এ refresh token নেই। Token-এর মেয়াদ শেষ হলে page একটি 401 পায় এবং /login-এ চলে যায়। ফোনে browser background-এ রাখলে বিষয়টি স্পষ্ট হয়, কারণ অন্য app-এ 20 minute থাকলেই token-এর মেয়াদ শেষ হতে পারে। HERMES_DASHBOARD_BASIC_AUTH_SECRET-কে একটি স্থিতিশীল random value হিসেবে সেট করুন, যাতে restart-এর পরেও session signing key একই থাকে। এতে logout হওয়ার দ্বিতীয় কারণটি দূর হয়।
Hermes dashboard কি নিরাপদে public internet-এ প্রকাশ করতে পারি?
শুধু তখনই, যখন আপনি নিজে authentication যাচাই করেছেন। Bind address-এর ওপর ভিত্তি করে auth gate সক্রিয় হয়। তাই reverse proxy-এর পেছনে 127.0.0.1-এ bind করা dashboard internet ব্যবহারকারীর কাছে login চায় না। curl -s https://your-host/api/status | jq '.auth_required' চালিয়ে ফলাফল দেখুন। Username ও password-এর বদলে OAuth বা OIDC ব্যবহার করুন, কারণ প্রকল্পের documentation অনুযায়ী password provider trusted network ও VPN-এর জন্য। Private mesh ব্যবহার করলে এই প্রশ্নই থাকে না। তাই এটিই ভালো default।
আমার কি Tailscale account দরকার, নাকি control plane নিজে host করতে পারি?
আপনি এটি নিজে host করতে পারেন। Headscale হলো Tailscale coordination server-এর একটি open implementation। Official Tailscale client-গুলো tailscale up --login-server https://headscale.example.com ব্যবহার করে এতে connect করতে পারে। এরপর mesh-এ প্রবেশের অনুমতি থাকা device-গুলোর তালিকার নিয়ন্ত্রণ আপনার হাতে থাকবে। এর বিনিময়ে আপনাকে ওই server চালাতে ও backup নিতে হবে। Server বন্ধ থাকলে কোনো device enrol বা re-authenticate করতে পারবেন না।
Agent কোনো job শেষ করলে ফোনে notification কীভাবে পাব?
Messaging gateway ব্যবহার করুন। Dashboard এবং SSH কোনো ফোনকে জাগিয়ে তুলতে পারে না, কারণ notification গ্রহণের জন্য device-এ কোনো Hermes app নেই। hermes gateway setup ব্যবহার করে agent-কে Telegram, Signal, Discord অথবা অন্য কোনো supported platform-এর সঙ্গে connect করুন। এরপর সেই platform-এর নিজস্ব app notification পাঠাবে। hermes send -t telegram -s "Job done" -f /path/to/report.txt ব্যবহার করে cron job থেকেও একটি নির্দিষ্ট message পাঠানো যায়। এতে model call না করেই message পৌঁছে যায়।