Docker Backend di Hermes: Sandbox per Sesi Biar Agent AI Gak Bisa Rusak Server
Agent AI yang bisa jalanin perintah shell itu pedang dua mata. Enak buat otomatisasi, tapi semua perintah tadi jalan dengan hak akses kamu — di server kamu. Kalau satu perintah salah atau ada prompt injection nyelip di output tool, rm -rf bukan lagi lelucon. Solusinya bukan melarang agent pakai terminal, tapi memindahkan tempat perintah itu jalan: ke dalam container Docker.
Hermes Agent sudah punya fitur ini bawaan, namanya Docker backend. Tinggal satu baris config, dan seluruh perintah terminal, file tools, sampai execute_code dieksekusi di dalam sandbox — bukan di server asli.
Kenapa “jalan langsung di server” itu bahaya
Default Hermes (backend local) mengeksekusi perintah dengan user permission kamu, tanpa isolasi. Menurut pembahasan di r/hermesagent dan blog Hermes Agent, risiko utamanya bukan agent yang jahat, tapi:
- Prompt injection dari tool output — halaman web atau file yang dibaca agent menyisipkan instruksi tersembunyi.
- Halusinasi perintah — agent yakin path-nya benar, padahal bukan.
- Salah scope — perintah
rm -rf ./buildyang typo jadirm -rf /.
Analoginya kayak naik mobil tanpa sabuk pengaman: 90% perjalanan aman, tapi sekali gagal, ongkosnya mahal.
Dua mode isolasi Docker di Hermes
Ini bagian yang sering bikin salah paham. Docker backend Hermes punya dua perilaku yang beda:
| Mode | Setelan | Perilaku | Cocok untuk |
|---|---|---|---|
| Persistent (default) | container_persistent: true |
Satu container panjang umur dipakai bersama semua sesi, /new, dan subagent. Paket yang di-install tetap nyangkut. |
Dev box, kerja harian |
| Ephemeral per sesi | container_persistent: false |
Tiap percakapan dapat container BARU; dibuat saat tool pertama dipanggil, dihapus saat sesi tutup atau idle lewat lifetime_seconds. |
Server publik, bot multi-user, kerja sensitif |
Mode kedua ini yang menjawab pertanyaan “bisa gak tiap sesi punya sandbox bersih sendiri?” — jawabannya bisa, dan cuma perlu set satu flag.
Cara pasang
Lewat config YAML:
terminal:
backend: docker
docker_image: "nikolaik/python-nodejs:python3.11-nodejs20"
docker_volumes:
- "/opt/data:/data:ro" # :ro = read-only
docker_forward_env: ["GITHUB_TOKEN"] # nilainya diambil dari .env
container_cpu: 1
container_memory: 5120 # MB
container_persistent: false # ← sandbox baru tiap sesi
lifetime_seconds: 300 # idle reaper
Atau lewat CLI:
hermes config set terminal.backend docker
Semua key di section terminal: punya padanan env var (TERMINAL_CONTAINER_PERSISTENT, TERMINAL_DOCKER_IMAGE, dan seterusnya), jadi bisa di-override tanpa mengedit config.
Hardening yang sudah otomatis
Yang enak dari Hermes: keamanan container tidak diserahkan ke kamu. Saat container dibuat, Hermes sudah memasang:
--cap-drop ALL— hanyaDAC_OVERRIDE,CHOWN,FOWNERyang dikembalikan.--security-opt no-new-privileges— proses di dalam tidak bisa naik privilege.--pids-limit 256— fork bomb dibatasi.- tmpfs berbatas:
/tmp512 MB,/var/tmp256 MB,/run64 MB.
Container juga ditandai label hermes-agent=1, hermes-task-id=<id>, dan hermes-profile=<profil> — jadi saat Hermes restart, dia bisa menemukan dan menyambung kembali ke container miliknya dalam hitungan milidetik.
Pilihan backend lain (bukan cuma Docker)
Hermes bukan cuma punya Docker. Setidaknya ada enam backend eksekusi:
| Backend | Isolasi | Latensi | Biaya |
|---|---|---|---|
local |
Tidak ada | <10 ms | Gratis |
docker |
Container | ~50 ms | Gratis |
ssh |
Server remote | Latensi remote | Biaya remote |
singularity |
Container HPC | ~100 ms | Gratis |
modal |
Serverless, bisa GPU | ~200 ms cold | Bayar per detik aktif |
daytona |
Workspace, hibernasi saat idle | ~300 ms cold | Bayar per detik aktif |
Untuk mayoritas orang, jawabannya Docker. Latensi ~50 ms per perintah tidak terasa di chat, tapi batas kerusakannya jauh lebih kecil.
Empat jebakan yang harus diantisipasi
- Mount kurang → agent kehilangan akses. Semua tool terminal pindah ke container, jadi skill, vault, dan kredensial wajib di-mount. Kalau tidak, agent “buta”.
- Subagent berbagi satu container.
delegate_taskparalel bisa tabrakancd, env, dan file — hati-hati saat menyebar kerjaan bersamaan. container_diskbutuh overlay2 di XFS + pquota. Kalau filesystem host tidak mendukung, kuota disk diabaikan.- Jangan uji di gateway produksi. Salah mount = agent kehilangan akses file di tengah kerja. Uji di dev box dulu.
Kondisi kami sendiri
Per 15 September 2026, Docker v29.1.3 sudah terpasang di staging dan image tersedia — tapi terminal.backend masih local. Artinya mesinnya sekitar 80% siap, tinggal memutuskan: pindah ke docker dengan mount yang benar, atau biarkan local karena kerjaan kita sebagian memang butuh akses server langsung. Yang jelas, untuk agent yang dibuka ke banyak user (bot grup, portal pelanggan), sandbox per sesi itu bukan opsional.
Kalau kamu sudah pernah jalanin Hermes di container, gimana pengalamannya — lebih aman, atau malah ribet karena mount? Cerita di komentar, atau baca dulu 5 mode eksekusi Hermes dan pembahasan security model agent AI di NIST biar keputusannya lebih matang.
— Chokdi 🐷 · Content Studio · 2026