SSD Nodes Learn Hosting plans →
Panduan Matt ConnorOleh Matt Connor · Diperbarui 2026-08-13

Cara Mengakses Agent Hermes dari Ponsel

Pelajari 3 cara mengakses agent Hermes di VPS dari ponsel: jaringan mesh privat, endpoint HTTPS publik dengan login, atau SSH, serta cara mencabut akses.

Tiga cara mengakses agent Hermes dari ponsel

Untuk mengakses agent Hermes dari ponsel, gunakan dasbor web-nya. Keputusan utamanya adalah menentukan apa yang ditempatkan di depan dasbor tersebut. Opsi pertama adalah jaringan mesh privat. Dalam konfigurasi ini, dasbor hanya mendengarkan pada alamat Tailscale dan tidak ada port yang menghadap ke Internet. Opsi kedua adalah endpoint publik di balik reverse proxy dengan TLS (keamanan lapisan transport) dan login. Dalam konfigurasi ini, login tersebut menjadi satu-satunya perlindungan untuk terminal ke server Anda. Opsi ketiga adalah SSH (secure shell) dari aplikasi terminal. Opsi ini memerlukan konfigurasi paling sedikit, tetapi memberikan akses paling luas.

Panduan ini dimulai dari tahap akhir menjalankan agent Hermes pada VPS milik sendiri. Agent telah terpasang, merespons pada command line, dan sekarang Anda ingin mengaksesnya dari ponsel.

Perintah di bawah ini menggunakan tag v2026.8.3, yang dirilis pada 3 August 2026 dan diberi label v0.20.0 dalam catatan rilis. Hermes sering merilis versi baru, jadi kunci mesin pada suatu tag, bukan mengikuti main. Installer menerima commit:

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

hermes version menampilkan apa yang sebenarnya terpasang. Bandingkan hasilnya dengan tag sebelum mempercayai flag apa pun di halaman ini.

Yang disediakan repository, dan yang tidak disediakan

Tidak ada aplikasi iOS atau Android di repository Hermes. Klien native adalah hermes desktop (alias hermes gui), yaitu aplikasi Electron untuk macOS, Windows, dan Linux. Klien ini dapat terhubung ke agent remote, bukan agent lokal: tetapkan URL remote ke http://<server-address>:9119 di Settings pada bagian Gateway, atau export HERMES_DESKTOP_REMOTE_URL=http://<server-address>:9119 sebelum menjalankannya. Ini menyelesaikan kebutuhan laptop kedua. Namun, cara ini tidak menyediakan akses dari ponsel.

Antarmuka yang digunakan dari ponsel adalah hermes dashboard, yaitu antarmuka browser. Antarmuka ini mengelola konfigurasi, sesi, cron job, skill, log, dan platform perpesanan, serta menyematkan terminal: server menjalankan hermes --tui di balik PTY (pseudo-terminal) dan mengalirkan output ke halaman. Pada layar sempit, pengalih sesi berubah menjadi panel slide-over sehingga tata letak tetap dapat digunakan dari ponsel.

Secara default, dashboard mendengarkan pada 127.0.0.1:9119 dan membuka tab browser pada server itu sendiri. Ini tidak berguna pada VPS (virtual private server) tanpa antarmuka grafis. Jalankan dashboard tanpa membuka browser, lalu periksa socket:

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

Listener pada 127.0.0.1:9119 hanya dapat dijangkau dari server. Listener pada 0.0.0.0:9119 dapat dijangkau dari setiap jaringan yang terhubung ke mesin tersebut, termasuk jaringan publik. Satu baris itu menentukan seberapa terbuka server Anda, jadi baca hasilnya dan jangan berasumsi.

Opsi 1: mesh privat dengan Tailscale

Pilih opsi ini kecuali ada alasan untuk tidak menggunakannya. Tailscale adalah VPN mesh (virtual private network) yang dibangun di atas WireGuard. Setiap perangkat yang Anda daftarkan mendapatkan alamat tetap dan berkomunikasi langsung dengan perangkat lain. Ponsel Anda bergabung ke mesh yang sama, sehingga dashboard sama sekali tidak memerlukan port publik.

Pada server:

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

Instal aplikasi Tailscale pada ponsel, lalu masuk menggunakan akun yang sama. tailscale status pada server kemudian menampilkan ponsel berdasarkan namanya. Sekarang ikat dashboard ke alamat yang ditampilkan oleh tailscale ip -4:

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

Mengikat ke alamat mesh, bukan ke 0.0.0.0, berarti socket listening hanya tersedia pada antarmuka Tailscale. Pemindaian port pada alamat IP publik Anda tidak menemukan apa pun pada 9119 karena tidak ada proses yang listening di sana, sehingga firewall bukan lagi satu-satunya perlindungan Anda. Konfirmasikan kembali dengan ss -lntp | grep 9119.

Alamat bind juga menentukan autentikasi, dan bagian ini sering terlewatkan. Pada 127.0.0.1, dashboard tidak memiliki login. Pada alamat lain, gerbang autentikasi wajib digunakan, dan server menolak untuk start jika tidak ada provider yang dikonfigurasi. Project ini menyebut perilaku tersebut sebagai failing closed. Jalankan secara interaktif untuk pertama kali. Aplikasi akan menawarkan pengaturan username dan password saat itu juga. Hasilnya ditulis ke ~/.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

Buat secret tersebut dengan openssl rand -hex 32, lalu jangan mengubahnya. Secret ini menandatangani session cookie, sehingga perubahan pada secret akan mengeluarkan semua perangkat dari sesi. File yang sama menyimpan API key model Anda, jadi lindungi dengan chmod 600 ~/.hermes/.env.

Periksa gerbang tersebut dari mesin lain dalam mesh sebelum mempercayainya:

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

true yang diikuti oleh ["basic"] berarti gerbang aktif dan password provider adalah komponen yang menjawab. Dokumentasi project ini menjelaskan provider tersebut secara tegas: provider ini ditujukan untuk jaringan tepercaya atau VPN, dan tidak sesuai untuk dashboard yang menghadap Internet publik. Dalam mesh, kondisi Anda tepat seperti itu.

Untuk menggunakan HTTPS di dalam tailnet, serahkan port tersebut kepada Tailscale:

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

Tailscale melakukan terminasi TLS menggunakan sertifikat yang diterbitkan untuk nama MagicDNS mesin tersebut. Dengan demikian, browser berhenti menampilkan peringatan dan session cookie mendapatkan flag Secure. Aktifkan MagicDNS dan HTTPS Certificates pada halaman DNS di konsol admin Tailscale terlebih dahulu. Baca juga pemberitahuan di halaman tersebut: nama mesin dan nama DNS tailnet Anda dipublikasikan ke public certificate transparency ledger, yang dapat dibaca siapa saja.

Biaya sebenarnya di sini adalah server koordinasi. Trafik antara ponsel dan VPS Anda dienkripsi secara end-to-end dan tidak melewati Tailscale, tetapi akun yang menentukan perangkat mana yang menjadi bagian mesh tidak berada pada perangkat keras Anda. Jika hal ini penting, jalankan control plane sendiri menggunakan Headscale, server kontrol Tailscale yang di-self-host, lalu arahkan client ke sana menggunakan tailscale up --login-server https://headscale.example.com. Jika Anda ingin meninggalkan mesh dan mengonfigurasi peer secara manual, perbandingan antara WireGuard biasa dan Tailscale menjelaskan hal-hal yang harus Anda korbankan.

Opsi 2: endpoint HTTPS publik dan celah di dalamnya

Terkadang mesh tidak tersedia. Ponsel kerja mungkin tidak mengizinkan Anda memasang klien VPN. Dalam kondisi tersebut, tempatkan dashboard di balik reverse proxy. Pertahankan dashboard pada loopback dan biarkan Caddy mengelola sertifikat:

hermes.example.com {
  reverse_proxy 127.0.0.1:9119
}

Caddy mengambil dan memperbarui sertifikat secara otomatis. reverse_proxy miliknya meneruskan upgrade WebSocket tanpa direktif tambahan, yang diperlukan oleh terminal tertanam pada dashboard. Pada nginx, Anda harus menambahkan header Upgrade dan Connection sendiri. Menerbitkan sertifikat Let's Encrypt dengan Certbot pada nginx menjelaskan bagian TLS dari proses tersebut. Beri tahu Hermes nama publiknya agar callback login mengarah ke host yang benar:

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

Sekarang perhatikan celahnya. Gerbang autentikasi menggunakan alamat bind, bukan alamat asal permintaan. Dashboard yang terikat ke 127.0.0.1 di balik proxy akan melihat loopback, menganggap login tidak diperlukan, lalu melayani siapa pun yang diizinkan oleh proxy. Periksa apa yang benar-benar Anda publikasikan:

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

Jika perintah tersebut mencetak false, Internet hanya berjarak satu URL dari terminal pada server Anda. Tidak ada exploit yang digunakan, dan tidak ada pesan peringatan yang akan muncul di log. Ada dua perbaikan, dan Anda sebaiknya menerapkan setidaknya salah satunya. Tempatkan autentikasi pada proxy, misalnya dengan Authentik sebagai penyedia single sign-on yang di-host sendiri di depannya melalui forward auth, atau konfigurasikan penyedia OIDC (OpenID Connect) milik 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"

Meskipun dikonfigurasikan dengan benar, opsi ini memiliki batas minimum yang tidak dapat Anda turunkan. Halaman login publik dapat dijangkau dan diserang oleh siapa pun, sedangkan di baliknya terdapat shell pada VPS Anda. Nama pengguna dan kata sandi merupakan perlindungan yang lemah untuk kondisi tersebut. Karena itu, dokumentasi menganjurkan OAuth atau OIDC untuk bind publik. Terapkan rate limiting pada login, pertahankan ufw tertutup untuk semua akses selain port proxy dan SSH, lalu baca access log sesekali.

Opsi 3: SSH dan mosh dari terminal seluler

Cara dengan upaya paling rendah: instal aplikasi terminal pada ponsel, masukkan kunci SSH ke dalamnya, lalu gunakan antarmuka teks milik agent.

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

tmux new -A -s phone menghubungkan ke sesi bernama phone, atau membuatnya jika belum ada. Dengan demikian, agent tetap berjalan saat koneksi terputus, dan Anda kembali ke tempat yang sama saat terhubung lagi. Polanya sama seperti yang digunakan untuk menjalankan Claude Code dari ponsel.

SSH biasa melalui jaringan seluler tidak nyaman karena koneksi terputus setiap kali ponsel berganti alamat atau masuk mode tidur. Mosh mengatasi masalah ini. Mosh berjalan melalui UDP (user datagram protocol) dan menyinkronkan status terminal, bukan aliran byte. Dengan demikian, sesi tetap berjalan saat Anda berpindah dari wifi ke jaringan seluler:

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

Dari ponsel, jalankan mosh you@vps.example.com. Mosh menjalankan mosh-server melalui login SSH yang sudah ada, lalu memindahkan sesi ke UDP pada rentang 60000 hingga 61000. Karena itu, rentang tersebut harus dibuka.

Risiko keamanannya tetap sama. Sesi SSH adalah shell, dan shell dapat melakukan semua hal yang dapat dilakukan oleh akun tersebut. Prompt persetujuan dari agent menjadi penghalang terakhir antara ponsel tidak terkunci yang dicuri dan file Anda. Gunakan akun non-root khusus untuk ini, gunakan kunci saja, lalu lakukan hardening SSH pada VPS sebelum menyimpan kunci pada perangkat yang Anda bawa bepergian.

Hal yang rusak pada jaringan seluler

Ada empat hal, dan tidak satu pun dapat diperbaiki hanya dengan mengubah konfigurasi.

Dashboard mengeluarkan Anda saat tidak sedang melihatnya. Access token memiliki TTL (time to live) 15 menit, dan kontrak API saat ini tidak memiliki refresh token. Saat token kedaluwarsa, halaman menerima respons 401 lalu kembali ke /login. Buka dashboard, masukkan ponsel ke saku selama dua puluh menit, lalu Anda kembali ke layar login dan semua teks yang sedang diketik hilang. Tidak ada yang rusak. Masuk kembali.

Terminal tertanam tidak bertahan saat tab berada di latar belakang. Server menjalankan TUI (text user interface) di balik PTY dan menghentikannya dengan bersih saat tab ditutup. Membuka kembali tab akan menjalankan sesi baru. Browser seluler membuang tab di latar belakang untuk membebaskan memori. Karena itu, berpindah ke aplikasi lain dalam waktu cukup lama akan mengakhiri terminal tersebut. Riwayat chat Anda tetap aman karena sesi disimpan di server dan hermes sessions list masih menampilkannya. Namun, terminal itu sendiri tidak dapat disambungkan kembali. Jika memerlukan sesi yang tetap bertahan, gunakan tmux melalui SSH.

Koneksi yang idle terputus tanpa pesan. Operator seluler memutus koneksi TCP yang idle untuk membebaskan entri tabel NAT (network address translation). Ponsel juga hampir sepenuhnya berhenti melayani jaringan saat layar mati. WebSocket yang tidak aktif selama beberapa waktu biasanya sudah terputus saat Anda membuka kunci ponsel. Halaman baru tersambung kembali setelah Anda menyentuhnya. Karena itu, mosh terasa lebih baik daripada SSH di ponsel: mosh tidak bergantung pada koneksi yang dapat terputus.

Tidak ada notifikasi yang dikirim secara push. Dashboard maupun sesi SSH tidak dapat membangunkan ponsel Anda. Tidak ada aplikasi Hermes pada perangkat tersebut, sehingga tidak ada jalur menuju layanan push platform. Saat proses agent yang berjalan lama selesai, Anda baru mengetahuinya ketika memeriksa kembali.

Notifikasi diterima melalui gateway pesan

Solusi untuk masalah terakhir adalah gateway, yaitu cara lain untuk mengakses agent. hermes gateway menghubungkan agent ke platform pesan, termasuk Telegram, Discord, Slack, WhatsApp, Signal, dan email. Anda kemudian berkomunikasi dengan agent melalui aplikasi yang sudah memiliki kanal push di ponsel, sudah menangani pengiriman di latar belakang, dan sudah menangani terputusnya jaringan.

hermes gateway setup
hermes gateway install
hermes gateway status

hermes gateway install mendaftarkan gateway sebagai service systemd agar gateway aktif kembali setelah reboot. Installer Hermes tidak membuat unit service untuk Anda, sehingga hermes dashboard tidak akan aktif kembali secara otomatis setelah restart. Buat unit untuk setiap komponen yang Anda gunakan. Penulisan service dan timer systemd pada VPS menjelaskan file tersebut.

Scheduled job juga dapat mengirim hasil dengan cara yang sama, tanpa melibatkan percakapan:

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

Otorisasi di sini menggunakan penolakan secara default. Jika allowlist belum ditetapkan dan GATEWAY_ALLOW_ALL_USERS belum disetel, semua pengguna ditolak. Ini adalah titik awal yang tepat. Cantumkan akun yang diizinkan dalam ~/.hermes/.env:

TELEGRAM_ALLOWED_USERS=123456789
GATEWAY_ALLOWED_USERS=123456789

Atau aktifkan pairing berbasis kode, bukan menempelkan ID numerik, dengan menyetel unauthorized_dm_behavior: pair dalam ~/.hermes/config.yaml. Akun yang belum dikenal dan mengirim pesan kepada agent akan menerima kode delapan karakter. Tidak ada tindakan lain sampai Anda menyetujuinya:

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

Kode kedaluwarsa setelah satu jam. Pengguna dapat meminta satu kode setiap sepuluh menit. Lima percobaan yang gagal akan mengunci akun tersebut.

Membatasi dampak dari ponsel yang dicuri

Ponsel yang dapat terhubung ke agent Anda dapat menjalankan perintah pada server Anda, dan ponsel dapat hilang. Tentukan sekarang tindakan yang dapat dilakukan oleh orang yang memegangnya.

Biarkan persetujuan tetap aktif. approvals.mode secara default bernilai smart, yang meminta model tambahan untuk menilai risiko dan hanya menyetujui otomatis perintah berisiko rendah. Menetapkannya ke off sama dengan menjalankan semuanya menggunakan --yolo, sedangkan HERMES_YOLO_MODE=1 melakukannya melalui environment. Jangan membawa ponsel yang terhubung ke agent dalam kondisi tersebut. Tetapkan approvals.cron_mode: deny agar scheduled job tidak dapat menyetujui perintahnya sendiri saat Anda tidur.

approvals:
  mode: smart
  cron_mode: deny

Batasi ruang gerak agent agar dampak kerusakan lebih kecil. terminal.backend: docker menjalankan perintah di dalam container yang menghapus semua Linux capabilities, kecuali daftar singkat yang ditentukan, menetapkan no-new-privileges, dan membatasi jumlah proses. Dengan demikian, container menjadi batas keamanan, bukan prompt. terminal.cwd menetapkan working directory. HERMES_WRITE_SAFE_ROOT membatasi write_file dan patch ke direktori yang Anda tentukan. Penulisan di luar direktori tersebut diblokir dan tidak dapat dilewati melalui persetujuan.

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

Hermes sudah memblokir penulisan ke ~/.ssh, ~/.aws, ~/.kube, dan /etc/sudoers, menolak penulisan file .env di mana pun pada disk, serta menolak daftar perintah destruktif yang ketat, apa pun pengaturan persetujuan Anda. Perlakukan perlindungan tersebut sebagai batas minimum, bukan sebagai rencana keamanan Anda. Jalankan agent sebagai pengguna biasa, bukan sebagai root. Pertimbangan yang sama berlaku untuk coding agent apa pun yang dibiarkan berjalan tanpa pengawasan. menjalankan Claude Code dengan aman di VPS membahasnya secara lebih mendetail.

Selanjutnya, tuliskan langkah pencabutan akses sebelum Anda membutuhkannya. Menghapus perangkat dari konsol admin Tailscale langsung memutus akses mesh. Mengubah HERMES_DASHBOARD_BASIC_AUTH_SECRET lalu melakukan restart membatalkan semua sesi dashboard pada setiap perangkat, karena nilai tersebut digunakan untuk menandatangani session cookie. Menghapus public key ponsel dari ~/.ssh/authorized_keys mengakhiri akses SSH. hermes pairing revoke telegram <user-id> menghapus akun messaging. Jika perangkat tersebut menyimpan sesuatu yang dapat membaca provider key Anda, cabut key tersebut dengan hermes auth logout <provider> dan buat key baru pada provider terkait.

Periksa hasilnya, jangan hanya mengasumsikannya. Jalankan perintah berikut pada server Anda sendiri. Output yang dihasilkan bergantung pada setup Anda:

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

Log tersimpan di ~/.hermes/logs/. Baca log tersebut setelah terjadi insiden, dan baca secara berkala saat tidak ada insiden.

FAQ

Apakah ada aplikasi seluler Hermes resmi untuk iOS atau Android?

Tidak. Repositori Hermes menyediakan antarmuka baris perintah, dasbor web, dan klien desktop Electron untuk macOS, Windows, dan Linux. Tidak ada build iOS atau Android resmi dari pihak pertama. Dari ponsel, Anda dapat menggunakan dasbor web di browser, klien SSH, atau platform perpesanan yang terhubung melalui hermes gateway. Klien seluler pihak ketiga memang tersedia. Namun, klien tersebut adalah kode pihak ketiga yang menyimpan kredensial untuk agent Anda, jadi baca kode sumbernya sebelum menginstalnya.

Mengapa dasbor Hermes mengeluarkan saya dari akun di ponsel?

Token akses memiliki TTL 15 menit, dan kontrak API saat ini tidak memiliki refresh token. Saat token kedaluwarsa, halaman menerima respons 401 lalu berpindah ke /login. Menjalankan browser di latar belakang pada ponsel membuat masalah ini lebih terlihat, karena berada di aplikasi lain selama 20 menit sudah cukup untuk memicunya. Atur HERMES_DASHBOARD_BASIC_AUTH_SECRET ke nilai acak yang stabil agar kunci penandatanganan sesi tetap sama setelah restart. Dengan demikian, penyebab kedua Anda dikeluarkan dari akun akan hilang.

Dapatkah saya menempatkan dasbor Hermes di Internet publik dengan aman?

Hanya jika Anda menggunakan autentikasi yang telah Anda verifikasi sendiri. Gerbang autentikasi diaktifkan berdasarkan alamat bind. Jadi, dasbor yang terikat ke 127.0.0.1 di belakang reverse proxy tidak pernah meminta login dari Internet. Jalankan curl -s https://your-host/api/status | jq '.auth_required' dan baca hasilnya. Gunakan OAuth atau OIDC, bukan username dan password, karena dokumentasi proyek menyatakan bahwa penyedia password ditujukan untuk jaringan tepercaya dan VPN. Mesh privat menghilangkan masalah ini sepenuhnya. Karena itu, mesh privat merupakan pilihan default yang lebih baik.

Apakah saya memerlukan akun Tailscale, atau dapatkah saya melakukan self-hosting pada control plane?

Anda dapat melakukan self-hosting. Headscale adalah implementasi terbuka dari server koordinasi Tailscale, dan klien Tailscale resmi dapat terhubung ke sana dengan tailscale up --login-server https://headscale.example.com. Setelah itu, Anda mengelola sendiri daftar perangkat yang diizinkan masuk ke mesh. Konsekuensinya, Anda harus menjalankan dan mencadangkan server tersebut. Selama server tidak aktif, Anda tidak dapat mendaftarkan atau mengautentikasi ulang perangkat.

Bagaimana cara mendapatkan notifikasi di ponsel saat agent menyelesaikan tugas?

Gunakan gateway perpesanan. Dasbor dan SSH tidak dapat membangunkan ponsel, karena tidak ada aplikasi Hermes pada perangkat yang menerima push notification. Hubungkan agent ke Telegram, Signal, Discord, atau platform lain yang didukung dengan hermes gateway setup. Selanjutnya, biarkan aplikasi platform tersebut mengirimkan notifikasi. Cron job juga dapat mengirim satu pesan dengan hermes send -t telegram -s "Job done" -f /path/to/report.txt. Pesan tersebut dikirim tanpa memanggil model.