[Catatan Pengembangan] Harus mengeluarkan percakapan yang dicari dalam markdown agar dapat dibaca — Edisi Wikifikasi Obsidian Vault

27.255.***.***
7

Perhatian Wikifikasi memakan biaya banyak. Membelanjai token secara boros. Jika Anda tidak kaya, hanya ulangi percakapan. Jangan coba wikifikasi.

Artikel ini adalah catatan pengembangan tes vibe coding untuk seCall — alat CLI untuk mengumpulkan dan mencari sesi percakapan agen AI. Saya tidak tahu detail kodenya dan tidak ingin tahu. Tidak ada keuntungan dalam mengetahuinya. Jika penasaran dengan kodenya, tanyakan kepada pembuatnya (?). (Lebih cepat dan lebih baik) Saya hanya membahas alasan pemilihan teknologi dan alurnya.

Seri:

  • #1: SQLite FTS5 + Analisis Morfologi Korea

  • #2: Pencarian Vektor Lokal

  • #3: Pencarian Hibrida + RRF

  • #4: Wikifikasi Obsidian Vault ← Artikel ini (terakhir)


Pencarian Berhasil, Terus?

Sampai episode 3, pencarian berjalan cukup baik. Bahasa Korea juga berfungsi, bahasa Inggris juga, bahkan ketika mengetik "비엠25", hasil percakapan "BM25" muncul.

Tapi ketika hasil pencarian keluar sebagai teks panjang di terminal... jujur saja saya tidak akan membacanya. Ada percakapan dengan ratusan putaran, apakah ada orang yang akan membaca sambil scroll di terminal (malu).

Pada akhirnya saya harus membuat percakapan bisa diekspor ke file dalam bentuk yang dapat dibaca. Bukan hanya file teks biasa, tetapi dalam bentuk di mana percakapan saling terhubung dan dapat disaring berdasarkan metadata.

Saya sempat ingin menghubungkannya ke wiki.js, tetapi teringat Obsidian yang sudah diinstal dan setiap tahun baru hanya menulis 3 halaman lalu dibiarkan begitu saja. (Metode seperti elastin atau Guk Kasten tidak cocok untuk orang pemalas seperti saya. Tidak bisa ada second brain tanpa first brain)


Mengapa Obsidian?

Alasan memilih Obsidian sangat sederhana:

  • Berbasis Markdown — Cukup keluarkan file .md tanpa konversi format khusus

  • Wikilink [[]] — Bisa menghubungkan antar percakapan, antar proyek

  • Plugin Dataview — Bisa query seperti SQL dengan metadata frontmatter

  • File Lokal — Tidak bergantung cloud, bisa version control dengan git

  • Callout yang bisa dilipat — Bisa menyembunyikan output alat atau proses pemikiran dengan rapi

Sebenarnya alasan terbesar adalah saya sudah menggunakan Obsidian (hanya saja belum disiapkan). Tidak perlu belajar tool baru (benar-benar)


Struktur: Dua Lapisan Raw dan Wiki

Awalnya saya pikir cukup mengubah percakapan menjadi markdown dan memasukkannya ke folder, selesai.

Tapi teks percakapan asli panjang, berulang, dan strukturnya beragam. Ada sesi Claude Code dengan lebih dari 200 putaran, tidak mungkin menggunakannya langsung seperti wiki.

Jadi saya membaginya menjadi dua lapisan:

vault/
├── raw/sessions/          ← Teks percakapan asli (dibuat otomatis, dilarang edit)
│   └── 2026-04-05/
│       ├── claude-code_seCall_a1b2c3d.md
│       └── claude-code_myProject_b2c3d4e.md
├── wiki/                  ← Pengetahuan yang diorganisir (dikurasi AI)
│   ├── projects/
│   ├── topics/
│   └── decisions/
├── index.md               ← Daftar semua sesi
├── log.md                 ← Log pengumpulan
└── SCHEMA.md              ← Dokumen aturan

raw/sessions/ bersifat immutable. Setelah secall ingest, percakapan diubah menjadi markdown dan dimasukkan di sini, tidak pernah diedit lagi. Tujuannya adalah menjaga data asli.

wiki/ adalah hasil AI yang membaca dan mengorganisir berbagai percakapan. Misalnya "keputusan apa yang diambil terkait pencarian di proyek seCall" diorganisir per proyek atau per topik.

Pembedaan ini sangat penting. raw adalah catatan, wiki adalah pengetahuan.


Frontmatter: CV Percakapan

Setiap file markdown sesi dilengkapi frontmatter:

---
type: session
agent: claude-code
model: claude-opus-4-6
project: seCall
session_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
date: 2026-04-05
start_time: "2026-04-05T14:30:00+09:00"
end_time: "2026-04-05T15:45:00+09:00"
turns: 15
tokens_in: 45000
tokens_out: 12000
tools_used: [Bash, Read, Write]
summary: "Menerapkan algoritma RRF pada fitur pencarian seCall..."
status: raw
---

Dengan ini, Obsidian Dataview bisa melakukan:

TABLE agent, turns, date
FROM "raw/sessions"
WHERE project = "seCall" AND turns > 10
SORT date DESC

"Tampilkan hanya sesi proyek seCall dengan lebih dari 10 putaran diurutkan terbaru" — bukan SQL. Membaca frontmatter file markdown dan menampilkannya sebagai tabel. Ini adalah fitur unggulan Obsidian.


Markdown Kustom Obsidian

Markdown biasa bisa dibuka di editor mana saja, tapi menggunakan sintaks khusus Obsidian membuat pembacaan jauh lebih mudah.

Menyembunyikan Output Alat dengan Callout

Sesi Claude Code penuh dengan pemanggilan alat. Menggunakan alat seperti Bash, Read, Write puluhan kali dalam satu sesi, jika semuanya dibuka akan mengaburkan alur percakapan.

Dengan callout Obsidian bisa dilipat:

> [!tool]- Bash
> ```
> git status
> ```
> Output: M src/main.rs, M Cargo.toml...

Dengan satu - akan dalam keadaan tertutup secara default. Bisa dibuka saat diperlukan, tidak mengganggu alur percakapan.

Blok pemikiran (thinking block) sama saja:

> [!thinking]- Thinking
> Untuk menggabungkan hasil pencarian perlu normalisasi skor...

Mencegah Konflik Dataview

Ini masalah yang cukup mengganggu. Plugin Dataview Obsidian mengenali format kunci:: nilai sebagai field inline. Tapi :: cukup sering muncul dalam percakapan. Dalam type hint Python, URL, berbagai kode.

Solusinya ternyata sederhana — sisipkan zero-width space di antara :: agar Dataview tidak mengenalinya. Tidak terlihat, tidak mempengaruhi copy-paste, hanya Dataview yang tertipu. Jangan escape di dalam code block, biarkan apa adanya. (Terima kasih kepada github:batmania52 yang membuat banyak issue ticket dengan feedback ribuan baris)

Agak konyol mengatasi masalah dengan karakter tak terlihat, tapi efektif. 😇


index.md dan log.md

Saat ratusan percakapan terkumpul, mencari folder juga pekerjaan. Jadi ada dua file meta yang dibuat otomatis.

index.md — Daftar semua sesi. Setiap kali sesi baru diingest, ditambahkan di bagian atas. Bisa langsung navigasi dengan wikilink.

## Sessions
- [[raw/sessions/2026-04-05/claude-code_seCall_a1b2c3d4|Menerapkan algoritma RRF]] — 15 putaran, claude-code, 14:30
- [[raw/sessions/2026-04-04/claude-code_seCall_b2c3d4e5|Debug pencarian vektor]] — 8 putaran, claude-code, 09:15

log.md — Riwayat pengumpulan. Mencatat kapan, sesi apa, berapa putaran, berapa token. Append-only jadi terus bertambah.

Ini juga bisa dibuka di Obsidian dengan wikilink yang aktif, langsung bisa jump ke sesi dari log.


Git Sync — Version Control Gratis

Vault Obsidian pada dasarnya kumpulan file markdown, jadi dikelola dengan git berarti backup gratis + riwayat versi. (Bahkan Obsidian sudah punya git plugin!) seCall punya perintah secall sync, yang melakukan:

  1. git pull --rebase (ambil perubahan remote)

  2. Ingest sesi baru

  3. git push (dorong ke remote)

Satu baris selesai "kumpulkan percakapan baru + perbarui vault + backup ke remote". File DB atau file indeks otomatis dikecualikan di .gitignore.

Jujur fitur ini agak redundan dengan plugin Obsidian Git. Tapi praktis bisa melakukan ingest dan sync dengan satu perintah CLI. Dan juga berfungsi mengumpulkan percakapan yang tersebar di berbagai tempat.


Bagaimana Sebenarnya Digunakan

secall ingest sekali saja, hal-hal berikut terjadi:

  1. Deteksi otomatis percakapan baru di ~/.claude/, ~/.codex/, dll

  2. Analisis morfologi → indeks FTS5 + embedding → indeks vektor (#1, #2)

  3. Konversi markdown → buat file .md di vault (episode ini)

  4. Update index.md, log.md

Setelahnya ada dua cara melihat percakapan:

  • Saat perlu pencarian: secall recall "kata kunci" — cari cepat di terminal

  • Saat ingin review: Buka Obsidian dan telusuri vault — saring dengan Dataview dan baca perlahan

Pencarian bagus untuk situasi "tahu apa yang dicari", browsing vault bagus untuk "tidak tahu apa yang dicari tapi ingin lihat". Kebetulan di situasi kedua lebih banyak penemuan. (Wow!? Saya pernah berpikir seperti itu!? seperti penemuan)


Ringkasan

Teknologi

Peran

Alasan Pemilihan

Obsidian Vault

Wikifikasi percakapan

Berbasis markdown, Dataview, sudah digunakan

Frontmatter

Metadata sesi

Bisa disaring dan diurutkan dengan query Dataview

Callout Lipat

Sembunyikan output alat/thinking

Jaga keterbacaan alur percakapan

Pisah Raw/Wiki

Jaga asli + atur pengetahuan

Bedakan catatan dan pengetahuan

Git Sync

Version control + backup

Vault adalah markdown jadi alami


Mengakhiri Seri

Dalam 4 episode, saya telah membahas fitur utama seCall.

  • #1 membuat pencarian teks penuh bahasa Korea

  • #2 menambahkan pencarian vektor berdasarkan makna

  • #3 menggabungkan keduanya menjadi pencarian hibrida

  • #4 mengeluarkan hasil dalam bentuk yang dapat dibaca

Melihat kembali, inti semuanya adalah satu — percakapan AI bukan untuk digunakan sekali jadi, tetapi pengetahuan yang terakumulasi. Jika dibuat dalam bentuk yang dapat dicari, dijelajahi, dan diorganisir, percakapan sebelumnya menjadi konteks untuk pekerjaan berikutnya. Itulah mengapa Notion dan Obsidian terkenal.

Melalui proyek yang dibuat dengan vibe coding, saya belajar banyak. Kode masih sulit dipahami (saat ini struktur kode yang ditulis agen jauh melampaui batasan kemampuan saya😇), tapi konsep seperti SQLite FTS5, BM25, embedding vektor, RRF, HNSW... sekarang saya bisa menjelaskannya. Itulah keunggulan vibe coding — belajar sambil membuat.

Pos ini ditulis tanpa vibe. (tidak ada alasan untuk vibe) Aman dibaca 😁 Pengembangan agentic bukan asal jalan di tanah kosong. Adalah kolaborasi tiga orang antara domain knowledge intelligence manusia yang terakumulasi dari berbagai pengalaman dan pekerjaan presisi yang tak kenal lelah dari artificial intelligence dengan foundational model yang kokoh.

로그인한 회원만 댓글 등록이 가능합니다.

개발한당

KR | ID | EN
  • IDR
  • KOR
8.36 0.01

2026.07.10 KEB 하나은행 고시회차 970회

다가오는 한인 행사일정

  • 등록 된 일정이 없어요!