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

Paano I-access ang Hermes Agent sa Phone

I-access ang Hermes agent sa VPS gamit ang Tailscale, public HTTPS endpoint, o SSH. Alamin kung paano bawiin ang access kapag nawala ang phone.

Tatlong paraan para ma-access ang iyong Hermes agent mula sa phone

Para ma-access ang iyong Hermes agent mula sa phone, ginagamit mo ang web dashboard nito. Ang tunay na desisyon ay kung ano ang ilalagay sa harap ng dashboard. Ang unang option ay private mesh network, kung saan nakikinig ang dashboard sa Tailscale address lamang at walang port na direktang nakaharap sa internet. Ang ikalawang option ay public endpoint sa likod ng reverse proxy na may TLS (transport layer security) at login. Ang login na iyon ang tanging proteksiyon ng terminal na nagbibigay ng access sa iyong server. Ang ikatlong option ay SSH (secure shell) mula sa isang terminal app. Ito ang nangangailangan ng pinakamaliit na setup at nagbibigay ng pinakamalawak na access.

Nagsisimula ang guide na ito kung saan nagtatapos ang pagpapatakbo ng Hermes agent sa sarili mong VPS. Naka-install na ang agent, tumutugon na ito sa command line, at gusto mo na itong ma-access mula sa phone.

Ang mga command sa ibaba ay para sa tag na v2026.8.3, na inilabas noong 3 August 2026 at may label na v0.20.0 sa release notes. Madalas maglabas ng bagong bersyon ang Hermes, kaya i-pin ang machine sa isang tag sa halip na sundan ang main. Tumatanggap ang installer ng commit:

curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -s -- --commit 3c27eb6234bf
hermes version

Ipinapakita ng hermes version kung ano talaga ang naka-install. Ihambing ito sa tag bago ka magtiwala sa anumang flag sa page na ito.

Ano ang kasama sa repository, at ano ang hindi

Walang iOS o Android app sa Hermes repository. Ang native client ay hermes desktop (alias na hermes gui), isang Electron application para sa macOS, Windows, at Linux. Maaari itong kumonekta sa remote agent sa halip na sa local agent: itakda ang remote URL sa http://<server-address>:9119 sa Settings sa ilalim ng Gateway, o i-export ang HERMES_DESKTOP_REMOTE_URL=http://<server-address>:9119 bago ito ilunsad. Nalulutas nito ang paggamit mula sa pangalawang laptop. Wala itong ginagawa para sa phone.

Ang ginagamit mo mula sa phone ay hermes dashboard, ang browser interface. Pinamamahalaan nito ang configuration, sessions, cron jobs, skills, logs, at messaging platforms, at may naka-embed na terminal: inilulunsad ng server ang hermes --tui sa likod ng PTY (pseudo-terminal) at ipinapadala ang output nito sa page. Sa makitid na screen, nagiging slide-over panel ang session switcher, kaya nananatiling maayos ang layout sa phone.

Bilang default, nakikinig ang dashboard sa 127.0.0.1:9119 at nagbubukas ng browser tab sa server mismo. Hindi ito kapaki-pakinabang sa headless VPS (virtual private server). Simulan ito nang hindi nagbubukas ng browser, at tingnan ang socket:

hermes dashboard --no-open
ss -lntp | grep 9119

Ang listener sa 127.0.0.1:9119 ay maa-access lamang mula sa server. Ang listener sa 0.0.0.0:9119 ay maa-access mula sa bawat network na kinabibilangan ng machine, pati na ang public network. Tinutukoy ng iisang linyang iyon kung gaano ka kalantad, kaya basahin ito sa halip na basta ipagpalagay.

Option 1: isang private mesh gamit ang Tailscale

Piliin ito maliban kung may partikular kang dahilan para hindi gamitin ito. Ang Tailscale ay isang mesh VPN (virtual private network) na binuo sa WireGuard. Bawat device na ie-enrol mo ay magkakaroon ng stable na address at direktang makikipag-ugnayan sa iba pang device. Sasali ang phone mo sa parehong mesh, kaya hindi na kailangang magkaroon ng public port ang dashboard.

Sa server:

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
tailscale ip -4

I-install ang Tailscale app sa phone at mag-sign in gamit ang parehong account. Pagkatapos, ilista ng tailscale status sa server ang phone ayon sa pangalan nito. I-bind ngayon ang dashboard sa address na ipinakita ng tailscale ip -4:

hermes dashboard --host 100.101.102.103 --port 9119 --no-open

Kapag bina-bind sa mesh address sa halip na sa 0.0.0.0, umiiral lamang ang listening socket sa Tailscale interface. Kapag nag-port scan sa public IP address mo, walang makikita sa 9119 dahil walang nakikinig doon. Dahil dito, hindi na firewall lamang ang tanging proteksiyon mo. Kumpirmahin itong muli gamit ang ss -lntp | grep 9119.

Tinutukoy rin ng bind address ang authentication, at ito ang bahaging madalas hindi napapansin. Sa 127.0.0.1, walang login ang dashboard. Sa anumang ibang address, mandatory ang auth gate, at kapag walang naka-configure na provider, tatangging magsimula ang server. Tinatawag ito ng project na failing closed. Patakbuhin ito nang interactive sa unang pagkakataon, at iaalok nitong mag-set up ng username at password agad. Isusulat ang resulta sa ~/.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-string

I-generate ang secret na iyon gamit ang openssl rand -hex 32 at huwag na itong baguhin. Ginagamit ito para pirmahan ang session cookie, kaya kapag binago mo ito, masa-sign out ang bawat device. Nasa parehong file ang mga model API key mo, kaya panatilihin itong private gamit ang chmod 600 ~/.hermes/.env.

Suriin ang gate mula sa ibang machine sa mesh bago mo ito pagkatiwalaan:

curl -s http://100.101.102.103:9119/api/status | jq '.auth_required, .auth_providers'

Nangangahulugan ang true na sinundan ng ["basic"] na naka-enable ang gate at ang password provider ang sumasagot. Malinaw ang dokumentasyon mismo ng project tungkol sa provider na iyon: para ito sa trusted network o VPN, at hindi ito angkop para sa dashboard na nakaharap sa public internet. Sa mesh, iyan mismo ang sitwasyon mo.

Para sa HTTPS sa loob ng tailnet, ipasa ang port sa Tailscale:

sudo tailscale serve --bg localhost:9119
sudo tailscale serve status

Tine-terminate ng Tailscale ang TLS gamit ang certificate na inisyu para sa MagicDNS name ng machine. Dahil dito, hindi na magpapakita ng warning ang browser at magkakaroon ang session cookie ng Secure flag. I-enable muna ang MagicDNS at HTTPS Certificates sa DNS page ng Tailscale admin console. Basahin din ang acknowledgement habang naroon ka: ang mga pangalan ng machine mo at ang tailnet DNS name mo ay ipo-publish sa public certificate transparency ledger, na maaaring basahin ng sinuman.

Ang tunay na kapalit nito ay ang coordination server. End-to-end encrypted ang traffic sa pagitan ng phone mo at ng VPS at hindi ito dumadaan sa Tailscale. Gayunman, wala sa hardware mo ang account na nagpapasya kung aling mga device ang kabilang sa mesh. Kung mahalaga ito, patakbuhin ang control plane sa sarili mong infrastructure gamit ang Headscale, ang self-hosted Tailscale control server, at ituro rito ang mga client gamit ang tailscale up --login-server https://headscale.example.com. Kung mas gusto mong alisin ang mesh at mano-manong i-configure ang mga peer, ipinapaliwanag ng paghahambing ng plain WireGuard at Tailscale kung ano ang mga isinusuko mo.

Option 2: isang public HTTPS endpoint, at ang patibong dito

Minsan, hindi available ang mesh. Maaaring hindi ka payagang mag-install ng VPN client sa work phone. Sa ganitong sitwasyon, ilagay ang dashboard sa likod ng reverse proxy. Panatilihin ang dashboard sa loopback at hayaan ang Caddy na humawak ng certificate:

hermes.example.com {
  reverse_proxy 127.0.0.1:9119
}

Awtomatikong kumukuha at nagre-renew ng certificate ang Caddy. Ipinapasa rin ng reverse_proxy nito ang WebSocket upgrades nang walang karagdagang directive. Kailangan ito ng embedded terminal ng dashboard. Sa nginx, kailangan mong idagdag mismo ang Upgrade at Connection headers. Saklaw ng pag-isyu ng Let's Encrypt certificate gamit ang Certbot sa nginx ang TLS na bahagi ng prosesong iyon. Sabihin kay Hermes ang public name nito para tumuro sa tamang host ang login callbacks:

dashboard:
  public_url: "https://hermes.example.com"

Narito ang patibong. Nakabatay ang auth gate sa bind address, hindi sa address na pinanggalingan ng request. Kapag naka-bind ang dashboard sa 127.0.0.1 at nasa likod ito ng proxy, loopback ang nakikita nito. Dahil dito, ipinapalagay nitong hindi kailangan ng login at sine-serve nito ang sinumang pinapadaan ng proxy. Suriin kung ano talaga ang na-publish mo:

curl -s https://hermes.example.com/api/status | jq '.auth_required'

Kung false ang output, isang URL lang ang layo ng internet mula sa terminal sa server mo. Walang exploit na kailangan, at walang lalabas na reklamo sa logs. May dalawang paraan para ayusin ito, at dapat gamitin mo ang kahit isa sa mga ito. Ilagay ang authentication sa proxy gamit ang Authentik bilang self-hosted single sign-on provider sa unahan nito sa pamamagitan ng forward auth, o i-configure ang sariling OIDC (OpenID Connect) provider ng dashboard:

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"

Kahit tama ang pagkaka-configure, may minimum na panganib ang option na ito na hindi mo maaalis. Ang public login page ay maaaring maabot at atakihin ng sinuman, at shell sa VPS ang nasa likod nito. Masyadong manipis na proteksyon para rito ang username at password. Kaya itinutulak ng documentation ang OAuth o OIDC para sa public binds. Lagyan ng rate limit ang login, panatilihing sarado ang ufw sa lahat maliban sa proxy ports at SSH, at paminsan-minsang basahin ang access log.

Opsyon 3: SSH at mosh mula sa mobile terminal

Ito ang pinakamadaling paraan: mag-install ng terminal app sa phone, i-load dito ang SSH key, at gamitin ang sariling text interface ng agent.

ssh you@vps.example.com
tmux new -A -s phone
hermes --tui

tmux new -A -s phone kumokonekta sa session na tinatawag na phone, o gumagawa nito kung wala pa, kaya patuloy na tumatakbo ang agent kapag naputol ang connection at babalik ka sa parehong lugar sa susunod. Pareho ang pattern nito sa ginagamit sa pagpapatakbo ng Claude Code mula sa phone.

Hindi komportable ang plain SSH sa mobile network dahil napuputol ang connection kapag nagpalit ng address ang phone o nag-sleep ito. Inaayos ito ng mosh. Gumagana ito sa UDP (user datagram protocol) at sini-sync ang terminal state sa halip na byte stream, kaya nagpapatuloy ang session habang lumilipat ka mula wifi papunta sa cellular:

sudo apt install -y mosh
sudo ufw allow 60000:61000/udp

Sa phone, patakbuhin ang mosh you@vps.example.com. Sinisimulan ng mosh ang mosh-server sa pamamagitan ng dati mong SSH login, pagkatapos ay inililipat ang session sa UDP sa range na 60000 hanggang 61000. Kaya kailangang bukas ang range na iyon.

Direkta ang security cost. Ang SSH session ay isang shell, at ang shell ay may access sa lahat ng maaaring gawin ng account na iyon. Ang approval prompt ng agent ang huling harang laban sa isang ninakaw na phone na naka-unlock at sa mga file mo. Gumamit para rito ng dedicated non-root account, key-only authentication, at sundin ang pag-hardening ng SSH sa isang VPS bago maglagay ng key sa device na palagi mong dala.

Ano ang nasisira sa mobile network

Apat na bagay, at wala sa mga ito ang bug na maaayos sa pamamagitan ng configuration.

Nilo-log out ka ng dashboard habang hindi mo ito tinitingnan. May TTL (time to live) na 15 minuto ang access token, at walang refresh token ang kasalukuyang API contract. Kapag nag-expire ang token, nakikita ng page ang 401 response at bumabalik sa /login. Buksan ang dashboard, ilagay ang phone sa bulsa sa loob ng dalawampung minuto, at pagbalik mo ay login screen na ang makikita mo at mawawala ang anumang tina-type mo. Walang nasira. Mag-sign in ulit.

Hindi nananatili ang embedded terminal kapag nasa background tab. Sini-spawn ng server ang TUI (text user interface) sa likod ng isang PTY at maayos itong nire-reap kapag nagsara ang tab. Kapag binuksan itong muli, bagong session ang isi-spawn. Dina-discard ng mobile browser ang mga background tab upang mag-reclaim ng memory, kaya matatapos ang terminal kapag sapat na matagal kang lumipat sa ibang app. Ligtas ang chat history mo dahil naka-store ang mga session sa server at ipinapakita pa rin ito ng hermes sessions list. Hindi maaaring i-reattach ang terminal mismo. Kung kailangan mo ng session na nananatili, gumamit ng tmux sa SSH.

Tahimik na namamatay ang mga idle connection. Ibinabagsak ng mobile carrier ang mga idle TCP connection upang mag-reclaim ng mga entry sa NAT (network address translation) table. Halos tuluyang humihinto ang phone sa pag-service ng network kapag naka-off ang screen. Karaniwang patay na ang WebSocket na matagal nang walang activity pag-unlock mo, at magre-reconnect lang ang page kapag hinawakan mo ito. Ito ang dahilan kung bakit mas maayos gamitin ang mosh kaysa SSH sa phone: wala itong connection na maaaring mawala.

Walang nagpu-push ng notification. Hindi kayang gisingin ng dashboard o ng SSH session ang phone mo. Walang Hermes app sa device, kaya walang path papunta sa push service ng platform. Kapag natapos ang matagal na agent run, malalaman mo lang sa susunod na pagtingin mo.

Dumarating ang mga notification sa messaging gateway

Ang solusyon sa huling problemang iyon ay ang gateway. Ibang paraan ito para maabot ang agent. Ikinokonekta ng hermes gateway ang agent sa mga messaging platform gaya ng Telegram, Discord, Slack, WhatsApp, Signal, at email. Pagkatapos, nakikipag-usap ka sa agent sa loob ng app na mayroon nang push channel sa iyong phone, awtomatikong humahawak ng background delivery, at kayang magpatuloy kahit maputol ang network.

hermes gateway setup
hermes gateway install
hermes gateway status

Nirerehistro ng hermes gateway install ang gateway bilang systemd service upang awtomatiko itong bumalik matapos ang reboot. Hindi gumagawa ang Hermes installer ng anumang service unit para sa iyo, kaya hindi awtomatikong babalik ang hermes dashboard matapos ang restart. Gumawa ng unit para sa bawat component na ginagamit mo. Sinasaklaw ng paggawa ng systemd service at timer sa isang VPS ang mismong file.

Maaaring magpadala ng resulta ang isang scheduled job sa parehong paraan, nang walang kinakailangang conversation:

hermes send -t telegram -s "Backup report" -f /home/you/report.txt

Deny by default ang authorisation dito. Kapag walang naka-set na allowlist at naka-unset ang GATEWAY_ALLOW_ALL_USERS, tatanggihan ang bawat user. Ito ang tamang panimulang configuration. Ilagay sa ~/.hermes/.env ang mga account na gusto mong payagan:

TELEGRAM_ALLOWED_USERS=123456789
GATEWAY_ALLOWED_USERS=123456789

Maaari ka ring gumamit ng code-based pairing sa halip na mag-paste ng numeric ID. Itakda ang unauthorized_dm_behavior: pair sa ~/.hermes/config.yaml. Makakatanggap ng eight-character code ang hindi kilalang account na magme-message sa agent. Walang ibang mangyayari hangga't hindi mo ito inaaprubahan:

hermes pairing list
hermes pairing approve telegram ABC12DEF
hermes pairing revoke telegram 123456789

Mag-e-expire ang mga code makalipas ang isang oras. Isang code lamang ang maaaring hilingin ng user bawat sampung minuto. Limang nabigong pagtatangka ang magla-lock out sa account na iyon.

Paglilimita sa epekto ng nanakaw na phone

Ang phone na makakaabot sa iyong agent ay phone na makakapagpatakbo ng mga command sa server mo, at nawawala ang mga phone. Magpasya ngayon kung ano ang magagawa ng taong may hawak nito.

Panatilihing naka-on ang approvals. Ang approvals.mode ay naka-default sa smart, na humihingi sa isang auxiliary model na magsuri ng risk at awtomatikong mag-approve lamang ng mga command na low risk. Ang pagtatakda nito sa off ay katumbas ng pagpapatakbo ng lahat gamit ang --yolo, at ginagawa ito ng HERMES_YOLO_MODE=1 sa pamamagitan ng environment. Huwag magdala ng phone na kumokonekta sa agent habang nasa ganoong state. Itakda ang approvals.cron_mode: deny upang hindi makapag-approve ang scheduled jobs ng sarili nilang mga command habang natutulog ka.

approvals:
  mode: smart
  cron_mode: deny

Bigyan ang agent ng mas maliit na sakop na maaari nitong masira. Ang terminal.backend: docker ay nagpapatakbo ng mga command sa loob ng container na nag-aalis ng lahat ng Linux capabilities maliban sa maikling listahan, nagse-set ng no-new-privileges, at naglilimita sa bilang ng mga process, kaya ang container ang nagiging boundary sa halip na prompt. Itinatakda ng terminal.cwd ang working directory. Nililimitahan ng HERMES_WRITE_SAFE_ROOT ang write_file at patch sa mga directory na iyong tinukoy, at bina-block ang pagsusulat sa labas ng mga ito nang walang approval na maaaring mag-override rito.

export HERMES_WRITE_SAFE_ROOT=/home/you/projects:/home/you/.hermes

Binablock na ng Hermes ang pagsusulat sa ~/.ssh, ~/.aws, ~/.kube at /etc/sudoers, tumatangging magsulat ng mga .env file saanman sa disk, at nagre-reject ng mahigpit na listahan ng mapaminsalang mga command anuman ang iyong approval settings. Ituring ito bilang minimum na proteksyon, hindi bilang buong plano mo. Patakbuhin ang agent bilang ordinary user, at huwag kailanman bilang root. Pareho ang prinsipyong ito sa anumang coding agent na iniiwang tumatakbo nang walang bantay, at mas detalyadong ipinapakita rito ang ligtas na pagpapatakbo ng Claude Code sa isang VPS.

Pagkatapos, isulat nang maaga ang mga hakbang para sa revocation bago mo kailanganin ang mga ito. Ang pag-remove sa device sa Tailscale admin console ay agad na nagpuputol sa mesh access. Ang pagpapalit ng HERMES_DASHBOARD_BASIC_AUTH_SECRET at pag-restart ay nag-iinvalidate sa lahat ng dashboard session sa bawat device, dahil ginagamit ng value na iyon ang pag-sign sa session cookie. Ang pagtanggal sa public key ng phone mula sa ~/.ssh/authorized_keys ay nagtatapos sa SSH access. Inaalis ng hermes pairing revoke telegram <user-id> ang messaging account. Kung may hawak ang device ng anumang makakabasa sa provider keys mo, i-revoke ang mga ito gamit ang hermes auth logout <provider> at gumawa ng mga bago sa upstream provider.

Suriin ang resulta sa halip na ipagpalagay na gumana ito. Mga command ang mga ito na tatakbuhin sa sarili mong box, at nakadepende sa iyong setup ang output ng mga ito:

tailscale status
hermes pairing list
hermes logs gateway -n 100
hermes status --deep

Nasa ilalim ng ~/.hermes/logs/ ang mga log. Basahin ang mga ito pagkatapos ng incident, at paminsan-minsan kahit walang naganap na incident.

FAQ

May opisyal bang Hermes mobile app para sa iOS o Android?

Wala. Ang Hermes repository ay may command line interface, web dashboard, at Electron desktop client para sa macOS, Windows, at Linux. Walang first-party build para sa iOS o Android. Sa phone, gamitin ang web dashboard sa browser, isang SSH client, o isang messaging platform na nakakonekta sa pamamagitan ng hermes gateway. May mga third-party mobile client, pero third-party code ang mga ito na may hawak ng credentials ng iyong agent, kaya basahin muna ang source bago mag-install.

Bakit awtomatikong nagla-log out sa phone ko ang Hermes dashboard?

May 15 minute TTL ang access token at walang refresh token ang kasalukuyang API contract. Kapag nag-expire ang token, makakatanggap ang page ng 401 at magna-navigate sa /login. Kapag nasa background ang browser sa phone, mas kapansin-pansin ito dahil sapat na ang dalawampung minuto sa ibang app para mangyari ito. Itakda ang HERMES_DASHBOARD_BASIC_AUTH_SECRET sa isang stable na random value para manatiling pareho ang session signing key pagkatapos ng mga restart. Aalisin nito ang ikalawang dahilan ng pag-log out.

Ligtas ko bang mailalagay sa public internet ang Hermes dashboard?

Gawin lamang ito kung personal mong na-verify ang authentication. Naka-switch on ang auth gate batay sa bind address, kaya ang dashboard na naka-bind sa 127.0.0.1 at nasa likod ng reverse proxy ay hindi humihingi ng login mula sa internet. Patakbuhin ang curl -s https://your-host/api/status | jq '.auth_required' at basahin ang output nito. Gumamit ng OAuth o OIDC sa halip na username at password, dahil sinasabi sa documentation ng project na para lamang sa trusted networks at VPN ang password provider. Tuluyang iniiwasan ng private mesh ang problemang ito, kaya ito ang mas magandang default.

Kailangan ko ba ng Tailscale account, o maaari kong i-self-host ang control plane?

Maaari mo itong i-self-host. Ang Headscale ay isang open implementation ng Tailscale coordination server, at kumokonekta rito ang official Tailscale clients gamit ang tailscale up --login-server https://headscale.example.com. Ikaw ang mamamahala sa listahan ng mga device na pinapayagang pumasok sa mesh. Ang kapalit nito ay ikaw ang magpapatakbo at magba-back up ng server na iyon. Habang down ito, hindi ka makakapag-enrol o makakapag-re-authenticate ng device.

Paano ako makakatanggap ng notification sa phone kapag natapos ng agent ang isang job?

Gamitin ang messaging gateway. Walang paraan ang dashboard at SSH para gisingin ang phone, dahil walang Hermes app sa device na tatanggap ng push notification. Ikonekta ang agent sa Telegram, Signal, Discord, o ibang supported platform gamit ang hermes gateway setup, at hayaang ang sariling app ng platform ang mag-deliver ng notification. Maaari ring mag-push ang isang cron job ng iisang message gamit ang hermes send -t telegram -s "Job done" -f /path/to/report.txt. Magde-deliver ito nang hindi tinatawag ang model.