Rahasia & credential: bukan di memory
Kesalahan paling umum: ngetik "inget ya, API key gw adalah sk-abc..." ke agent. Jangan. Memory itu teks yang di-inject ke prompt tiap sesi, kebaca model, dan bisa bocor lewat output. Credential punya rumah sendiri.
Aturan satu kalimat
Rahasia (API key, bot token, password) → ~/.hermes/.env. Setting (model, backend, limit) → config.yaml. Fakta soal lo → memory. Kalau dua-duanya keset, config.yaml menang buat setting non-rahasia.
Kenapa memory bukan tempatnya
- MEMORY.md / USER.md masuk ke system prompt setiap sesi. Artinya tiap request ke provider LLM bawa rahasia lo.
- Model bisa "kepeleset" nge-quote isinya di jawaban, log, atau di skill yang dia bikin sendiri.
- Memory itu dikirim lewat provider eksternal kalau lo pake Mem0/Hindsight.
- Memory punya scanner yang nolak pola credential/exfiltration, tapi jangan ngandelin itu sebagai satu-satunya pagar.
Cara yang bener: .env
# provider LLM OPENROUTER_API_KEY=sk-or-... # messaging TELEGRAM_BOT_TOKEN=7123456789:AAH... TELEGRAM_ALLOWED_USERS=123456789 # tools XAI_API_KEY=xai-... # sandbox batas tulis (opsional) HERMES_WRITE_SAFE_ROOT=/home/bima/projects
Atau lewat CLI, yang otomatis ngerutein key ke file yang bener:
$ hermes config set OPENROUTER_API_KEY sk-or-... # → masuk .env $ hermes config set model.default openrouter/... # → masuk config.yaml $ chmod 600 ~/.hermes/.env # cuma lo yang bisa baca
Referensi dari config, bukan nilai
Kalau sebuah config butuh secret (misal MCP server), tulis ${NAMA_VAR} di config.yaml dan taruh nilainya di .env. Jadi config.yaml aman di-commit / di-share buat konten.
mcp_servers: github: command: npx args: ["-y", "@modelcontextprotocol/server-github"] env: GITHUB_TOKEN: ${GITHUB_TOKEN} # nilai asli di .env
Sub-proses MCP cuma nerima env var yang lo deklarasiin eksplisit di blok env, bukan seluruh environment lo.
Pagar bawaan yang ngejaga rahasia
| Pagar | Efek |
|---|---|
| Blocked write paths | Agent gak bisa nulis ke .env, auth.json, ~/.ssh/, ~/.aws/, ~/.netrc, data pairing. Tanpa prompt, langsung tolak. |
security.redact_secrets: true (default) | API key, token, password di-redact dari output tool dan log. |
| Log auto-redact | errors.log dan gateway.log gak nyimpen secret mentah. |
| Scanner memory & context | Nolak entri yang keliatan kayak "baca credential" atau exfiltration. |
Pagar nulis bukan pagar baca. Agent dengan terminal nyala tetep bisa cat ~/.hermes/.env kalau disuruh atau kalau kena injection. Makanya: taruh larangan baca di SOUL.md, tambah deny rule "*cat*.env*" kalau perlu, dan buat bot publik pake backend docker/ssh biar .env host-nya gak ada di sana.
Credential tool pihak ketiga (contoh: X / xurl)
Beberapa tool nyimpen credential-nya sendiri, misal xurl di ~/.xurl. Aturan dari skill resminya tegas:
- Agent gak boleh baca, print, parse, upload, atau kirim
~/.xurlke konteks LLM. - Lo isi file itu manual di mesin lo sendiri. Registrasi & rotasi credential dilakuin di luar sesi agent.
- Jangan pernah paste credential ke chat agent. Jangan pake
--verbosedi sesi agent.
Pola yang sama berlaku buat tool apapun: credential diisi manusia di luar sesi, agent cuma manggil CLI-nya.
Buat konten: cara nunjukin tanpa bocor
- Rekam layar pake env dummy:
TELEGRAM_BOT_TOKEN=xxxx:REDACTED. - Pake profile terpisah buat demo (
hermes -p demo) biar .env asli gak kebuka. hermes config getbisa nge-resolve${VAR}jadi nilai asli di beberapa versi. Jangan jalanin itu on-camera buat key yang kepake.- Abis rekaman, rotasi token yang sempet keliatan. Selalu.