rakit-agent/hermes
step 04

Memory & AGENTS.md

Memory itu yang bikin dia inget lo antar sesi. Tapi memory di Hermes sengaja dibatesin: kecil, dikurasi, dan bisa lo gate.

Dua file, dua tujuan

FileIsiLimit
memories/MEMORY.mdCatatan agent: fakta environment, konvensi project, quirk tool, pelajaran2.200 karakter (~800 token), kira-kira 8-15 entri
memories/USER.mdProfil lo: nama, role, preferensi, gaya komunikasi1.375 karakter (~500 token), kira-kira 5-10 entri

Dua-duanya ditulis si agent lewat tool memory (aksi: add, replace, remove). Lo gak perlu nulis manual. Mau dia inget sesuatu? Bilang aja:

chat
> inget ya, gw lebih suka jawaban pendek dan gw di zona WIB
# agent manggil memory(add, target=user, ...) → kesimpen ke USER.md

Memory cuma kesimpen kalau model beneran manggil tool memory. Kalimat "oke udah gw inget" doang itu cuma teks. Cek dengan cat ~/.hermes/memories/MEMORY.md atau hermes journey list.

"Kok dia lupa yang barusan gw bilang?"

Memory di-inject ke system prompt sebagai snapshot beku pas sesi mulai. Kalau agent nyimpen sesuatu di tengah sesi, ke disk-nya langsung, tapi di system prompt baru muncul di sesi berikutnya. Sengaja, biar prefix cache LLM gak rusak. Jadi: /new kalau mau "refresh".

Konsekuensinya buat bot Telegram yang sesinya nyambung terus: loop belajarnya gak jalan sampai sesi direset. Set reset sesi berkala (ada di config gateway) kalau mau memory-nya kepake.

Gating: lo approve dulu sebelum dia nulis memory

Ini boundary penting. Default-nya agent boleh nulis memory bebas. Buat agent yang jalan unattended (Telegram, cron), nyalain approval:

~/.hermes/config.yaml
memory:
  memory_enabled: true
  user_profile_enabled: true
  memory_char_limit: 2200
  user_char_limit: 1375
  write_approval: true     # tulisan di-stage, lo review dulu
chat / CLI
> /memory pending          # liat antrian
> /memory approve <id>
> /memory reject <id>
> /memory approval on|off  # toggle runtime

$ hermes journey list      # timeline semua yang dia pelajarin (memory + skill)
$ hermes journey edit
$ hermes journey delete

Matiin memory total

Buat agent sekali pakai atau demo, set dua-duanya false: tool memory ilang dari schema dan guidance-nya ilang dari prompt. Kalau pake provider eksternal (Hindsight, Mem0, Honcho) itu gak kena; buat matiin semuanya sekalian, taruh memory di agent.disabled_toolsets.

Yang BUKAN memory

  • Variabel di .env: itu credential, bukan memory. Lebih lengkap di halaman Rahasia & credential.
  • Fakta yang lo sebut sambil lalu tanpa minta disimpen.
  • Prosedur panjang: itu skill.

Memory juga di-scan buat pola injection/exfiltration dan Unicode tak terlihat sebelum diterima. Duplikat otomatis ditolak. Kalau penuh, tool balikin error (gak diem-diem buang entri lama): agent harus remove/replace yang basi dulu.

AGENTS.md: aturan per-project

Kalau SOUL.md global, AGENTS.md itu lokal di folder project. Di-load pas startup dari working directory, dan nested AGENTS.md di subfolder ketemu progresif pas agent masuk ke sana.

./AGENTS.md
# Project: landing-page-kopi

- Framework: Astro. Jangan tambah React.
- Jalanin dev: `npm run dev` (port 4321)
- Test: `npm test` sebelum commit, selalu.
- Jangan edit `src/content/legal/*` tanpa konfirmasi.
- Commit message pake bahasa Inggris, imperative.
- Deploy cuma lewat `npm run deploy`, jangan push langsung ke main.

Prioritas context file (cuma satu tipe yang di-load per sesi, first match menang): .hermes.md → AGENTS.md → CLAUDE.md → .cursorrules. Discovery jalan naik sampai git root. SOUL.md selalu di-load terpisah, gak ikut rantai ini.

AGENTS.md dari repo orang lain = teks asing masuk prompt. Hermes nge-scan dan nge-block file project yang ketrigger pola injection (beda sama SOUL.md yang cuma warning). Tetep: baca dulu AGENTS.md sebelum nge-clone repo random terus nyuruh agent kerja di situ.

Background review (belajar otomatis)

Abis sebuah turn, Hermes bisa jalanin review di background buat ngusulin memory/skill baru. Bisa dirutein ke model lebih murah, ditunda, atau dimatiin. Digabung sama write_approval, lo dapet loop belajar yang tetep lo kontrol.