<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog Maguyva</title><description>Pembahasan teknis mendalam tentang kecerdasan kode MCP, arsitektur agen AI, dan pelajaran dari membangun platform pencarian kode multi-bahasa.</description><link>https://maguyva.ai/id/blog</link><language>id</language><atom:link href="https://maguyva.ai/id/rss.xml" rel="self" type="application/rss+xml"/><item><title>Konteks yang ikut bepergian dengan Anda</title><link>https://maguyva.ai/id/blog/context-that-travels</link><guid isPermaLink="true">https://maguyva.ai/id/blog/context-that-travels</guid><description>Indexer Cursor sangat baik di dalam Cursor. Maguyva adalah peta MCP yang dihosting, yang bisa ditanyakan oleh agen yang sama dari editor, CLI, dan CI lain.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Indexer Cursor sangat baik di dalam Cursor. Pelengkapan tab, penyuntingan inline, chat, dan agen di jendela itu sudah bertumpu pada indeks proyek yang dioperasikan Cursor untuk workspace yang terbuka. Jika Cursor adalah satu-satunya permukaan tempat Anda menulis kode, dan indeks itu sudah menemukan file yang tepat, tetaplah di sana. Itu adalah kasus jujur ‘tetap di tempat Anda’, dan sepantasnya menjadi kalimat pertama halaman ini.&lt;/p&gt;
&lt;p&gt;Tulisan ini tentang separuh lain dari minggu biasa. Repo yang sama juga dibuka di Claude Code, ditanyai dari Codex CLI, ditinjau di mesin kedua, atau ditanyai oleh agen yang berjalan di CI. Pertanyaannya bukan ‘indexer mana yang lebih baik’. Pertanyaannya adalah apakah peta yang dipercaya agen di satu jendela sama dengan peta yang dipercayainya di jendela berikutnya.&lt;/p&gt;
&lt;p&gt;Maguyva adalah peta yang ikut bepergian dengan Anda itu. Ini adalah lapisan konteks codebase MCP jarak jauh. Agen menanyakannya dengan cara yang sama seperti menanyakan alat MCP lainnya. Hasilnya kembali sebagai jalur berperingkat dengan nomor baris. Cursor tetap menjadi editor. Konteks-lah yang berpindah.&lt;/p&gt;
&lt;h2 id=&quot;untuk-apa-indexer-cursor&quot;&gt;Untuk apa indexer Cursor&lt;/h2&gt;
&lt;p&gt;Pengindeksan bawaan Cursor ada agar chat, agen, dan pencarian di dalam editor bisa mengambil kode yang relevan, alih-alih hanya mengandalkan apa yang muat di jendela konteks mentah model. Itu desain yang tepat untuk sebuah IDE. Indeks ini native untuk Cursor. Ini bukan server MCP dan tidak dapat dijangkau dari klien lain mana pun.&lt;/p&gt;
&lt;p&gt;Beginilah cara kerjanya, seperti dijelaskan dalam dokumentasi publik Cursor dan penjelasan Cursor sendiri pada saat penulisan ini: jalur pencarian utama bukan lagi indeks embedding di cloud. Tim Cursor menyatakan di forum komunitas mereka bahwa pencarian semantik/berbasis embedding yang khusus sedang dikurangi demi pengambilan berbasis grep, karena model saat ini sudah cukup baik menjelajahi pohon yang hidup dengan sendirinya. Sebagai gantinya ada Instant Grep, indeks pencarian lokal yang dibangun dari n-gram, daftar terbalik, dan filter Bloom, disimpan dalam tabel pencarian yang dipetakan ke memori, sehingga kueri diselesaikan di mesin developer sendiri, bukan di server.&lt;/p&gt;
&lt;p&gt;Indeksnya sendiri hidup di dalam direktori &lt;code&gt;.git/cursor/&lt;/code&gt; milik repo itu sendiri, dikaitkan pada commit git tertentu; perubahan sejak commit itu ditumpuk di atasnya alih-alih memicu pemindaian baru, dan indeksnya hanya dibangun ulang saat kondisi lokal sudah menyimpang jauh dari apa yang menjadi dasar pembangunannya. Karena berada di dalam &lt;code&gt;.git&lt;/code&gt;, ia tidak pernah dilacak dan tidak pernah di-push — hapus foldernya, dan indeksnya hilang. &lt;code&gt;.gitignore&lt;/code&gt; dihormati karena konstruksinya, karena hanya konten yang dilacak git yang memenuhi syarat, dan &lt;code&gt;.cursorignore&lt;/code&gt; diberlakukan di jalur baca. Tidak ada lagi langkah embedding di sisi server atau basis data vektor jarak jauh di jalur itu. Dokumentasi sebelumnya menjelaskan desain berbantuan cloud — enkripsi chunk, sinkronisasi lewat Merkle tree, penggunaan ulang indeks antar anggota tim — dan tim Cursor sendiri sejak itu mengatakan bahwa desain itu sedang dikurangi, jadi tulisan ini tidak lagi menjelaskannya sebagai kondisi terkini.&lt;/p&gt;
&lt;p&gt;Keunggulan yang menonjol di dalam editor adalah subagen Explore milik Cursor. Ia bisa menjalankan beberapa pencarian paralel di jendela konteksnya sendiri pada model yang lebih cepat dan hanya mengembalikan temuan yang relevan, sehingga percakapan utama tidak membengkak oleh hasil pencarian. Itu kekuatan sejati di dalam editor. Pertahankan itu.&lt;/p&gt;
&lt;p&gt;Workspace multi-root didukung: konteks setiap folder yang dibuka tersedia untuk Agent. Beberapa fitur yang bergantung pada git, seperti worktree, dinonaktifkan dalam pengaturan multi-root, dan Cloud Agents sama sekali tidak mendukung workspace multi-root.&lt;/p&gt;
&lt;p&gt;Tidak satu pun dari ini menjadi alasan untuk meninggalkan Cursor. Ini adalah deskripsi tepat tentang peta yang sangat baik di tempat ia hidup.&lt;/p&gt;
&lt;h2 id=&quot;apa-arti-sebenarnya-ikut-bepergian-dengan-anda&quot;&gt;Apa arti sebenarnya ‘ikut bepergian dengan Anda’&lt;/h2&gt;
&lt;p&gt;Sebuah peta ikut bepergian dengan Anda ketika pertanyaan yang sama mengembalikan jenis jawaban yang sama, dengan kutipan yang bisa Anda buka, dari lebih dari satu klien.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Di Cursor: ‘Di mana &lt;code&gt;parseConfig&lt;/code&gt; didefinisikan, dan siapa yang memanggilnya?’&lt;/li&gt;
&lt;li&gt;Di Claude Code, di repo yang sama: pertanyaan yang sama.&lt;/li&gt;
&lt;li&gt;Di Codex CLI, di mesin peninjau yang tidak pernah membuka jendela Cursor: pertanyaan yang sama.&lt;/li&gt;
&lt;li&gt;Di agen CI yang berbicara MCP: pertanyaan yang sama, terhadap snapshot yang dihosting sama.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jika setiap permukaan membangun indeks privatnya sendiri, Anda tidak punya satu peta. Anda punya beberapa cache yang saling menyimpang. Indeks editor mungkin terkini untuk pohon di disk. Sesi CLI mungkin tertinggal sehari. Pekerjaan CI mungkin melihat checkout yang berbeda. Dan agen akan tetap terdengar percaya diri.&lt;/p&gt;
&lt;p&gt;Indexer Cursor tidak dimaksudkan untuk menyelesaikan itu. Karena hidup di dalam editor, konteks yang dibangunnya adalah untuk editor itu. Pembaca yang juga butuh CLI, pipeline CI, atau editor berbeda, butuh alat terpisah untuk permukaan-permukaan itu. Itu fakta cakupan, bukan cacat. Maguyva adalah alat terpisah itu.&lt;/p&gt;
&lt;p&gt;Jumlah bahasa yang dipublikasikan untuk indexer Cursor tidak dicantumkan dalam materi yang boleh digunakan tulisan ini. Maguyva mempublikasikan dukungan untuk lebih dari 279 bahasa dan teknologi berbasis teks. Harga Cursor juga tidak disalin di sini; lihat halaman harga mereka. Maguyva menagih per workspace, bukan per kursi, dengan paket yang dipublikasikan $0, $19, $49, dan $149 tergantung cakupan yang diindeks dan ukuran workspace.&lt;/p&gt;
&lt;h2 id=&quot;satu-peta-yang-dihosting-setiap-klien-mcp&quot;&gt;Satu peta yang dihosting, setiap klien MCP&lt;/h2&gt;
&lt;p&gt;Maguyva adalah server MCP jarak jauh. Anda menghubungkan GitHub, memilih repo, dan pipeline cloud membangun simbol, tepi graf, dan peta berperingkat. Anda menambahkan kunci API ke konfigurasi MCP klien yang sudah Anda gunakan. Maguyva punya panduan pengaturan untuk 24 klien MCP yang terdokumentasi — termasuk Cursor — dan bisa terhubung ke klien kompatibel MCP lainnya yang mendukung konfigurasi standar.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/id/for-cursor&quot;&gt;Halaman pengaturan Cursor&lt;/a&gt; adalah jalur khusus editor jika di situlah Anda bekerja. Server yang sama menjawab Claude Code, VS Code, Windsurf, Codex CLI, dan lainnya. Anda tidak berganti editor. Anda memberi setiap agen permukaan alat yang sama: 11 alat MCP yang menghadap klien di seluruh pencarian, simbol, analisis dependensi, pengambilan file, konteks repo, dan alur kerja alat bantu deterministik. Pencarian semantik, struktural, graf, dan teks digabung menjadi hasil berperingkat.&lt;/p&gt;
&lt;p&gt;Itulah keuntungan portabilitas. Kutipan yang Anda periksa di Cursor pagi ini punya bentuk yang sama dengan kutipan yang akan dikembalikan Codex CLI malam ini. Jalur file dan nomor baris. Buka. Jika salah, Anda akan melihatnya. Jika benar, perubahan berikutnya punya tempat untuk mendarat. Klaim yang disetujui adalah lebih sedikit perubahan yang berhalusinasi, bukan janji bahwa setiap perubahan itu benar.&lt;/p&gt;
&lt;p&gt;Kesegaran dipublikasikan. Snapshot diberi timestamp, sehingga agen tahu versi pohon mana yang sedang dibacanya. Kecepatan pembangunan ulang harian di paket gratis dan setiap jam di paket berbayar. Batasan yang jujur adalah pekerjaan lokal yang belum disinkronkan: perubahan yang hanya ada di working tree belum ada di peta yang dihosting. Batasan ini sama tidak peduli klien mana yang Anda gunakan untuk bertanya, dan itulah intinya. Perbedaan antar klien bukan lagi batasan tersembunyi kedua.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/id/docs&quot;&gt;Dokumentasi&lt;/a&gt; memberikan loop aktivasi yang berlaku untuk setiap klien: indeks satu repo yang sudah Anda kenal, hubungkan klien, ajukan satu pertanyaan yang bisa Anda verifikasi. Lakukan itu sekali di Cursor. Lakukan lagi dari CLI yang benar-benar Anda gunakan pada hari peninjauan. Jika kedua jawaban mengutip handler yang sama, peta itu benar-benar ikut bepergian dengan Anda.&lt;/p&gt;
&lt;h2 id=&quot;bagaimana-kedua-peta-hidup-berdampingan&quot;&gt;Bagaimana kedua peta hidup berdampingan&lt;/h2&gt;
&lt;p&gt;Gunakan keduanya. Keduanya bukan alternatif dalam arti halaman perbandingan.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Biarkan indexer Cursor tetap aktif untuk proyek di disk. Biarkan Explore, Instant Grep, dan agen di dalam editor menggunakannya. Loop itu native dan cepat.&lt;/li&gt;
&lt;li&gt;Tambahkan Maguyva sebagai server MCP di Cursor agar sesi yang sama juga bisa menanyakan peta workspace yang dihosting. Cursor adalah klien Maguyva yang terdokumentasi. Anda tidak memilih satu indeks lalu menghapus yang lain.&lt;/li&gt;
&lt;li&gt;Tambahkan server Maguyva yang sama ke Claude Code, Codex CLI, atau klien MCP lain mana pun yang menyentuh repo. Satu bentuk kunci API. Satu workspace.&lt;/li&gt;
&lt;li&gt;Jika agen CI kompatibel MCP, arahkan ke server yang sama. Ia akan membaca snapshot bertimestamp yang sama seperti yang dibaca laptop.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Indeks editor tetap menjadi alat terbaik untuk ‘apa yang ada di disk di jendela ini, saat ini juga’. Peta yang dihosting adalah alat terbaik untuk ‘seperti apa workspace ini bagi setiap agen yang menyentuhnya hari ini’. Kalimat-kalimat itu tidak saling bersaing.&lt;/p&gt;
&lt;p&gt;Kuota workspace dipublikasikan di &lt;a href=&quot;https://maguyva.ai/id/pricing&quot;&gt;halaman harga&lt;/a&gt;: repo, baris yang diindeks, dan pengguna, ditagih per workspace. Agen dan manusia berbagi hitungan pengguna yang sama. Mulai gratis dengan repo yang sudah bisa Anda nilai. Naikkan workspace hanya setelah kutipan bertahan dari kontak dengan pohon.&lt;/p&gt;
&lt;h2 id=&quot;apa-yang-tidak-diklaim-halaman-ini&quot;&gt;Apa yang tidak diklaim halaman ini&lt;/h2&gt;
&lt;p&gt;Halaman ini tidak mengklaim bahwa indexer Cursor lemah, tidak lengkap, atau alasan untuk berganti editor. Kalimat pertama tulisan ini mengatakan sebaliknya.&lt;/p&gt;
&lt;p&gt;Halaman ini tidak mengklaim bahwa Maguyva menggantikan Instant Grep atau subagen Explore. Itu fitur Cursor. Semuanya tetap berada di Cursor.&lt;/p&gt;
&lt;p&gt;Halaman ini tidak mengarang jumlah bahasa, angka latensi, atau penghematan token untuk kedua produk mana pun. Angka yang tidak diketahui tetap tidak dipublikasikan.&lt;/p&gt;
&lt;p&gt;Halaman ini tidak berpura-pura bahwa pekerjaan lokal yang belum di-push ada di peta yang dihosting. Snapshot bertimestamp membuat batasan itu terlihat. Mereka tidak menghilangkannya.&lt;/p&gt;
&lt;p&gt;Tesnya biasa saja. Indeks satu repo yang sudah Anda kenal. Ajukan satu pertanyaan yang bisa Anda verifikasi, pertama di Cursor, lalu di klien MCP kedua. Konteks yang ikut bepergian dengan Anda adalah kutipan yang sama di kedua tempat.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// same map, wherever you opened it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>MCP</category><category>Portability</category></item><item><title>Peta dulu, review kemudian</title><link>https://maguyva.ai/id/blog/map-first-review-second</link><guid isPermaLink="true">https://maguyva.ai/id/blog/map-first-review-second</guid><description>Landasi agen coding pada peta repo sebelum ia menulis. Biarkan Greptile me-review pull request setelahnya. Pasangan yang saling melengkapi, bukan pengganti.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Dua pekerjaan berbeda duduk di kedua sisi pull request. Sebelum agen menulis, ia membutuhkan peta pohon yang akan diubahnya. Setelah agen membuka PR, sesuatu harus membaca perubahan itu terhadap sisa sistem dan meninggalkan komentar yang bisa ditindaklanjuti manusia.&lt;/p&gt;
&lt;p&gt;Pekerjaan-pekerjaan ini terlihat mirip dari kejauhan karena keduanya melibatkan ‘memahami codebase’. Keduanya bukan produk yang sama. Yang satu menjawab ‘di mana perubahan ini seharusnya mendarat?’. Yang lain menjawab ‘apa yang dirusak diff ini yang akan terlewatkan linter baris demi baris?’. Mencampurkan keduanya menghasilkan draf pertama yang lebih buruk dan review yang lebih berisik.&lt;/p&gt;
&lt;p&gt;Tulisan ini adalah panduan alur kerja gabungan. Maguyva adalah peta yang ditanyakan agen terlebih dahulu. Greptile adalah agen review yang mengomentari PR setelahnya. Pasangan ini saling melengkapi karena konstruksinya: Maguyva tidak me-review pull request, dan Greptile tidak menggantikan lapisan konteks yang digunakan agen untuk menulisnya.&lt;/p&gt;
&lt;h2 id=&quot;mengapa-pembagian-ini-berguna&quot;&gt;Mengapa pembagian ini berguna&lt;/h2&gt;
&lt;p&gt;Agen coding yang berangkat dari prior pelatihan ditambah beberapa file yang ditempel akan mengarang jalur yang masuk akal dan mengeditnya. Itu kegagalan ‘file yang salah’, dan itu masalah pengambilan. Maguyva adalah lapisan konteks codebase MCP jarak jauh: pengambilan semantik, struktural (AST), graf/dependensi, dan teks digabung menjadi hasil berperingkat, ditambah pencarian simbol dan pengambilan file. Jawaban yang berdasar kembali sebagai &lt;code&gt;path/file.ext:line&lt;/code&gt;, sehingga Anda bisa menolak yang salah sebelum patch ada. Klaimnya tetap sederhana: lebih sedikit perubahan yang berhalusinasi. Model masih bisa menebak. Hanya saja langkah pertama berhenti menjadi tebakan.&lt;/p&gt;
&lt;p&gt;Greptile adalah agen review kode bertenaga AI. Dengan kata-kata mereka sendiri, ia secara otomatis me-review setiap pull request dengan pemahaman penuh tentang codebase, dan memposisikannya melawan linter tradisional yang memeriksa file secara terpisah alih-alih seluruh sistem. Pengaturannya terdiri dari menginstal aplikasi GitHub atau GitLab dan memilih repo. Tidak ada indeks lokal yang harus Anda operasikan. Hosting-nya adalah Greptile Cloud (mereka menyatakan kepatuhan SOC 2 Type II, dengan laporan tersedia atas permintaan), dengan opsi self-hosted yang ditawarkan untuk perusahaan.&lt;/p&gt;
&lt;p&gt;Alur bernomor mereka sendiri adalah: hubungkan dan bangun graf dependensi setiap fungsi, kelas, dan dependensi; pada setiap pull request, analisis perubahan menggunakan graf repo penuh itu dan publikasikan temuan sebagai komentar PR dengan perbaikan yang disarankan, dalam waktu sekitar tiga menit; setiap komentar bisa menyerahkan masalah ke agen coding yang sudah digunakan tim. Mereka juga menyatakan membaca komentar PR manusia sebelumnya seiring waktu untuk mempelajari standar kode tim dan mengurangi saran yang berisik. Sistem pembelajaran mereka, menurut pernyataan mereka, membutuhkan 2-3 minggu untuk beradaptasi.&lt;/p&gt;
&lt;p&gt;Itu adalah review, bukan penyusunan draf. Keunggulan Greptile adalah konteks graf repo penuh pada perubahan yang sudah mendarat di PR, diikuti loop tertutup yang mengirim temuan ke Claude Code, Codex, Conductor, Cursor, atau Devin. Keunggulan Maguyva adalah peta berperingkat yang ditanyakan agen sebelum perubahan itu ditulis. Gunakan keduanya. Jangan minta salah satu melakukan pekerjaan yang lain.&lt;/p&gt;
&lt;p&gt;Integrasi produk pihak pertama antara Maguyva dan Greptile tidak dinyatakan. Anda juga tidak membutuhkannya. Maguyva berbicara dengan agen lewat MCP. Greptile berbicara dengan GitHub atau GitLab lewat aplikasi mereka sendiri. Mereka bertemu di pull request. Tidak ada skrip perekat, tidak ada cron yang menyalurkan satu alat ke alat lain. Pasangan ini tidak butuh bash karena setiap produk sudah duduk di permukaan yang menjadi miliknya.&lt;/p&gt;
&lt;h2 id=&quot;apa-yang-bukan-ini&quot;&gt;Apa yang bukan ini&lt;/h2&gt;
&lt;p&gt;Ini bukan pembongkaran Greptile. Ini bukan halaman ‘ganti reviewer Anda’. Greptile diluncurkan di Hacker News pada 5 Maret 2024 sebagai perusahaan Y Combinator W24, dan thread itulah cara banyak orang pertama kali mengenal produk itu. Jika begitulah cara Anda menemukan mereka, tetap gunakan mereka. Halaman ini adalah separuh depan yang hilang dari loop itu: melandasi agen terlebih dahulu agar PR yang dilihat Greptile sudah membidik file yang tepat.&lt;/p&gt;
&lt;p&gt;Materi pemasaran Greptile memimpin dengan klaim kecepatan review dan penangkapan bug. Perlakukan itu sebagai klaim Greptile sendiri, bukan angka yang diverifikasi secara independen. Tulisan ini tidak mengulanginya sebagai fakta.&lt;/p&gt;
&lt;p&gt;Cakupan bahasa adalah jenis kejujuran yang sama. Greptile membingkai dukungan sebagai mencakup semua bahasa pemrograman alih-alih daftar yang diberi nomor; angka pastinya tidak dinyatakan. Maguyva mempublikasikan dukungan untuk lebih dari 279 bahasa dan teknologi berbasis teks, dengan pembagian teknis (AST yang didukung parser versus hanya teks) di situs saat pertanyaannya teknis. Ini adalah produk berbeda yang membuat klaim berbeda. Jangan mencampurnya.&lt;/p&gt;
&lt;p&gt;Harga Greptile tidak dinyatakan dalam materi yang boleh digunakan tulisan ini. Paket berbayar ada; lihat halaman harga mereka. Maguyva menagih per workspace, bukan per kursi. Paket dimulai gratis. &lt;a href=&quot;https://maguyva.ai/id/pricing&quot;&gt;Halaman harga&lt;/a&gt; mencantumkan tingkatan yang dipublikasikan jika Anda butuh angka workspace.&lt;/p&gt;
&lt;h2 id=&quot;alur-kerja&quot;&gt;Alur kerja&lt;/h2&gt;
&lt;p&gt;Tiga tahap bernama. Jalankan dalam urutan ini. Jangan lewati satu pun saat pertama kali mencoba pasangan ini.&lt;/p&gt;
&lt;h3 id=&quot;1-konteks-maguyva&quot;&gt;1. Konteks Maguyva&lt;/h3&gt;
&lt;p&gt;Indeks satu repo yang sudah Anda kenal. Hubungkan klien MCP tempat Anda sudah menulis — Claude Code, Cursor, Codex CLI, VS Code, Windsurf, atau klien kompatibel MCP lain. Maguyva punya panduan pengaturan untuk 24 klien MCP terdokumentasi dan bisa terhubung ke klien lain yang mendukung konfigurasi MCP standar.&lt;/p&gt;
&lt;p&gt;Ajukan pertanyaan yang bisa Anda nilai sebelum siapa pun menulis satu baris. ‘Di mana kedaluwarsa sesi ditangani, dan apa yang memanggilnya?’ adalah langkah pertama yang lebih baik daripada ‘perbaiki auth’. Tuntut kutipan. Buka hasil &lt;code&gt;file.ext:line&lt;/code&gt;. Ikuti simbolnya. Konfirmasikan dependensi yang akan Anda sentuh.&lt;/p&gt;
&lt;p&gt;Maguyva mengekspos 11 alat MCP yang menghadap klien di seluruh pencarian, simbol, analisis dependensi, pengambilan file, konteks repo, dan alur kerja alat bantu deterministik. Empat mode pengambilan digabung menjadi hasil berperingkat; &lt;code&gt;find_symbol&lt;/code&gt; adalah alat terpisah saat Anda sudah tahu namanya. &lt;a href=&quot;https://maguyva.ai/id/docs&quot;&gt;Dokumentasi&lt;/a&gt; menjelaskan jalur terpendek: mulai gratis, indeks repo yang sudah Anda kenal, hubungkan klien, lalu ajukan satu pertanyaan yang bisa Anda verifikasi.&lt;/p&gt;
&lt;p&gt;Snapshot diberi timestamp, sehingga agen bisa mengetahui versi pohon mana yang dibacanya. Batasan jujurnya adalah pekerjaan lokal yang belum disinkronkan. Jika perubahan hanya ada di working tree dan belum di-push, peta yang dihosting belum memuatnya. File instruksi (&lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;) masih punya tempat di sini, untuk konvensi dan apa yang tidak boleh disentuh. Itu bukan peta yang hidup. Gunakan untuk perilaku. Gunakan Maguyva untuk fakta.&lt;/p&gt;
&lt;p&gt;Jangan biarkan agen membuka PR sebelum kutipan bertahan dari kontak dengan repo. Gerbang itu adalah keseluruhan inti tahap ini.&lt;/p&gt;
&lt;h3 id=&quot;2-pr-agen&quot;&gt;2. PR agen&lt;/h3&gt;
&lt;p&gt;Agen yang sama sekarang menulis perubahan di klien yang sudah Anda bayar. Maguyva bukan editor dan bukan reviewer. Agen tetap menghasilkan diff. Anda tetap membuka pull request di GitHub atau GitLab seperti yang sudah Anda lakukan.&lt;/p&gt;
&lt;p&gt;Yang seharusnya berbeda adalah file pertama. PR seharusnya menyebutkan handler yang benar-benar mengimplementasikan perilaku, pemanggil yang akan rusak, dan tes yang akan gagal jika perubahan itu salah. Jika tahap 1 dilewati, tahap 3 akan menghabiskan komentarnya pada perubahan yang mendarat di paket yang salah. Greptile masih bisa menemukan masalah sistemik. Ia seharusnya tidak juga harus pulih dari jalur yang berhalusinasi.&lt;/p&gt;
&lt;p&gt;Jaga PR tetap terbatas. File pertama yang berdasar bukan lisensi untuk menulis ulang modul. Pasangan yang saling melengkapi ini bekerja saat agen melakukan satu pekerjaan dengan peta, lalu meminta reviewer melakukan pekerjaan lain pada diff yang dibatasi.&lt;/p&gt;
&lt;h3 id=&quot;3-review-greptile&quot;&gt;3. Review Greptile&lt;/h3&gt;
&lt;p&gt;Greptile sudah terhubung ke repo lewat aplikasi GitHub atau GitLab. Pada pull request baru, ia menganalisis perubahan menggunakan graf repo penuh yang dibangunnya, dan mempublikasikan temuan sebagai komentar dengan perbaikan yang disarankan. Materi mereka sendiri menempatkan proses ini sekitar tiga menit.&lt;/p&gt;
&lt;p&gt;Baca komentar seperti Anda membaca rekan tim yang teliti: buka lokasi yang dikutip, putuskan apakah temuannya nyata, lalu bertindak. Di mana Greptile menawarkan ‘Fix with your Agent’, ia mengirim masalah — jalur file, nomor baris, kode yang disarankan — ke Claude Code, Codex, Conductor, Cursor, atau Devin. ‘Fix All’ mengirim semua masalah dalam review sekaligus. Mereka juga menyediakan Greptile MCP dan plugin Claude Code untuk serah terima itu. Maguyva tidak ada di daftar target bernama itu; ketidakhadiran itu bukan masalah. Maguyva sudah melakukan pekerjaannya di tahap 1. Agen coding yang menulis PR adalah yang seharusnya menerima payload perbaikan.&lt;/p&gt;
&lt;p&gt;Harapkan gangguan pada 2-3 minggu pertama saat sistem pembelajaran Greptile beradaptasi dengan komentar yang benar-benar ditinggalkan tim Anda. Itu jadwal yang mereka nyatakan, bukan cacat pada pasangan ini. Review manusia tetap ada dalam loop. Greptile adalah proses pertama yang otomatis, bukan tombol merge.&lt;/p&gt;
&lt;p&gt;Jika komentar Greptile menunjuk ke file yang tidak pernah ditanyakan agen di tahap 1, itu sinyal yang berguna. Entah peta melewatkan pemanggil, atau agen melewatkan kutipan. Perbaiki draf sesuai komentar itu. Jangan nonaktifkan reviewer.&lt;/p&gt;
&lt;h2 id=&quot;cara-menjaga-pelengkap-ini-tetap-jujur&quot;&gt;Cara menjaga pelengkap ini tetap jujur&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Maguyva selalu pertama. Review PR dengan file salah tetap saja review file yang salah.&lt;/li&gt;
&lt;li&gt;Greptile selalu setelahnya. Draf yang dikutip dengan baik tetap membutuhkan pembacaan diff pada tingkat seluruh sistem.&lt;/li&gt;
&lt;li&gt;Jangan minta Maguyva mempublikasikan komentar PR. Ia tidak melakukannya.&lt;/li&gt;
&lt;li&gt;Jangan minta Greptile menjadi lapisan pengambilan pertama agen saat agen masih memilih jalur. Itu bukan pekerjaan yang dirancang untuk aplikasi GitHub atau GitLab mereka.&lt;/li&gt;
&lt;li&gt;Jangan mengarang pipeline bash yang ‘menyinkronkan’ keduanya. PR adalah antarmukanya.&lt;/li&gt;
&lt;li&gt;Verifikasi kedua sisi secara independen. Indeks satu repo yang sudah Anda kenal. Ajukan satu pertanyaan yang bisa Anda verifikasi. Lalu buka PR kecil dan baca apa yang sebenarnya dikomentari Greptile.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Loop ini biasa saja begitu diberi nama. Peta dulu. PR agen. Review kemudian. Setiap produk tetap di sisi pull request yang menjadi keahliannya.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// map first. review second. in that order.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>Workflow</category><category>Code Review</category></item><item><title>Memberi agen AI konteks repo besar tanpa indexer lokal</title><link>https://maguyva.ai/id/blog/large-repo-context-without-a-local-indexer</link><guid isPermaLink="true">https://maguyva.ai/id/blog/large-repo-context-without-a-local-indexer</guid><description>Cara memberi agen coding peta repo besar yang bisa ditanyakan dari cloud, tanpa menjalankan indexer lokal di laptop Anda.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Repo besar tidak muat di jendela konteks, dan jika Anda pernah mengarahkan indexer laptop ke monorepo sungguhan, Anda tahu itu juga tidak muat dengan nyaman di sana — RAM melonjak, indeksasi pertama butuh satu jam, dan agen Anda tetap memulai sesi berikutnya dengan menebak file mana yang penting.&lt;/p&gt;
&lt;p&gt;Jawaban yang biasa adalah menjalankan indexer di samping editor, dan untuk repo yang muat dengan nyaman di satu mesin, itu jawaban yang baik. Jika monorepo Anda sudah terindeks cepat di Cursor dan itu satu-satunya tempat Anda membutuhkan peta, tulisan ini tidak punya apa-apa untuk ditambahkan — lewati saja.&lt;/p&gt;
&lt;p&gt;Tulisan ini tentang kasus lain — ketika agen membutuhkan peta repo besar yang bisa ditanyakan, dan Anda tidak ingin menjalankan indexer lokal untuk mendapatkannya.&lt;/p&gt;
&lt;h2 id=&quot;kapan-indexer-lokal-adalah-alat-yang-salah&quot;&gt;Kapan indexer lokal adalah alat yang salah&lt;/h2&gt;
&lt;p&gt;Indeks lokal mengasumsikan kode hidup di mesin yang menanyakannya, dan pada skala monorepo sungguhan, asumsi itu meregang bahkan di dalam satu editor. Repo itu sekadar lebih besar daripada yang ingin Anda jaga tetap ‘hangat’ di laptop: Anda bekerja di satu paket sementara cakupan dampak berada tiga direktori lebih jauh, dan indeksasi dingin pertama untuk pohon dua juta baris bukan sesuatu yang ingin Anda alami dua kali — baik di mesin Anda sendiri, maupun di CI runner yang tidak pernah meng-clone pohon itu sebelumnya. Atau seorang rekan tim seharusnya bisa menanyakan peta yang sama dengan Anda, tanpa menunggu mesin mereka sendiri berjuang melalui indeks yang sama.&lt;/p&gt;
&lt;p&gt;Tidak satu pun dari ini menjadi alasan untuk membuang indexer editor yang bagus. Ini alasan untuk juga punya peta yang dihosting yang bisa ditanyakan oleh agen mana pun milik Anda lewat MCP.&lt;/p&gt;
&lt;p&gt;Dan masalah skala berjalan lebih dalam daripada ‘terlalu banyak file untuk ditempel’. Pada pohon besar, pertanyaan yang menarik hampir tidak pernah ‘tunjukkan file ini kepada saya’ — melainkan file mana, simbol mana, pemanggil mana, tes mana. Agen yang mulai dengan mendaftar &lt;code&gt;src/&lt;/code&gt; dan membaca tiga hasil pertama akan dengan riang melewatkan handler di &lt;code&gt;apps/api&lt;/code&gt; dan klien yang dihasilkan di &lt;code&gt;packages/sdk&lt;/code&gt;. Yang Anda butuhkan adalah pengambilan yang dibangun dari seluruh pohon, lalu diperingkat, lalu dikutip.&lt;/p&gt;
&lt;h2 id=&quot;apa-arti-sebenarnya-konteks-repo-besar&quot;&gt;Apa arti sebenarnya ‘konteks repo besar’&lt;/h2&gt;
&lt;p&gt;Menumpahkan file ke prompt bukanlah konteks — itu salinan pohon yang lebih kecil dan lebih buruk. Yang benar-benar dibutuhkan agen Anda adalah mengajukan pertanyaan dan mendapatkan jawaban yang dikutip kembali: di mana simbol ini didefinisikan dan siapa yang memanggilnya, apa yang bergantung pada modul yang akan saya ubah, file tes mana yang mencakup perilaku ini, dan seperti apa pohon itu &lt;em&gt;sekarang&lt;/em&gt;, bukan kuartal lalu.&lt;/p&gt;
&lt;p&gt;Jawaban-jawaban itu harus berasal dari indeks yang dibangun dari repo Anda, bukan dari ingatan model tentang repo orang lain, dan indeksnya harus hidup di suatu tempat di luar jendela konteks agen. Untuk masalah ini, seharusnya juga hidup di suatu tempat di luar laptop Anda.&lt;/p&gt;
&lt;p&gt;Satu hal lagi yang tidak bisa dilakukan file instruksi untuk Anda: &lt;code&gt;CLAUDE.md&lt;/code&gt; dan &lt;code&gt;AGENTS.md&lt;/code&gt; adalah tempat yang tepat untuk konvensi dan perilaku, tetapi bukan peta yang hidup, berperingkat, dan bisa ditanyakan dari pohon dua juta baris. Gunakan aturan untuk perilaku; gunakan kecerdasan repo untuk fakta.&lt;/p&gt;
&lt;h2 id=&quot;kami-membangun-peta-di-cloud-anda-menanyakannya-dari-klien-mana-pun&quot;&gt;Kami membangun peta di cloud, Anda menanyakannya dari klien mana pun&lt;/h2&gt;
&lt;p&gt;Maguyva adalah lapisan konteks codebase MCP jarak jauh. Anda menghubungkan GitHub, memilih repo Anda, dan bisa pergi begitu saja sementara pipeline cloud mengurai pohon, membangun simbol dan tepi graf, dan memelihara peta berperingkat — tanpa indexer lokal, sama sekali tidak pernah.&lt;/p&gt;
&lt;p&gt;Saat Anda push kode, file yang berubah diurai secara bertahap, dan lapisan graf serta peringkat dibangun ulang sesuai jadwal: harian di paket gratis, setiap jam di paket berbayar. Setiap snapshot diberi timestamp, sehingga agen Anda bisa mengetahui versi pohon mana yang dibacanya. Batasan jujur di sini adalah pekerjaan lokal yang belum disinkronkan — perubahan yang hanya ada di working tree Anda, tidak pernah di-push, belum ada di peta yang dihosting.&lt;/p&gt;
&lt;p&gt;Lalu Anda menghubungkan klien apa pun yang sudah Anda gunakan dengan menambahkan kunci API ke konfigurasi MCP-nya. Ada panduan pengaturan untuk 24 klien MCP terdokumentasi, dan klien kompatibel MCP lain mana pun yang mendukung konfigurasi standar juga bisa terhubung. Jika Cursor tempat Anda tinggal, &lt;a href=&quot;https://maguyva.ai/id/for-cursor&quot;&gt;halaman Cursor&lt;/a&gt; menempuh jalur itu; server yang sama menjawab Claude Code, VS Code, Windsurf, Codex CLI, dan lainnya.&lt;/p&gt;
&lt;p&gt;Anda tidak berganti editor. Anda memberi agen Anda permukaan alat — 11 alat MCP di seluruh pencarian, simbol, analisis dependensi, pengambilan file, dan konteks repo — dengan cakupan lebih dari 279 bahasa dan teknologi berbasis teks, yang berarti lebih dari yang Anda kira pada monorepo yang berhenti menjadi satu bahasa bertahun-tahun lalu.&lt;/p&gt;
&lt;p&gt;Jawaban kembali dengan dasar yang kuat, sebagai jalur file dengan nomor baris. Pencarian semantik, struktural, graf, dan teks digabung menjadi hasil berperingkat, sehingga pertanyaan seperti ‘apa yang bergantung pada parseConfig’ tidak memberi Anda tumpukan grep atau satu potongan semantik, melainkan segelintir tempat yang benar-benar penting.&lt;/p&gt;
&lt;h2 id=&quot;panduan-konkret&quot;&gt;Panduan konkret&lt;/h2&gt;
&lt;p&gt;Jangan mulai dengan mengindeks seluruh perusahaan. Ini jalur yang berhasil:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pilih satu repo yang sudah Anda kenal baik — paket yang bisa Anda nilai dengan tangan lebih berharga daripada pohon terbesar yang Anda miliki.&lt;/li&gt;
&lt;li&gt;Mulai gratis: 3 repo, 50 ribu baris terindeks, semua 11 alat, tanpa kuota query bulanan. Jika repo representatif Anda lebih besar, &lt;a href=&quot;https://maguyva.ai/id/pricing&quot;&gt;halaman harga&lt;/a&gt; mencantumkan tingkatan workspace ($0, $19, $49, $149) berdasarkan cakupan yang diindeks — bukan berdasarkan jumlah kursi.&lt;/li&gt;
&lt;li&gt;Hubungkan GitHub dan tunggu indeksasi pertama selesai. Anda tidak mengompilasi apa pun secara lokal.&lt;/li&gt;
&lt;li&gt;Hubungkan klien MCP — beberapa baris konfigurasi. Maguyva adalah server MCP jarak jauh, jadi tidak ada plugin, tidak ada ekstensi, dan tidak ada editor kedua yang harus diadopsi.&lt;/li&gt;
&lt;li&gt;Ajukan satu pertanyaan yang bisa Anda verifikasi. ‘Apa yang bergantung pada parseConfig?’ atau ‘Di mana kedaluwarsa sesi login ditangani?’ Lalu buka hasil &lt;code&gt;file.ext:line&lt;/code&gt; yang dikutip dan periksa terhadap pohon di depan Anda.&lt;/li&gt;
&lt;li&gt;Hanya setelah kutipan itu bertahan dari kontak itu, Anda membiarkan agen mengedit.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Jika repo pertama cocok dengan baik dan pohon Anda besar, naikkan workspace agar sesuai dengan baris terindeks Anda dan kecepatan pembangunan ulang. Manusia dan agen berbagi hitungan pengguna yang sama — Maguyva menagih per workspace, bukan per kursi — jadi menambahkan agen ketiga ke dalam loop tidak membebani Anda apa pun.&lt;/p&gt;
&lt;p&gt;Tes aktivasi sama dengan yang direkomendasikan &lt;a href=&quot;https://maguyva.ai/id/docs&quot;&gt;dokumentasi&lt;/a&gt; untuk setiap jalankan pertama: indeks satu repo yang sudah Anda kenal, ajukan satu pertanyaan yang bisa Anda verifikasi. Repo besar tidak mengubah tesnya; itu hanya membuat file pertama yang salah menjadi lebih mahal.&lt;/p&gt;
&lt;h2 id=&quot;yang-perlu-diperhatikan-setelah-terhubung&quot;&gt;Yang perlu diperhatikan setelah terhubung&lt;/h2&gt;
&lt;p&gt;Perhatikan tiga hal. Kesegaran: paket berbayar dibangun ulang setiap jam, paket gratis harian, dan pekerjaan lokal yang belum di-push tidak akan ada di peta — itulah kompromi yang Anda terima. Cakupan: indeks kumpulan repo yang representatif, bukan setiap fork yang diarsipkan; tingkat gratis sengaja diukur untuk mengetahui apakah jawabannya layak dipertahankan. Dan verifikasi: peta repo besar yang tidak bisa mengutip jalur dan nomor baris hanyalah mesin tebakan yang lebih lambat, jadi buat agen Anda menunjukkan lokasi sebelum mengirimkan patch.&lt;/p&gt;
&lt;p&gt;Lalu jalankan tes yang sama seperti yang akan Anda jalankan pada repo kecil. Indeks satu repo yang sudah Anda kenal. Ajukan satu pertanyaan yang bisa Anda verifikasi. Jika peta itu nyata, agen Anda berhenti memulai dari pohon yang dingin.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// no laptop got hot building this map.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>MCP</category><category>Indexing</category><category>Monorepos</category></item><item><title>Mengapa agen coding AI berhalusinasi jalur file</title><link>https://maguyva.ai/id/blog/why-ai-coding-agents-hallucinate-file-paths</link><guid isPermaLink="true">https://maguyva.ai/id/blog/why-ai-coding-agents-hallucinate-file-paths</guid><description>Agen coding AI mengarang jalur file saat mereka tidak punya peta nyata dari repo. Berikut alasannya, dan bagaimana pelandasan mengarah pada lebih sedikit perubahan yang berhalusinasi.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Tandanya bukan badan fungsi yang salah. Itu adalah perubahan yang percaya diri pada file yang tidak ada, atau file yang ada tetapi bukan yang mengimplementasikan perilaku itu.&lt;/p&gt;
&lt;p&gt;Anda meminta perbaikan kedaluwarsa sesi. Agen membuka &lt;code&gt;src/auth/session.ts&lt;/code&gt;. Jalur itu masuk akal. Itu juga salah. Handler sebenarnya hidup di &lt;code&gt;apps/api/src/middleware/expiry.ts&lt;/code&gt;, diganti namanya dua refactor lalu. Agen tidak berbohong kepada Anda. Ia menyelesaikan string berbentuk jalur dari prior pelatihan ditambah apa pun yang sudah ada di jendela konteks.&lt;/p&gt;
&lt;p&gt;Ini adalah pola kegagalan umum pada repo sungguhan. Model bisa menulis kode. Kesalahannya ada pada memilih tempat yang salah untuk menulisnya.&lt;/p&gt;
&lt;h2 id=&quot;mengapa-agen-mengarang-jalur&quot;&gt;Mengapa agen mengarang jalur&lt;/h2&gt;
&lt;p&gt;Agen coding adalah model prediksi token berikutnya dengan alat-alat. Saat Anda bilang ‘perbaiki kedaluwarsa sesi’, ia harus menyebutkan file sebelum bisa membaca atau menambal apa pun. Jika belum punya peta yang berdasar, ia membangun jalur dari:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Konvensi penamaan yang pernah dilihatnya di repo lain. &lt;code&gt;src/auth/session.ts&lt;/code&gt; adalah bentuk yang sering muncul.&lt;/li&gt;
&lt;li&gt;File yang sudah ada dalam percakapan, yang mungkin adalah yang Anda tempel minggu lalu, bukan yang penting sekarang.&lt;/li&gt;
&lt;li&gt;Daftar direktori yang kebetulan dijalankannya, tidak lengkap pada pohon yang besar.&lt;/li&gt;
&lt;li&gt;File instruksi. &lt;code&gt;CLAUDE.md&lt;/code&gt; dan &lt;code&gt;AGENTS.md&lt;/code&gt; memberi tahu agen cara berperilaku. Itu bukan indeks yang hidup dari simbol, pemanggil, atau jalur terkini.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tidak satu pun dari sumber ini adalah peta repo ini, hari ini. Model mengisi kekosongan dengan cara yang sama seperti mengisi kekosongan mana pun: dengan kelanjutan berprobabilitas tinggi. Kelanjutan itu sering terlihat seperti jalur sungguhan. Kadang filenya ada dan terletak di sebelah yang benar. Kadang ia pernah ada di branch yang di-merge bulan lalu. Kadang ia tidak pernah ada.&lt;/p&gt;
&lt;p&gt;Grep tidak menyelamatkan Anda di sini jika agen tidak pernah mencari string yang benar. Agen menebak jalur, lalu membaca apa yang dikembalikan jalur itu, lalu mengeditnya. Langkah pertama yang salah adalah jalurnya, bukan patch-nya.&lt;/p&gt;
&lt;p&gt;Membaca file juga bukan hal yang sama dengan menemukan yang benar. Claude Code, Cursor, Codex, dan alat serupa bisa membuka apa pun yang Anda arahkan. Pertanyaannya adalah apakah mereka secara andal menemukan file yang tepat, simbol yang penting, dependensi, tes, dan cakupan dampak sebelum mengedit. Akses file tanpa peta tetap dimulai dengan tebakan.&lt;/p&gt;
&lt;h2 id=&quot;mengedit-file-yang-salah-adalah-masalah-pengambilan&quot;&gt;Mengedit file yang salah adalah masalah pengambilan&lt;/h2&gt;
&lt;p&gt;Perlakukan jalur yang dikarang sebagai kegagalan pengambilan, bukan sebagai cacat karakter.&lt;/p&gt;
&lt;p&gt;Jika agen harus mengembalikan &lt;code&gt;path/file.ext:line&lt;/code&gt; sebelum diizinkan mengedit, dua hal akan terjadi. Pertama, Anda bisa membuka kutipan itu dan menolak pekerjaan dalam sepuluh detik. Kedua, agen harus menanyakan sesuatu yang benar-benar mengenal pohon itu.&lt;/p&gt;
&lt;p&gt;Itu adalah pekerjaan lapisan konteks codebase. Pencarian semantik saja tidak cukup. Sepotong yang ‘terdengar seperti kedaluwarsa sesi’ tetap bisa mendarat di paket yang sudah usang. Anda juga butuh teks yang tepat saat Anda tahu stringnya, pencarian simbol saat Anda tahu namanya, pencarian struktural saat Anda tahu bentuknya, dan graf dependensi saat Anda butuh pemanggil dan cakupan dampak.&lt;/p&gt;
&lt;p&gt;Maguyva adalah lapisan itu untuk agen coding yang kompatibel MCP. Ini bukan editor. Claude Code, Cursor, Codex CLI, VS Code, Windsurf, dan klien MCP lainnya tetap di tempatnya. Agen menanyakan peta berperingkat sebelum menyentuh satu baris.&lt;/p&gt;
&lt;p&gt;Klaimnya sengaja sederhana: lebih sedikit perubahan yang berhalusinasi. Maguyva tidak menghilangkan kemampuan model untuk menebak. Ia mengubah langkah pertama default dari ‘karang jalur yang masuk akal’ menjadi ‘minta lokasi berperingkat, terkutip’.&lt;/p&gt;
&lt;h2 id=&quot;seperti-apa-jawaban-yang-berdasar&quot;&gt;Seperti apa jawaban yang berdasar&lt;/h2&gt;
&lt;p&gt;Jawaban yang berguna untuk ‘di mana kedaluwarsa sesi ditangani’ bukanlah sebuah paragraf. Ini daftar singkat lokasi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apps/api/src/middleware/expiry.ts:48&lt;/code&gt; - handler-nya&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/web/src/lib/auth-client.ts:112&lt;/code&gt; - pemanggilnya&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/api/tests/expiry.test.ts:20&lt;/code&gt; - tes yang akan gagal jika perubahan itu salah&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anda bisa membuka baris-baris ini. Jika salah, Anda berhenti. Jika benar, agen boleh mengedit. Verifikasi adalah intinya, bukan slogan.&lt;/p&gt;
&lt;p&gt;Maguyva mengekspos 11 alat MCP yang menghadap klien di seluruh pencarian, simbol, analisis dependensi, pengambilan file, konteks repo, dan alur kerja alat bantu deterministik. Empat mode pengambilan (semantik, struktural, graf/dependensi, dan teks) digabung menjadi hasil berperingkat; pencarian simbol adalah alat MCP terpisah (&lt;code&gt;find_symbol&lt;/code&gt;). Jawaban yang berdasar kembali dengan jalur file dan nomor baris, sehingga Anda bisa menilainya terhadap pohon di depan Anda.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/id/docs&quot;&gt;Dokumentasi&lt;/a&gt; menjelaskan jalur terpendek: mulai gratis, indeks repo yang sudah Anda kenal, hubungkan klien, lalu ajukan satu pertanyaan yang bisa Anda verifikasi.&lt;/p&gt;
&lt;h2 id=&quot;loop-yang-mengubah-perubahan-pertama&quot;&gt;Loop yang mengubah perubahan pertama&lt;/h2&gt;
&lt;p&gt;Anda tidak butuh agama alur kerja baru. Anda butuh satu langkah ekstra sebelum tulisan pertama.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ajukan pertanyaan yang sudah bisa Anda nilai. ‘Kode mana yang menangani login dan kedaluwarsa sesi?’ lebih baik daripada ‘perbaiki auth’.&lt;/li&gt;
&lt;li&gt;Tuntut kutipan. Jalur file dan nomor baris, bukan ringkasan ‘modul auth’.&lt;/li&gt;
&lt;li&gt;Buka file yang dikutip. Ikuti simbolnya. Konfirmasikan dependensi yang akan Anda sentuh.&lt;/li&gt;
&lt;li&gt;Baru setelah itu biarkan agen menambal.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Jika langkah 2 tidak mengembalikan apa pun yang berguna, agen tidak punya hak untuk mengimprovisasi jalur. Ia mencari lagi, atau Anda menunjukkannya. Justru satu gerbang inilah yang menghasilkan lebih sedikit perubahan yang berhalusinasi. Modelnya adalah model yang sama. Yang berubah adalah petanya.&lt;/p&gt;
&lt;p&gt;File instruksi masih penting. Simpan itu. Gunakan untuk konvensi, aturan review, dan apa yang tidak boleh disentuh. Jangan minta mereka menjadi indeks. &lt;code&gt;CLAUDE.md&lt;/code&gt; yang mendaftar tiga direktori penting akan basi seminggu setelah pemecahan paket. Peta yang bisa ditanyakan diperbarui saat repo diperbarui.&lt;/p&gt;
&lt;p&gt;Kegagalan terkait adalah file yang hampir benar: agen membuka &lt;code&gt;auth.ts&lt;/code&gt; padahal perilakunya hidup di &lt;code&gt;auth-client.ts&lt;/code&gt;, atau menambal file yang dihasilkan alih-alih sumbernya, atau mengedit salinan di &lt;code&gt;packages/legacy&lt;/code&gt; karena namanya cocok. Kutipan tidak membuat kesalahan-kesalahan ini mustahil. Kutipan membuatnya terlihat sebelum diff mendarat.&lt;/p&gt;
&lt;h2 id=&quot;apa-yang-tidak-akan-diperbaiki-peta-untuk-anda&quot;&gt;Apa yang tidak akan diperbaiki peta untuk Anda&lt;/h2&gt;
&lt;p&gt;Bersikaplah realistis tentang apa yang Anda dapatkan. Peta yang berdasar tidak akan membuat setiap perubahan benar — agen Anda tetap bisa menulis patch yang buruk di file yang persis benar. Jika codebase Anda bersandar pada dispatch dinamis, refleksi, atau monkey-patching, beberapa pencarian simbol akan kembali lebih tipis daripada yang Anda inginkan, karena itulah yang dilakukan indireksi runtime pada indeks statis mana pun. Dan jika Anda mengharapkan persentase — ‘jalur yang berhalusinasi berkurang X%’ — Anda tidak akan menemukannya di sini, karena tidak ada yang bisa secara jujur mengukur angka itu untuk repo Anda selain diri Anda sendiri.&lt;/p&gt;
&lt;p&gt;Yang bisa Anda harapkan lebih sempit dan lebih berguna: agen berhenti memulai perubahannya dengan jalur yang ditebak. Langkah pertama itu menjadi berdasar pada peta sungguhan, dan dari situlah lebih sedikit perubahan yang berhalusinasi berasal. Semua yang setelah kutipan — membaca diff, menilai patch — tetap menjadi pekerjaan Anda, seperti selalu.&lt;/p&gt;
&lt;p&gt;Tes ini hampir tidak membebani Anda apa pun: indeks satu repo yang sudah Anda kenal dan ajukan satu pertanyaan yang bisa Anda verifikasi. Mulai dengan jalur yang pernah membuat Anda kapok. Jika kutipannya salah, Anda akan langsung melihatnya. Jika benar, perubahan berikutnya dari agen Anda punya tempat yang lebih baik untuk mendarat.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// it doesn&apos;t know the file. it knows how to find it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>Hallucination</category><category>Retrieval</category><category>MCP</category></item><item><title>Mengapa Kami Meningkatkan Pencarian Kode ke voyage-4-large</title><link>https://maguyva.ai/id/blog/upgrading-code-search-to-voyage-4-large</link><guid isPermaLink="true">https://maguyva.ai/id/blog/upgrading-code-search-to-voyage-4-large</guid><description>Kami memindahkan embedding kode kami ke voyage-4-large — saat ini teratas di papan peringkat retrieval kode RTEB publik. Versi jujurnya: trade-off yang kami ambil, apa yang sebenarnya kami indeks, dan mengapa kami membayar untuk embedding premium.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Angka benchmark dalam tulisan ini mencerminkan papan peringkat RTEB pada saat publikasi (Juni 2026). Papan peringkat bergerak; anggap peringkatnya sebagai potret sesaat, bukan fakta permanen.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pencarian semantik hanya sebaik embedding yang mendasarinya.&lt;/p&gt;
&lt;p&gt;Ketika seorang agen bertanya kepada Maguyva “di mana kita menangani retry,” ia tidak sedang meng-grep kata “retry.” Ia sedang menanyakan &lt;em&gt;makna&lt;/em&gt; — loop backoff, circuit breaker, hal yang membungkus sebuah panggilan yang tidak stabil. Pertanyaan itu dijawab oleh sebuah model vektor yang mengubah kode menjadi sebuah titik dalam ruang dan menemukan tetangganya. Pilih model yang lebih baik, dan setiap kueri semantik di produk ini diam-diam menjadi lebih tajam.&lt;/p&gt;
&lt;p&gt;Jadi kami mengubah milik kami. Per Juni 2026, embedding kode Maguyva berjalan di atas &lt;strong&gt;&lt;code&gt;voyage-4-large&lt;/code&gt;&lt;/strong&gt;, menggantikan &lt;code&gt;voyage-code-3&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;benchmark-nya&quot;&gt;Benchmark-nya&lt;/h2&gt;
&lt;p&gt;Kami tidak membuat keputusan ini berdasarkan feeling. &lt;a href=&quot;https://embedding-benchmark-rteb.hf.space/code&quot;&gt;Retrieval Embedding Benchmark (RTEB)&lt;/a&gt; publik memeringkat model embedding pada task retrieval sungguhan, dan pada papan peringkat &lt;strong&gt;Code&lt;/strong&gt;-nya, &lt;code&gt;voyage-4-large&lt;/code&gt; berada di &lt;strong&gt;#1 secara keseluruhan (90,86)&lt;/strong&gt; — mengungguli &lt;code&gt;gemini-embedding-2-preview&lt;/code&gt; (90,26) dan, yang patut dicatat, mengungguli model yang sebelumnya kami pakai, &lt;code&gt;voyage-code-3&lt;/code&gt; (89,73, #3).&lt;/p&gt;
&lt;p&gt;Itu selisih absolut yang kecil. Tetapi itu selisih ke arah yang benar, pada benchmark publik, pada task persis yang kami pedulikan: mengambil kode berdasarkan makna.&lt;/p&gt;
&lt;h2 id=&quot;trade-off-yang-kami-terima-kuantisasi-biner&quot;&gt;Trade-off yang Kami Terima: Kuantisasi Biner&lt;/h2&gt;
&lt;p&gt;Inilah bagian yang sering dilewatkan kebanyakan tulisan “kami meningkatkan model kami.”&lt;/p&gt;
&lt;p&gt;Maguyva tidak menyimpan vektor presisi penuh. Kami menyimpan embedding yang &lt;strong&gt;terkuantisasi biner&lt;/strong&gt;: setiap vektor 2048 dimensi dipadatkan menjadi sebuah signature 2048-bit — &lt;strong&gt;256 byte per vektor&lt;/strong&gt;. Signature-signature itu dicari dengan Hamming distance, diindeks dan dipartisi per tenant.&lt;/p&gt;
&lt;p&gt;Itu trade-off yang disengaja. Kuantisasi biner melepas sebagian presisi retrieval demi penyimpanan yang jauh lebih kecil dan perhitungan jarak yang cepat dan murah tanpa perlu database vektor terpisah untuk dioperasikan. Untuk sebuah produk yang mengindeks seluruh repositori per workspace, ekonomi itu lebih penting daripada mengejar pecahan poin terakhir dari sebuah benchmark.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;voyage-4-large&lt;/code&gt; cocok dengan desain ini tanpa memaksa migrasi lapisan penyimpanan: ia menghasilkan output 2048 dimensi, sama seperti &lt;code&gt;voyage-code-3&lt;/code&gt;, sehingga kolom &lt;code&gt;bit(2048)&lt;/code&gt; kami dan jalur pencarian Hamming kami tidak berubah. Modelnya membaik; skemanya tetap sama.&lt;/p&gt;
&lt;h2 id=&quot;kode-hanyalah-permulaan&quot;&gt;Kode Hanyalah Permulaan&lt;/h2&gt;
&lt;p&gt;Maguyva adalah tool code-intelligence. Tetapi kami juga customer zero, dan kami mengarahkannya ke sesuatu yang lain: markdown yang hidup di repo kami bersebelahan dengan kode. Architecture decision record, runbook, kontrak, dokumen finance dan policy — semuanya version-controlled di Git, semuanya di balik server MCP yang sama, sebuah indeks semantik atas &lt;em&gt;dokumen&lt;/em&gt;, bukan hanya source code.&lt;/p&gt;
&lt;p&gt;Itulah persisnya mengapa keluasan voyage-4-large itu penting. Pada keluarga papan peringkat RTEB yang sama, ia &lt;strong&gt;#1 di finance, #1 di healthcare, dan #1 di retrieval teks keseluruhan&lt;/strong&gt; — mengungguli Gemini Embedding milik Google, Embed v4 milik Cohere, dan text-embedding-3-large milik OpenAI. (Voyage adalah salah satu pencipta RTEB, jadi kami membacanya sebagai sinyal publik yang kuat, bukan wasit yang sepenuhnya netral — tetapi ia di-benchmark head-to-head dengan setiap model komersial besar, pada hold-out set privat.) Indeks yang sama yang menemukan fungsi yang tepat untuk seorang agen juga menemukan klausul yang tepat dalam sebuah kontrak atau baris yang tepat dalam sebuah policy — dan pada domain-domain itu, voyage-4-large bukan sebuah kompromi, ia sang pemimpin.&lt;/p&gt;
&lt;h2 id=&quot;mengapa-kami-membayar-untuk-embedding-premium&quot;&gt;Mengapa Kami Membayar untuk Embedding Premium&lt;/h2&gt;
&lt;p&gt;Ada cara yang lebih murah untuk melakukan pencarian, dan sebagian besarnya gratis. Pencarian leksikal — BM25 dan sejenisnya — mencocokkan kata kunci, berjalan lokal, dan tidak berbiaya apa pun. Model embedding open-source seperti BGE, Nomic, dan embeddinggemma memberikan retrieval semantik yang sungguh-sungguh &lt;em&gt;lumayan&lt;/em&gt;, dan Anda bisa meng-self-host mereka dengan harga sebuah GPU. Maguyva juga menggunakan sisi gratis itu: setiap kueri memfusikan pencarian teks, AST, graf, dan semantik. Yang tidak kami irit adalah lapisan semantiknya.&lt;/p&gt;
&lt;p&gt;Kami membayar per token untuk embedding premium — &lt;code&gt;voyage-4-large&lt;/code&gt; — alih-alih meng-self-host model gratis, karena dua alasan. Pertama, pencarian kata kunci saja tidak bisa menjawab “di mana kita menangani retry” ketika kodenya berkata &lt;code&gt;backoff&lt;/code&gt; dan &lt;code&gt;circuit breaker&lt;/code&gt; dan tidak pernah menyebut kata “retry” — makna adalah keseluruhan inti dari embedding, dan pada domain-domain yang kami layani, model open source tertinggal dari model premium: beberapa poin di belakang pada teks umum, dan lebih jauh tertinggal di niche seperti kode, kontrak, dan finance. Kedua, dalam pengalaman kami, kualitas retrieval membentuk jawaban akhir lebih daripada model di sisi lainnya — seorang agen yang kuat tetapi diberi konteks yang salah tetap menjawab salah, dan ia tidak pernah melihat dokumen yang tidak pernah diberikan kepadanya.&lt;/p&gt;
&lt;p&gt;Jadi embedding premium adalah tagihan per token yang berskala dengan setiap repo dan dokumen yang kami indeks — dan kami membayarnya dengan sengaja. Untuk hasil yang didapat pengguna kami, fungsi yang tepat atau klausul yang tepat, kami rasa trade-off itu sepadan.&lt;/p&gt;
&lt;h2 id=&quot;bagian-yang-jujur&quot;&gt;Bagian yang Jujur&lt;/h2&gt;
&lt;p&gt;Dokumentasi Voyage sendiri masih melabeli &lt;code&gt;voyage-code-3&lt;/code&gt; sebagai model yang dioptimalkan untuk kode. Jadi mengapa berpindah?&lt;/p&gt;
&lt;p&gt;Karena kami membaca benchmark publiknya, bukan sekadar tabel model milik vendor, dan benchmark itu menempatkan &lt;code&gt;voyage-4-large&lt;/code&gt; di puncak untuk retrieval kode. Ini adalah keputusan yang menatap ke depan: mengambil model yang lebih baru dan secara umum lebih kuat, lalu memvalidasinya terhadap sebuah papan peringkat publik pada task-task yang penting. Kami nyaman membuat taruhan itu karena buktinya luas — voyage-4-large tidak hanya menang di kode, ia juga memimpin di finance, healthcare, dan retrieval keseluruhan.&lt;/p&gt;
&lt;h2 id=&quot;fondasi-di-balik-layar&quot;&gt;Fondasi di Balik Layar&lt;/h2&gt;
&lt;p&gt;Setiap tool yang kami ekspos — pencarian semantik, pengumpulan task-context, tanya jawab grounded — bermuara pada retrieval. Ketika retriever-nya membaik, agen di sisi lainnya mendapat bukti yang lebih baik, lebih jarang mengambil keputusan yang keliru, dan menambatkan jawabannya pada kode yang tepat — atau klausul yang tepat, atau policy yang tepat. Sebuah model embedding yang lebih tajam bukan fitur yang mencolok. Ia adalah fondasi bagi semua kemampuan lainnya, dan kami baru saja meningkatkan kualitasnya. Anda tidak akan menyadarinya. Itulah intinya.&lt;/p&gt;
</content:encoded><category>Embeddings</category><category>Search</category><category>Architecture</category></item><item><title>Peningkatan Mandiri Rekursif untuk Dukungan Bahasa: Menyempurnakan Kecerdasan Kode di ~280 Bahasa</title><link>https://maguyva.ai/id/blog/autonomous-quality-loops-language-grind</link><guid isPermaLink="true">https://maguyva.ai/id/blog/autonomous-quality-loops-language-grind</guid><description>Kami mendukung kecerdasan kode untuk ~280 bahasa. Tidak ada manusia yang bisa mengaudit itu secara manual. Jadi kami membangun loop peningkatan mandiri rekursif untuk dukungan bahasa — spot-check, LLM-as-judge, perbaiki satu hal, validasi ulang — dan menjalankannya dengan sepasukan agen terisolasi sampai ekstraksinya benar-benar tepat, bukan sekadar hijau.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Angka dalam tulisan ini mencerminkan sistem pada saat publikasi (Mei 2026). Lihat &lt;a href=&quot;https://maguyva.ai/id/team&quot;&gt;halaman tim&lt;/a&gt; kami untuk angka terkini.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maguyva mengekstraksi simbol, referensi, dan graf dependensi dari kode sumber di sekitar 280 bahasa. Setiap bahasa punya handler tree-sitter khusus — query, heuristik, edge case — dan setiap handler bisa salah dengan caranya masing-masing yang halus. Sebuah panggilan method yang tercatat sebagai pembacaan. Sebuah fungsi yang teratribusi ke scope pembungkus yang salah. Sebuah relasi yang sebenarnya tidak ada.&lt;/p&gt;
&lt;p&gt;Anda tidak bisa mengaudit itu secara manual. Tidak ada tim yang bisa membaca output ekstraksi lintas 280 grammar dan menemukan edge yang salah. Jadi pertanyaan yang menarik bukan “apakah ekstraksi kami benar” — melainkan “bagaimana Anda &lt;em&gt;menemukan&lt;/em&gt; bahwa itu salah, pada skala seluas ini, tanpa manusia di setiap loop.” Jawaban kami adalah peningkatan mandiri rekursif untuk dukungan bahasa: sebuah loop kualitas yang digerakkan oleh agen bahasa, sebuah LLM yang bertindak sebagai judge, dan satu aturan yang terus kami pelajari ulang: hijau tidak sama dengan benar.&lt;/p&gt;
&lt;h2 id=&quot;hijau-bukan-berarti-benar&quot;&gt;Hijau bukan berarti benar&lt;/h2&gt;
&lt;p&gt;Setiap bahasa punya suite fixture, dan sebuah release gate menilainya di lima dimensi — akurasi, integritas struktural, kelengkapan, kualitas, dan performa. Sebuah bahasa baru menjadi &lt;strong&gt;GREEN&lt;/strong&gt; hanya ketika, pada fixture-nya, presisi ≥ 0,95, recall ≥ 0,99, dan F1 ≥ 0,97, dengan minimal 20 edge yang diharapkan untuk keyakinan statistik. Di bawah itu, statusnya YELLOW atau RED, dan tidak akan dirilis.&lt;/p&gt;
&lt;p&gt;Gate itu perlu tetapi tidak cukup. Fixture divalidasi terhadap fixture yang &lt;em&gt;kami tulis sendiri&lt;/em&gt;. Fixture mengenkode kasus-kasus yang sudah kami pikirkan sebelumnya. Sebuah handler bisa sempurna pada fixture-nya tetapi tetap mengacaukan sebuah pola yang hanya muncul di kode dunia nyata — sebuah idiom macro, sebuah method dengan batasan tipe generic, sebuah fitur bahasa yang tidak pernah ditulis fixture-nya oleh siapa pun. GREEN berarti fixture-nya lulus. Itu tidak berarti sebuah repositori sungguhan terekstraksi dengan bersih. Jadi loop ini harus meninggalkan fixture dan memeriksa kode dunia nyata.&lt;/p&gt;
&lt;h2 id=&quot;loop-dalam-spot-check-judge-perbaiki-buktikan&quot;&gt;Loop dalam: spot-check, judge, perbaiki, buktikan&lt;/h2&gt;
&lt;p&gt;Loop inti berjalan satu bahasa dalam satu waktu:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ┌──────────────────────────────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  1. corpus run ── clone real-world repos, extract relationships   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  2. spot-check 100 edges (seed 42, then seed 123 to cross-check)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  3. LLM judge classifies every sampled edge:                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        CORRECT · FALSE_POSITIVE · TYPE_ERROR ·                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        SCOPE_ERROR · METADATA_ERROR                               │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  4. fix ONE thing — handler .py, .scm query, or config           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  5. re-validate — F1 + re-classify + manifest diff (no regressions)│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   better? ──no──► revert, try a different fix ────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │ yes                                                       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  6. promote the fix into fixtures (a permanent regression guard) ──┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Beberapa hal membuat ini berjalan alih-alih hanya berputar-putar tanpa hasil.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Judge-nya adalah agen itu sendiri, bukan sekadar panggilan API.&lt;/strong&gt; Ketika kami bilang “LLM-as-judge,” maksud kami agen bahasa itu sendiri mencocokkan setiap edge yang disampel dengan kode sumber sungguhan dan mengklasifikasikannya dengan rubrik lima kategori yang tetap: apakah edge ini benar, sebuah false positive, relasi yang tepat dengan tipe yang salah, terpasang pada scope yang salah, atau membawa metadata yang salah? Rubrik itulah keseluruhan permainannya — “tingkat kesalahan 23%” tidak berarti apa-apa sampai Anda tahu apakah itu cacat sungguhan atau judge yang salah hitung.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Perbaiki satu hal, lalu buktikan.&lt;/strong&gt; Setiap iterasi mengubah tepat satu aset yang bisa diedit, lalu dijalankan ulang terhadap harness yang tetap dan mempertahankan perubahan itu hanya jika F1 membaik dan reklasifikasinya terlihat lebih baik. Jika tidak, perubahan itu dibatalkan. Tidak ada batch edit spekulatif, tidak ada “seharusnya lebih baik.” Sebuah perubahan mendapatkan tempatnya, atau hilang. Dan ketika sebuah perbaikan bertahan, perbaikan itu dipromosikan ke dalam suite fixture — sehingga bug yang diperbaikinya tidak akan pernah diam-diam kembali. Langkah promosi itulah yang membuat loop ini &lt;em&gt;rekursif&lt;/em&gt;, bukan sekadar berulang: setiap putaran memperkuat oracle yang menjadi acuan validasi putaran berikutnya.&lt;/p&gt;
&lt;h2 id=&quot;pelajaran-yang-terus-kami-pelajari-ulang-metrik-terlalu-banyak-melaporkan&quot;&gt;Pelajaran yang terus kami pelajari ulang: metrik terlalu banyak melaporkan&lt;/h2&gt;
&lt;p&gt;Inilah jebakannya, dan kami langsung terjerumus ke dalamnya. Metrik korpus sekunder — seberapa sering sebuah target hasil ekstraksi tidak punya simbol yang bisa diresolusi, berapa banyak simbol yang terlihat “yatim,” dan seterusnya — secara masif melaporkan masalah yang terlalu banyak. Kebanyakan itu adalah &lt;em&gt;artefak paradigma&lt;/em&gt;, bukan bug.&lt;/p&gt;
&lt;p&gt;Contoh paling jelas: &lt;code&gt;llvm&lt;/code&gt; pernah menunjukkan tingkat “source-without-symbol” sebesar 73% dan langsung dicap bencana. Kami menggalinya lebih dalam. Akurasi sesungguhnya adalah &lt;strong&gt;98,5%&lt;/strong&gt;. “Simbol yang hilang” itu hampir semuanya adalah referensi eksternal yang sah — panggilan ke pustaka standar, ke framework, ke kode yang hidup di luar repositori. Metrik itu mengukur properti dari bahasanya, bukan cacat pada handler-nya. Bahasa seperti Zig, COBOL, dan Odin menunjukkan tingkat “yatim” sebesar 65–70% dan sepenuhnya benar; COBOL bahkan tidak punya satu pun kesalahan sungguhan.&lt;/p&gt;
&lt;p&gt;Jika kami membiarkan angka-angka itu mengendalikan pekerjaan, kami akan menghabiskan berminggu-minggu “memperbaiki” handler yang sebenarnya sudah benar dan mengabaikan bahasa-bahasa dengan bug sungguhan yang diam-diam bersembunyi. Kesimpulannya blak-blakan: metrik agregat paling banter hanya sinyal triase kasar. &lt;strong&gt;Sinyal kualitas sesungguhnya adalah spot-check dengan klasifikasi edge&lt;/strong&gt; — melihat edge sungguhan di repositori sungguhan dan menilainya satu per satu. Data mengalahkan intuisi, tapi hanya setelah Anda tahu data mana yang berkata jujur.&lt;/p&gt;
&lt;h2 id=&quot;loop-luar-sepasukan-bukan-maraton&quot;&gt;Loop luar: sepasukan, bukan maraton&lt;/h2&gt;
&lt;p&gt;Satu bahasa dalam satu waktu akan memakan waktu selamanya di seluruh 280 bahasa, jadi loop dalam dibungkus dalam loop luar yang menjalankan banyak bahasa secara paralel.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   pick a wave of near-GREEN / high-error languages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   fan out 10–15 agents, each ISOLATED in its own git worktree,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   each grinding ONE language, committing to its own branch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   orchestrator integrates serially: file-scoped apply, then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   `manifest diff` — any cross-language regression blocks the batch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   gated push (reviewed and confirmed) ──► rotate to the next wave&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Setiap agen bekerja di worktree sekali pakai sehingga mereka tidak bisa saling menabrak. Orchestrator mengintegrasikan perbaikan mereka satu per satu, masing-masing di balik pemeriksaan regresi full-manifest: sebuah perubahan yang membantu bahasanya sendiri tetapi diam-diam merusak tiga bahasa lain tidak akan mendarat. Integrasi melewati pemeriksaan dan konfirmasi sebelum perubahan apa pun di-push — gate regresi memutuskan apa yang &lt;em&gt;aman&lt;/em&gt;, manusia tetap yang memutuskan apa yang &lt;em&gt;dirilis&lt;/em&gt;. Lalu pool berputar ke set bahasa berikutnya dan seluruh proses berjalan lagi.&lt;/p&gt;
&lt;h2 id=&quot;apa-yang-masih-belum-sempurna&quot;&gt;Apa yang masih belum sempurna&lt;/h2&gt;
&lt;p&gt;Judge-nya bisa saja salah, dan kesalahan itu punya arah: sebuah agen yang berjalan dengan konteks terlalu sedikit &lt;em&gt;melaporkan berlebihan&lt;/em&gt;. Dalam satu batch, delapan bahasa ditandai dengan tingkat kesalahan 5–20%; setelah diperiksa, bug sungguhan hanya ditemukan pada satu bahasa — sisanya adalah kesalahan judge karena melewatkan semantik bahasa itu sendiri (satu baris sumber yang secara valid menghasilkan beberapa edge, binding parameter yang dimodelkan sebagai assignment, bahasa dengan reference-per-identifier). Itulah sebabnya kami menyampel dengan dua seed dan melakukan cross-check, dan mengapa ketidaksepakatan antara judge dan fixture diperlakukan sebagai sinyal &lt;em&gt;paling&lt;/em&gt; menarik, bukan verdict final — kadang fixture-lah yang justru salah.&lt;/p&gt;
&lt;p&gt;Kami juga jujur soal targetnya. Tujuannya adalah nol kesalahan sungguhan, titik — tetapi “nol” adalah arah yang terus kami upayakan, bahasa demi bahasa, bukan kotak centang yang sudah selesai. Selalu ada repo lain dengan idiom lain.&lt;/p&gt;
&lt;h2 id=&quot;dibuktikan-lewat-kerja-bukan-sekadar-diklaim&quot;&gt;Dibuktikan Lewat Kerja, Bukan Sekadar Diklaim&lt;/h2&gt;
&lt;p&gt;Semua yang dilakukan Maguyva untuk seorang agen — menemukan sebuah simbol, menelusuri sebuah dependensi, menjawab sebuah pertanyaan dengan kode yang dikutip — bertumpu pada ekstraksi di baliknya yang benar. Di 280 bahasa, “benar” tidak bisa sekadar diklaim; itu harus terus-menerus &lt;em&gt;dibuktikan&lt;/em&gt; dengan kode sungguhan. Loop inilah cara kami membuktikannya: sebuah siklus otonom spot-check-dan-perbaiki yang memperlakukan metriknya sendiri dengan curiga, membuktikan setiap perubahan, dan mengubah setiap perbaikan menjadi penjaga terhadap regresi berikutnya. Ini tidak glamor. Inilah kerja yang memungkinkan kami berkata “kami mendukung bahasa Anda” dan sungguh-sungguh memaksudkannya. Hijau itu mudah. Kebenaran harus dibuktikan lewat kerja.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Languages</category><category>Agents</category></item><item><title>Multi-Modal Fusion Search: Memilih Retriever yang Tepat untuk Setiap Kueri</title><link>https://maguyva.ai/id/blog/multi-modal-fusion-search</link><guid isPermaLink="true">https://maguyva.ai/id/blog/multi-modal-fusion-search</guid><description>Kueri seperti &apos;di mana parseConfig didefinisikan&apos; menginginkan pencarian yang berbeda dari &apos;bagaimana auth bekerja&apos;. Maguyva mengklasifikasikan intent, memberi bobot pada empat modalitas retrieval sesuai kebutuhannya, lalu menggabungkan hasilnya dengan weighted Reciprocal Rank Fusion.</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Catatan desain historis: artikel April 2026 ini menjelaskan desain perutean pada saat itu, bukan perilaku bawaan saat ini. Koreksi September di bawah hanya membahas klaim pengukuran. Untuk perutean, preset, dan kontrol modalitas eksplisit saat ini, lihat &lt;a href=&quot;https://maguyva.ai/id/docs/how-it-works&quot;&gt;Cara Kerja&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tidak semua kueri pencarian membutuhkan hal yang sama.&lt;/p&gt;
&lt;p&gt;“di mana &lt;code&gt;parseConfig&lt;/code&gt; didefinisikan” menginginkan sebuah simbol persis — satu lokasi yang tepat, cepat. “bagaimana autentikasi bekerja” menginginkan makna — sebaran kode terkait yang menjelaskan sebuah konsep. “apa yang rusak jika saya mengubah fungsi ini” menginginkan graf dependensi. “cari string &lt;code&gt;ECONNREFUSED&lt;/code&gt;” menginginkan kecocokan literal, tidak lebih.&lt;/p&gt;
&lt;p&gt;Grep sangat baik untuk kecocokan literal dan berguna untuk sebagian pencarian referensi, tetapi ia bukan graf dependensi dan tidak memahami makna. Embedding mencakup sisi semantik, tetapi mereka adalah tool yang salah untuk string persis dan analisis dampak. Sebagian besar tool pencarian kode memilih satu engine dan memaksa setiap kueri hidup dengan pilihan itu. Maguyva tidak memilih. Ia mencari tahu jenis pertanyaan apa yang Anda ajukan, lalu memadukan empat retriever dalam proporsi yang layak untuk pertanyaan itu.&lt;/p&gt;
&lt;h2 id=&quot;empat-modalitas&quot;&gt;Empat modalitas&lt;/h2&gt;
&lt;p&gt;Di baliknya ada empat cara independen untuk menemukan kode:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;semantik&lt;/strong&gt; — pencarian vektor atas Voyage binary embedding; menemukan kode berdasarkan makna.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;teks&lt;/strong&gt; — pencocokan trigram; menemukan literal, string error, identifier persis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;struktural&lt;/strong&gt; — kueri AST; menemukan definisi, signature, dan konstruk bahasa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;graf&lt;/strong&gt; — graf dependensi; menemukan pemanggil, yang dipanggil, dan cakupan dampak.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Masing-masing kuat pada kelas pertanyaan yang berbeda. Triknya adalah memutuskan seberapa besar mempercayai masing-masing untuk kueri yang ada di depan Anda.&lt;/p&gt;
&lt;h2 id=&quot;klasifikasi-intent&quot;&gt;Klasifikasi intent&lt;/h2&gt;
&lt;p&gt;Sebelum retrieval apa pun berjalan, sebuah classifier ringan mengelompokkan kueri ke dalam salah satu dari enam intent, dengan skor keyakinan. Ini sengaja dibuat murah — heuristik berurutan, kecocokan pertama menang — karena berjalan di hot path dan hanya menambah satu-dua milidetik:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dimulai dengan &lt;code&gt;def &lt;/code&gt;, &lt;code&gt;class &lt;/code&gt;, &lt;code&gt;func &lt;/code&gt;, &lt;code&gt;import &lt;/code&gt;… → &lt;strong&gt;find_definition&lt;/strong&gt; (kepercayaan 0,95)&lt;/li&gt;
&lt;li&gt;“who calls”, “usages of”, “references to” (menanyakan pemanggil, penggunaan, atau referensi) → &lt;strong&gt;find_references&lt;/strong&gt; (0,90)&lt;/li&gt;
&lt;li&gt;“impact”, “blast radius”, “what depends on” (menanyakan dampak atau ketergantungan) → &lt;strong&gt;impact_analysis&lt;/strong&gt; (0,90)&lt;/li&gt;
&lt;li&gt;sebuah &lt;code&gt;&quot;string&quot;&lt;/code&gt; berkutip atau token error seperti &lt;code&gt;traceback&lt;/code&gt; → &lt;strong&gt;exact_match&lt;/strong&gt; (0,85–0,90)&lt;/li&gt;
&lt;li&gt;sebuah identifier &lt;code&gt;CamelCase&lt;/code&gt; atau &lt;code&gt;snake_case&lt;/code&gt; → &lt;strong&gt;find_definition&lt;/strong&gt; (0,60–0,80)&lt;/li&gt;
&lt;li&gt;“how”, “why”, “explain”, “architecture” (menanyakan cara kerja, alasan, penjelasan, atau arsitektur) → &lt;strong&gt;understand_code&lt;/strong&gt; (0,75)&lt;/li&gt;
&lt;li&gt;tidak ada yang cocok → &lt;strong&gt;understand_code&lt;/strong&gt;, kepercayaan rendah (0,40)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Setiap intent membawa profil bobot di seluruh empat modalitas. Berikut angka-angka sesungguhnya:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Intent&lt;/th&gt;
&lt;th&gt;semantik&lt;/th&gt;
&lt;th&gt;teks&lt;/th&gt;
&lt;th&gt;struktural (AST)&lt;/th&gt;
&lt;th&gt;graf&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;find_definition&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_references&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;understand_code&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_similar&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.3&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;impact_analysis&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exact_match&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Jadi “di mana &lt;code&gt;parseConfig&lt;/code&gt; didefinisikan” sangat mengandalkan AST (0,6). “bagaimana auth bekerja” bersandar pada vektor semantik (0,5). “apa yang bergantung pada ini” hampir sepenuhnya graf (0,7). “cari &lt;code&gt;ECONNREFUSED&lt;/code&gt;” hampir sepenuhnya trigram (0,9), dengan model embedding dimatikan sepenuhnya — karena kemiripan semantik justru tool yang salah untuk sebuah string persis.&lt;/p&gt;
&lt;h2 id=&quot;jalur-cepat-dan-jalur-terfusi&quot;&gt;Jalur cepat, dan jalur terfusi&lt;/h2&gt;
&lt;p&gt;Ketika classifier percaya diri — skor ≥ 0,85 — dan kuerinya normal, Maguyva melewati fusi sepenuhnya dan langsung merutekan ke satu modalitas dominan. “di mana X didefinisikan” tidak butuh empat retriever; ia butuh indeks AST, sekarang juga. Jalur langsung itu dilaporkan kembali sebagai &lt;code&gt;fusion_strategy: &quot;direct&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Semua yang ambigu melewati fusi. Empat (atau tiga, pada preset default) modalitas berjalan paralel, masing-masing mengembalikan daftar peringkatnya sendiri, dan kami menggabungkannya.&lt;/p&gt;
&lt;h2 id=&quot;weighted-reciprocal-rank-fusion&quot;&gt;Weighted Reciprocal Rank Fusion&lt;/h2&gt;
&lt;p&gt;Memfusikan retriever yang heterogen lebih sulit dari kedengarannya: sebuah cosine similarity 0,82 dan sebuah skor trigram 137 dan sebuah graph centrality 0,004 tidak berada pada skala yang sama, jadi Anda tidak bisa sekadar menjumlahkannya. Reciprocal Rank Fusion menghindari masalah ini dengan membuang skor mentah dan hanya mempertahankan &lt;strong&gt;rank&lt;/strong&gt; yang diberikan setiap engine. Kontribusi sebuah hasil dari satu modalitas adalah:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;contribution = weight × 1 / (k + rank + 1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;di mana &lt;code&gt;rank&lt;/code&gt; adalah posisinya dalam daftar modalitas tersebut dan &lt;code&gt;k&lt;/code&gt; adalah konstanta smoothing. Kontribusi dijumlahkan lintas modalitas untuk hasil apa pun yang ditemukan oleh lebih dari satu engine — hasil yang disepakati antar retriever secara alami naik ke peringkat teratas. Kami menggunakan &lt;strong&gt;k = 40&lt;/strong&gt; pada preset default dan 60 pada &lt;code&gt;thorough&lt;/code&gt; (&lt;code&gt;quick&lt;/code&gt; berjalan semantic-only, sehingga fusi tidak pernah aktif di sana). Karya RRF asli mendarat pada k = 60 untuk retrieval umum; kami menggunakan default yang sedikit lebih menekankan posisi teratas, sehingga hasil yang mendapat peringkat tinggi di beberapa modalitas diberi bobot sedikit lebih besar — dan kami tidak menganjurkan menyetelnya secara manual.&lt;/p&gt;
&lt;p&gt;Di atas itu, hasil membawa &lt;strong&gt;boost graph-importance&lt;/strong&gt;. Sebuah hub — sebuah fungsi yang menjadi sandaran seluruh basis kode — seharusnya mengungguli sebuah leaf yang jarang disentuh bahkan pada relevansi tekstual yang sama, jadi kami mengalikan setiap kontribusi dengan:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;boost = min(1 + 0.3 × ln(1 + centrality), 1.5)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Centrality berasal dari metrik PageRank/degree yang telah dihitung sebelumnya oleh pipeline, dan boost-nya dibatasi pada 1,5× sehingga sebuah fungsi populer tidak bisa sepenuhnya mengubur fungsi yang lebih relevan tapi jarang disentuh. Terakhir kami menurunkan peringkat hasil dari path vendor, build, dan archive, lalu melakukan dedup ke chunk terbaik per file.&lt;/p&gt;
&lt;h2 id=&quot;apa-yang-masih-belum-sempurna&quot;&gt;Apa yang masih belum sempurna&lt;/h2&gt;
&lt;p&gt;Pengklasifikasi intent adalah sekumpulan regex, bukan model terlatih. Ia menangani bentuk kueri umum dengan heuristik, dan kueri yang ambigu kembali ke &lt;code&gt;understand_code&lt;/code&gt; serta campuran yang condong ke semantik. Versi sebelumnya dari tulisan ini menyebut penurunan tingkat tanpa hasil dari sekitar 15% menjadi di bawah 5% sebagai hasil yang telah dicapai. Proposal Desember 2025 sebenarnya mencantumkan perkiraan kondisi awal dan sebuah target; tidak ada kumpulan kueri pendukung atau catatan pengukuran yang disediakan. Kami menarik klaim bahwa perbaikan itu telah tercapai; lihat &lt;a href=&quot;https://maguyva.ai/evidence/search-quality.md&quot;&gt;bukti sumber dan koreksi&lt;/a&gt;. Kami belum mengganti pengklasifikasi dengan model terlatih karena versi murah ini cepat dan cukup baik untuk peran perutean yang dituju, dan karena pengklasifikasi yang salah tetapi percaya diri lebih buruk daripada fallback yang jujur. Bobotnya sendiri adalah prior yang dipilih secara manual, bukan dipelajari dari data klik yang tidak kami kumpulkan.&lt;/p&gt;
&lt;h2 id=&quot;ajukan-pertanyaan-tanpa-harus-memilih-tool&quot;&gt;Ajukan Pertanyaan Tanpa Harus Memilih Tool&lt;/h2&gt;
&lt;p&gt;Seorang agen seharusnya tidak perlu tahu apakah harus meraih grep atau embedding atau call graph — ia seharusnya mengajukan pertanyaannya dengan bahasa sederhana dan mendapat jawaban yang tepat. Multi-modal fusion adalah yang memungkinkan &lt;code&gt;find_symbol&lt;/code&gt;, pencarian semantik, dan analisis dependensi berada di balik satu antarmuka kueri: sistem membaca bentuk pertanyaannya dan diam-diam merakit retriever yang tepat untuknya. Model yang menilai embedding itu penting, tetapi begitu juga mengetahui kapan &lt;em&gt;tidak&lt;/em&gt; menggunakannya. Memilih tool yang tepat untuk setiap kueri adalah jenis kualitasnya sendiri, dan itu jenis yang lebih kami pilih untuk kami tangani sendiri ketimbang dilemparkan ke pemanggil.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// you bring the question. it brings the tools.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Search</category><category>Architecture</category></item><item><title>Observabilitas Agen: Hooks, Alloy, dan Grafana</title><link>https://maguyva.ai/id/blog/agent-observability-hooks-alloy-grafana</link><guid isPermaLink="true">https://maguyva.ai/id/blog/agent-observability-hooks-alloy-grafana</guid><description>Kami menghubungkan Claude Code dan Codex ke satu stack Grafana yang sama dengan OpenTelemetry dan Alloy, lalu menggunakan trace dan log untuk menemukan dan memperbaiki masalah perilaku agen langsung di sumbernya.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Sistem agen gagal dengan cara-cara yang aneh.&lt;/p&gt;
&lt;p&gt;Kadang modelnya yang bermasalah. Kadang toolnya yang bermasalah. Kadang server MCP Anda baik-baik saja, tetapi agen memilih spesialis yang salah, atau menghabiskan separuh sesi melakukan pekerjaan shell yang tidak Anda duga, atau diam-diam menghabiskan anggaran dalam sebuah loop yang dari luar terlihat produktif.&lt;/p&gt;
&lt;p&gt;Jika Anda tidak bisa melihat perbedaannya, Anda sebenarnya tidak sedang mengoperasikan sistem agen. Anda sedang menebak-nebak.&lt;/p&gt;
&lt;p&gt;Jadi kami membangun stack observabilitas untuk alur kerja kami sendiri: Claude Code, Codex, event hook Claude, event notify Codex, OpenTelemetry native, Grafana Alloy, dan Grafana Cloud di sisi lainnya.&lt;/p&gt;
&lt;p&gt;Bagian yang menarik bukan “kami membuat dashboard.” Bagian yang menarik adalah kami harus memecah telemetri menjadi dua stream berbeda karena tidak ada satu pun feed tunggal yang memberi kami gambaran utuh.&lt;/p&gt;
&lt;h2 id=&quot;masalahnya-telemetri-agen-itu-terfragmentasi&quot;&gt;Masalahnya: Telemetri Agen Itu Terfragmentasi&lt;/h2&gt;
&lt;p&gt;Agen coding modern sudah menghasilkan sebagian telemetri. Itu membantu, tetapi tidak cukup.&lt;/p&gt;
&lt;p&gt;OTEL native andal menjawab pertanyaan seperti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Berapa banyak request yang kami buat?&lt;/li&gt;
&lt;li&gt;Berapa biaya sebuah sesi?&lt;/li&gt;
&lt;li&gt;Di mana span dan trace-nya?&lt;/li&gt;
&lt;li&gt;Apakah latensi melonjak?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OTEL native jauh lebih buruk menjawab pertanyaan seperti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Server MCP mana yang paling diandalkan agen?&lt;/li&gt;
&lt;li&gt;Apakah kegagalan ini terjadi di &lt;code&gt;Bash&lt;/code&gt;, tool file bawaan, atau panggilan MCP?&lt;/li&gt;
&lt;li&gt;Skill mana yang benar-benar aktif?&lt;/li&gt;
&lt;li&gt;Tipe subagen mana yang dikirim?&lt;/li&gt;
&lt;li&gt;Apakah sesi ini sedang melakukan pekerjaan yang berguna, atau sekadar mondar-mandir tanpa hasil?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kelas pertanyaan kedua itu lebih dekat ke hooks ketimbang trace.&lt;/p&gt;
&lt;p&gt;Tetapi kebalikannya juga benar: beberapa pertanyaan performa terpenting justru lebih dekat ke trace ketimbang hooks.&lt;/p&gt;
&lt;p&gt;Jika Anda ingin tahu di mana latensi sebenarnya menumpuk, span mana yang lambat, atau apakah sesi menghabiskan waktu pada panggilan model versus eksekusi tool, Anda butuh data trace, bukan hanya event semantik.&lt;/p&gt;
&lt;h2 id=&quot;arsitektur-yang-kami-bangun&quot;&gt;Arsitektur yang Kami Bangun&lt;/h2&gt;
&lt;p&gt;Kami menjalankan dua jalur telemetri berdampingan.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Claude Code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  hooks        -&amp;gt; send_event.py -&amp;gt; Grafana Cloud Loki&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Codex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  notify hook -&amp;gt; codex_notify.py -&amp;gt; shared Loki schema&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pemisahan itu disengaja.&lt;/p&gt;
&lt;p&gt;Ini juga asimetris. Claude Code memberi kami antarmuka hook lifecycle yang jauh lebih kaya. Codex memberi kami OTEL native plus antarmuka notify, sehingga kami menormalkan event penyelesaian turn yang kurang terperinci ke dalam skema log yang sama, alih-alih berpura-pura kedua runtime menyediakan kontrol yang identik.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OTEL native&lt;/strong&gt; memberi kami stream dasar: log dan trace dari runtime itu sendiri, ditambah metrik di mana runtime benar-benar menghasilkannya.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Event hook dan notify&lt;/strong&gt; memberi kami lapisan semantik: hal-hal seperti &lt;code&gt;PreToolUse&lt;/code&gt;, &lt;code&gt;PostToolUse&lt;/code&gt;, &lt;code&gt;PostToolUseFailure&lt;/code&gt;, &lt;code&gt;UserPromptSubmit&lt;/code&gt;, &lt;code&gt;SubagentStop&lt;/code&gt;, &lt;code&gt;SkillActivated&lt;/code&gt;, dan metadata terklasifikasi yang benar-benar kami pedulikan saat men-debug perilaku agen. Claude Code menyumbang stream event yang lebih kaya di sini. Codex menyumbang stream ternormalisasi yang kurang terperinci tetapi tetap berguna.&lt;/p&gt;
&lt;h2 id=&quot;mengapa-hooks-ada-sama-sekali&quot;&gt;Mengapa Hooks Ada Sama Sekali&lt;/h2&gt;
&lt;p&gt;Pipeline hook kami memperkaya event sebelum mencapai Loki.&lt;/p&gt;
&lt;p&gt;Alih-alih hanya berkata “sebuah tool berjalan,” kami mengklasifikasikan event tersebut ke dalam field seperti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tool_type&lt;/code&gt;: builtin, mcp, skill, agent, bash&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mcp_server&lt;/code&gt;: backend MCP mana yang menangani panggilan&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash_cli&lt;/code&gt;: keluarga perintah shell&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent_type&lt;/code&gt;: jenis spesialis apa yang dikirim&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent_tool&lt;/code&gt;: apakah sumbernya Claude Code atau Codex&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Itu berarti kami bisa mengajukan pertanyaan yang penting secara operasional:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | agent_tool=&quot;codex-cli&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | tool_type=&quot;mcp&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | json | bash_cli=&quot;git&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Field-field itu bukan sekadar pemanis. Itulah perbedaan antara “agennya terasa lambat” dan “agen menghabiskan sepuluh menit terakhir dalam operasi git yang sarat shell dengan tingkat kegagalan tool yang tinggi.”&lt;/p&gt;
&lt;p&gt;Satu detail implementasi yang terlihat lebih aneh dari kenyataannya: stream Loki bersama masih menggunakan &lt;code&gt;service_name=&quot;claude-code-hooks&quot;&lt;/code&gt; sebagai label bahkan saat event berasal dari Codex. Pemisahan sesungguhnya antara runtime terjadi di &lt;code&gt;agent_tool&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;mengapa-alloy-berada-di-tengah&quot;&gt;Mengapa Alloy Berada di Tengah&lt;/h2&gt;
&lt;p&gt;Grafana Alloy bukan sekadar forwarder dalam setup ini. Ia adalah titik penerapan kebijakan.&lt;/p&gt;
&lt;p&gt;Kami mengarahkan stream OTEL native dari Claude Code dan Codex ke proxy Alloy lokal di &lt;code&gt;localhost:4318&lt;/code&gt;, lalu membiarkan Alloy membersihkan payload sebelum meneruskannya ke Grafana Cloud.&lt;/p&gt;
&lt;p&gt;Itu penting karena telemetri agen mentah penuh dengan field berkardinalitas tinggi yang berguna untuk analisis tetapi buruk sebagai label yang diindeks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompt_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;jumlah token&lt;/li&gt;
&lt;li&gt;durasi&lt;/li&gt;
&lt;li&gt;blob parameter tool&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jika Anda mengindeks segalanya, Anda akan mendapat ledakan label dan hari yang buruk.&lt;/p&gt;
&lt;p&gt;Jadi Alloy melakukan tiga hal untuk kami:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Menjaga sekumpulan kecil label berkardinalitas rendah tetap terindeks.&lt;/li&gt;
&lt;li&gt;Memindahkan field yang berisik tetapi berguna ke metadata terstruktur.&lt;/li&gt;
&lt;li&gt;Membuang noise murni sepenuhnya.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Idenya sederhana: &lt;strong&gt;amati lebih banyak, indeks lebih sedikit&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;mengapa-stream-hook-tidak-melalui-alloy&quot;&gt;Mengapa Stream Hook Tidak Melalui Alloy&lt;/h2&gt;
&lt;p&gt;Stream hook sudah dibentuk untuk Loki.&lt;/p&gt;
&lt;p&gt;Saat &lt;code&gt;send_event.py&lt;/code&gt; mengirim sebuah event, kami sudah memutuskan field mana yang layak diberi perlakuan label dan mana yang masuk ke body JSON terstruktur. Stream itu langsung menuju gateway OTLP Grafana Cloud tanpa melewati Alloy lagi.&lt;/p&gt;
&lt;p&gt;Jadi sistem ini punya pembagian tugas yang jelas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alloy&lt;/strong&gt; menjinakkan stream OTEL native yang mentah.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pengayaan hook&lt;/strong&gt; membuat event semantik bisa di-query.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Itu membuat arsitekturnya lebih sederhana daripada memaksa semuanya lewat satu jalur.&lt;/p&gt;
&lt;h2 id=&quot;apa-yang-sebenarnya-ditampilkan-dashboard&quot;&gt;Apa yang Sebenarnya Ditampilkan Dashboard&lt;/h2&gt;
&lt;p&gt;Tangkapan layar di bawah ini berasal dari salah satu dashboard observabilitas di balik alur kerja agen kami. Ini bukan benchmark, dan angka-angkanya hanyalah irisan pada satu titik waktu. Intinya adalah bentuk datanya: activity feed, panggilan tool, kegagalan, prompt, dan pemecahan berdasarkan agen, tool bawaan, penggunaan MCP, perintah shell, dan skill.&lt;/p&gt;
&lt;p&gt;Bagian yang berguna adalah dashboard ini hidup di stack Grafana yang sama dengan telemetri agen lainnya. Kami bisa menyaring berdasarkan agen sumber dan keluarga tool, lalu melihat lintas runtime tanpa perlu menciptakan cerita observabilitas yang berbeda untuk setiap sistem.&lt;/p&gt;
&lt;figure class=&quot;feature-figure feature-figure--wide&quot;&gt;
  &lt;a
    href=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
    target=&quot;_blank&quot;
    rel=&quot;noreferrer&quot;
    aria-label=&quot;Buka tangkapan layar dashboard observabilitas dalam resolusi penuh&quot;
  &gt;
    &lt;img
      src=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
      alt=&quot;Dashboard Grafana yang menampilkan activity feed, jumlah panggilan tool, kegagalan, prompt, dan pemecahan berdasarkan agen, tool bawaan, penggunaan MCP, perintah CLI, dan skill untuk alur kerja agen.&quot;
    /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    Salah satu dashboard langsung di balik alur kerja agen kami. Tangkapan layar ini hanyalah satu irisan dari stack Grafana bersama yang juga menerima telemetri dari runtime dan sistem agen kami yang lain. Klik gambar untuk versi resolusi penuh.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;mengapa-trace-lebih-penting-daripada-kelihatannya&quot;&gt;Mengapa Trace Lebih Penting Daripada Kelihatannya&lt;/h2&gt;
&lt;p&gt;Log memberi tahu kami kategori pekerjaan apa yang terjadi. Trace memberi tahu kami bagaimana pekerjaan itu berlangsung seiring waktu.&lt;/p&gt;
&lt;p&gt;Perbedaan itu penting dalam sistem agen karena kata “lambat” terlalu umum untuk membantu.&lt;/p&gt;
&lt;p&gt;Sebuah trace bisa memberi tahu kami apakah masalahnya berasal dari:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;latensi model&lt;/li&gt;
&lt;li&gt;waktu eksekusi tool&lt;/li&gt;
&lt;li&gt;retry yang berulang&lt;/li&gt;
&lt;li&gt;satu interaksi MCP yang sangat mahal&lt;/li&gt;
&lt;li&gt;rangkaian panjang operasi-operasi kecil yang terlihat tak berbahaya jika dilihat sendiri-sendiri&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dalam praktiknya kami menggunakan stream hook dan trace Tempo secara bersamaan.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Log hook&lt;/strong&gt; menjawab: jenis hal apa yang terjadi?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trace&lt;/strong&gt; menjawab: ke mana waktunya pergi?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kombinasi itulah yang mengubah observabilitas dari sekadar dashboard menjadi sebuah penjelasan.&lt;/p&gt;
&lt;h2 id=&quot;di-mana-posisi-codex&quot;&gt;Di Mana Posisi Codex&lt;/h2&gt;
&lt;p&gt;Codex adalah bagian dari stack yang sama, tetapi tidak identik dengan Claude Code.&lt;/p&gt;
&lt;p&gt;Untuk Codex kami menyambungkan dua bagian:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OTEL native dari Codex ke Alloy&lt;/li&gt;
&lt;li&gt;Webhook notify ke &lt;code&gt;codex_notify.py&lt;/code&gt;, yang memetakan penyelesaian turn ke skema Loki yang sama dengan yang kami gunakan untuk event hook&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Itu memberi kami filter terpadu seperti &lt;code&gt;agent_tool=&quot;codex-cli&quot;&lt;/code&gt; di dalam stream log yang sama.&lt;/p&gt;
&lt;p&gt;Catatan jujurnya: payload notify Codex saat ini kurang terperinci daripada payload hook Claude Code karena bukan jenis antarmuka integrasi yang sama. Dalam setup kami hari ini, penyelesaian turn Codex bisa dinormalkan ke skema bersama, tetapi ekstraksi tool-per-tool yang kaya masih lebih baik di stream OTEL native ketimbang di bridge notify.&lt;/p&gt;
&lt;p&gt;Itu bukan alasan untuk menghindari tulisan ini. Itulah justru intinya. Sistem observabilitas sungguhan dirakit dari sinyal-sinyal yang tidak sempurna.&lt;/p&gt;
&lt;h2 id=&quot;grafana-lewat-mcp-mengubah-permainan&quot;&gt;Grafana Lewat MCP Mengubah Permainan&lt;/h2&gt;
&lt;p&gt;Pergeseran yang lebih besar adalah Grafana bukan lagi hanya tempat manusia berkunjung lewat browser.&lt;/p&gt;
&lt;p&gt;Dalam repo ini kami juga mengekspos Grafana lewat MCP. Artinya, seorang agen bisa meng-query Loki, Prometheus, dan Tempo secara langsung tanpa perlu menunggu manusia memeriksa dashboard secara manual terlebih dahulu.&lt;/p&gt;
&lt;p&gt;Itu mengubah observabilitas menjadi input aktif bagi alur kerja.&lt;/p&gt;
&lt;p&gt;Seorang agen bisa bertanya:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keluarga tool mana yang paling banyak gagal dalam satu jam terakhir?&lt;/li&gt;
&lt;li&gt;Server MCP mana yang mendominasi sebuah sesi?&lt;/li&gt;
&lt;li&gt;Apakah perubahan terbaru mengurangi kegagalan tool, atau hanya memindahkan pekerjaan ke jalur yang lebih sarat shell dengan kesalahan yang sama?&lt;/li&gt;
&lt;li&gt;Trace mana yang menunjukkan latensi tertinggi atau retry berulang?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Setelah Anda punya itu, Anda sudah sangat dekat dengan loop peningkatan diri.&lt;/p&gt;
&lt;h2 id=&quot;dari-dashboard-menuju-feedback-loop&quot;&gt;Dari Dashboard Menuju Feedback Loop&lt;/h2&gt;
&lt;p&gt;Inilah bagian yang paling kami anggap menarik.&lt;/p&gt;
&lt;p&gt;Setelah stack observabilitas bisa di-query dari lapisan agen, telemetri berhenti menjadi sarana pelaporan yang pasif dan berubah menjadi sinyal kendali.&lt;/p&gt;
&lt;p&gt;Loop-nya terlihat seperti ini:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Aktivitas agen menghasilkan trace, metrik, dan log hook yang telah diperkaya.&lt;/li&gt;
&lt;li&gt;Grafana menyimpan bukti tersebut di Loki, Tempo, dan Prometheus tempat metrik itu ada.&lt;/li&gt;
&lt;li&gt;Agen meng-query bukti itu lewat Grafana MCP.&lt;/li&gt;
&lt;li&gt;Sistem mengidentifikasi bauran tool yang buruk, skill yang rapuh, perutean yang lemah, atau alur kerja sarat shell yang terus menghasilkan kesalahan yang seharusnya bisa dihindari.&lt;/li&gt;
&lt;li&gt;Agen atau operator menyesuaikan prompt, config agen, deskripsi skill, aturan perutean, atau akses tool.&lt;/li&gt;
&lt;li&gt;Sesi berikutnya menghasilkan bentuk telemetri baru, dan siklus itu berulang.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Itulah cara Anda berpindah dari “dashboard yang menarik” menjadi “sistem peningkatan yang terukur.”&lt;/p&gt;
&lt;p&gt;Tujuannya bukan memaksimalkan satu kategori tool. Tujuannya adalah menemukan bauran CLI, tool bawaan, panggilan MCP, dan skill yang tepat untuk pekerjaan yang sesungguhnya sedang dilakukan.&lt;/p&gt;
&lt;h2 id=&quot;apa-yang-bisa-kami-jawab-dengan-ini&quot;&gt;Apa yang Bisa Kami Jawab dengan Ini&lt;/h2&gt;
&lt;p&gt;Setelah kedua runtime mendarat di stack Grafana yang sama, kami bisa menjawab pertanyaan operasional jauh lebih cepat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apakah kegagalan terkonsentrasi pada satu keluarga tool?&lt;/li&gt;
&lt;li&gt;Apakah alur kerja yang sarat shell menciptakan kesalahan yang seharusnya bisa dihindari, padahal seharusnya ada tool level-lebih-tinggi?&lt;/li&gt;
&lt;li&gt;Server MCP mana yang menanggung beban kerja terbesar?&lt;/li&gt;
&lt;li&gt;Apakah kami membayar untuk aktivitas agen yang tidak menghasilkan kemajuan yang berarti?&lt;/li&gt;
&lt;li&gt;Apakah sebuah sesi tidak sehat karena modelnya, tool-nya, atau lapisan orkestrasinya?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ini sangat berguna dalam alur kerja multi-agen, tempat “agennya sibuk” hampir tidak memberi tahu apa-apa.&lt;/p&gt;
&lt;p&gt;Jika satu spesialis terus dikirim dan menghasilkan tingkat kegagalan yang tinggi, itu masalah perutean atau pembentukan prompt.&lt;/p&gt;
&lt;p&gt;Jika satu server MCP mendominasi semua panggilan, itu bisa berarti arsitektur yang baik atau tanda bahwa semua yang lain hanya menambah beban.&lt;/p&gt;
&lt;p&gt;Jika kegagalan tool melonjak sementara biaya tetap tinggi, Anda punya masalah operasional, bukan masalah kualitas.&lt;/p&gt;
&lt;p&gt;Jika pekerjaan shell terus gagal dengan cara yang bisa diprediksi dan seharusnya bisa dihindari, padahal seharusnya ada tool level-lebih-tinggi, itu sinyal produk.&lt;/p&gt;
&lt;p&gt;Jika satu skill terus aktif tetapi tidak memperbaiki hasil, itu sinyal prompt atau perutean.&lt;/p&gt;
&lt;h2 id=&quot;pelajaran-sesungguhnya&quot;&gt;Pelajaran Sesungguhnya&lt;/h2&gt;
&lt;p&gt;Pelajaran yang lebih dalam di sini adalah observabilitas agen membutuhkan &lt;strong&gt;telemetri runtime&lt;/strong&gt; sekaligus &lt;strong&gt;telemetri alur kerja&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Telemetri runtime memberi tahu Anda apa yang dilakukan sistem.&lt;/p&gt;
&lt;p&gt;Telemetri alur kerja memberi tahu Anda apa yang dikira agen sedang ia lakukan.&lt;/p&gt;
&lt;p&gt;Kami butuh keduanya.&lt;/p&gt;
&lt;p&gt;Jika Anda hanya menyimpan trace dan counter, Anda kehilangan lapisan semantik. Jika Anda hanya menyimpan event hook, Anda kehilangan latensi, span, dan gambaran runtime yang lebih luas.&lt;/p&gt;
&lt;p&gt;Dan jika Anda menyimpan keduanya tetapi tidak pernah memasukkannya kembali ke lapisan agen, Anda punya monitoring, bukan adaptasi.&lt;/p&gt;
&lt;p&gt;Kombinasi itulah yang membuat sistem cukup bisa dijelaskan untuk dioperasikan dan cukup bisa disetel untuk ditingkatkan.&lt;/p&gt;
&lt;h2 id=&quot;apa-yang-masih-belum-sempurna&quot;&gt;Apa yang Masih Belum Sempurna&lt;/h2&gt;
&lt;p&gt;Masih ada sisi-sisi yang kasar.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tidak semua event hook menyertakan data durasi dan token seperti yang kami inginkan.&lt;/li&gt;
&lt;li&gt;Sebagian tampilan timing terbaik masih berasal dari trace Tempo, bukan log hook.&lt;/li&gt;
&lt;li&gt;Codex hari ini masih kurang kaya secara semantik dibandingkan Claude Code dalam stream event yang diperkaya.&lt;/li&gt;
&lt;li&gt;Tangkapan layar dashboard adalah tampilan operasional yang sungguhan, bukan artefak pemasaran yang dipoles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Poin terakhir itu disengaja. Kami lebih memilih menunjukkan panel instrumen yang sesungguhnya daripada berpura-pura sistem agen secara ajaib menjelaskan dirinya sendiri.&lt;/p&gt;
&lt;h2 id=&quot;mengapa-ini-penting-bagi-maguyva&quot;&gt;Mengapa Ini Penting Bagi Maguyva&lt;/h2&gt;
&lt;p&gt;Maguyva soal memberi agen kecerdasan kode yang lebih baik. Tetapi begitu agen benar-benar melakukan pekerjaan yang berguna, sebuah kebutuhan baru segera muncul: Anda perlu melihat bagaimana perilaku mereka.&lt;/p&gt;
&lt;p&gt;Kualitas pencarian, kualitas perutean, pemilihan tool, dan efisiensi konteks semuanya berubah menjadi masalah yang bisa diobservasi.&lt;/p&gt;
&lt;p&gt;Itulah sebabnya kami rasa ini layak ditulis. Stack agen masa depan bukan sekadar prompt dan tool. Ia adalah prompt, tool, dan lapisan instrumentasi yang memberi tahu Anda apakah keseluruhannya berjalan dengan baik.&lt;/p&gt;
&lt;p&gt;Jika Anda membangun alur kerja agen yang serius, observabilitas bukan infrastruktur opsional. Ia adalah bagian dari produk.&lt;/p&gt;
</content:encoded><category>Observability</category><category>Grafana</category><category>OpenTelemetry</category><category>Architecture</category></item><item><title>Menambang Pengetahuan dari Riwayat Perubahan: Bagaimana Perubahan Menjadi Memori Institusional</title><link>https://maguyva.ai/id/blog/mining-workflow-closing-the-loop</link><guid isPermaLink="true">https://maguyva.ai/id/blog/mining-workflow-closing-the-loop</guid><description>Commit Git berubah menjadi entri changelog terstruktur dan catatan keputusan arsitektural, lalu mengalir kembali ke agen AI sebagai memori institusional yang bisa di-query.</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Angka dalam tulisan ini mencerminkan sistem pada saat publikasi (Februari 2026). Lihat &lt;a href=&quot;https://maguyva.ai/id/team&quot;&gt;halaman tim&lt;/a&gt; kami untuk angka terkini.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Setiap tim engineering menghadapi tantangan yang sama: perubahan terjadi terus-menerus, tetapi &lt;em&gt;alasan&lt;/em&gt; di balik perubahan itu menghilang. Enam bulan kemudian, seseorang bertanya “kenapa kita memakai DuckDB untuk stage pipeline?” dan jawabannya hanya hidup di kepala siapa pun yang membuat keputusan itu — jika orang itu masih ada.&lt;/p&gt;
&lt;p&gt;Kami membangun sebuah mining workflow yang menutup loop ini. Perubahan mengalir lewat commit git, diproses oleh pipeline mining kami, menjadi entri changelog terstruktur dan catatan keputusan arsitektural, lalu mengalir kembali ke agen AI kami lewat query CLI. Hasilnya: memori institusional yang bisa diakses baik oleh manusia maupun AI.&lt;/p&gt;
&lt;h2 id=&quot;masalahnya-keputusan-menguap&quot;&gt;Masalahnya: Keputusan Menguap&lt;/h2&gt;
&lt;p&gt;Bayangkan skenario yang umum. Seorang developer melakukan commit:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;feat(canonical): add DuckDB runtime for pipeline stages&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Commit ini merepresentasikan sebuah pilihan arsitektural yang signifikan. Tim mengevaluasi opsi, mempertimbangkan trade-off, dan akhirnya memilih DuckDB karena alasan-alasan spesifik. Tetapi seluruh konteks itu hanya hidup di:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sebuah thread Slack (mungkin sudah terhapus)&lt;/li&gt;
&lt;li&gt;Ingatan seseorang (pasti memudar)&lt;/li&gt;
&lt;li&gt;Sebuah komentar di kode (mungkin, kalau Anda beruntung)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tiga bulan kemudian, anggota tim baru bertanya: “Haruskah saya pakai DuckDB atau SQLite untuk stage baru ini?” Tanpa memori institusional, mereka akan mengulang pekerjaan dari nol atau membuat pilihan yang tidak konsisten.&lt;/p&gt;
&lt;h2 id=&quot;loop-nya-dari-commit-ke-konteks&quot;&gt;Loop-nya: Dari Commit ke Konteks&lt;/h2&gt;
&lt;p&gt;Mining workflow kami mengubah histori git menjadi pengetahuan yang bisa di-query:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Git Commits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine sync          │  ← Build index from git history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine candidates    │  ← Surface commits for review&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  Classification     │  ← Human or LLM assessment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  (changelog or ADR) │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├──────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Changelog   │    │ Decisions     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Ledger      │    │ Registry      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ (JSONL)     │    │ (YAML files)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ CHANGELOG.md│    │ orkestra CLI  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ per package │    │ queries       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └──────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ AI Agents     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ (via CLI)     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      └───────────────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Wawasan kuncinya: baik changelog maupun architectural decision mengalir dari histori git yang sama, diproses lewat satu pipeline terpadu. Ini memastikan tidak ada yang lolos begitu saja.&lt;/p&gt;
&lt;h2 id=&quot;bagaimana-mining-bekerja&quot;&gt;Bagaimana Mining Bekerja&lt;/h2&gt;
&lt;h3 id=&quot;langkah-1-sinkronkan-indeks&quot;&gt;Langkah 1: Sinkronkan Indeks&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Perintah ini memindai histori git dan membangun indeks dari semua commit. Ia mengekstraksi sinyal terstruktur dari setiap commit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tipe commit menurut Conventional Commits (&lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Scope (package atau area mana)&lt;/li&gt;
&lt;li&gt;Penanda breaking change&lt;/li&gt;
&lt;li&gt;File yang tersentuh dan metrik kompleksitas&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;langkah-2-periksa-status-cakupan&quot;&gt;Langkah 2: Periksa Status Cakupan&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Beginilah status kami saat ini:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Mining Status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=============&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Extracted:       476&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:       15161&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Changelog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Released:       6799&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:        8838&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;15.637 commit diproses. 476 menjadi architectural decision. 6.799 menjadi entri changelog. Setiap commit terklasifikasi.&lt;/p&gt;
&lt;h3 id=&quot;langkah-3-ambil-kandidat-untuk-ditinjau&quot;&gt;Langkah 3: Ambil Kandidat untuk Ditinjau&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; candidates&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --full&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini memunculkan commit yang belum diproses, lengkap dengan konteks untuk klasifikasi:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;90571786d99166c0039ca2e80e4d9cd96184bd85&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;date&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;subject&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(canonical): add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;signals&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;commit_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;scope&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;canonical&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;breaking&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;is_releasable_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;domains_affected&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;pipeline&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;data-architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;body&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Establishes DuckDB as canonical in-process analytical database...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;files_changed&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/canonical/pipelines/stages/duckdb_runtime.py&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;stats&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;insertions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;450&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;deletions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;120&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sinyal-sinyal ini membantu memandu klasifikasi: &lt;code&gt;is_releasable_type: true&lt;/code&gt; menunjukkan ini seharusnya muncul di changelog. Jumlah insertion yang besar dan file infrastruktur menunjukkan ini mungkin juga sebuah architectural decision.&lt;/p&gt;
&lt;h3 id=&quot;langkah-4-klasifikasikan-commit&quot;&gt;Langkah 4: Klasifikasikan Commit&lt;/h3&gt;
&lt;p&gt;Dua jalur bercabang di sini: entri changelog dan architectural decision.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Untuk entri changelog:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; added&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini mencatat bahwa commit &lt;code&gt;abc123&lt;/code&gt; seharusnya muncul di changelog di kategori “Added.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Untuk architectural decision:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pertama, dapatkan ID decision yang sungguhan:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --domain&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pipeline&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Returns: DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lalu klasifikasikan dengan ID decision tersebut:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --decision&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini menautkan commit ke sebuah decision record yang akan dibuat atau diperbarui.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Untuk pemrosesan batch (apa yang sebenarnya kami lakukan):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Generate classifications file with LLM assistance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --input&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classifications.jsonl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Format JSONL mendukung kedua domain dalam satu proses:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonl&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;release&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;added&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;extract&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;decision_id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-PL-142&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;def456&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;skip&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;reason&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Chore: dependency update&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;langkah-5-render-output&quot;&gt;Langkah 5: Render Output&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --package&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pk&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini menghasilkan file &lt;code&gt;CHANGELOG.md&lt;/code&gt; per package dari ledger. Changelog adalah artefak turunan — hapus saja, dan mereka akan terbangun ulang secara sempurna dari ledger sumbernya.&lt;/p&gt;
&lt;h2 id=&quot;struktur-decision-record&quot;&gt;Struktur Decision Record&lt;/h2&gt;
&lt;p&gt;Decision hasil ekstraksi menjadi file YAML dengan metadata yang kaya:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-PL-142&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adopt DuckDB as Canonical Processing Runtime for Pipeline Stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;domain&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;active&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;created&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Establishes DuckDB as the canonical in-process analytical database for pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  stage transformations. Provides a shared runtime module that resolves settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  from pipeline defaults with stage-level overrides.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Pipeline stages performing data transformations each independently configured&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  DuckDB connections. This led to inconsistent settings, duplicated configuration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  code, and no way to tune DuckDB globally for a pipeline run.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DuckDB provides efficient in-process OLAP with zero configuration deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Centralized runtime module eliminates duplicated DuckDB setup across stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Hierarchical settings enable global tuning with stage-level overrides&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Memory limits and thread counts can be adjusted per-pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;impact&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  positive&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Consistent DuckDB configuration across all pipeline stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Single point of control for memory/thread tuning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Reduced code duplication in conversion and export stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  negative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adds dependency on shared runtime module&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Stages must adopt new configuration pattern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;source_commits&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;sha&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;90571786d99166c0039ca2e80e4d9cd96184bd85&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    message&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;feat(canonical): add DuckDB runtime for pipeline stages&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    date&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    role&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;primary&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;files&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/duckdb_runtime.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/runner.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/convert_hdx_admin_boundaries_to_geoparquet.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;related&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-DA-014&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Data architecture decisions that influenced this&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Setiap decision menaut kembali ke commit sumbernya. Setiap decision menyebutkan file mana yang terpengaruh. Relasi antar decision bersifat eksplisit.&lt;/p&gt;
&lt;h2 id=&quot;integrasi-cli-meng-query-memori-institusional&quot;&gt;Integrasi CLI: Meng-query Memori Institusional&lt;/h2&gt;
&lt;p&gt;Di sinilah loop-nya menutup. Agen bisa meng-query decision lewat CLI:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Search by topic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;retry&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mengembalikan decision tentang logika retry, error handling, pola pemulihan.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Get full details on a specific decision&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-142&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mengembalikan decision record lengkap dengan konteks, rationale, dan dampaknya.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# List recent decisions for context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 15&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Menunjukkan pilihan arsitektural apa yang baru-baru ini dibuat.&lt;/p&gt;
&lt;h3 id=&quot;bagaimana-agen-menggunakan-ini&quot;&gt;Bagaimana Agen Menggunakan Ini&lt;/h3&gt;
&lt;p&gt;Instruksi baseline orchestrator kami mencakup:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8;font-weight:bold&quot;&gt;**Essential CLI commands:**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; `orkestra registry decisions search &quot;X&quot;`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; — Find architectural decisions&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ketika seorang agen diminta mengimplementasikan sesuatu yang berkaitan dengan DuckDB, ia bisa memeriksa terlebih dahulu:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;DuckDB&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dan menemukan DEC-PL-142, mempelajari:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mengapa kami memilih DuckDB (konteks)&lt;/li&gt;
&lt;li&gt;Bagaimana menggunakannya dengan benar (agent_guidance)&lt;/li&gt;
&lt;li&gt;File apa yang perlu dilihat (files)&lt;/li&gt;
&lt;li&gt;Decision terkait apa yang ada (related)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Agen tidak mengulang pekerjaan dari nol. Ia membangun di atas pola yang sudah mapan.&lt;/p&gt;
&lt;h2 id=&quot;uji-tiga-pertanyaan&quot;&gt;Uji Tiga Pertanyaan&lt;/h2&gt;
&lt;p&gt;Tidak setiap commit layak mendapat decision record. Kami menggunakan Uji Tiga Pertanyaan untuk menyaring:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Apakah ini sulit dibuat?&lt;/strong&gt; Apakah butuh analisis signifikan, evaluasi trade-off, atau perdebatan?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Apakah mahal untuk diubah?&lt;/strong&gt; Akankah membalikkan keputusan ini membutuhkan rework yang signifikan?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Apakah berdampak lintas sistem?&lt;/strong&gt; Apakah ini memengaruhi banyak package atau menetapkan pola yang akan diikuti orang lain?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Jika sebuah commit menjawab “ya” untuk setidaknya satu dari pertanyaan ini, commit itu menjadi kandidat untuk ekstraksi decision. Tingkat khas kami: 1-4 decision per 100 commit (sekitar 1-4%).&lt;/p&gt;
&lt;p&gt;Untuk entri changelog, batasnya lebih rendah: setiap perubahan yang terlihat pengguna (fitur, perbaikan, peningkatan) akan dicatat. Chore internal, pembaruan dokumentasi, dan refactor biasanya dilewati. Tingkat khas kami: 30-50 entri changelog per 100 commit.&lt;/p&gt;
&lt;h2 id=&quot;penyimpanan-data-ledger-append-only&quot;&gt;Penyimpanan Data: Ledger Append-Only&lt;/h2&gt;
&lt;p&gt;Sistem mining menggunakan ledger JSONL append-only untuk operasi multi-agen yang bebas konflik:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/changelog/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── commits_processed.jsonl  # Classification ledger (both domains)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── release_notes.jsonl      # Changelog entries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── commits_index.yaml       # Derived index (gitignored)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/decisions/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── registry.yaml            # Decision index&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── records/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-001.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-002.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Format JSONL dengan &lt;code&gt;merge=union&lt;/code&gt; dalam &lt;code&gt;.gitattributes&lt;/code&gt; berarti beberapa agen bisa mengklasifikasikan commit secara bersamaan tanpa merge conflict. Setiap baris berdiri sendiri.&lt;/p&gt;
&lt;h2 id=&quot;validation-gate&quot;&gt;Validation Gate&lt;/h2&gt;
&lt;p&gt;Sebelum sesi mining apa pun, kami menjalankan validasi:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --quick&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini memeriksa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Validitas format SHA&lt;/li&gt;
&lt;li&gt;Kepatuhan format ID decision&lt;/li&gt;
&lt;li&gt;Tidak ada entri duplikat untuk SHA yang sama&lt;/li&gt;
&lt;li&gt;Decision yang dirujuk benar-benar ada&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Setelah klasifikasi, kami memvalidasi lagi sebelum melakukan commit perubahan.&lt;/p&gt;
&lt;h2 id=&quot;mengapa-ini-penting&quot;&gt;Mengapa Ini Penting&lt;/h2&gt;
&lt;p&gt;Feedback loop yang kami bangun memecahkan beberapa masalah:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Untuk anggota tim baru:&lt;/strong&gt; Alih-alih bertanya “kenapa kita melakukan X?”, mereka bisa mencari di registry decision. Konteksnya terjaga.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Untuk agen AI:&lt;/strong&gt; Mereka tidak beroperasi dalam ruang hampa. Mereka bisa meng-query pengetahuan institusional sebelum membuat rekomendasi. Ketika diminta menambahkan stage pipeline baru, mereka bisa menemukan pola DuckDB dan mengikutinya.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Untuk konsistensi arsitektural:&lt;/strong&gt; Decision bersifat eksplisit dan bisa dicari. Ketika seseorang mengusulkan pendekatan yang bertentangan dengan decision yang sudah ada, sistem bisa memunculkan konfliknya.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Untuk pembuatan changelog:&lt;/strong&gt; Release note bukan lagi kepanikan menit terakhir. Mereka adalah produk sampingan dari klasifikasi berkelanjutan selama pengembangan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Untuk onboarding:&lt;/strong&gt; Agen baru mewarisi seluruh konteks basis kode. Mereka tidak sekadar melihat kode — mereka melihat decision yang membentuknya.&lt;/p&gt;
&lt;h2 id=&quot;keadaan-saat-ini&quot;&gt;Keadaan Saat Ini&lt;/h2&gt;
&lt;p&gt;Per hari ini:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;15.637 commit&lt;/strong&gt; diproses lewat pipeline&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;476 architectural decision&lt;/strong&gt; diekstraksi dan didokumentasikan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6.799 entri changelog&lt;/strong&gt; tercatat&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cakupan 100%&lt;/strong&gt; di kedua domain&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Setiap commit sejak kami mulai sudah terklasifikasi. Memori institusionalnya lengkap dan bisa di-query.&lt;/p&gt;
&lt;h2 id=&quot;memulai&quot;&gt;Memulai&lt;/h2&gt;
&lt;p&gt;Jika Anda ingin mengimplementasikan sesuatu yang serupa:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mulai dengan format Conventional Commits.&lt;/strong&gt; Pipeline mining bekerja paling baik ketika commit punya prefix terstruktur (&lt;code&gt;feat:&lt;/code&gt;, &lt;code&gt;fix:&lt;/code&gt;, &lt;code&gt;chore:&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Definisikan domain Anda.&lt;/strong&gt; Kami menggunakan domain seperti &lt;code&gt;pipeline&lt;/code&gt;, &lt;code&gt;agent-design&lt;/code&gt;, &lt;code&gt;observability&lt;/code&gt;, &lt;code&gt;data-modeling&lt;/code&gt;. Ini mengorganisasi decision berdasarkan area.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bangun kebiasaan klasifikasi.&lt;/strong&gt; Mining berjalan baik ketika tim secara rutin mengklasifikasikan commit. Pemrosesan batch dengan bantuan LLM membantu penskalaan.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Buat decision bisa di-query.&lt;/strong&gt; Nilainya berlipat ganda ketika agen bisa mencari decision lewat CLI. Susun output Anda agar dapat diproses mesin.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tutup loop-nya.&lt;/strong&gt; Decision seharusnya memengaruhi pekerjaan mendatang. Sertakan referensi decision dalam instruksi agen dan checklist code review.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tujuannya bukan dokumentasi yang sempurna. Ini soal membuat &lt;em&gt;alasan&lt;/em&gt; di balik perubahan bisa diakses oleh manusia maupun AI, hari ini dan enam bulan dari sekarang. Ketika perubahan menjadi memori institusional, tim membangun di atas pola yang sudah mapan, bukan menciptakannya ulang.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Mining workflow adalah bagian dari orchestration engine kami, khususnya modul context engine dalam package orchestration kami.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Workflows</category></item><item><title>Skill Mining: Dari 3.500 Kandidat Menjadi 466 Kapabilitas</title><link>https://maguyva.ai/id/blog/skill-mining-3500-and-counting</link><guid isPermaLink="true">https://maguyva.ai/id/blog/skill-mining-3500-and-counting</guid><description>Kami menyaring 3.500 kandidat skill dan mengadopsi 466 di antaranya. Sebuah loop mining dan ingestion yang sistematis untuk membangun pustaka skill agen AI yang koheren dalam skala besar.</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Angka dalam tulisan ini mencerminkan sistem pada saat publikasi (Januari 2026). Lihat &lt;a href=&quot;https://maguyva.ai/id/team&quot;&gt;halaman tim&lt;/a&gt; kami untuk angka terkini.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;masalah-3500-skill&quot;&gt;Masalah 3.500 Skill&lt;/h2&gt;
&lt;p&gt;Ketika kami mulai membangun sistem orkestrasi agen, kami menghadapi tantangan yang menarik: ada ribuan calon skill yang bertebaran di seluruh ekosistem AI. Repositori GitHub, dokumentasi vendor, proyek komunitas, pola internal — skill ada di mana-mana. Tetapi yang mana yang penting? Yang mana yang benar-benar berhasil? Dan bagaimana Anda memelihara sebuah pustaka skill yang koheren yang benar-benar bisa digunakan agen?&lt;/p&gt;
&lt;p&gt;Jawaban kami: sebuah loop mining dan ingestion yang sistematis.&lt;/p&gt;
&lt;h2 id=&quot;angka-angka-hari-ini&quot;&gt;Angka-angka Hari Ini&lt;/h2&gt;
&lt;p&gt;Hanya sedikit lebih dari tiga bulan setelah Anthropic meluncurkan Agent Skills pada 16 Oktober 2025, inilah posisi kami saat tulisan ini dipublikasikan pada 27 Januari 2026:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metrik&lt;/th&gt;
&lt;th&gt;Jumlah&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Kandidat teridentifikasi&lt;/td&gt;
&lt;td&gt;3.500+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill teradopsi&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill vendor&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill internal&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vendor aktif&lt;/td&gt;
&lt;td&gt;25+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rata-rata token per skill&lt;/td&gt;
&lt;td&gt;2.834&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool yang dirujuk&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tag unik&lt;/td&gt;
&lt;td&gt;635&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Kami telah meninjau lebih dari 3.500 kandidat skill. Kami telah mengadopsi 466. Itu tingkat adopsi 13% — dan selektivitas itu memang disengaja.&lt;/p&gt;
&lt;h2 id=&quot;sistem-tier-pengetahuan&quot;&gt;Sistem Tier Pengetahuan&lt;/h2&gt;
&lt;p&gt;Tidak semua skill diciptakan setara. Kami mengorganisasikannya ke dalam lima lapisan pengetahuan (K0-K4), masing-masing merepresentasikan cakupan penerapan yang berbeda:&lt;/p&gt;
&lt;h3 id=&quot;k0-foundations-universal&quot;&gt;K0: Foundations (Universal)&lt;/h3&gt;
&lt;p&gt;Skill yang harus dimiliki setiap agen. Ini merepresentasikan kapabilitas “pemikir yang baik” yang berlaku di mana saja.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;foundations/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── test-first-discipline       # TDD: Red-Green-Refactor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── evidence-based-completion   # Verify before claiming done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── systematic-debugging        # Root cause methodology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── structured-planning         # Break work into tasks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── context-budget-awareness    # Manage token consumption&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Skill K0 bisa dibawa ke proyek mana pun, domain mana pun, stack mana pun. Mereka mengenkode pola kognitif yang universal.&lt;/p&gt;
&lt;h3 id=&quot;k1-identities-bidang-keahlian&quot;&gt;K1: Identities (Bidang Keahlian)&lt;/h3&gt;
&lt;p&gt;Skill “engineer yang baik” atau “peneliti yang baik” yang berlaku lintas proyek dalam satu bidang keahlian.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;identities/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── research-workflows          # Multi-source research&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── web-extraction-playbook     # Content extraction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── code-review                 # PR review patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── cli-interface-standards     # CLI design patterns&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k2-domains-keahlian-bidang&quot;&gt;K2: Domains (Keahlian Bidang)&lt;/h3&gt;
&lt;p&gt;Skill “pakar database yang baik” atau “security engineer yang baik” yang bisa dibawa dalam sebuah bidang.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domains/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── schema-migration-workflow   # Safe migration patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── rpc-validation-checklist    # RPC health checks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── auth-validation-checklist   # JWT/OAuth patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── secrets-audit-checklist     # Credential scanning&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k3-stacks-teknologi&quot;&gt;K3: Stacks (Teknologi)&lt;/h3&gt;
&lt;p&gt;Skill “pengguna Supabase yang baik” atau “developer Cloudflare yang baik” untuk stack teknologi spesifik.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;stacks/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── maguyva-quickstart          # Our semantic search patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── cloudflare-deployment       # Workers/Pages deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── mcp-tool-best-practices     # MCP tool selection&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k4-project-organisasi&quot;&gt;K4: Project (Organisasi)&lt;/h3&gt;
&lt;p&gt;Skill yang spesifik untuk organisasi dan alur kerja kami.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;project/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── agent-creation-workflow     # How we build agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── skill-authoring-workflow    # How we write skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── mining-session-workflow     # This very process&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor-skill-evaluation     # Evaluation rubrics&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;loop-mining-nya&quot;&gt;Loop Mining-nya&lt;/h2&gt;
&lt;h3 id=&quot;fase-1-discovery&quot;&gt;Fase 1: Discovery&lt;/h3&gt;
&lt;p&gt;Skill datang dari mana-mana:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Repositori Vendor&lt;/strong&gt;: AWS, Anthropic, Cloudflare, Supabase, dan kontributor komunitas mempublikasikan koleksi skill. Kami melacak 25+ direktori sumber vendor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Proyek Komunitas&lt;/strong&gt;: GitHub penuh dengan template Claude Code, pola agen, dan definisi alur kerja.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pola Internal&lt;/strong&gt;: Seiring tim kami memecahkan masalah, pola-pola muncul. Ini diformalkan menjadi skill.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mining Dokumentasi&lt;/strong&gt;: Dokumentasi teknis sering mengandung skill implisit — prosedur, checklist, pohon keputusan.&lt;/p&gt;
&lt;p&gt;Discovery berjalan terus-menerus. Kami menggunakan sebuah backlog skill untuk melacak kandidat sebelum evaluasi formal.&lt;/p&gt;
&lt;h3 id=&quot;fase-2-evaluasi&quot;&gt;Fase 2: Evaluasi&lt;/h3&gt;
&lt;p&gt;Setiap kandidat melewati rubrik yang sama:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;adoption_criteria&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;fills_real_gap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # We lack this capability&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;well_structured&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;actively_maintained&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Commits in last 6 months&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;portable&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;            # Not hyper-specific&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;tested&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Evidence of usage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kelima kriteria produk harus terpenuhi. Inilah sebabnya 87% kandidat ditolak.&lt;/p&gt;
&lt;p&gt;Lalu setiap kandidat melewati tinjauan trust yang terpisah. Kami tidak memperlakukan sebuah repositori vendor resmi, seorang maintainer komunitas yang terkenal, dan sebuah repo GitHub acak sebagai sumber kebenaran yang setara.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;trust_review&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  vendor_credibility&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ownership_verified&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Official vendor, known maintainer, or internal source&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;maintenance_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Recent commits, issue response, release history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adoption_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Evidence of real use, stars alone are not enough&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;provenance_clear&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;         # We can trace where the skill came from&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  prompt_injection_scan&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;hidden_instruction_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Buried &quot;ignore previous instructions&quot; patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;exfiltration_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Prompts that try to leak files, secrets, or context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;authority_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Claims of priority over system or developer rules&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script_audit&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;inspect_scripts&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Read shell/python/js helpers before adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;network_and_exec_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # curl|bash, remote downloads, subprocess execution&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;file_and_secret_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;   # Env vars, credential access, broad file writes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;destructive_action_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # rm, reset, overwrite, or unsafe automation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vendor tepercaya mendapat tinjauan provenance yang lebih ringan, tetapi bukan jaminan lolos begitu saja. Sumber yang tidak tepercaya atau tidak dikenal mendapat audit manual yang lebih dalam, dan kami tidak menjalankan script bawaan sampai script itu sudah dibaca, ditetapkan batas penggunaannya, dan diklasifikasikan sebagai aman.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analisis Gap&lt;/strong&gt;: Sebelum mengadopsi, kami mencari di registry kami:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&amp;lt;capability&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Jika kami sudah punya, kami tidak butuh itu. Jika kami punya sesuatu yang mirip, kami mungkin menggabungkan alih-alih mengadopsi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Penilaian Kedalaman dan Standar&lt;/strong&gt;: Kami juga menilai seberapa penuh sebuah kandidat menggunakan model agent-skill. Sebuah &lt;code&gt;SKILL.md&lt;/code&gt; tunggal masih bisa berguna, tetapi skill yang lebih dalam lebih bernilai ketika mereka memisahkan instruksi dari referensi, script, dan asset dengan cara yang dianjurkan &lt;code&gt;agentskills.io&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;skill_depth&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md only&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                     # Single instruction file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md + strong description&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Clear triggers and scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                  # Load docs only when needed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds atomic scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Small, reviewable helpers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds assets/examples/templates&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;    # Full progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;depth_signals&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;standards_adherence&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;        # Structure aligns with agentskills.io conventions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;reference_quality&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Curated references, not giant context dumps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;script_atomicity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Focused helpers, not opaque monoliths&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tool_boundary_clarity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Clear limits on what the skill can execute&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;community_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Stars/forks/users help, but only as a weak boost&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bintang GitHub bisa sedikit mengangkat skor kredibilitas, tetapi mereka tidak pernah menyelamatkan skill yang dangkal atau tidak aman. Sebuah repo berbintang tinggi dengan satu &lt;code&gt;SKILL.md&lt;/code&gt; yang samar dan script yang opak mendapat skor lebih rendah daripada repo yang lebih kecil dengan deskripsi yang presisi, materi referensi terkurasi dalam &lt;code&gt;references/&lt;/code&gt;, dan helper atomik yang benar-benar memanfaatkan kapabilitas skill secara penuh.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analisis Struktural&lt;/strong&gt;: Kami memeriksa kualitas skill:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;wc&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -l&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/SKILL.md&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Size check&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Supporting files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Bundled docs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Jika sebuah kandidat menyertakan script, tinjauan itu menjadi lebih ketat. Sebuah skill yang baik bukan sekadar berguna; ia harus mudah dipahami, memiliki batas yang jelas, dan aman untuk diserahkan ke agen. Filter keamanan itu saja mendiskualifikasi sebagian kandidat yang sebenarnya menarik.&lt;/p&gt;
&lt;h3 id=&quot;fase-3-ingestion&quot;&gt;Fase 3: Ingestion&lt;/h3&gt;
&lt;p&gt;Ketika sebuah skill lulus evaluasi, ia masuk ke registry. Tetapi skill tidak pernah diadopsi tanpa perubahan. Mereka dimodifikasi agar cocok dengan sistem kami.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modifikasi saat Adopsi&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Normalisasi Metadata&lt;/strong&gt;: Setiap skill mendapat skema frontmatter kami&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Penetapan K-Tier&lt;/strong&gt;: Skill ditempatkan di lapisan pengetahuan yang sesuai&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pengayaan Tag&lt;/strong&gt;: Tag ditambahkan untuk discovery&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deklarasi Tool&lt;/strong&gt;: Tool yang diizinkan dideklarasikan secara eksplisit&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Penyelarasan Section&lt;/strong&gt;: Konten distruktur ulang agar sesuai dengan template kami&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sebuah YAML skill tipikal setelah ingestion:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  identifier&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Systematic evaluation of vendor skills for adoption.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  layer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;K4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  semantic_folder&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  source&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;core&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-17&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;frontmatter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;meta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skill-adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  allowed_tools&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Read&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Write&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Grep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Glob&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Task&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;fase-4-penetapan-scope&quot;&gt;Fase 4: Penetapan Scope&lt;/h3&gt;
&lt;p&gt;Skill ditetapkan ke scope — kategori yang menentukan agen mana yang memuat skill mana:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/rpc-validation-checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-database&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-auth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/research-workflows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/web-extraction-playbook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/dataset-discovery-quickstart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Agen mendeklarasikan scope mereka, dan skill ditetapkan secara otomatis:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent definition&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Gets: all database skills + all research skills + universal skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;fase-5-materialisasi&quot;&gt;Fase 5: Materialisasi&lt;/h3&gt;
&lt;p&gt;Skill tidak hidup sebagai YAML di produksi. Mereka di-render menjadi file SKILL.md yang bisa dimuat Claude Code:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Perintah ini:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Membaca semua definisi YAML skill&lt;/li&gt;
&lt;li&gt;Merender lewat template Jinja&lt;/li&gt;
&lt;li&gt;Menulis file SKILL.md ke &lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Mengorganisasi berdasarkan K-tier (foundations/, identities/, domains/, stacks/, project/)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Struktur output akhirnya:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.claude/skills/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── foundations/     # K0: Universal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── identities/      # K1: Discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── domains/         # K2: Subject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── stacks/          # K3: Technology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── project/         # K4: Organization&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor/          # External skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;pola-dormant-scope&quot;&gt;Pola Dormant Scope&lt;/h2&gt;
&lt;p&gt;Salah satu pola kami yang paling ampuh adalah skill “teradopsi-tapi-tidak-dimuat.” Kami menyebutnya dormant scope.&lt;/p&gt;
&lt;p&gt;Pertimbangkan skill scientific computing dari repositori k-dense-scientific. Kami telah mengadopsi 120+ skill yang mencakup bioinformatika, kimia, quantum computing, dan clinical informatics. Tetapi sebagian besar agen kami tidak butuh molecular docking atau analisis ekspresi gen.&lt;/p&gt;
&lt;p&gt;Alih-alih memuat semua 120 skill ke setiap agen (yang akan membengkakkan jendela konteks), kami:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Mengadopsi&lt;/strong&gt; skill dengan scope tertentu (misalnya, &lt;code&gt;bioinformatics&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Membiarkannya tetap &lt;strong&gt;dormant&lt;/strong&gt; — terdaftar tapi tidak dimuat&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mengaktifkan&lt;/strong&gt; hanya ketika sebuah agen mendeklarasikan scope itu&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# In scopes.yaml - dormant scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Bioinformatics and genomics&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: []  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Empty - skills exist but aren&apos;t loaded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# When an agent needs bioinformatics:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent YAML&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Now loads bioinformatics skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pola ini memungkinkan kami memiliki 466 skill di registry sementara agen tipikal hanya memuat 40-60 yang relevan.&lt;/p&gt;
&lt;h2 id=&quot;tipe-skill&quot;&gt;Tipe Skill&lt;/h2&gt;
&lt;p&gt;Skill hadir dalam tiga pola kognitif:&lt;/p&gt;
&lt;h3 id=&quot;workflow&quot;&gt;Workflow&lt;/h3&gt;
&lt;p&gt;Langkah prosedural yang berurutan: “1. Lakukan X, 2. Lalu Y, 3. Terakhir Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: schema-migration-workflow, mining-session-workflow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;discipline&quot;&gt;Discipline&lt;/h3&gt;
&lt;p&gt;Guardrail perilaku: “Selalu X”, “Jangan pernah Y”, “Utamakan Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: test-first-discipline, evidence-based-completion&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;checklist&quot;&gt;Checklist&lt;/h3&gt;
&lt;p&gt;Kriteria verifikasi: “Konfirmasi X”, “Verifikasi Y”, “Periksa Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: auth-validation-checklist, secrets-audit-checklist&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;quality-gate&quot;&gt;Quality Gate&lt;/h2&gt;
&lt;p&gt;Setiap skill harus lulus validasi sebelum dirilis:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;validation&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  file_exists&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Skill file at declared path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  frontmatter_valid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Frontmatter parses correctly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  sections_complete&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Expected sections present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tools_registered&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Declared tools exist in registry&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Deskripsi harus 50-400 karakter dengan frase trigger (“Gunakan saat…”, “Ketika Anda butuh…”) sehingga Claude Code tahu kapan harus menyarankannya.&lt;/p&gt;
&lt;p&gt;Kami memvalidasi secara berkelanjutan:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;ekosistem-vendor&quot;&gt;Ekosistem Vendor&lt;/h2&gt;
&lt;p&gt;373 skill vendor kami berasal dari:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;Domain&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS Agent&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Layanan cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Generasi dokumen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Edge computing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;k-dense&lt;/td&gt;
&lt;td&gt;100+&lt;/td&gt;
&lt;td&gt;Scientific computing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;silvainfm&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Data science&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Developer Kit&lt;/td&gt;
&lt;td&gt;45+&lt;/td&gt;
&lt;td&gt;Spring/Java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Otomasi browser&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Setiap direktori sumber vendor dideklarasikan dalam metadata.yaml:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;vendor_roots&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/aws-agent-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;aws&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/k-dense-scientific/scientific-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;k-dense&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;supabase&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ketika &lt;code&gt;orkestra sync&lt;/code&gt; berjalan, skill vendor di-symlink ke &lt;code&gt;.claude/skills/vendor/&lt;/code&gt; dengan namespace provider mereka.&lt;/p&gt;
&lt;h2 id=&quot;apa-yang-telah-kami-pelajari&quot;&gt;Apa yang Telah Kami Pelajari&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Selektivitas terbayar.&lt;/strong&gt; Tergoda untuk mengadopsi semua yang terlihat berguna. Tetapi setiap skill punya biaya token. Dengan rata-rata 2.834 token per skill, konteks cepat membengkak. Tingkat adopsi 13% kami menjaga agen tetap ramping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Struktur memungkinkan discovery.&lt;/strong&gt; Sistem K-tier bukan sekadar organisasi — ini soal portabilitas. Skill K0 bisa digunakan ulang di mana saja. Skill K4 sengaja dibuat spesifik proyek. Kejelasan ini membantu baik manusia maupun agen menemukan apa yang mereka butuhkan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dormant scope bisa berskala.&lt;/strong&gt; Anda bisa mengadopsi ratusan skill tanpa memuat semuanya. Scope memungkinkan Anda membangun registry yang komprehensif sembari menjaga jendela konteks masing-masing agen tetap terkendali.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modifikasi saat adopsi itu esensial.&lt;/strong&gt; Skill vendor mentah jarang cocok dengan sistem Anda. Proses ingestion — menambahkan metadata, menetapkan tier, memperkaya tag — membuat skill eksternal bisa bekerja secara internal.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mining berjalan terus-menerus.&lt;/strong&gt; Angka 3.500 itu terus bertambah. Repo vendor baru muncul. Pola komunitas bermunculan. Alur kerja internal semakin mapan. Loop-nya tidak pernah berhenti.&lt;/p&gt;
&lt;h2 id=&quot;apa-selanjutnya&quot;&gt;Apa Selanjutnya&lt;/h2&gt;
&lt;p&gt;Kami sedang mengerjakan beberapa peningkatan:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Deteksi gap otomatis&lt;/strong&gt;: Peringatkan ketika kegagalan agen yang umum bisa diatasi oleh sebuah skill yang belum diadopsi&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alur kerja deprecation skill&lt;/strong&gt;: Proses formal untuk mempensiunkan skill yang sudah digantikan atau tidak terpakai&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dependensi antar-skill&lt;/strong&gt;: Deklarasi eksplisit dari prasyarat skill&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analitik penggunaan&lt;/strong&gt;: Lacak skill mana yang benar-benar dipanggil agen versus sekadar dimuat&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Loop mining skill ini adalah infrastruktur. Ini tidak glamor. Tetapi inilah yang membuat 41 agen bekerja secara koheren dengan 466 kapabilitas sembari tetap berada dalam batas konteks.&lt;/p&gt;
&lt;p&gt;Itulah kisah bagaimana 3.500 menjadi 466. Bukan dengan mengabaikan 3.000 — tetapi dengan mengevaluasinya secara sistematis dan hanya mengadopsi yang benar-benar berhasil.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Ingin melihat sistem skill ini beraksi? Lihat &lt;code&gt;uv run orkestra skills list&lt;/code&gt; untuk menjelajahi registry kami saat ini.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Skills</category></item><item><title>Progressive Disclosure: Jendela CLI ke Dalam Sistem Agen</title><link>https://maguyva.ai/id/blog/progressive-disclosure-cli-into-agents</link><guid isPermaLink="true">https://maguyva.ai/id/blog/progressive-disclosure-cli-into-agents</guid><description>Cara kerja sistem agen sulit diamati secara default. Progressive disclosure memberi operator tampilan CLI berlapis, dari pemeriksaan status cepat hingga internal agen dan jejak keputusan yang lengkap.</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Angka dalam tulisan ini mencerminkan sistem pada saat publikasi (Januari 2026). Lihat &lt;a href=&quot;https://maguyva.ai/id/team&quot;&gt;halaman tim&lt;/a&gt; kami untuk angka terkini.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Desain sistem agen membuat cara kerjanya sulit diamati. Mereka membuat keputusan, memanggil tool, dan mengoordinasikan pekerjaan lintas puluhan spesialis. Tetapi ketika sesuatu berjalan salah — atau ketika Anda sekadar ingin memahami apa yang terjadi — ke mana Anda harus melihat?&lt;/p&gt;
&lt;p&gt;Jawabannya adalah progressive disclosure: sebuah interface berlapis yang mengungkap kompleksitas tepat sebanyak yang Anda butuhkan, tepat pada saat Anda membutuhkannya.&lt;/p&gt;
&lt;h2 id=&quot;masalah-kurangnya-keterlihatan&quot;&gt;Masalah Kurangnya Keterlihatan&lt;/h2&gt;
&lt;p&gt;Sebuah sistem orkestrasi agen modern mungkin punya:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;40+ agen spesialis, masing-masing dengan kapabilitas yang berbeda&lt;/li&gt;
&lt;li&gt;700+ skill yang merentang dari otomasi internal hingga integrasi vendor&lt;/li&gt;
&lt;li&gt;470+ architectural decision yang membentuk perilaku&lt;/li&gt;
&lt;li&gt;Lusinan server tool MCP yang menyediakan kapabilitas eksternal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kompleksitas ini disengaja. Agen butuh akses ke konteks yang kaya — pengetahuan domain, kecerdasan kode, skema database — untuk membuat keputusan yang baik. Tetapi kekayaan yang sama itu menciptakan masalah visibilitas.&lt;/p&gt;
&lt;p&gt;Bagaimana Anda tahu agen mana yang menangani migrasi database? Decision apa yang membentuk perilaku peringkat sistem pencarian? Tool apa yang bisa diakses oleh architecture advisor?&lt;/p&gt;
&lt;p&gt;Tanpa akses yang terstruktur, Anda hanya bisa membaca kode sumber atau berharap dokumentasinya masih relevan.&lt;/p&gt;
&lt;h2 id=&quot;progressive-disclosure-sebagai-arsitektur&quot;&gt;Progressive Disclosure sebagai Arsitektur&lt;/h2&gt;
&lt;p&gt;Progressive disclosure bukan sekadar pola UI. Ini prinsip arsitektural: organisasikan informasi dalam lapisan-lapisan, masing-masing lebih dalam dari sebelumnya, sehingga pengguna bisa berhenti pada level yang menjawab pertanyaan mereka.&lt;/p&gt;
&lt;p&gt;Untuk sistem agen, ini diterjemahkan menjadi perintah CLI dengan kedalaman yang meningkat:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;th&gt;Perintah&lt;/th&gt;
&lt;th&gt;Pertanyaan yang Dijawab&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra system status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Apakah semuanya sehat?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Agen apa saja yang ada?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents info &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Apa yang dilakukan agen ini?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra decisions search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mengapa ia bekerja dengan cara ini?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Tool MCP Maguyva&lt;/td&gt;
&lt;td&gt;Tunjukkan kodenya kepada saya.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Setiap level menjawab pertanyaan lanjutan yang alami. Anda jarang perlu langsung melompat ke level 5.&lt;/p&gt;
&lt;h2 id=&quot;level-1-kesehatan-sistem&quot;&gt;Level 1: Kesehatan Sistem&lt;/h2&gt;
&lt;p&gt;Pertanyaan pertama selalu: apakah semuanya bekerja?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; system&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_internal&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;466&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_vendor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;240&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;706&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;commands&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;17&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Satu perintah. Empat angka. Cukup untuk tahu sistemnya terkonfigurasi dan registry-nya terisi.&lt;/p&gt;
&lt;p&gt;Jika jumlah agen tiba-tiba turun atau skill gagal dimuat, Anda melihatnya di sini terlebih dahulu. Tidak perlu menyelami log.&lt;/p&gt;
&lt;h2 id=&quot;level-2-inventaris-agen&quot;&gt;Level 2: Inventaris Agen&lt;/h2&gt;
&lt;p&gt;Setelah Anda tahu sistemnya sehat, pertanyaan berikutnya adalah: apa saja yang tersedia?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini mengembalikan data terstruktur — nama agen, deskripsi, preferensi model, cakupan domain. Output-nya JSON secara default, sehingga mudah di-pipe ke &lt;code&gt;jq&lt;/code&gt; untuk penyaringan:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;.agents[] | select(.model == &quot;opus&quot;) | .name&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ingin agen yang menangani pekerjaan database? Perintah pencariannya mempersempit itu:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini memindai nama, deskripsi, dan kapabilitas. Anda menemukan spesialis yang tepat tanpa membaca 40 definisi agen.&lt;/p&gt;
&lt;h2 id=&quot;level-3-menyelami-agen-secara-mendalam&quot;&gt;Level 3: Menyelami Agen Secara Mendalam&lt;/h2&gt;
&lt;p&gt;Menemukan agen yang terlihat relevan? Perintah &lt;code&gt;info&lt;/code&gt; mengungkap segalanya:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; architecture-advisor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Output-nya mencakup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Metadata&lt;/strong&gt;: Nama, kategori, preferensi model, deskripsi&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domain&lt;/strong&gt;: Area pengetahuan mana yang dicakup agen ini&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identity&lt;/strong&gt;: Sifat karakter (architect, strategist, knowledge-architect)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tool guide&lt;/strong&gt;: Dokumentasi tool mana yang disuntikkan ke dalam konteks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tool&lt;/strong&gt;: Daftar lengkap tool MCP yang tersedia untuk agen ini&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Berikut contoh apa yang Anda lihat:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;metadata&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;architecture-advisor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;opus&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;description&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Strategic decision-making and architectural guidance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;domains&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;product&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;development/architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;meta/strategy&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;mcp_tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__intelligent_search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__analyze_dependencies&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__supabase__execute_sql&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FDAEB7;font-style:italic&quot;&gt;      ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini memberi tahu Anda persis apa yang bisa dilakukan agennya. Tidak perlu kode sumber.&lt;/p&gt;
&lt;h2 id=&quot;level-4-arkeologi-decision&quot;&gt;Level 4: Arkeologi Decision&lt;/h2&gt;
&lt;p&gt;Agen berperilaku sesuai decision yang terdokumentasi. Ketika Anda perlu memahami &lt;em&gt;mengapa&lt;/em&gt; sesuatu bekerja dengan cara tertentu, registry decision adalah sumber kebenarannya.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;agent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini mengembalikan architectural decision yang cocok:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;active&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Setiap decision punya provenance lengkap — kapan dibuat, mengapa, trade-off apa yang dipertimbangkan, commit mana yang mengimplementasikannya:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-SR-049&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Changes default values for search tools to AI-agent-optimal behavior...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;AI agents work better with pre-ranked, importance-weighted results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Graph metrics already computed by pipeline - leverage them&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Community context helps agents understand feature scope in single query&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;source_commits&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;156a880d05eae295669ef7c194b039023f245511&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;message&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(maguyva): enable boost_by_importance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini adalah dokumentasi arsitektural yang tetap relevan karena ditambang dari commit, bukan dipelihara secara manual.&lt;/p&gt;
&lt;h2 id=&quot;level-5-kecerdasan-kode-langsung&quot;&gt;Level 5: Kecerdasan Kode Langsung&lt;/h2&gt;
&lt;p&gt;Ketika Anda perlu melihat implementasi sesungguhnya — bukan metadata tentangnya — tool MCP Maguyva menyediakan akses langsung.&lt;/p&gt;
&lt;p&gt;Dari dalam sebuah sesi agen:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__intelligent_search&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  query: &quot;agent context loading&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini secara otomatis merutekan lintas pencarian semantik, teks, dan AST untuk menemukan kode yang relevan. Untuk simbol spesifik:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__find_symbol&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  symbol_name: &quot;load_agent_context&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Untuk analisis dependensi:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__analyze_dependencies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  target: &quot;packages/orchestration/core/agents.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini bukan sekadar pengganti grep. Tool-tool ini mempertimbangkan struktur graf, terindeks secara semantik, dan terintegrasi dengan kecerdasan kode yang sama yang menggerakkan agen-agen itu sendiri.&lt;/p&gt;
&lt;h2 id=&quot;pencarian-terpadu-lintas-registry&quot;&gt;Pencarian Terpadu Lintas Registry&lt;/h2&gt;
&lt;p&gt;Kadang Anda tidak tahu registry mana yang menyimpan jawabannya. Pencarian terpadu merentang ke segalanya:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --summary&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;query&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;254&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;counts&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;skills&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;59&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;476&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;truths&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;packages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;254 kecocokan di lima registry. Ringkasannya memberi tahu Anda ke mana harus menyelam lebih dalam. Hapus &lt;code&gt;--summary&lt;/code&gt; untuk hasil detail, atau tambahkan &lt;code&gt;--limit 5&lt;/code&gt; untuk menjaga output tetap ringkas.&lt;/p&gt;
&lt;h2 id=&quot;mengapa-ini-penting&quot;&gt;Mengapa Ini Penting&lt;/h2&gt;
&lt;p&gt;Progressive disclosure bukan sekadar soal kenyamanan. Ini mengubah bagaimana Anda berinteraksi dengan sistem yang kompleks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Debugging menjadi bisa dikelola.&lt;/strong&gt; Ketika sebuah agen membuat keputusan yang tidak terduga, Anda tidak meng-grep lewat log. Anda memeriksa tool apa yang bisa diaksesnya (&lt;code&gt;agents info&lt;/code&gt;), decision apa yang membentuk perilakunya (&lt;code&gt;decisions search&lt;/code&gt;), dan menelusuri implementasinya jika perlu (&lt;code&gt;intelligent_search&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Onboarding jadi lebih cepat.&lt;/strong&gt; Anggota tim baru tidak perlu membaca seluruh basis kode. Mereka mulai dengan &lt;code&gt;system status&lt;/code&gt;, menjelajah dengan &lt;code&gt;agents list&lt;/code&gt;, dan menyelam lebih dalam hanya ketika mereka menjumpai sesuatu yang tidak mereka pahami.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dokumentasi tetap relevan.&lt;/strong&gt; Karena CLI-nya membaca dari registry yang sama yang mengonfigurasi agen-agennya, output-nya selalu akurat. Tidak ada kesenjangan antara apa yang dikatakan dokumentasi dan apa yang dilakukan sistemnya.&lt;/p&gt;
&lt;h2 id=&quot;cli-sebagai-interface&quot;&gt;CLI sebagai Interface&lt;/h2&gt;
&lt;p&gt;Kami bisa saja membangun dashboard web. Kami bisa saja menulis dokumentasi yang panjang. Sebagai gantinya, kami membangun sebuah CLI yang membaca dari sumber kebenarannya.&lt;/p&gt;
&lt;p&gt;CLI-nya punya beberapa keunggulan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Composable&lt;/strong&gt;: Pipe output-nya lewat &lt;code&gt;jq&lt;/code&gt;, integrasikan dengan script&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scriptable&lt;/strong&gt;: Otomasikan pemeriksaan, hasilkan laporan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cepat&lt;/strong&gt;: Tidak ada page load, tidak ada alur autentikasi&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Akurat&lt;/strong&gt;: Membaca konfigurasi sesungguhnya, bukan representasi yang di-cache&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Untuk sistem tempat ketepatan hasil lebih penting daripada estetika, CLI menang.&lt;/p&gt;
&lt;h2 id=&quot;membangun-progressive-disclosure-anda-sendiri&quot;&gt;Membangun Progressive Disclosure Anda Sendiri&lt;/h2&gt;
&lt;p&gt;Jika Anda membangun sistem agen, pertimbangkan bagaimana pengguna akan memeriksanya:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Mulai dengan pemeriksaan kesehatan.&lt;/strong&gt; Satu perintah yang memberi tahu Anda apakah semuanya bekerja.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sediakan tampilan inventaris.&lt;/strong&gt; Daftarkan apa yang ada sebelum menjelaskan fungsinya.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aktifkan kueri yang ditargetkan.&lt;/strong&gt; Pencarian mengalahkan penjelajahan pada skala besar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ekspos provenance.&lt;/strong&gt; Biarkan pengguna menelusuri decision hingga ke asalnya.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sambungkan ke kecerdasan kode.&lt;/strong&gt; Pada akhirnya, pengguna perlu melihat implementasinya.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Setiap lapisan menjawab pertanyaan lanjutan. Susun lapisan-lapisan tersebut berdasarkan frekuensi penggunaannya — sebagian besar pengguna berhenti di layer 2 atau 3. Hanya power user yang mencapai layer 5.&lt;/p&gt;
&lt;p&gt;Tujuannya bukan mengekspos segalanya. Ini soal mengekspos tepat apa yang dibutuhkan, tepat ketika dibutuhkan. Itulah progressive disclosure yang diterapkan pada arsitektur agen.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>CLI</category><category>Tooling</category></item><item><title>Ground Truths: Menambatkan Agen AI ke Realitas</title><link>https://maguyva.ai/id/blog/ground-truths-anchoring-ai-to-reality</link><guid isPermaLink="true">https://maguyva.ai/id/blog/ground-truths-anchoring-ai-to-reality</guid><description>Agen AI berhalusinasi dengan percaya diri. Ground truths adalah fakta yang terversi dan bercakupan jelas yang menambatkan perilaku agen ke realitas. Berikut cara kami membangun dan menegakkannya.</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Angka dalam tulisan ini mencerminkan sistem pada saat publikasi (Januari 2026). Lihat &lt;a href=&quot;https://maguyva.ai/id/team&quot;&gt;halaman tim&lt;/a&gt; kami untuk angka terkini.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Agen AI sangat kapabel. Mereka bisa bernalar, mensintesis, dan menghasilkan. Tetapi mereka punya kelemahan mendasar: mereka mengarang-ngarang. Bukan dengan niat jahat, tetapi dengan percaya diri. Seorang agen bisa saja mengarang parameter API yang tidak ada, merujuk konfigurasi yang tidak pernah didefinisikan, atau menerapkan pola dari data pelatihannya yang bertentangan dengan arsitektur Anda yang sebenarnya.&lt;/p&gt;
&lt;p&gt;Mitigasi standarnya adalah “beri agen lebih banyak konteks.” Tetapi konteks bisa saling bertentangan. Dokumentasi melenceng dari implementasi. Komentar bisa berbohong. Bahkan kode pun bisa menyesatkan jika dibaca tanpa memahami maksudnya.&lt;/p&gt;
&lt;p&gt;Kami butuh sesuatu yang lebih eksplisit. Sesuatu yang tidak bisa diabaikan atau disalahtafsirkan. Sesuatu yang menambatkan agen ke realitas yang bisa diverifikasi.&lt;/p&gt;
&lt;p&gt;Kami menyebutnya Ground Truths.&lt;/p&gt;
&lt;h2 id=&quot;apa-itu-ground-truth&quot;&gt;Apa itu Ground Truth?&lt;/h2&gt;
&lt;p&gt;Sebuah ground truth adalah pernyataan fakta yang eksplisit dan terversi yang harus dihormati oleh agen. Ini bukan dokumentasi. Ini bukan komentar. Ini adalah entitas kelas satu dalam sistem dengan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sebuah identifier unik&lt;/strong&gt; (seperti &lt;code&gt;GT-MAG-015&lt;/code&gt; atau &lt;code&gt;GT-MAG-036&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sebuah status lifecycle&lt;/strong&gt; (current, tentative, atau deprecated)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sebuah scope&lt;/strong&gt; (platform-wide, package-specific, atau domain-bound)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bukti&lt;/strong&gt; (path file, URL, atau referensi yang membuktikan pernyataan tersebut)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Panduan agen&lt;/strong&gt; (instruksi do/avoid yang eksplisit)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Berikut contoh dari platform kecerdasan kode Maguyva kami:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Fuzzy symbol matching is opt-in via `find_similar=true`.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Default behavior returns empty results for non-existent symbols;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    `exact_match=true` enforces strict matching and disables all fuzzy fallbacks.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Deterministic defaults prevent agents from receiving misleading results.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Typos should fail explicitly rather than silently returning unrelated symbols.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/code_analysis_service.py&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/docs/quick_reference/parameters.md&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-25&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ai_first&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini bukan prosa. Ini kontrak. Ketika seorang agen menjumpai ground truth ini, ia tahu:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Default-nya deterministik (hasil kosong, bukan tebakan yang samar)&lt;/li&gt;
&lt;li&gt;Ada parameter spesifik (&lt;code&gt;find_similar&lt;/code&gt;, &lt;code&gt;exact_match&lt;/code&gt;) dengan perilaku yang terdefinisi&lt;/li&gt;
&lt;li&gt;Bukti ada di file-file spesifik yang bisa diverifikasi&lt;/li&gt;
&lt;li&gt;Pernyataan ini diverifikasi pada tanggal tertentu&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;anatomi-registry-ground-truth&quot;&gt;Anatomi Registry Ground Truth&lt;/h2&gt;
&lt;p&gt;Ground truth hidup dalam registry YAML di bawah &lt;code&gt;ai_assets/reference/ground_truths.yaml&lt;/code&gt;. Setiap package atau domain bisa punya registry-nya sendiri. Strukturnya adalah:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva Ground Truths&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Foundational constraints and principles that guide Maguyva.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  owner&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;maguyva&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    include_statuses&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    show_deprecated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    groups&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Product Principles&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;brand&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Architecture &amp;amp; Boundaries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architecture&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;boundaries&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;cqrs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;statements&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-001&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva is read-only with respect to user repositories...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Registry mencakup metadata tentang koleksinya sendiri, konfigurasi render untuk generasi dokumentasi, dan pernyataan-pernyataannya sendiri. Setiap pernyataan mengikuti skema ketat yang divalidasi oleh model Pydantic:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; GroundTruthStatement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    status: GTStatus  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# current, tentative, deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    source: GTSource &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # claude-code, orkestra, discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    scope: GTScope  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# platform, package, domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    statement: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    rationale: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    evidence: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    last_verified: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tags: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    agent_guidance: AgentGuidance &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;bagaimana-agen-mengakses-ground-truth&quot;&gt;Bagaimana Agen Mengakses Ground Truth&lt;/h2&gt;
&lt;p&gt;Ground truth diekspos lewat beberapa jalur:&lt;/p&gt;
&lt;h3 id=&quot;1-dokumentasi-ter-render&quot;&gt;1. Dokumentasi Ter-render&lt;/h3&gt;
&lt;p&gt;Perintah &lt;code&gt;orkestra sync&lt;/code&gt; mengubah registry YAML menjadi markdown yang bisa dibaca:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini menghasilkan file &lt;code&gt;GROUND_TRUTHS.md&lt;/code&gt; yang disertakan dalam konteks agen. Output ter-render mengelompokkan pernyataan berdasarkan status dan kategori:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;## Current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Product Principles&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Maguyva is read-only with respect to user repositories... (GT-MAG-001)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Design tool responses for AI agents first... (GT-MAG-009)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Architecture &amp;amp; Boundaries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Pipeline and Maguyva boundaries are intentional... (GT-MAG-006)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-pencarian-cli&quot;&gt;2. Pencarian CLI&lt;/h3&gt;
&lt;p&gt;Agen dengan akses shell bisa mencari ground truth secara terprogram:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;embedding&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --tag&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; security&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --status&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; current&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Fungsi pencarian menilai kecocokan di berbagai field dengan relevansi berbobot:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; truth_fields&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(gt: GroundTruthStatement) -&amp;gt; list[FieldSpec]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.id]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;statement&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.statement]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.rationale] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; gt.rationale &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;tags&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.tags &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;evidence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.evidence &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;3-komposisi-konteks&quot;&gt;3. Komposisi Konteks&lt;/h3&gt;
&lt;p&gt;Ketika agen di-render dari definisi YAML, konteks mereka bisa merujuk ke registry ground truth:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context_composition&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  domain_knowledge&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/maguyva/ai_assets/reference/ground_truths.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini memastikan ground truth yang relevan dimuat sebelum agen mulai bekerja.&lt;/p&gt;
&lt;h2 id=&quot;kategori-ground-truth&quot;&gt;Kategori Ground Truth&lt;/h2&gt;
&lt;p&gt;Melihat ke seluruh registry kami, ground truth mengelompok ke dalam beberapa pola:&lt;/p&gt;
&lt;h3 id=&quot;prinsip-produk&quot;&gt;Prinsip Produk&lt;/h3&gt;
&lt;p&gt;Batasan tentang apa yang menjadi dan bukan produk ini:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Maguyva bersifat read-only terhadap repositori pengguna; satu-satunya aset yang tidak bisa dibangun ulang adalah cache embedding berbayar.” (GT-MAG-001)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;batas-arsitektur&quot;&gt;Batas Arsitektur&lt;/h3&gt;
&lt;p&gt;Di mana tanggung jawab berada dan mengapa:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Batas antara pipeline dan Maguyva itu disengaja: pipeline dapat digunakan ulang, Maguyva memegang logika spesifik-kode, dan CQRS memisahkan operasi penulisan oleh stage pipeline dari operasi pembacaan oleh server.” (GT-MAG-006)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;aturan-anti-halusinasi&quot;&gt;Aturan Anti-Halusinasi&lt;/h3&gt;
&lt;p&gt;Mandat eksplisit yang menjaga kontrak tool tetap deterministik, bukan hasil inferensi:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Pencocokan simbol fuzzy bersifat opt-in lewat &lt;code&gt;find_similar=true&lt;/code&gt;. Perilaku default mengembalikan hasil kosong untuk simbol yang tidak ada; &lt;code&gt;exact_match=true&lt;/code&gt; menegakkan pencocokan ketat dan menonaktifkan semua fallback fuzzy.” (GT-MAG-015)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;quality-gate&quot;&gt;Quality Gate&lt;/h3&gt;
&lt;p&gt;Standar yang harus dipertahankan:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Perubahan pada infrastruktur bersama (post_filters.py, ekstraktor relasi, handler bersama) HARUS divalidasi terhadap SEMUA bahasa yang didukung lewat generasi full manifest sebelum commit. Validasi satu bahasa saja tidak cukup untuk kode bersama.” (GT-MAG-036)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;pola-kode&quot;&gt;Pola Kode&lt;/h3&gt;
&lt;p&gt;Persyaratan implementasi:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Gunakan &lt;code&gt;asyncio.to_thread()&lt;/code&gt; untuk pekerjaan CPU-bound dalam konteks async; pola &lt;code&gt;loop.run_in_executor()&lt;/code&gt; yang sudah usang tidak boleh dipakai di kode baru.” (GT-MAG-018)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;siklus-hidup-sebuah-ground-truth&quot;&gt;Siklus Hidup Sebuah Ground Truth&lt;/h2&gt;
&lt;p&gt;Ground truth tidak statis. Mereka berevolusi lewat siklus hidup yang terdefinisi:&lt;/p&gt;
&lt;h3 id=&quot;tentative&quot;&gt;Tentative&lt;/h3&gt;
&lt;p&gt;Sebuah truth yang diusulkan dan sedang dievaluasi. Pernyataannya tercatat tetapi bisa berubah:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-044&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    get_file with include_metadata=false may still return metadata in the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    response because middleware may re-inject it for AI agent disambiguation.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;current&quot;&gt;Current&lt;/h3&gt;
&lt;p&gt;Sebuah truth terverifikasi yang harus dihormati agen. Buktinya sudah divalidasi:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-017&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/supabase.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;deprecated&quot;&gt;Deprecated&lt;/h3&gt;
&lt;p&gt;Sebuah truth yang tidak berlaku lagi. Disimpan untuk referensi historis dengan penunjuk ke apa yang menggantikannya:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-099&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  superseded_by&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  notes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Replaced when we moved to explicit matching behavior&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;mengapa-bukan-sekadar-dokumentasi&quot;&gt;Mengapa Bukan Sekadar Dokumentasi?&lt;/h2&gt;
&lt;p&gt;Dokumentasi punya tujuan yang berbeda. Ia menjelaskan. Ia mengajarkan. Ia boleh samar, boleh memakai kata seperti “umumnya” atau “biasanya.”&lt;/p&gt;
&lt;p&gt;Ground truth tidak boleh samar. Mereka adalah pernyataan tegas. Mereka berlaku atau tidak berlaku, titik.&lt;/p&gt;
&lt;p&gt;Pertimbangkan perbedaannya:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dokumentasi:&lt;/strong&gt; “API umumnya mengembalikan hasil kosong ketika sebuah simbol tidak ditemukan, meski pencocokan fuzzy bisa diaktifkan pada beberapa konfigurasi.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ground Truth:&lt;/strong&gt; “Perilaku default mengembalikan hasil kosong untuk simbol yang tidak ada; &lt;code&gt;exact_match=true&lt;/code&gt; menegakkan pencocokan ketat dan menonaktifkan semua fallback fuzzy.”&lt;/p&gt;
&lt;p&gt;Yang pertama membantu manusia mempelajari sistem. Yang kedua bisa langsung ditindaklanjuti oleh agen yang mengambil keputusan.&lt;/p&gt;
&lt;h2 id=&quot;panduan-agen-do-dan-avoid&quot;&gt;Panduan Agen: Do dan Avoid&lt;/h2&gt;
&lt;p&gt;Beberapa ground truth menyertakan panduan agen yang eksplisit:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  agent_guidance&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    do&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Fix extraction bugs in YAML config, handlers, or tree-sitter queries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add test cases at the layer where the fix lives&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    avoid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Adding validator filters to mask production bugs&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Creating test-only workarounds for extraction issues&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini menghilangkan ambiguitas. Seorang agen yang membaca ini tahu bukan hanya apa yang benar, tetapi juga tindakan apa yang tersirat dari kebenaran itu.&lt;/p&gt;
&lt;h2 id=&quot;verifikasi-dan-pemeliharaan&quot;&gt;Verifikasi dan Pemeliharaan&lt;/h2&gt;
&lt;p&gt;Ground truth membutuhkan pemeliharaan. Kami melacak:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;last_verified&lt;/strong&gt;: Kapan seseorang mengonfirmasi pernyataan ini masih berlaku&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;evidence&lt;/strong&gt;: File-file yang membuktikan pernyataan tersebut (bisa diperiksa keberadaannya)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;source&lt;/strong&gt;: Dari mana truth ini berasal (inspeksi CLI, tinjauan arsitektur, pembelajaran pasca-insiden)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sebuah ground truth dengan tanggal verifikasi yang basi atau tautan bukti yang rusak adalah sinyal untuk diselidiki. Entah truth-nya masih valid dan butuh verifikasi ulang, atau realitasnya sudah berubah dan truth-nya perlu diperbarui.&lt;/p&gt;
&lt;h2 id=&quot;contoh-nyata-dari-produksi&quot;&gt;Contoh Nyata dari Produksi&lt;/h2&gt;
&lt;h3 id=&quot;batas-keamanan&quot;&gt;Batas Keamanan&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-014&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Maguyva queries are search patterns, not executable code.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    SQL injection prevention is handled by PostgREST parameterization;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    application-layer SQL keyword blocking must never be added.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Blocking SQL keywords breaks legitimate code search. Users search FOR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    code containing patterns like &apos;DROP TABLE&apos;, they don&apos;t execute them.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ground truth ini mencegah sekelompok “perbaikan keamanan” yang keliru arah yang justru akan merusak produk.&lt;/p&gt;
&lt;h3 id=&quot;akurasi-saat-ekstraksi&quot;&gt;Akurasi Saat Ekstraksi&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (YAML config, handlers, queries), never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Validator filters only run during tests. They can hide extractor bugs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    while production responses remain wrong.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini lahir dari pengalaman yang menyakitkan. Agen pernah menambal language pack yang gagal dengan menambahkan filter yang hanya berlaku di validator, yang membuat test harness terlihat lebih hijau, sementara Maguyva extractor yang sesungguhnya di produksi tetap menghasilkan edge yang salah. Aturan ini memaksa perbaikan kembali ke jalur sungguhan: config YAML, query, atau handler.&lt;/p&gt;
&lt;h3 id=&quot;filtering-multi-tier&quot;&gt;Filtering Multi-Tier&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-023&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Language engine uses three-tier filtering: external_method_patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (builtins/stdlib), allowlists (legitimate idioms), and expected_call_targets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (validation-time deduplication). Each tier serves a distinct purpose.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Conflating filter purposes leads to either over-filtering (missing real&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    relationships) or under-filtering (noise).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ini mencegah agen menambahkan filter di tempat yang salah, sebuah kesalahan umum yang menyebabkan regresi akurasi.&lt;/p&gt;
&lt;h2 id=&quot;integrasi-dengan-sistem-orkestrasi&quot;&gt;Integrasi dengan Sistem Orkestrasi&lt;/h2&gt;
&lt;p&gt;Ground truth adalah satu lapisan dari sistem konteks yang lebih luas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Keputusan Arsitektur (ADR)&lt;/strong&gt; - Mencatat mengapa kami memilih pendekatan A daripada B&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ground Truths&lt;/strong&gt; - Menyatakan apa yang secara definitif benar saat ini&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domain Patterns&lt;/strong&gt; - Menjelaskan bagaimana melakukan sesuatu dengan benar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anti-Patterns&lt;/strong&gt; - Menjelaskan apa yang harus dihindari dan mengapa&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Seorang agen yang bekerja dalam sistem punya akses ke keempatnya. Ground truth menyediakan jangkar faktual, sementara decision menjelaskan sejarah, pattern memandu implementasi, dan anti-pattern memperingatkan jebakan.&lt;/p&gt;
&lt;h2 id=&quot;mengukur-dampak&quot;&gt;Mengukur Dampak&lt;/h2&gt;
&lt;p&gt;Sejak memperkenalkan ground truth, kami telah mengamati:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lebih sedikit siklus “perbaiki perbaikan yang berhalusinasi”&lt;/li&gt;
&lt;li&gt;Pengambilan keputusan agen yang lebih percaya diri ketika fakta sudah jelas&lt;/li&gt;
&lt;li&gt;Tinjauan PR yang lebih baik karena ekspektasinya eksplisit&lt;/li&gt;
&lt;li&gt;Waktu onboarding yang lebih singkat untuk agen baru (dan manusia baru)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Investasi dalam memelihara ground truth terbayar lewat debugging yang berkurang dan batas sistem yang lebih jelas.&lt;/p&gt;
&lt;h2 id=&quot;memulai&quot;&gt;Memulai&lt;/h2&gt;
&lt;p&gt;Untuk menambahkan sebuah ground truth ke sistem Anda:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Buat sebuah &lt;code&gt;ground_truths.yaml&lt;/code&gt; di direktori &lt;code&gt;ai_assets/reference/&lt;/code&gt; milik package Anda&lt;/li&gt;
&lt;li&gt;Definisikan metadata dan konfigurasi render&lt;/li&gt;
&lt;li&gt;Tambahkan pernyataan yang mengikuti skema&lt;/li&gt;
&lt;li&gt;Jalankan &lt;code&gt;uv run orkestra sync&lt;/code&gt; untuk menghasilkan dokumentasi&lt;/li&gt;
&lt;li&gt;Sertakan registry-nya dalam komposisi konteks agen&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Mulailah dari fakta-fakta yang paling sering menimbulkan kebingungan atau batasan yang paling sering dilanggar. Itulah ground truth Anda yang paling bernilai.&lt;/p&gt;
&lt;h2 id=&quot;kesimpulan&quot;&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Agen AI akan berhalusinasi. Itu sudah sifat dasarnya. Tetapi kita bisa menciptakan lingkungan tempat halusinasi itu dibatasi, tempat fakta-fakta tertentu tidak bisa dinegosiasikan, tempat agen bisa memeriksa asumsi mereka terhadap realitas yang terverifikasi.&lt;/p&gt;
&lt;p&gt;Ground truth bukan solusi yang lengkap. Mereka butuh pemeliharaan. Mereka bisa menjadi basi. Mereka menambah overhead pada proses pengembangan.&lt;/p&gt;
&lt;p&gt;Tetapi mereka menyediakan sesuatu yang berharga: sebuah kosakata fakta bersama yang bisa dipercaya baik oleh manusia maupun agen. Di dunia tempat agen semakin banyak berpartisipasi dalam pengembangan perangkat lunak, fondasi bersama itu menjadi esensial.&lt;/p&gt;
&lt;p&gt;Alternatifnya adalah siklus tanpa akhir dari agen yang membuat kesalahan dengan percaya diri dan manusia yang mengoreksinya. Ground truth memutus siklus itu dengan membuat koreksi-koreksi itu eksplisit dan bertahan lama.&lt;/p&gt;
&lt;p&gt;Agen Anda berhak tahu apa yang benar. Beri tahu mereka.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Grounding</category></item><item><title>Orkestra: Mengorkestrasi Agen AI dalam Skala Besar</title><link>https://maguyva.ai/id/blog/orkestra-agent-orchestration</link><guid isPermaLink="true">https://maguyva.ai/id/blog/orkestra-agent-orchestration</guid><description>Satu orchestrator merutekan pekerjaan ke agen AI spesialis, masing-masing dengan skill dan memori yang berbeda. Bagaimana Orkestra mengoordinasikan 46 agen dan 466 skill di produksi.</description><pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Angka dalam tulisan ini mencerminkan sistem pada saat publikasi (Januari 2026). Lihat &lt;a href=&quot;https://maguyva.ai/id/team&quot;&gt;halaman tim&lt;/a&gt; kami untuk angka terkini.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ketika kami mulai membangun dengan Claude Code, kami menemui sebuah masalah yang akhirnya dihadapi setiap tim yang menggunakan asisten coding AI: satu agen tidak bisa melakukan segalanya dengan baik.&lt;/p&gt;
&lt;p&gt;Anda bisa mem-prompt sebuah agen menjadi spesialis database. Atau auditor keamanan. Atau engineer frontend. Tetapi begitu Anda memintanya menjadi ketiganya sekaligus, kualitasnya menurun. Konteksnya terdilusi. Instruksinya saling bertentangan. Agennya menjadi generalis yang biasa-biasa saja di segalanya.&lt;/p&gt;
&lt;p&gt;Jadi kami membangun Orkestra.&lt;/p&gt;
&lt;h2 id=&quot;apa-itu-orkestra&quot;&gt;Apa itu Orkestra?&lt;/h2&gt;
&lt;p&gt;Orkestra adalah sistem orkestrasi agen untuk Claude Code dan tool coding AI serupa. Ia mengoordinasikan banyak agen terspesialisasi, masing-masing dengan keahlian yang berbeda, di bawah satu orchestrator yang merutekan pekerjaan ke spesialis yang tepat.&lt;/p&gt;
&lt;p&gt;Bayangkan ini seperti agensi staffing untuk agen AI. Orchestrator menerima sebuah task, mengidentifikasi spesialis mana yang seharusnya menanganinya, dan mendelegasikannya dengan konteks yang tepat. Ketika pekerjaannya selesai, hasilnya mengalir kembali ke orchestrator untuk disintesis.&lt;/p&gt;
&lt;p&gt;Angka-angkanya bercerita banyak:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Komponen&lt;/th&gt;
&lt;th&gt;Jumlah&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agen spesialis&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill yang dapat digunakan ulang&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arketipe identitas&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mindset&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gaya komunikasi&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain pengetahuan&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;sistem-karakter-dd-untuk-agen&quot;&gt;Sistem Karakter: D&amp;amp;D untuk Agen&lt;/h2&gt;
&lt;p&gt;Wawasan inti di balik Orkestra adalah bahwa perilaku agen muncul dari tiga primitif yang bisa digabungkan:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identity&lt;/strong&gt; mendefinisikan &lt;em&gt;apa&lt;/em&gt; agen ini. Seorang architect mendesain struktur sistem. Seorang debugger menelusuri kegagalan hingga akar penyebabnya. Seorang guardian menegakkan kepatuhan dan batas keamanan. Kami punya 27 arketipe identitas yang bisa dicampur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mindset&lt;/strong&gt; mendefinisikan &lt;em&gt;bagaimana&lt;/em&gt; agen berpikir. Sebuah mindset analitis menambatkan pernyataan pada bukti dan mengukur ketidakpastian. Sebuah mindset skeptis mempertanyakan asumsi dan mencari bukti yang membantah asumsi tersebut. Sebuah mindset eksploratif merangkul ambiguitas dan mencoba banyak pendekatan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Style&lt;/strong&gt; mendefinisikan &lt;em&gt;bagaimana&lt;/em&gt; agen berkomunikasi. Gaya teknis menyertakan nilai persis dan merujuk file spesifik. Gaya ringkas memangkas basa-basi dan langsung ke jawaban. Gaya diplomatis menyeimbangkan kejujuran dengan kehalusan.&lt;/p&gt;
&lt;p&gt;Sebuah agen menggabungkan primitif-primitif ini:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# architecture-advisor.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;identity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;knowledge-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;strategist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;mindset&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;analytical&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;concise&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Komposisi ini menciptakan sebuah agen yang mendesain sistem (architect), menghubungkan pengetahuan lintas domain (knowledge-architect), menetapkan arah strategis (strategist), berpikir dalam bukti dan data (analytical), dan berkomunikasi tanpa basa-basi (concise).&lt;/p&gt;
&lt;p&gt;Kekuatannya ada pada ledakan kombinatorial. 27 identity dikali 11 mindset dikali 10 style menghasilkan hampir 3.000 kepribadian agen yang mungkin. Tetapi Anda hanya mendefinisikan kombinasi yang penting untuk pekerjaan Anda.&lt;/p&gt;
&lt;h2 id=&quot;skill-modul-kapabilitas-yang-dapat-digunakan-ulang&quot;&gt;Skill: Modul Kapabilitas yang Dapat Digunakan Ulang&lt;/h2&gt;
&lt;p&gt;Skill adalah pengetahuan dan alur kerja yang bisa dipanggil oleh agen. Mereka mengikuti sistem bertingkat berdasarkan cakupan:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Nama&lt;/th&gt;
&lt;th&gt;Cakupan&lt;/th&gt;
&lt;th&gt;Contoh&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;K0&lt;/td&gt;
&lt;td&gt;Foundations&lt;/td&gt;
&lt;td&gt;Metodologi universal&lt;/td&gt;
&lt;td&gt;Disiplin test-first, penyelesaian berbasis bukti&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K1&lt;/td&gt;
&lt;td&gt;Identities&lt;/td&gt;
&lt;td&gt;Alur kerja berbasis peran&lt;/td&gt;
&lt;td&gt;Standar interface CLI, playbook performa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K2&lt;/td&gt;
&lt;td&gt;Domains&lt;/td&gt;
&lt;td&gt;Pengetahuan spesifik domain&lt;/td&gt;
&lt;td&gt;Pola migrasi database, validasi autentikasi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K3&lt;/td&gt;
&lt;td&gt;Stacks&lt;/td&gt;
&lt;td&gt;Spesifik teknologi&lt;/td&gt;
&lt;td&gt;Deployment Cloudflare, operasi Supabase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K4&lt;/td&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;Hanya basis kode ini&lt;/td&gt;
&lt;td&gt;Alur kerja dan konvensi khusus proyek&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Skill dimuat secara lazy. Sebuah agen melihat nama dan deskripsi skill saat startup, tetapi konten skill lengkap baru dimuat saat dipicu. Ini menjaga konteks tetap ramping sembari membuat ratusan skill tetap bisa ditemukan.&lt;/p&gt;
&lt;p&gt;Setiap skill mencakup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kondisi trigger yang jelas (“Gunakan saat memigrasikan skema database”)&lt;/li&gt;
&lt;li&gt;Panduan langkah demi langkah&lt;/li&gt;
&lt;li&gt;Tool yang diizinkan untuk alur kerja tersebut&lt;/li&gt;
&lt;li&gt;Kriteria sukses dan jalur pemulihan kegagalan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;466 skill dalam registry kami mencakup segalanya, dari isolasi git worktree hingga alur kerja riset web hingga validasi kesehatan deployment.&lt;/p&gt;
&lt;h2 id=&quot;mengapa-orkestrasi-itu-penting&quot;&gt;Mengapa Orkestrasi Itu Penting&lt;/h2&gt;
&lt;p&gt;Arsitektur agen tunggal cepat menabrak tembok:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dilusi konteks.&lt;/strong&gt; Jendela konteks 200 ribu token terdengar besar sampai Anda memuat skema database, dokumentasi API, fixture test, dan pengetahuan domain. Spesialis bisa bekerja dengan konteks yang ditargetkan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Konflik instruksi.&lt;/strong&gt; Meminta sebuah agen “teliti tapi cepat” dan “verifikasi segalanya tapi jangan over-engineer” menciptakan ketegangan. Spesialis menyelesaikan ini dengan memiliki cakupan yang jelas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kedalaman keahlian.&lt;/strong&gt; Sebuah agen generalis tahu sedikit tentang segalanya. Sebuah agen spesialis, yang digabungkan dengan identity dan skill yang tepat, memahami domainnya secara mendalam.&lt;/p&gt;
&lt;p&gt;Orkestra mengimplementasikan orkestrasi flat: satu orchestrator mengoordinasikan banyak spesialis. Spesialis tidak bisa menciptakan sub-spesialis. Ini mencegah ledakan kompleksitas sembari memungkinkan pekerjaan paralel.&lt;/p&gt;
&lt;p&gt;Orchestrator punya akses ke 2,2 juta token kapasitas efektif: jendelanya sendiri 200 ribu ditambah 10 subagen konkuren dengan 200 ribu masing-masing. Pekerjaan yang akan menghabiskan kapasitas konteks satu agen berjalan dengan nyaman di seluruh armada.&lt;/p&gt;
&lt;h2 id=&quot;pipeline-rendering&quot;&gt;Pipeline Rendering&lt;/h2&gt;
&lt;p&gt;Definisi agen hidup dalam YAML. Claude Code membaca Markdown. Orkestra menjembatani celah ini dengan pipeline rendering yang deterministik:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;YAML Registries → Jinja Templates → .claude/agents/*.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Operator mengedit sumber YAML. Jalankan &lt;code&gt;orkestra sync&lt;/code&gt;. Markdown ter-render muncul di &lt;code&gt;.claude/agents/&lt;/code&gt;. Claude Code mengambil perubahannya.&lt;/p&gt;
&lt;p&gt;Pemisahan ini melayani audiens yang berbeda:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sumber YAML&lt;/strong&gt; mencakup metadata lifecycle, tag, aturan validasi, dan catatan deprecation untuk tooling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markdown ter-render&lt;/strong&gt; hanya mencakup apa yang dibutuhkan model: deskripsi, tool, skill, dan panduan perilaku&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pipeline-nya menggabungkan identity, mindset, style, dan skill menjadi satu prompt sistem yang koheren. Sebuah agen architect-analytical-concise mendapat prompt sistem yang sangat berbeda dari agen debugger-skeptical-technical, bahkan jika mereka berbagi beberapa skill dasar yang sama.&lt;/p&gt;
&lt;h2 id=&quot;pengetahuan-domain-pola-empat-file&quot;&gt;Pengetahuan Domain: Pola Empat File&lt;/h2&gt;
&lt;p&gt;Setiap domain pengetahuan mengikuti struktur yang konsisten:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domain-name/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  decisions.md      # Key choices, rationale, consequences&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  patterns.md       # Step-by-step guidance and examples&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  anti-patterns.md  # Failure modes and remediation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  evolution.md      # Dated log of changes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Struktur ini melayani pemuatan konteks agen. Sebuah agen yang bekerja pada autentikasi memuat &lt;code&gt;authentication/patterns.md&lt;/code&gt; untuk panduan dan &lt;code&gt;authentication/anti-patterns.md&lt;/code&gt; untuk menghindari jebakan yang sudah diketahui. Panjang file disesuaikan agar konteks dapat dimuat secara efisien: cukup fokus untuk berguna, cukup komprehensif untuk otoritatif.&lt;/p&gt;
&lt;p&gt;Kami memelihara 21 domain tingkat-atas termasuk analitik, autentikasi, data science, infrastruktur, machine learning, performa, keamanan, dan lainnya. Setiap domain bisa punya sub-domain untuk granularitas yang lebih halus.&lt;/p&gt;
&lt;h2 id=&quot;values-sistem-operasi&quot;&gt;Values: Sistem Operasi&lt;/h2&gt;
&lt;p&gt;Semua agen berbagi lapisan values dasar yang mendefinisikan bagaimana mereka beroperasi:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kesederhanaan lebih dulu.&lt;/strong&gt; Gunakan solusi paling sederhana yang berhasil. Tambahkan kompleksitas hanya jika ada alasan yang jelas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Perbaiki akar masalah.&lt;/strong&gt; Jangan sekadar mengakali kegagalan tanpa memperbaiki penyebabnya. Jika sebuah pipeline gagal, debug pipeline-nya. Jika sebuah test gagal, perbaiki kodenya atau test-nya.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Evidence-based.&lt;/strong&gt; Berilah label pada klaim sebagai “terverifikasi” (dengan benchmark) atau “estimasi” (dengan asumsi). Pola terdeteksi tidak sama dengan masalah terkonfirmasi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context economics.&lt;/strong&gt; Tool MCP menghabiskan 0,1% konteks. Pembacaan file menghabiskan 2% masing-masing. Terapkan keahlian domain sebelum menjelajahi kode.&lt;/p&gt;
&lt;p&gt;Values ini merambat ke setiap spesialis lewat pipeline rendering. Sebuah agen tidak bisa melewatinya lewat komposisi.&lt;/p&gt;
&lt;h2 id=&quot;cli-bidang-kendali&quot;&gt;CLI: Bidang Kendali&lt;/h2&gt;
&lt;p&gt;Orkestra dilengkapi CLI untuk mengelola ekosistem agen:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Discovery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; database-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Validation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Rendering&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;authentication&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CLI ini adalah sumber kebenaran untuk agen apa yang ada, skill apa yang mereka miliki, dan apakah sistemnya sehat. Ia menjalankan validasi sebelum sync untuk menangkap masalah lebih awal.&lt;/p&gt;
&lt;h2 id=&quot;pertimbangan-open-source&quot;&gt;Pertimbangan Open Source&lt;/h2&gt;
&lt;p&gt;Kami membangun Orkestra untuk memecahkan masalah kami sendiri: mengoordinasikan agen AI dalam skala besar untuk sebuah basis kode yang kompleks. Pola-pola yang kami temukan tidak spesifik untuk domain kami.&lt;/p&gt;
&lt;p&gt;Sistem komposisi karakter (identity + mindset + style) berlaku untuk tim mana pun yang mendefinisikan kepribadian agen.&lt;/p&gt;
&lt;p&gt;Sistem tier skill (K0-K4) menyediakan model mental untuk mengorganisasi kapabilitas yang bisa digunakan ulang berdasarkan cakupan.&lt;/p&gt;
&lt;p&gt;Pola pipeline rendering (sumber YAML + template + artefak hasil generate) memisahkan kebutuhan tooling dari kebutuhan model.&lt;/p&gt;
&lt;p&gt;Model orkestrasi flat (satu koordinator, banyak spesialis) menghindari kompleksitas sembari memungkinkan paralelisme.&lt;/p&gt;
&lt;p&gt;Apakah Orkestra akan menjadi open source bergantung pada apakah pola-pola ini bernilai bagi orang lain yang membangun dengan Claude Code. Jika Anda menabrak tembok yang kami jelaskan, arsitektur ini mungkin bisa membantu.&lt;/p&gt;
&lt;h2 id=&quot;apa-yang-kami-pelajari&quot;&gt;Apa yang Kami Pelajari&lt;/h2&gt;
&lt;p&gt;Membangun Orkestra mengajarkan kami bahwa orkestrasi bukan soal membuat agen lebih pintar. Ini soal membuat mereka lebih fokus.&lt;/p&gt;
&lt;p&gt;Satu agen dengan instruksi sempurna tetap kehabisan konteks. Satu agen dengan semua skill tetap kebingungan soal mana yang harus diterapkan. Satu agen yang mencoba menjadi segalanya menghasilkan hasil yang biasa-biasa saja di mana-mana.&lt;/p&gt;
&lt;p&gt;Empat puluh spesialis, masing-masing unggul di domainnya, dikoordinasikan oleh sebuah orchestrator yang tahu kapan harus mendelegasikan: begitulah cara kami mengirimkan produk.&lt;/p&gt;
&lt;p&gt;Angka-angkanya kurang penting dibandingkan arsitekturnya. Anda mungkin butuh lima agen atau lima puluh. Prinsipnya tetap sama: komposisi mengalahkan kapabilitas, spesialisasi mengalahkan generalisasi, koordinasi mengalahkan kepahlawanan individual.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Orkestra menggerakkan ekosistem agen di balik Maguyva, platform kecerdasan kode kami. Ingin tahu lebih lanjut? Hubungi tim kami.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Open Source</category></item></channel></rss>