Tiga Lapis Kunci: Gimana Hermes Agent Nyimpen API Key

Bayangin Hermes Agent kayak rumah. Dia butuh banyak kunci buat buka pintu: OpenAI, GitHub, HuggingFace, Telegram, dan seterusnya. Tapi gak semua kunci disimpan di tempat yang sama. Ada tiga laci, masing-masing beda karakter dan aturan mainnya.

Lapis 1 — System Environment Variables (laci di udara)

Ini env yang ditanam langsung ke sistem operasi. Paling kuat, paling tinggi prioritasnya. Begitu di-export, semua child process langsung bisa lihat.

Tapi ada jebakan: gak persisten. Restart server → hilang. Dan yang lebih bahaya: cron job seringkali gak mewarisi system env dari dashboard VPS (Zeabur, Railway, dsb).

Lapis 2 — File .env (brankas di lantai)

File /opt/data/.env — dibaca Hermes saat startup. Persisten, selamat dari restart. Formatnya simpel: KEY=value.

Kelemahannya: child process (terminal tool, script) gak otomatis mewarisi isi .env. Harus di-export manual:

export $(grep -v '^#' /opt/data/.env | xargs)

Buat cron job, ini wajib — taro di baris paling atas setiap shell script.

Lapis 3 — config.yaml (panel kontrol di dinding)

Bukan tempat secret. Di sini settingan model, tools, gateway, timeout. Aturan emasnya: .env untuk secrets, config.yaml untuk settings.

Urutan prioritas:

  1. System Env (paling kuat)
  2. .env file (fallback)
  3. config.yaml (settings only, bukan secret)

Cek cepat: “Token gue ada di mana?”

  • printenv GITHUB_TOKEN → nemu tapi .env kosong → dari dashboard VPS
  • printenv GITHUB_TOKEN → nemu, .env juga nemu → dua-duanya ada, system env yang dipake
  • printenv GITHUB_TOKEN → kosong, tapi .env nemu → token dari .env tapi belum di-export
  • grep nemu tapi depannya ada # → cuma placeholder, bukan token aktif

Pelajaran dari lapangan:

Cerita nyata di Zeabur. Token GITHUB_TOKEN jalan normal di chat (printenv nemu), tapi backup cron job gagal terus — token not provided.

Ternyata: token diinjeksi dashboard Zeabur ke system env (makanya printenv di chat nemu), tapi .env isinya cuma placeholder # GITHUB_TOKEN=. Cron job Hermes berjalan di environment terpisah yang gak dapat warisan dashboard itu.

Solusinya: tulis token ke .env + source dari .env di setiap cron script. printenv saat chat bukan jaminan token tersedia di cron.

Buat yang hosting Hermes di VPS (Zeabur, Railway, atau VPS manapun), ini checklist simpelnya:

  • Token kritis selalu tulis ke .env — jangan cuma ngandelin inject-an dashboard
  • Cron shell script wajib ada export $(grep -v '^#' /opt/data/.env | xargs) di baris pertama
  • Jangan taruh API key di config.yaml
  • Kalau udah edit .env, jangan lupa /restart Hermes