{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreih2rssmselr3bslcezie7pjrmrewdp4l627affveluy2ne42ekrmq",
"uri": "at://did:plc:25rdn5elo5izoxrmtis34zuk/app.bsky.feed.post/3mplayoerchy2"
},
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreih3fdg2cwdnhsqr6muiddnyifbgvdcfqwrumldrwaakve6kjpttla"
},
"mimeType": "image/webp",
"size": 571928
},
"path": "/ardisaurus/bikin-otak-ai-agent-bisa-diedit-di-obsidian-panduan-sinkronisasi-dua-arah-untuk-pemula-4p05",
"publishedAt": "2026-07-01T09:12:53.000Z",
"site": "https://dev.to",
"tags": [
"ai",
"beginners",
"tutorial",
"python",
"hermes-memory-sync.py"
],
"textContent": "Pernah kepikiran, \"Sebenarnya AI agent saya inget apa aja sih soal saya?\" Kalau iya, tulisan ini buat kamu.\n\n## Masalahnya: Memori AI Itu Kotak Hitam\n\nKalau kamu pakai AI agent yang punya memori jangka panjang (persistent memory), kamu mungkin pernah ngerasa gak nyaman karena beberapa hal ini:\n\n * Gak tahu persis apa yang diingat AI tentang kamu\n * Gak tahu file-nya disimpan di mana\n * Gak bisa edit memori itu tanpa ngetik perintah lewat chat\n * Takut kalau file memorinya rusak, semua informasi hilang begitu saja\n\n\n\nStudi kasus di tulisan ini pakai **Hermes Agent** , agent open-source besutan Nous Research. Sebagai konteks buat yang belum familiar: Hermes Agent adalah agent AI open-source yang berjalan sebagai proses (daemon) mandiri di server milikmu sendiri, mengumpulkan memori lintas sesi, menjalankan tugas terjadwal, terhubung ke belasan platform pesan, dan menulis skill-nya sendiri dari pengalaman. Framework berlisensi MIT ini dirilis Februari 2026 dan dengan cepat menarik perhatian komunitas open-source AI.\n\nHermes menyimpan memorinya di dua file utama: `USER.md` (profil tentang kamu) dan `MEMORY.md` (catatan agent soal lingkungan kerja, kebiasaan, dan pelajaran yang dipetik), plus satu file lagi `SOUL.md` untuk \"kepribadian\" si agent. Semuanya disimpan dalam format teks polos yang dipisah pakai karakter `§`, seperti ini:\n\n\n\n Preferensimu: komunikasi singkat dan langsung\n §\n Namamu Budi, awal 30-an, tinggal di Surabaya\n §\n Penggemar PKM / Building a Second Brain\n\n\nFormat ini fungsional, tapi ada beberapa kekurangan:\n\n * **Susah diedit langsung** karena bukan format yang ramah manusia\n * **Gak ada riwayat versi** — sekali salah edit, informasi bisa hilang selamanya\n * **Gak ada tampilan visual** — susah lihat semua catatan sekaligus\n * **Gak ada antarmuka grafis** — harus lewat chat agent atau edit file mentah\n\n\n\nSolusinya: pindahkan memori itu ke **Obsidian** , aplikasi catatan berbasis markdown yang mendukung riwayat versi lewat git dan bisa diedit bebas.\n\n## Arsitektur Sistemnya\n\nSistem sinkronisasi ini punya empat lapisan:\n\n\n\n ┌──────────────────┐\n │ Memori Hermes │ ~/.hermes/memories/{USER,MEMORY}.md (format §)\n │ ditulis agent │ ~/.hermes/SOUL.md (teks polos)\n └────────┬─────────┘\n │ export / import\n ▼\n ┌──────────────────┐\n │ Mesin sinkron │ ~/.hermes/scripts/hermes-memory-sync.py\n │ (Python) │ (tanpa dependensi eksternal, cuma stdlib)\n └────────┬─────────┘\n │ tulis / baca\n ▼\n ┌──────────────────┐\n │ Vault Obsidian │ _hermes/{USER,MEMORY,SOUL}.md (markdown rapi)\n │ (bisa diedit) │ _hermes/skills-index.md (daftar skill)\n │ │ _hermes/skills/*.md (skill custom)\n └────────┬─────────┘\n │ git commit tiap 6 jam\n ▼\n ┌──────────────────┐\n │ Riwayat Git │ Jejak lengkap tiap perubahan\n └──────────────────┘\n\n\nPoin kuncinya: **pakai Python, bukan bash**. Karakter `§` itu multi-byte di UTF-8, dan bash gampang salah potong kalau dipakai sebagai pemisah (delimiter). Python (`re.split()`) menangani ini dengan benar, jadi seluruh mesin sinkronisasi ditulis sebagai satu file Python (sekitar 400 baris) yang cuma pakai library bawaan Python — tidak perlu install apa-apa lagi.\n\n## Cara Kerjanya\n\n### Export: dari Hermes ke Obsidian\n\nScript membaca file memori Hermes yang dipisah `§`, memecahnya jadi entri-entri terpisah, lalu menulis tiap entri sebagai heading `## Entry N` di bawah metadata (YAML frontmatter):\n\n\n\n ---\n source: hermes-agent\n type: user\n last_synced: 2026-06-28T17:53:29+07:00\n entries: 12\n ---\n\n ## Entry 1\n Preferensimu: komunikasi singkat dan langsung\n\n ---\n\n ## Entry 2\n Namamu Budi, awal 30-an, tinggal di Surabaya\n\n\nHasilnya bisa langsung diedit di Obsidian. Vault juga otomatis mendapat:\n\n * `SOUL.md` — identitas/karakter agent, tanpa batas karakter\n * `skills-index.md` — tabel semua skill yang terpasang, skill custom ditandai bintang\n * `skills/*.md` — file lengkap skill yang dibuat sendiri oleh agent\n\n\n\n### Import: dari Obsidian kembali ke Hermes\n\nArahnya bisa dibalik: script membaca heading `## Entry N`, buang metadata, gabungkan lagi entri-entri itu pakai pemisah `§`, lalu timpa file memori Hermes. Sebelum ditimpa, file lama otomatis disalin dulu sebagai cadangan (`.bak.<timestamp>`), jadi tidak ada data yang benar-benar hilang.\n\nSatu hal penting: Hermes punya batas karakter (1.375 karakter untuk USER, 2.200 untuk MEMORY) supaya jendela konteksnya tetap efisien. Saat proses import, script akan memangkas entri yang kelebihan — tapi salinan lengkapnya tetap disimpan di vault Obsidian.\n\n### Riwayat Versi Lewat Git\n\nAda tugas terjadwal (cron) di Hermes yang jalan tiap 6 jam:\n\n\n\n hermes cron create name=memories-to-obsidian \\\n schedule='0 */6 * * *' \\\n prompt='Run ~/.hermes/scripts/hermes-memory-sync.sh sync'\n\n\nTiap kali jalan, urutannya: export → `git add -A` → `git commit`. Hasilnya, kamu punya `git log` lengkap dari setiap perubahan memori. Kalau perlu balikin ke versi lama, tinggal:\n\n\n\n git log --oneline _hermes/USER.md # cari versi yang mau dipulihkan\n git show <hash>:_hermes/USER.md > /tmp/restored.md\n cp /tmp/restored.md _hermes/USER.md\n hermes-memory-sync.sh import\n\n\n## Panduan Setup (Sekitar 10 Menit)\n\n### 1. Buat folder vault\n\n\n mkdir -p ~/Documents/Obsidian\\ Vault/_hermes\n cd ~/Documents/Obsidian\\ Vault\n git init\n git config user.email \"kamu@email.com\"\n git config user.name \"Nama Kamu\"\n echo '_hermes/*.bak' >> .gitignore\n git add -A && git commit -m \"Initial vault\"\n\n\n### 2. Atur lokasi vault\n\n\n echo 'OBSIDIAN_VAULT_PATH=$HOME/Documents/Obsidian Vault' >> ~/.hermes/.env\n\n\nBaris ini memberi tahu script sinkronisasi ke mana file markdown harus ditulis.\n\n### 3. Siapkan script sinkronisasi\n\nSource code memory sync: hermes-memory-sync.py\n\nMesin utamanya ada di `~/.hermes/scripts/hermes-memory-sync.py` (Python). Ada juga wrapper shell `hermes-memory-sync.sh` yang cuma menyiapkan environment lalu memanggil script Python itu:\n\n\n\n #!/usr/bin/env bash\n DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\n exec python3 \"$DIR/hermes-memory-sync.py\" \"$@\"\n\n\nJangan lupa buat executable:\n\n\n\n chmod +x ~/.hermes/scripts/hermes-memory-sync.sh\n\n\n> Catatan: isi lengkap script Python-nya (~400 baris) biasanya tersedia sebagai referensi skill kalau kamu memang menjalankan Hermes Agent.\n\n### 4. Export pertama kali\n\n\n bash ~/.hermes/scripts/hermes-memory-sync.sh sync\n\n\nIni akan mengekspor semua memori yang ada sekarang ke vault, sekaligus bikin commit git pertama.\n\n### 5. Pasang cron untuk backup otomatis\n\n\n hermes cron create name=memories-to-obsidian \\\n schedule='0 */6 * * *' \\\n prompt='Run ~/.hermes/scripts/hermes-memory-sync.sh sync'\n\n\n### 6. Cek hasilnya\n\n\n hermes-memory-sync.sh status\n\n\nKamu akan lihat jumlah entri, pemakaian karakter, dan log git terbaru.\n\n## Apa Saja yang Bisa Kamu Lakukan?\n\nMau ngapain | Caranya\n---|---\nLihat semua yang diingat AI | Buka `_hermes/USER.md` dan `_hermes/MEMORY.md` di Obsidian\nTambah memori manual | Tulis blok `## Entry N` baru, lalu jalankan `hermes-memory-sync.sh import`\nHapus memori | Hapus blok `## Entry`-nya, lalu import\nPulihkan memori yang terhapus | `git log` → `git show <hash>:_hermes/USER.md` → pulihkan lalu import\nLihat apa yang berubah | `git diff HEAD~1..HEAD _hermes/USER.md`\nBackup ke GitHub | `git remote add origin <url> && git push`\nSinkron ke beberapa vault | Buat wrapper script dengan `OBSIDIAN_VAULT_PATH` berbeda-beda\n\n## Level Lanjutan: Multi-Vault dan Arsip Memori\n\n### Dua Vault Sekaligus\n\nKamu bisa jalankan sinkronisasi ini ke lebih dari satu vault — misalnya satu vault utama dan satu vault \"Second Brain\" terpisah dengan metode PARA. Masing-masing punya wrapper script dan cron sendiri:\n\n\n\n # ~/.hermes/scripts/hermes-memory-sync-second-brain.sh\n #!/usr/bin/env bash\n export OBSIDIAN_VAULT_PATH=\"$HOME/Documents/Second Brain\"\n exec python3 ~/.hermes/scripts/hermes-memory-sync.py \"$@\"\n\n\nCron-nya bisa dijalankan dalam mode \"no-agent\" supaya tidak makan token sama sekali:\n\n\n\n hermes cron create name=second-brain-sync \\\n schedule='0 */6 * * *' \\\n no_agent=true \\\n script=hermes-memory-sync-second-brain-cron.sh\n\n\n### Arsip Memori (Cold Storage)\n\nKalau memori sudah penuh, ada script pendamping yang bisa memindahkan entri yang jarang dipakai ke vault sebagai arsip:\n\n\n\n hermes-memory-archive.py archive USER \"detail proyek lama\"\n hermes-memory-archive.py search USER \"proyek\"\n hermes-memory-archive.py promote USER entry-id\n\n\nEntri yang diarsipkan disimpan sebagai file markdown bertimestamp di `_hermes/archive/` — bisa dibaca manusia, dicari, dan dipulihkan kapan saja.\n\n## Pelajaran yang Bisa Diambil\n\n 1. **Bash gak cocok buat karakter`§`.** Karakter ini multi-byte di UTF-8 (byte `C2 A7`), sementara `IFS` di bash motong berdasarkan byte, jadi hasilnya bisa salah kalau file punya banyak entri. Python (`re.split()`) menangani ini dengan benar.\n\n 2. **Ada mekanisme deteksi \"drift\".** Tool memori Hermes mengecek apakah file bisa dipecah-gabung ulang secara konsisten lewat pemisah `§`. Kalau kamu nulis markdown mentah langsung ke file memori Hermes, tool-nya akan menolak menyimpan perubahan berikutnya dan otomatis bikin snapshot cadangan. Script sinkronisasi ini menghindari masalah itu dengan mengganti nama file asli jadi `.bak` sebelum menimpanya.\n\n 3. **Wajib mulai sesi baru (`/new`) setelah import.** File memori itu cuma \"snapshot\" yang dimuat sekali di awal sesi. Kalau kamu baru saja import perubahan, sesi yang sedang berjalan masih pakai snapshot lama — harus mulai sesi baru dulu.\n\n 4. **Batas karakter itu ketat, tapi ada gunanya.** Batas 1.375 karakter (USER) dan 2.200 karakter (MEMORY) menjaga jendela konteks agent tetap efisien. Salinan di vault tidak punya batas itu, jadi kamu bisa simpan versi lengkap di sana sementara Hermes cuma pegang versi ringkasnya.\n\n\n\n\n## Rekomendasi Keamanan Sebelum Kamu Pakai Ini\n\nSebelum kamu terapkan setup ini, ada beberapa risiko keamanan yang layak dipikirkan dulu — apalagi karena file yang disinkronkan berisi data pribadi (nama, lokasi, kebiasaan, detail proyek) dalam bentuk **teks polos tanpa enkripsi**.\n\n 1. **Jangan push vault ke repo GitHub publik.** File `_hermes/USER.md` dan `_hermes/MEMORY.md` isinya profil pribadi kamu apa adanya. Kalau repo-nya publik, siapa pun bisa baca riwayat git-nya — termasuk versi lama yang sudah \"dihapus\", karena git tetap menyimpan histori commit-nya. Kalau memang mau backup ke GitHub, pakai **repo privat** , dan idealnya repo terpisah dari vault catatan lain yang kamu share ke publik.\n\n 2. **Pertimbangkan enkripsi at-rest untuk folder`_hermes/`.** Karena isinya data pribadi, folder ini adalah kandidat bagus untuk dienkripsi terpisah — misalnya pakai `git-crypt` atau `age` untuk enkripsi transparan di git, atau simpan di partisi terenkripsi kalau laptop/servernya dipakai bersama orang lain.\n\n 3. **Batasi permission file di level OS.** File memori Hermes dan folder `_hermes/` sebaiknya diberi permission `600`/`700` (`chmod 600 ~/.hermes/memories/*.md`) supaya user lain di mesin yang sama tidak bisa baca isinya.\n\n 4. **Waspada terhadap prompt injection lewat memori.** Karena file memori ini dibaca ulang oleh agent tiap sesi, isi yang \"diedit\" lewat Obsidian pada dasarnya jadi instruksi baru buat agent. Kalau vault-nya bisa diakses proses lain, plugin, atau kolaborator yang tidak sepenuhnya kamu percaya, seseorang bisa menyisipkan teks di `## Entry N` yang berfungsi sebagai injeksi prompt — misalnya instruksi tersembunyi yang membuat agent melakukan sesuatu di luar niat kamu saat sesi berikutnya dimulai. Perlakukan folder `_hermes/` seperti kamu memperlakukan kredensial: jangan sembarangan buka aksesnya ke sync plugin pihak ketiga atau vault yang di-share.\n\n 5. **Cek juga plugin Obsidian yang kamu pasang di vault yang sama.** Plugin komunitas Obsidian punya akses baca-tulis penuh ke seluruh vault, termasuk folder `_hermes/`. Kalau salah satu plugin itu punya bug atau memang berniat jahat, ia bisa membaca atau memodifikasi memori AI kamu tanpa kamu sadari. Pertimbangkan vault terpisah khusus untuk `_hermes/` kalau kamu banyak coba-coba plugin baru.\n\n 6. **Backup cron itu juga berarti \"titik kegagalan\" baru.** Job cron yang jalan tiap 6 jam berarti ada proses otomatis dengan akses baca-tulis ke memori kamu. Pastikan script `hermes-memory-sync.sh` dan `hermes-memory-sync.py` hanya bisa ditulis oleh user kamu sendiri (bukan `world-writable`), supaya proses lain di mesin yang sama tidak bisa menyisipkan kode ke script yang dieksekusi otomatis itu.\n\n\n\n\nPoin-poin di atas bukan berarti setup ini berbahaya untuk dipakai — tapi karena kamu memindahkan data yang tadinya \"terkunci\" di dalam sistem agent ke lapisan filesystem dan git biasa, tanggung jawab menjaga keamanannya juga ikut berpindah ke tanganmu.\n\n## Worth It, Gak?\n\nKalau kamu sudah pakai AI agent dengan memori jangka panjang _dan_ sudah hidup di Obsidian sehari-hari — jawabannya: iya, layak dicoba. Pergeserannya sederhana:\n\n * Dari yang tadinya **memberi tahu** AI apa yang harus diingat lewat perintah chat\n * Jadi kamu **mengedit langsung** apa yang diingatnya, lewat catatan markdown biasa\n * Dan AI-nya mencerminkan kembali editan itu lewat sistem memorinya\n\n\n\nRasanya memori AI jadi terasa seperti basis pengetahuan **milikmu sendiri** , bukan kotak hitam yang tersembunyi di file konfigurasi.",
"title": "Bikin \"Otak\" AI Agent Bisa Diedit di Obsidian: Panduan Sinkronisasi Dua Arah untuk Pemula"
}