Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

OMNI

Agent AI Anda membayar untuk membaca keluaran yang sama berulang kali. OMNI menghentikan itu.

OMNI adalah satu program kecil yang duduk di antara terminal Anda dan agent Anda. Jalannya lokal, tidak perlu API key, dan setelah terpasang Anda tidak pernah mengetik namanya lagi.

brew install fajarhide/tap/omni && omni init

Di dalam Claude Code cukup dua baris, sisanya diurus agent:

/plugin marketplace add fajarhide/omni
/plugin install omni@omni

Apa yang dibelinya, terukur

berkas yang dibaca agent dua kali97,2% dari bacaan kedua
git log -1594% lebih kecil, semua commit tetap ada
cargo test, 490 lulus dan 10 gagal92,9% lebih kecil, kegagalannya tetap ada
keluaran build dan test di seluruh korpus78,0%
definisi perkakas di setiap request4.940 byte lebih ringan

Setiap angka itu bisa Anda putar ulang di riwayat Anda sendiri. Itulah inti dari sisa halaman ini.

Masalahnya, dalam satu layar

Agent Anda menjalankan test. Empat ratus baris kembali, yang penting satu.

$ cargo test
    Compiling omni v0.7.5
     Running unittests src/lib.rs
running 412 tests
test pipeline::scorer::tests::scores_errors_critical ... ok
... 409 baris "ok" lagi ...
test result: FAILED. 411 passed; 1 failed

Yang dibaca agent Anda adalah ini:

cargo test: 411 passed, 1 failed
  FAILED ledger::tests::renders_identical_bytes_for_identical_state
  assertion `left == right` failed at src/ledger/mod.rs:601
[OMNI: 406 lines omitted, omni retrieve 0000000000000000 for full output]

Kegagalannya selamat. 406 baris ok tidak. Dan handle di baris terakhir itu mengembalikan semuanya, persis byte demi byte, kalau suatu saat memang diperlukan.

Bagian yang tidak dikerjakan orang lain

Menyaring keluaran yang tidak dibaca siapa pun adalah bagian yang mudah, dan beberapa perkakas sudah melakukannya. Bagian berikut lebih sulit, dan dari sanalah sebagian besar penghematan OMNI datang.

Agent Anda membaca sebuah berkas. Tiga giliran kemudian ia membaca berkas yang sama lagi, karena tidak ada yang mengingat bacaan pertama. Anda membayar penuh dua-duanya.

OMNI ingat. Bacaan kedua kembali sebagai satu baris:

[OMNI: 178 lines already shown, omni retrieve 0000000000000000]

Berkas 7,6 KB yang dibaca dua kali berharga 7,6 KB lalu 214 byte. Itu 97,2% lebih murah untuk bacaan kedua. Tidak ada yang dihapus: baris-baris itu sudah ada di konteks agent Anda sejak bacaan pertama, jadi mengirimnya lagi tidak membeli apa pun. Handle-nya disediakan kalau baris-baris itu sampai tergeser keluar.

Ini namanya ledger, dan pada riwayat perintah sungguhan ia bekerja lebih banyak daripada semua penyaring digabung.

Buktikan di mesin Anda sendiri

Kebanyakan alat di ranah ini meminta Anda mempercayai angka dari laptop orang lain. Jalankan ini saja:

omni stats                     # apa yang OMNI lakukan di riwayat Anda, dalam byte terhitung
omni retrieve <handle>         # handle mana pun dari penanda mana pun, dicetak utuh

Setiap angka di situs ini berasal dari korpus yang bisa Anda bangun ulang. Benchmark memuat metodenya dan perintah persisnya untuk tiap baris, termasuk setiap adu langsung yang pernah kami jalankan melawan alat sebanding terdekat.

Yang Anda dapat

Sesi lebih panjangKonteks yang tidak habis untuk basa-basi berarti lebih banyak giliran sebelum mentok, dan lebih sedikit pemadatan yang memutus alur kerja Anda.
Tagihan lebih kecil14,9% lebih sedikit byte pada 6.656 perintah nyata. Pada pembacaan berkas 25,0%. Pada git 22,1%. Pada keluaran build dan test 78,0%.
Tidak ada yang hilangSemua yang dibuang diarsipkan secara lokal. omni retrieve <handle> mencetaknya kembali.
Tidak ada yang dikarangKalau OMNI tidak paham sebuah keluaran, keluaran itu dikembalikan apa adanya, bukan ditebak.
Ingatan antar sesiTutup editor, kembali besok, pindah dari Claude Code ke Codex: konteks proyeknya masih ada.
Tidak ada yang perlu diubahTanpa proxy, tanpa API key, tanpa perintah yang harus diawali apa pun. Pasang, lalu pakai terminal Anda seperti biasa.

Di mana ia benar-benar membantu

Di mana OMNI membantu membahas enam situasi lengkap dengan angkanya, termasuk dua situasi ketika OMNI menyingkir dan kenapa itu keputusan yang benar.

Mulai dari mana

Cuma ingin ia jalan. Pasang makan waktu sekitar lima menit. Setelah itu baca Membaca penanda, satu-satunya halaman yang sepadan dengan waktu Anda, karena penanda adalah cara OMNI memberi tahu apa yang sudah ia lakukan.

Ingin paham dulu. Apa itu OMNI, lalu Ledger.

Ingin ikut mengerjakannya. Architecture dan The pipeline, stage by stage adalah petanya. Keduanya berbahasa Inggris.

Tiga hal yang tidak akan ia lakukan

Tidak mengirim apa pun ke mana pun. Setiap tahap berjalan di mesin Anda dan arsipnya sebuah berkas SQLite di direktori home Anda.

Tidak berdiri di antara Anda dan model Anda. Tidak ada proxy dan tidak ada API key yang diserahkan ke proses lokal. Itu diputuskan untuk tidak dilakukan, dan alasannya ditulis.

Tidak menebak diam-diam. Tahap yang gagal memahami masukannya mengembalikan masukan itu tanpa diubah. Data terstruktur seperti JSON dan YAML sama sekali tidak disentuh. Apa pun yang dibuang meninggalkan penanda. Ketiga aturan itu mengalahkan kompresi, dalam urutan itu, setiap kali bertabrakan.

Apa yang sebenarnya dikatakan angka-angkanya

OMNI itu selektif, dan dari situlah daya ungkitnya datang. Ia mengincar kelas yang mendominasi konteks sebuah agent, yaitu file yang sama dibaca berulang kali. File yang dibaca agent Anda dua kali kembali 97,2% lebih kecil pada bacaan keduanya, dan yang satu itu sifat mekanismenya: ia bereproduksi di mesin mana pun, kapan pun diminta.

Sepanjang satu korpus penuh, angkanya jadi sifat korpusnya. Pada korpus 9.478 perintah yang dibekukan sebagai 0b63218ef78a1edb, ledger memangkas 1,5% dari pembacaan file, karena pembacaan file di sana rata-rata 2,1 KB. Satu minggu sebelumnya yang pembacaan filenya rata-rata 12,4 KB memberi dua puluh kali lebih banyak, dengan kode yang sama, dan itulah yang membuat angka byte jadi sifat minggunya, bukan sifat OMNI.

Porsi pengulangan tersedia yang benar-benar diambil ledger adalah 10,7% secara agregat di korpus ini. Angka padanannya untuk minggu yang lebih awal itu diukur sebelum #760, ketika benchmark belum bisa melihat guard milik ledger sendiri, jadi keduanya tidak sebanding dan halaman ini berhenti berpura-pura sebanding.

File yang berubah di antara dua bacaan tetap dilipat di sekitar perubahannya. Tiap lipatan mempertahankan jumlah baris yang digantikannya, jadi baris yang tidak berpindah tetap ada di nomor yang diberikan editor Anda.

Korpusnya beku di disk dan hash-nya dikirim di docs/benchmarks/, jadi tidak seperti setiap angka yang kami terbitkan sebelumnya, yang ini bisa diperiksa terhadap byte yang sama di rilis berikutnya. Benchmarks memuat tiap run beserta korpusnya, dan seberapa berharga angka mana pun bagi Anda bergantung pada seberapa banyak minggu Anda sendiri mengulang dirinya.

Ketika tidak ada yang aman untuk diambil, ia tidak mengambil apa pun. git status dua baris tidak punya basa-basi untuk dibuang dan tidak punya pengulangan untuk dilipat, dan payload JSON yang akan diurai langkah berikutnya sama sekali tidak disentuh, jadi OMNI mengembalikannya langsung alih-alih mengarang penghematan untuk dilaporkan.

Angka 14,9% di tabel atas sengaja dari korpus yang berbeda: harness yang sama pada satu minggu kerja biasa, dengan setiap pengembalian tadi ikut dihitung bersama kemenangannya. Itu rata-rata atas campuran tersebut, bukan janji untuk campuran Anda. Baris per kelas itulah yang memprediksi beban kerja Anda sendiri, dan di korpus beku capture rate-nya berjalan dari 6,8% pada infra sampai 12,4% pada ember campuran, jadi cari kelas yang benar-benar Anda jalankan. Itu rata-rata nyata atas campuran perintah yang nyata, bukan kasus terbaik yang dipetik dari hari yang bagus.

Keempat babak sekarang jalan, dan di korpus ini OMNI bukan babak teratas. Alat yang mengirimkan dedup lintas giliran yang sama mengambil 5,8% dari byte ini, sementara ledger kami mengambil 3,0%, di atas penyaring yang sama dan blok yang sama, jadi selisih itu murni mesin dedupnya. Angka kami sendiri terbaca 4,9% sampai #760, ketika benchmark berhenti mengukur ledger yang tidak pernah diberi tahu perintah mana yang menghasilkan payload-nya. Penyaring kami paling lemah dari keempatnya dengan 1,4%, dan itulah sebabnya ledger kami sendiri justru mencetak angka lebih tinggi ketika ditumpuk di atas penyaring pesaing ketimbang di atas milik kami. Tabelnya dihasilkan oleh run yang sama dengan setiap angka lain di sini, dan ada di halaman Benchmarks. Benchmarks memuat metodenya dan perintah untuk mereproduksi setiap baris di riwayat Anda sendiri.

Kalau Anda ingin angka yang menggambarkan mesin Anda, bukan mesin orang lain, jalankan omni stats setelah beberapa hari.

Bertanya di mana

Discord untuk pertanyaan, terutama untuk kasus yang paling dipedulikan proyek ini: OMNI menyatakan hasil yang tidak didukung masukannya. Issue tracker juga bisa. Laporan yang memuat keluaran mentah dan keluaran hasil olahan berdampingan akan diperbaiki lewat jalur mana pun.

Apa itu OMNI

Program kecil di mesin Anda yang menyunting apa yang dibaca agent AI Anda, sebelum agent itu membacanya.

Itu saja idenya. Sisa halaman ini soal aturan yang ia patuhi sambil melakukan itu, dan aturannya lebih menarik daripada penyuntingannya.

Masalah yang jadi alasannya ada

Agent yang bekerja di terminal menghabiskan sebagian besar konteksnya untuk keluaran yang tidak seorang pun memilih untuk mengirimnya:

  • satu kali test adalah 400 baris ok dan satu baris yang penting
  • satu kali build adalah log kompilasi yang membungkus vonis satu kata
  • sebuah berkas dibaca, lalu dibaca lagi tiga giliran kemudian, karena tidak ada yang mengingat bacaan pertama

Semua itu tidak gratis. Ia memenuhi jendela konteks, yang membuat sesi Anda selesai lebih cepat, dan Anda membayarnya lagi setiap kali percakapan dipadatkan.

Solusi yang kelihatan jelas semuanya lebih buruk daripada masalahnya:

SolusinyaKenapa gagal
Potong keluaran yang panjangYang terpotong bagian akhir, dan vonis justru tinggal di akhir
Minta model meringkasSatu panggilan inferensi per perintah, dan peringkas bisa salah
Minta agent lebih hati-hatiBerhasil sampai agent-nya sibuk, yaitu selalu

OMNI adalah opsi keempat: program yang tahu keluaran cargo test itu bentuknya seperti apa, ingat apa yang sudah pernah ditunjukkan ke agent Anda, dan tidak pernah menebak saat ia ragu.

Di mana ia duduk

Setiap host agent yang serius bisa menjalankan sebuah program ketika sebuah tool selesai, lalu memakai apa yang program itu kembalikan. Claude Code menyebutnya hook PostToolUse, host lain punya nama sendiri untuk ide yang sama. OMNI memasang dirinya di sana, dan di slot pasangannya sebelum tool berjalan, yang ia pakai hanya untuk menyerahkan perintah yang cocok ke dirinya sendiri. Perintahnya tetap berjalan tanpa perubahan; shell tidak pernah tahu.

Dua akibat mengikuti dari posisi itu, dan keduanya alasan bentuk ini dipilih ketimbang sebuah proxy.

Ia melihat keluaran, bukan permintaan. API key Anda tidak pernah lewat, tidak ada permintaan yang tertunda menunggunya, dan kalau ia mati host tetap jalan dengan byte mentah.

Ia tidak bisa membantu di tempat host-nya tidak mengizinkan. Host yang tidak menerapkan hasil tulis ulang sebuah hook pada tool shell bawaannya akan menunjukkan byte yang sama ke agent, sebagus apa pun penyaringnya. Itu bukan bug yang harus diperbaiki di OMNI, itu sifat host tersebut, dan Agent yang didukung menyebut host mana ada di tingkat mana.

Apa yang ia lakukan pada sebuah perintah

Empat hal, berurutan, dan masing-masing boleh memutuskan untuk tidak berbuat apa-apa:

  1. Menolak. JSON, YAML, base64, terraform plan, apa pun yang akan diurai oleh langkah berikutnya: dikembalikan tanpa disentuh. Lihat Yang tidak pernah disentuh.
  2. Menyaring. Distiller yang memahami tool ini menyimpan vonis dan kegagalannya lalu membuang basa-basinya. Ada 12 distiller, mencakup build, test, git dan version control lain, pencarian, cloud, basis data, perkakas JavaScript dan TypeScript, pembacaan berkas, pemindai keamanan dan operasi sistem, ditambah satu cadangan generik.
  3. Melipat baris berulang. Deretan panjang baris yang nyaris identik menjadi satu baris yang menyebut ada berapa banyak.
  4. Melipat yang sudah dilihat. Baris yang sudah pernah ditunjukkan ke agent menjadi sebuah handle, bukan pengulangan. Ini ledger, dan pada korpus nyata ia bekerja lebih banyak daripada para penyaring.

Setelah itu masukan mentahnya masuk ke arsip, dan agent menerima hasilnya ditambah penanda yang menyebut apa yang terjadi.

Kalau Anda lebih suka melihat ini sebagai situasi ketimbang sebagai tahapan, Di mana OMNI membantu memuat enam situasi lengkap dengan penghematan terukurnya.

Apa yang ia lakukan pada dirinya sendiri

Semua di atas soal keluaran. Ada hal kedua yang disunting OMNI, dan lama sekali ia tidak menyuntingnya sama sekali: bobotnya sendiri.

OMNI mendaftar sebagai server MCP, dan definisi perkakas berada di awal setiap request di setiap sesi tempat ia terpasang. Byte di awal tidak dibayar sekali. Ia dibawa sejak request pertama dan dibaca ulang di setiap request sesudahnya, sedangkan byte yang dibuang dari keluaran tool disisipkan di tengah dan dibaca lebih sedikit kali.

Diukur di 229 sesi, enam belas dari dua puluh lima perkakas yang diiklankan OMNI tidak pernah sekali pun dipanggil, dan keenam belasnya berbobot 4.940 byte. Distiller-nya membuang median 4.942 byte dari keluaran tool pada sesi yang benar-benar padat. Dua byte bedanya, dan sisi awal itulah yang dibawa sejak permulaan.

Jadi sekarang OMNI hanya memberi tahu host perkakas yang memang dipakai tier-nya. Alat yang menghabiskan konteks untuk menjelaskan dirinya sebanyak yang ia hemat bukanlah alat efisiensi token, dan menyadarinya menuntut pengukurannya sendiri diarahkan ke dirinya.

Apa yang bukan dia

Bukan kompresor. Ia tidak berusaha membuat keluaran menjadi kecil. Ia berusaha menghasilkan keluaran yang bisa ditindaklanjuti agent, di samping angka yang bisa diperiksa manusia. Keduanya lebih sering tarik-menarik daripada yang Anda kira, dan ketika bertabrakan, angkanya yang mengalah.

Bukan peringkas. Tidak ada model yang jalan di dalam pipeline. Anggaran waktu sebuah hook adalah milidetik satu digit dan tidak ada yang memuat panggilan inferensi yang muat di situ.

Bukan produk ingatan, walau ia punya satu. omni remember, omni goal dan serah terima sesi ada karena agent yang sama yang membaca terlalu banyak juga melupakan segalanya antar sesi. Ingatan antar sesi membahas paruh itu.

Aturan yang paling ia seriusi

Tahap yang tidak mengenali apa pun mengembalikan apa yang ia terima.

Kegagalan yang terus-menerus harus diperbaiki proyek ini bukan byte yang hilang. Melainkan ringkasan yang percaya diri atas masukan yang tidak pernah diurai: find yang melaporkan hemat 99% dengan membuang jalur berkas yang justru jawabannya, cargo test yang bilang 1 passed untuk sebuah run yang oleh cargo sendiri disebut 490 passed, dev server yang dilaporkan sebagai test suite yang lulus.

Semuanya terkompresi dengan indah. Semuanya salah. Maka trait yang diimplementasikan setiap distiller mengembalikan Option<String>, dan distiller yang gagal mengurai mengembalikan None lalu pemanggilnya menyerahkan byte mentah. Itu ditegakkan oleh tipe data, bukan oleh ingatan penulisnya.

Di mana OMNI membantu

Sebelas situasi, masing-masing dengan angka terukurnya. Dua di antaranya kasus ketika OMNI menyingkir, dan keduanya sengaja dimuat di sini: perkakas yang mengaku membantu di mana-mana adalah perkakas yang tidak bisa ditebak siapa pun.

Setiap angka berasal dari pemutaran ulang 6.656 perintah nyata yang sama seperti yang diuraikan di Benchmarks, jadi semuanya rata-rata atas campuran perintah yang nyata, bukan hari bagus yang dipetik dari sebuah log.

1. Agent membaca ulang berkas yang sama terus-menerus

Situasinya. Anda minta refactor. Agent membaca auth.rs, melipir memeriksa pemanggilnya, kembali lalu membaca auth.rs lagi. Enam giliran kemudian ia membacanya untuk ketiga kali. Setiap bacaan ditagih penuh, dan tidak satu pun pengulangan itu memberi tahu sesuatu yang belum diberi tahu bacaan pertama.

Yang OMNI lakukan. Bacaan kedua kembali sebagai penanda dengan handle. Baris-barisnya sudah ada di konteks agent; mengirimnya lagi berarti membayar dua kali untuk satu fakta.

Angkanya: 25,0% lebih hemat pada pembacaan berkas di seluruh korpus, dan sampai 97,2% pada satu berkas yang dibaca berulang.

Ini kemenangan tunggal terbesar di seluruh produk dan ia tidak terlihat selagi bekerja, dan itulah alasan penandanya ada.

2. Test gagal dan Anda tidak bisa melihat kenapa

Situasinya. 412 test, satu gagal, dan kegagalannya ada di baris 388 keluaran. Agent Anda membaca semua 412 baris untuk menemukannya, dan kalau run-nya cukup panjang host memotong ekornya, yang justru tempat vonis itu tinggal.

Yang OMNI lakukan. Distiller test menyimpan hitungannya dan setiap kegagalan lengkap dengan assertion serta posisi berkasnya, lalu membuang baris yang lulus.

Angkanya: 78,0% lebih hemat pada keluaran build dan test.

Ini kasus ketika yang bekerja adalah penyaringan, bukan ledger. Keluaran test sangat berulang di dalam satu run, jadi ada basa-basi sungguhan untuk dibuang bahkan sebelum ada yang terlihat dua kali.

3. git log dan git diff memenuhi layar

Situasinya. Satu commit dengan Author, Date dan badan yang dilipat itu lima baris. Lima belas commit jadi satu setengah layar, padahal agent Anda cuma mau subjeknya.

Yang OMNI lakukan. Setiap commit disimpan, sebagai satu baris hash subject. Tidak ada yang diringkas hilang dan tidak ada commit yang lenyap; yang pergi amplop di sekeliling masing-masing.

Angkanya: 22,1% pada git dan gh di korpus, dan 94% khusus pada git log -15 yang bertele-tele.

4. Sesi Anda mati di batas konteks, berulang kali

Situasinya. Sesi debugging panjang, dan sekitar dua jam berjalan percakapan dipadatkan. Agent kehilangan alur, membaca ulang berkas yang sudah ia pahami, dan Anda menjelaskan ulang tugasnya.

Yang OMNI lakukan. Dua hal. Konteks yang terpakai per perintah lebih sedikit berarti temboknya datang belakangan. Dan ingatan antar sesi selamat dari pemadatan: pengetahuan proyek, pola galat yang berulang, dan tujuan yang Anda pancang dengan omni goal ada di SQLite, bukan di jendela konteks.

Di mana batasnya, dan kenapa itu disengaja. OMNI tidak bisa mencegah pemadatan. Ketika pemadatan terjadi, ia sengaja melepas apa yang sudah ia tunjukkan, karena sebuah handle hanya jujur selama agent masih memegang baris-baris itu, dan pemadatan persis saat hal itu berhenti benar. Aturan itulah yang membuat setiap penanda tetap benar di seberang pemadatan.

5. Anda pindah agent, atau pindah mesin, di tengah proyek

Situasinya. Anda mulai di Claude Code, pindah ke Codex CLI untuk satu perubahan, dan keduanya mulai dari nol.

Yang OMNI lakukan. Penyimpanannya satu berkas SQLite yang dikunci pada jalur proyek, bukan pada agent. Agent kedua yang bekerja di direktori yang sama membaca pengetahuan proyek yang sama, dan cakupan proyek pada ledger akan memberinya handle untuk keluaran yang sudah dihasilkan sesi sebelumnya. Penanda itu berbunyi not shown here, bukan already shown, karena agent ini memang belum pernah melihat byte tersebut dan kalimatnya harus benar.

Angkanya: 3,7% byte setelah penyaringan berulang lintas sesi, berbanding 19,1% di dalam satu sesi. Jadi ini bonus nyata di atas penghematan dalam sesi, bukan acara utamanya, dan ia datang tanpa ada yang perlu dikonfigurasi.

Yang belum dikunci ke agent. Dua agent dalam satu repositori berbagi riwayat itu sebagai efek samping, bukan karena dirancang begitu. Penandanya dulu berbunyi from an earlier session, yang terbaca sebagai sesi Anda padahal itu sesi orang lain, dan lebih buruk lagi sebagai klaim bahwa isinya sudah sampai; sekarang ia berbunyi not shown here. Ledger berterus terang soal apa yang hari ini dikunci pada agent dan apa yang tidak.

6. kubectl get pods -o json | jq

Situasinya. Anda menyalurkan keluaran terstruktur ke sesuatu yang menguraikan keluaran itu.

Yang OMNI lakukan: tidak ada. JSON, YAML, NDJSON, CSV dan TSV lewat persis byte demi byte. Kompresor yang mengubah format muatan yang sebentar lagi diurai perintah berikutnya tidak menghemat apa pun untuk Anda, ia merusak pipeline Anda.

Angkanya: 0%, memang dirancang begitu. Lihat Yang tidak pernah disentuh.

7. Anda membaca satu berkas besar dalam beberapa bagian

Situasinya. Sebuah berkas lebih panjang dari satu bacaan, jadi agent mengambilnya di sebuah offset, lalu berikutnya, lalu berikutnya lagi. Tiap jendela mengulang bagian kepala berkasnya, karena memang itu isi sebuah jendela pada offset.

Yang OMNI lakukan. Ia melipat kepala yang berulang itu dan menggeser penomoran barisnya agar cocok, sehingga baris yang masih Anda lihat bernomor sesuai posisi sebenarnya di berkas. Paruh kedua itu penting: lipatan yang menomori ulang isi di bawahnya lebih buruk daripada tidak melipat sama sekali, dan itu sebabnya kasus ini ditolak selama satu rilis sampai penomorannya bisa dijaga benar.

Angkanya: 0,0% sebelumnya, 4,7% sesudahnya, diukur pada empat jendela yang tumpang tindih dari satu berkas markdown. Berkas source tidak terpengaruh, karena distiller readfile menjangkaunya lebih dulu di 46,6% bagaimanapun.

8. Anda mengirim subagent

Situasinya. Agent Anda memunculkan pembantu untuk pekerjaan yang cakupannya sempit. Pembantu itu memulai dengan konteks kosong lalu membaca berkas yang sudah dibaca induknya.

Yang OMNI lakukan. Ia memberi pembantu itu pandangannya sendiri. Claude Code menyerahkan session id milik induk kepada subagent, jadi ledger yang dikunci pada sesi saja akan menjawab pembantu itu dengan riwayat induknya dan memberitahunya 200 baris sudah ditampilkan, padahal konteks itu tidak pernah menerimanya. Sekarang pembantu itu melihat isinya, atau penanda yang menyatakan terang bahwa tidak ada yang ditampilkan di sini.

Angkanya: tidak ada rasio, dan justru itu intinya. Ini kasus kebenaran. Penghematannya tidak pernah jadi masalah; klaimnya yang bermasalah.

9. Anda mengikuti penanda untuk mengambil isinya kembali

Situasinya. Sebuah penanda berbunyi omni retrieve <handle>. Anda menjalankannya, atau agent Anda yang menjalankannya, lalu membaca hasilnya.

Yang OMNI lakukan. Ia menyerahkan byte itu utuh. Sebelumnya, byte itu kembali melewati pipeline, menghasilkan hash yang sama, dan terlipat menjadi penanda yang tadi menyuruh Anda ke sana, sehingga mengikuti instruksinya justru mengembalikan instruksinya.

Angkanya: satu kali kirim, bukan pengecualian. Pengulangan berikutnya melipat lagi, dan itu penting karena 15,05% arsip di instalasi nyata pernah ditarik setidaknya sekali, sehingga mengecualikan semuanya berarti menukar klaim palsu dengan penghematan yang hilang.

10. Konteks Anda dipadatkan di tengah sesi

Situasinya. Sesinya panjang, host memadatkan percakapannya, dan separuh dari yang dipegang agent Anda hilang.

Yang OMNI lakukan. Ia melupakan. Seluruh lisensi ledger adalah bahwa agent masih memegang byte yang digantikan sebuah handle, dan compaction adalah titik di mana itu berhenti benar, jadi himpunan yang sudah ditampilkan ikut pergi. Tidak ada apa pun setelah compaction yang mengklaim Anda sudah melihat sesuatu yang tidak lagi Anda pegang.

Angkanya: tidak ada rasio. Ia mengorbankan penghematan dengan sengaja, dan itulah pertukaran yang menjaga penandanya tetap benar.

11. Setiap request membawa daftar perkakas yang tidak pernah Anda panggil

Situasinya. OMNI mendaftar sebagai server MCP, dan definisi perkakas berada di awal setiap request di setiap sesi. Berbeda dengan keluaran, byte di awal tidak dibayar sekali: ia dibaca ulang di setiap request sesudahnya.

Yang OMNI lakukan. Ia hanya mengiklankan perkakas yang memang dipakai tier host Anda, sembilan alih-alih dua puluh lima, dengan OMNI_MCP_TOOLS=all untuk mengembalikan sisanya dan omni doctor yang menyebut set mana yang sedang berlaku.

Angkanya: 4.940 byte hilang dari setiap request. Diukur di 229 sesi: enam belas dari dua puluh lima perkakas itu tidak pernah sekali pun dipanggil.

Dan satu lagi yang juga tidak terjadi apa-apa

kubectl get pods dengan 35 pod mengembalikan tabel yang setiap barisnya sebuah fakta. Tidak ada basa-basi untuk dibuang dan belum ada yang pernah dilihat, jadi OMNI mengembalikan seluruh 35 baris dan melaporkan penghematan 0%.

Sebagian besar panggilan di korpus ini bentuknya begini, dan itulah bentuk alatnya. OMNI bukan barang yang mengecilkan segalanya sedikit. Ia menyingkir sampai ada yang layak diambil, lalu mengambil banyak sekali: di korpus ini 78,0% dari keluaran build dan test, dan 25,0% dari pembacaan file. Angka gabungan 14,9% menghitung setiap kali ia menyingkir bersama kemenangan-kemenangan itu, jadi baris per kelas itulah yang perlu dibaca untuk beban kerja Anda sendiri.

Totalnya jadi apa

Kelas perintahPanggilan di korpusHemat
build dan test6978,0%
pembacaan berkas69925,0%
git, gh66122,1%
pencarian (grep, rg, find)82813,3%
infra (kubectl, az, docker)2548,2%
selebihnya4.1456,9%
semuanya6.65614,9%

Jalankan omni stats setelah beberapa hari dan Anda mendapat tabel ini untuk riwayat Anda sendiri, satu-satunya versi yang menggambarkan pekerjaan Anda.

Bagaimana OMNI memutuskan apa yang dipotong

Pipeline-nya tetap dan setiap muatan melewati tahapan yang sama:

Read → Guard → Score → Distill → [Collapse] → Ledger → Route → Persist

Tidak satu pun boleh mengarang apa pun, dan masing-masing boleh menolak. Collapse ditulis dalam kurung karena ia cadangan, bukan langkah wajib: ia hanya berjalan kalau bentuk hasil sulingan gagal melewati ambang pengaman. The pipeline, stage by stage memuat diagram dan alasannya, dalam bahasa Inggris.

Guard

Gerbangnya. Ia menjawab satu pertanyaan: apakah muatan ini sesuatu yang akan diurai langkah berikutnya? Kalau ya, tidak ada tahap sesudahnya yang berjalan dan byte-nya kembali persis seperti saat datang. Yang tidak pernah disentuh adalah keseluruhan tahap ini dan ia pantas punya halaman sendiri, karena “OMNI tidak melakukan apa-apa” biasanya berarti tahap ini bekerja dengan benar, bukan gagal.

Score

Setiap baris mendapat tingkat relevansi. Penilainya fungsi murni dari teksnya, perintah yang menghasilkannya, dan riwayat sesi yang ada.

tingkatbobotapa yang mendarat di sini
Critical1,0galat, kegagalan, baris vonis, apa pun yang menyebut nama berkas dan nomor baris
Important0,7peringatan, hitungan, keadaan yang berubah
Noise0,1progres, waktu, hiasan, basa-basi yang berulang

Penentuan tingkat terjadi sebelum distiller mana pun melihat blok tersebut, dan itu penting saat Anda menelusuri kenapa sebuah distiller berperilaku aneh: bisa jadi tingkatnya yang sudah menentukan hasilnya, jadi periksa tingkat tiap segmen sebelum menulis ulang distiller-nya.

Distill

Sekarang penyaring khusus per tool berjalan, dipilih dengan mencocokkan perintahnya. Distiller cargo test menyimpan hitungannya dan setiap kegagalan beserta assertion-nya. Distiller git menyimpan jalur berkas yang berubah. Distiller pencarian menyimpan baris yang cocok beserta nama berkasnya.

Semuanya mengimplementasikan trait yang sama, dan tanda tangannya adalah rancangannya:

fn distill(&self, segments: &[OutputSegment], input: &str,
           session: Option<&SessionState>) -> Option<String>;

Option, bukan String. Distiller yang tidak memahami masukannya mengembalikan None dan pemanggilnya menyerahkan byte mentah. Itu bedanya antara “saya membaca ini dan inilah yang penting” dengan “saya tidak mengenali apa pun dan inilah ringkasan yang percaya diri tentangnya”, dan itu ditegakkan compiler untuk semua 12 distiller, bukan oleh masing-masing penulis yang ingat memeriksa.

Collapse

Deretan baris yang nyaris identik menjadi satu baris yang menyebut jumlahnya. Dua puluh baris Downloading foo v1.2.3 menjadi satu.

Dua hal soal tahap ini mengejutkan orang. Ia berjalan setelah distiller dan hanya kalau distiller-nya tidak layak dipakai: kedua hook menyuling byte mentah, bertanya ke beats_guardrail, dan baru meraih bentuk hasil collapse kalau itu gagal. Jadi distiller selalu membaca keluaran asli, tidak pernah penanda [N similar lines collapsed]. Lalu, mode collapse mana yang aktif dipilih berdasarkan kekhususan, sehingga perintah kubectl yang disalurkan ke grep bisa mengambil jalur infrastruktur alih-alih jalur log.

Ledger

Semua yang di atas menilai muatan ini berdiri sendiri. Ledger satu-satunya tahap yang menilainya terhadap apa yang sudah pernah ditunjukkan ke agent, mengganti deretan baris berulang dengan sebuah penanda dan sebuah handle. Ia sumber penghematan tunggal terbesar dan punya halaman sendiri: Ledger.

Persist

Masukan mentahnya diarsipkan, dikunci dengan SHA-256, dan penanda yang dilihat agent membawa handle ke arsip itu. Dibahas di Tidak ada yang dihapus.

Pengarsipan tetap terjadi walau proyeksinya tidak menghemat apa pun. Sebuah blok layak diingat karena ia mungkin terlihat lagi, bukan karena ia terkompresi hari ini.

Apa yang menentukan urutannya

Kebenaran mengalahkan kompresi di setiap tahap, dan urutan menangnya ditulis:

  1. Jangan pernah mengarang. Tahap yang tidak mengenali apa pun mengembalikan apa yang ia terima. Perintah yang gagal lewat apa adanya. Muatan terstruktur tidak pernah disentuh.
  2. Jangan pernah menghilangkan jawaban diam-diam. Apa pun yang dibuang meninggalkan penanda, dan kalau isinya memungkinkan, sebuah handle yang mengambilnya kembali.
  3. Baru kompres, sekeras yang diizinkan dua aturan pertama dan tidak lebih.

Alasan urutan itu ditulis eksplisit adalah karena proyek ini pernah melanggarnya. Sebuah tabel kubectl pernah keluar sebagai k8s: 2 pods karena tabel pod adalah pendaftaran yang setiap barisnya sebuah data. Ia melaporkan penghematan besar. Tidak ada basa-basi di masukannya untuk dibuang, jadi yang dihemat itu jawabannya.

Tidak ada yang dihapus

Setiap byte yang dibuang OMNI ditulis dulu ke arsip SQLite lokal, dikunci dengan SHA-256 miliknya. Agent menerima penanda yang membawa handle 16 karakter, dan handle itu mengembalikan aslinya persis byte demi byte.

[OMNI: 406 lines omitted, omni retrieve 0000000000000000 for full output]
omni retrieve <handle>

Itu jalan dari shell mana pun, di sesi mana pun, di host mana pun, dan ia tidak menjalankan ulang perintah Anda. Kalau MCP terpasang, agent bisa melakukannya sendiri lewat perkakas omni_retrieve tanpa bertanya ke Anda.

Kenapa aturan ini yang menanggung beban

Menyaring keluaran adalah taruhan bahwa bagian yang dibuang tidak penting. Arsipnya yang membuat taruhan itu aman untuk kalah. Ia mengubah kasus terburuk dari “jawabannya hilang” menjadi “jawabannya berharga satu kali pengambilan”, dan selisih itulah yang membuat sisa pipeline boleh agresif sama sekali.

Ia juga mengubah arti sebuah bug di sini. Distiller yang memotong terlalu banyak adalah pertukaran yang buruk. Handle yang tidak bisa dipanggil adalah janji yang diingkari, dan itu satu-satunya cacat yang tidak boleh dimiliki mekanisme ini.

Satu aturan yang dipaksakan arsip pada semua yang lain

Sebuah run diarsipkan sebelum penandanya ditulis, dan pengarsipan yang gagal berarti run itu tetap apa adanya.

Urutannya penting. Menulis penanda dulu lalu mengarsipkan belakangan akan menghasilkan, pada setiap kegagalan tulis, penanda yang menunjuk isi yang tidak pernah tersimpan: keluaran yang tampak bisa dipulihkan padahal tidak. Itu pernah terjadi, store_rewind mengembalikan kunci bahkan ketika penulisannya gagal, dan perbaikannya adalah membuat penanda bergantung pada arsip, bukan sebaliknya.

Jadi ketika Anda melihat sebuah handle, isi di baliknya ada. Itu bukan harapan, itu urutan dua pernyataan.

Berapa ongkosnya

Ruang disk, dan satu penulisan pada setiap penyulingan yang membuang sesuatu.

Arsipnya dibatasi, bukan tanpa batas: mengarsipkan setiap penyulingan yang kehilangan data terukur 83,1 MB selama 30 hari, dan membatasi blok yang diarsipkan di 64 KB menurunkannya ke 13,3 MB sambil tetap mencakup 3.604 dari 3.657 baris. Batas itu dipilih dari pengukuran tersebut, bukan dikira-kira.

Jejak yang dipakai untuk benchmark dipangkas terpisah, secara bawaan pada hari ketujuh. Pemangkasan itu alasan tidak ada angka yang diterbitkan di sini bisa diturunkan ulang setelah seminggu, dan alasan setiap angka di Benchmarks menyebut jendela waktu pengukurannya.

Di mana ia tinggal

~/.omni/omni.db, satu berkas SQLite. Ia tidak pernah meninggalkan mesin Anda.

omni stats            # apa saja yang sudah ia kerjakan
omni diff             # perintah terakhir, mentah dibanding hasil sulingan
omni retrieve <handle>

omni diff cara tercepat menumbuhkan kepercayaan pada hal ini: jalankan satu perintah yang berisik, lalu lihat persis apa yang diserahkan ke agent sebagai gantinya.

Ledger

Setiap distiller menjawab pertanyaan yang sama, satu perintah pada satu waktu: dengan keluaran ini, apa yang boleh dibuang.

Ledger menjawab pertanyaan lain: dengan semua yang sudah ditampilkan di sesi ini, bagian mana dari keluaran ini yang cuma mengulang.

Keduanya tegak lurus, dan pada korpus nyata yang kedua lebih bernilai. Diputar ulang atas 6.656 jejak, 22,9% byte mentah adalah baris yang sudah pernah ditunjukkan ke agent, dan 22,4% masih begitu setelah semua distiller berjalan. Penyaringan nyaris tidak menggores pengulangan, karena pengulangan bukan kebisingan. Setiap barisnya sinyal yang sangat baik. Ia cuma sinyal yang sudah pernah dikirim.

Apa yang ia lakukan

Deretan baris berurutan yang semuanya pernah dikeluarkan sebelumnya menjadi satu penanda yang menyebut jumlahnya dan sebuah handle. Sisanya lewat persis byte demi byte.

[OMNI: 40 lines already shown, omni retrieve 0000000000000000]

Di sebuah Read, markernya diikuti satu untuk tiap baris yang digantikannya:

[OMNI: 40 lines already shown, omni retrieve 0000000000000000]
⋮
⋮      (38 baris lagi)
⋮

Itu terlihat seperti pengisi dan sebenarnya bekerja. Editor menomori apa pun yang diterimanya, dihitung dari baris tempat pembacaan dimulai, jadi tampilan dengan baris lebih sedikit daripada filenya menaruh tiap baris yang selamat di nomor yang bukan miliknya. Mempertahankan jumlah baris berarti yang selamat tetap di nomornya sendiri, dan itulah yang membuat sebuah lipatan boleh berada di tengah file. Tanpa itu lipatan harus berhenti di baris pertama yang selamat, dan di CHANGELOG.md repo ini angkanya 4,4% melawan 76,5% yang sebenarnya bisa didapat.

Ia menjangkau kelas yang tidak bisa dijangkau apa pun. Pembacaan berkas adalah kelas terbesar di korpus, dan penyaring menghemat 0,0% darinya, dan itu benar: Anda tidak bisa membuang baris dari berkas yang diminta agent tanpa menebak bagian mana yang ia maksud. Ledger mengambil 25,0% dari kelas yang sama tanpa menebak apa pun, karena baris-baris itu sudah pernah dikirim sekali.

Dua cakupan, dua klaim yang berbeda

Keduanya bukan pernyataan yang sama dan penandanya menyebut klaim mana yang sedang dibuat.

asalpenandaartinya
sesiN lines already shownagent masih memegang byte ini, jadi handle-nya gratis kecuali ia memilih membaca ulang
proyekN lines not shown hereini pergi ke sesi lain dari proyek ini dan agent ini belum pernah melihatnya

Perbedaan itu keseluruhan alasan cakupan proyek ada. Rancangan sebelumnya membatalkannya dengan alasan bahwa handle untuk isi sesi lain adalah kebohongan, yang benar soal kalimatnya dan salah soal obatnya: perbaikannya adalah berhenti bilang “already shown”, bukan berhenti mengingat.

Karena klaim proyek tidak gratis, ia memikul ambang yang lebih tinggi. Deretan yang berasal dari sesi harus menghemat 150 byte di atas penandanya; deretan yang berasal dari proyek harus menghemat tiga kali lipatnya, sebab agent tidak punya pilihan selain membayar satu pengambilan kalau ia butuh isinya.

Dan scope proyek hanya boleh melipat sebagian balasan. Lipatan sesi boleh mengambil seluruh balasan, sebab pembacanya memang sedang memegang byte itu. Lipatan proyek tidak boleh: pembacanya belum pernah melihatnya, jadi mengganti semuanya meninggalkan satu penanda, nol isi, dan tidak ada cara memeriksa satu satunya klaim yang ia terima. Perintah pertama sebuah subagent pernah kembali sebagai satu baris yang bilang 40 baris identik dengan sesi terdahulu, dan seorang peninjau yang didispatch ke sebuah pull request harus menyalurkan berkasnya lewat base64 untuk membaca kode yang ia diminta tinjau.

Syaratnya adalah apa yang ditinggalkan lipatan itu, bukan siapa yang membaca. “Apakah pembaca ini sudah pernah melihat sesuatu” terdengar seperti uji yang sama padahal bukan: setiap lipatan proyek seluruh keluaran yang tercatat di mesin ini dan menyebut sesi terjadi di sesi yang sudah memegang antara 261 sampai 1.369 baris miliknya sendiri. Pembaca yang pernah melihat sesuatu tidak mengatakan apa pun tentang apakah ia sudah melihat baris ini, dan justru itulah yang dijawab scope proyek. Menolak kelas ini memakan 10 lipatan dan 32.104 byte, 1,51% dari setiap byte yang pernah dilipat penyimpanan ini, berbanding 678.585 byte yang terus dihasilkan lengan parsial.

Dua lantai yang memutuskan tidak ada yang dilipat sama sekali

Kedua ambang di atas menanyakan apakah sebuah deretan lebih besar daripada penanda yang menggantikannya. Ada dua lantai yang diperiksa sebelum keduanya, dan berdua mereka menjelaskan sebagian besar kasus di mana keluaran kembali utuh dan terlihat seolah ledger-nya mati.

Keluaran di bawah 264 byte tidak pernah sampai ke ledger. Di bawah itu tidak ada deretan yang cukup panjang untuk pantas dapat handle, jadi tahap ini dilewati.

Lipatan yang menutupi seluruh keluaran butuh 1024 byte. Kedua ambang tadi mengandaikan agent masih memegang sisa keluaran di samping penandanya dan bisa memutuskan apakah handle itu layak dibelanjakan. Kalau lipatannya menutupi semuanya, tidak ada apa pun di sampingnya, jadi membutuhkan sepotong saja dari isinya berarti satu pengambilan yang agent tidak punya suara di dalamnya. Setiap lipatan seluruh-keluaran yang tercatat di mesin ini ada di bawah 1 KB, dan empat dari empat diambil kembali dalam sembilan detik, melawan angka pengambilan 0,85% atas seluruh 5.178 distilasi di penyimpanan yang sama. Semuanya menghemat 2.680 byte, lalu membelanjakan 319 byte penanda ditambah empat panggilan tool tambahan untuk menyerahkan 2.999 byte yang sama. Lantainya adalah puncak rentang yang terukur itu, bukan sebuah titik belok, sebab di atasnya tidak ada yang teramati ke arah mana pun. n=4, satu mesin.

Premis yang mendasari semua sisanya

Agent masih memegang byte ini.

Satu pernyataan itulah yang memberi izin mengganti empat puluh baris dengan sebuah handle. Setiap aturan di bawah adalah akibat dari premis itu atau pembelaan atas saat premis itu berhenti benar. Kalau Anda mendapati diri bertanya kenapa ledger melakukan sesuatu, tanyakan apa yang perlu terjadi supaya premisnya salah, dan jawabannya biasanya ada di situ.

Itu juga sebabnya ini persoalan pembatalan cache, bukan sistem ingatan. Ledger tidak menyimpan pengetahuan. Ia menyimpan tanda terima.

Tiga pembaca yang membuat premisnya gagal

Setiap aturan yang layak diketahui di sini adalah pembelaan atas momen premisnya berhenti benar. Ada tepat tiga pembaca yang membuatnya gagal, dan ledger menjawab masing-masing dengan cara berbeda.

Sebuah subagent. Claude Code menyerahkan session id milik induk kepada pembantunya, jadi ledger yang dikunci pada sesi saja akan menjawabnya dengan riwayat induk dan mengklaim 200 baris sudah ditampilkan kepada konteks yang tidak pernah menerimanya. Cakupannya adalah pembacanya, bukan sesinya, jadi pembantu itu mengumpulkan miliknya sendiri dan jatuh ke cakupan proyek untuk selebihnya, yang kata-katanya menyatakan terang bahwa tidak ada yang ditampilkan di sini.

Konteks yang dipadatkan. Host memberitahukannya sebelum itu terjadi, dan ledger melupakan himpunan yang sudah ditampilkan milik sesi itu pada saat itu juga. Ia mengorbankan penghematan dengan sengaja. Tidak ada apa pun setelah compaction yang mengklaim Anda sudah memegang sesuatu yang tidak lagi Anda pegang.

Pembaca yang mengikuti sebuah handle. Meminta byte kembali adalah bukti bahwa pembacanya tidak memilikinya, jadi pengiriman yang menjawab penarikan itu diserahkan utuh. Sebelumnya ia melewati pipeline, menghasilkan hash yang sama, dan kembali sebagai penanda yang tadi menyuruh pembacanya ke sana. Satu kali kirim, bukan pengecualian: pengulangan berikutnya melipat lagi.

Polanya lebih berharga daripada ketiga kasusnya. Ketika ledger mengejutkan Anda, tanyakan pembaca mana yang sedang memegang byte-nya, dan apakah ada sesuatu yang memberi tahu OMNI bahwa pembacanya sudah berganti.

Alurnya, satu perintah pada satu waktu

Muatan terstruktur tidak pernah sampai sejauh ini: pengendus format yang sama yang menjaga collapse juga menjaga tahap ini.

Dua detail mudah terlewat dan keduanya keseluruhan cerita kebenarannya.

Pengarsipan terjadi sebelum penandanya, jadi sebuah handle tidak pernah menyebut isi yang tidak tersimpan. Dan yang dicatat adalah apa yang dikirim, bukan apa yang datang: deretan yang berubah jadi penanda tidak pernah sampai ke agent, jadi mencatatnya akan membuat kemunculan berikutnya mengklaim already shown untuk byte yang tidak diterima siapa pun. Itu cacat sungguhan (#465) dan ia memotong dua arah, karena asal sesi ditagih sepertiga dari asal proyek, sehingga klaim yang salah tadi juga membuat ledger tiga kali lebih gampang melipat.

Bagaimana ia mengingat

Tiga kata kerja, dan masing-masing tabel yang berbeda atau pemicu yang berbeda.

Simpan

Dua tabel, disengaja.

memuatukuran
ledger_lines(scope, line_hash, ts, agent_id)16 byte hash per baris
rewind_storebyte asli dari deretan yang dilipat, dikunci dengan SHA-256 miliknyaisinya, sekali per blok berbeda

Mencatat setiap baris yang dikeluarkan itu murah karena barisnya sendiri tidak pernah disimpan, hanya hash-nya. Isinya baru masuk ke arsip ketika sebuah handle benar-benar diterbitkan.

Hash-nya diambil dari baris yang sudah dipangkas spasinya, jadi baris sama yang dicapai lewat sed -n dan lewat cat adalah satu baris, bukan dua.

Pencatatan tanpa syarat; pelipatan tidak. Sebuah blok layak diingat karena ia mungkin muncul lagi, bukan karena ia terkompresi hari ini. Jadi perintah yang keluarannya sepenuhnya baru tetap menulis baris-barisnya, dan membayar dirinya sendiri di kesempatan berikutnya.

Ambil kembali

omni retrieve <handle>

Pencarian persis pada alamat isi. Tidak ada himpunan kandidat, tidak ada pemeringkatan, tidak ada penggabungan hasil, dan tidak ada pencarian: satu handle menyebut satu blok byte. Handle-nya diturunkan dari isinya, jadi keluaran yang identik adalah satu baris tabel, berapa pun perintah yang menghasilkannya.

Tidak ada yang ditarik kembali secara otomatis. Penandanya sebuah penunjuk, dan agent yang memutuskan apakah isinya sepadan dengan satu pengambilan. Itu pertukaran yang jadi tumpuan seluruh rancangan ini: kasus terburuknya bukan “jawabannya hilang”, melainkan “jawabannya berharga satu kali bolak-balik”.

Kalau MCP terpasang, agent memanggil omni_retrieve sendiri. Kalau tidak, ia menjalankan perintah shell yang dicetak penandanya.

Lupa

Waktu, ditambah satu peristiwa.

Saat pemadatan, cakupan sesi dibuang seluruhnya. Pemadatan adalah momen di dalam sesi ketika agent berhenti memegang apa yang ditunjukkan kepadanya, sehingga setiap klaim yang bisa dibuat cakupan sesi menjadi salah sekaligus. Melupakan berongkos satu pengurangan yang terlewat. Tidak melupakan berarti memberi tahu agent bahwa ia punya isi yang tidak lagi ada di konteksnya, dan itulah cacatnya, bukan ongkosnya.

Pada hari ke-30, kedua cakupan dipangkas pada jendela yang sama. Cakupan sesi tidak bisa hidup lebih lama daripada sesinya, jadi jendela retensi biasa sudah membatasinya. Cakupan proyek yang bisa tumbuh tanpa batas, dan batas jujurnya adalah jendela yang sama: isi yang tidak dihasilkan siapa pun selama sebulan adalah isi yang berhenti dikeluarkan proyek ini, dan handle untuknya cuma membeli pengambilan sesuatu yang juga tidak akan dikenali agent.

Pengulangan menyegarkan cap waktunya alih-alih diabaikan, jadi keluaran yang masih diproduksi tidak menua keluar hanya karena kapan ia pertama terlihat.

Tidak ada penggusuran berdasarkan ukuran, dan itu disengaja. Menggusur berdasarkan ukuran membuang baris tertua dari proyek tersibuk lebih dulu, dan di situlah justru pengulangannya berada.

Apa yang dibagi dua agent dalam satu repo

Cakupan sesi milik satu agent, karena id sesi sebuah host milik satu host. Cakupan proyek dikunci pada direktori kerja dan tidak pada apa pun selain itu, jadi dua agent yang berjalan di repositori yang sama menulis ke satu riwayat dan membaca darinya.

Itu berbagi sebagai efek samping, bukan karena dirancang. Tidak ada bagian ledger yang tahu ia sedang bicara dengan agent yang mana, jadi penanda berasal proyek bisa menyerahkan ke agent B sebuah handle untuk baris yang cuma pernah ditunjukkan ke agent A. Ambang yang lebih tinggi berarti pertukarannya sudah dihargai sebagai satu pengambilan.

Dulu kalimatnya memperburuk hal itu. from an earlier session menyatakan asal baris, dan pembaca membacanya sebagai sesi Anda, padahal belum tentu, lalu sebagai klaim bahwa isinya sudah pernah diterima. Penanda run sekarang berbunyi not shown here dan menyatakan satu-satunya hal yang perlu ditindaklanjuti pembaca, yaitu bahwa byte itu tidak pernah sampai (#567).

Sejak #509 agent dicatat di setiap baris, dan belum ada yang dikunci padanya. Pengukuran yang memutuskan itu: mengunci cakupan pada (proyek, agent) akan mengakhiri kasus lintas agent sekaligus penggunaan ulang di dalamnya yang memang gratis, dan korpus mengatakan efeknya saat ini terpendam, bukan aktif. Kolom itu yang membuat pertanyaannya bisa diajukan.

Aturan yang ia warisi

Hanya menambah di belakang. Ia hanya memendekkan keluaran perintah yang sedang berjalan dan tidak pernah menulis ulang apa pun yang sudah dikirim. Itu yang menjaga prompt cache di hulu tetap utuh: cache bekerja pada awalan, jadi memendekkan bagian belakang tidak berongkos sementara pemadatan surut akan menghancurkannya.

Deterministik. Keadaan ledger yang sama menghasilkan keluaran yang identik byte demi byte. Handle-nya alamat isi dan tidak membawa cap waktu. Rancangan sebelumnya memakai {timestamp}_{hash} dan membuat 4 dari 73 masukan berulang mengeluarkan byte yang berbeda.

Tidak ada yang hilang. Sudah disebut di atas dan ditegakkan oleh urutan dua penulisan. Aturan umumnya dan ongkosnya ada di Tidak ada yang dihapus.

Kegagalan tidak pernah dilipat. Baris yang menyatakan kegagalan dikecualikan sesering apa pun ia sudah ditampilkan. “Anda sudah pernah melihat ini” masuk akal untuk baris informasi dan salah untuk kanal galat, tempat pengulangan justru sinyalnya: TypeError yang sama pada run ulang berarti bug-nya masih ada. Menghilangkannya mengirimkan konteks kode tanpa pernyataan apa yang salah, yang wajar dibaca agent sebagai kegagalan yang sudah diperbaiki. Menandai barisnya sebagai belum terlihat, alih-alih menyaringnya belakangan, juga memecah deretan di sekelilingnya, sehingga bingkai di kedua sisinya tetap terlipat.

Tidak dikenali berarti tidak disentuh. Muatan terstruktur sama sekali tidak pernah sampai ke ledger.

Berapa nilainya

Dari pemutaran ulang yang sama, ledger memberi tambahan 12,2 poin di atas penyaring OMNI sendiri dan 11,4 poin di atas milik pesaing, dan itu pernyataan paling jelas bahwa ia tegak lurus terhadap pola siapa yang berjalan:

bytehemat
omni, penyaring saja6.469.047 ke 6.292.8562,7%
rtk pipe6.469.047 ke 6.067.0126,2%
lean-ctx compress6.469.047 ke 6.073.7576,1%
omni, dengan ledger6.469.047 ke 5.506.62714,9%
rtk pipe + ledger omni6.469.047 ke 5.333.48317,6%

Baris terakhir disengaja. Pembaca yang mau angka sebesar mungkin akan menjalankan penyaring mereka dengan ledger kami, dan mengatakannya lebih murah daripada ketahuan tidak mengatakannya.

Yang tidak pernah disentuh

Sebelum apa pun berjalan, muatannya diklasifikasi dulu. Kalau ia tampak seperti sesuatu yang akan diurai langkah berikutnya, seluruh pipeline mundur dan byte-nya kembali persis seperti saat datang.

Empat jenis dikenali: JSON, YAML, CSV dan TSV. Mengenali salah satunya sudah menutup perkara.

Ini tahap yang orang kira kegagalan. kubectl get pods -o json yang kembali utuh bukan OMNI melewatkan kesempatan, itu OMNI menolak kesempatan.

Kenapa menolak adalah jawaban yang benar

Dokumen JSON yang disuling bukan dokumen JSON yang lebih kecil. Ia dokumen JSON yang rusak. jq dua langkah kemudian gagal, agent membaca kegagalan itu, dan ongkos bolak-balik tersebut lebih besar daripada apa pun yang bisa dihemat kompresinya.

Jadi gerbangnya sengaja dibuat berat sebelah. Masukan yang berkurung tapi tidak bisa diurai, JSON terpotong, JSON yang membawa komentar: semuanya diperlakukan sebagai terstruktur. Kompresi tidak bisa memperbaiki muatan yang cacat, tapi ia jelas bisa memperburuknya.

Cara ia memutuskan, dan di mana ia pernah salah

JSON: satu dokumen utuh yang berhasil diurai. Di atas ambang ukuran tertentu, penguraian serde_json penuh akan menjebol anggaran latensi, jadi bentuk kurungnya saja yang memutuskan. Teks bebas nyaris tidak pernah membawa "key":, dan itu sinyal murah untuk kasus yang meragukan.

YAML: baris berbentuk kunci, ditambah satu aturan yang ada gara-gara kegagalan nyata. Block scalar (config.hcl: |) menyerahkan sisa bloknya ke apa pun kebetulan isinya: HCL Vault, skrip shell, sertifikat PEM. Baris-baris itu tidak membawa key: dan tidak berbentuk YAML, jadi pengendus yang naif menyebut mereka prosa. Satu ConfigMap yang tertanam menenggelamkan seluruh manifes kubectl kustomize 608 baris dengan cara itu: pengendusnya bilang “bukan YAML”, gerbangnya mundur, dan manifesnya masuk ke jalur yang membuang data. Baris yang diawali indikator blok sekarang dilewati, bukan dinilai.

CSV dan TSV: jumlah pemisah yang konsisten sepanjang sejumlah minimum baris. Satu baris tidak membuktikan apa pun.

Mematikannya, dan kapan perlu

OMNI_PASSTHROUGH=1 <perintah Anda>

Melewati pipeline sepenuhnya. Pakai ketika Anda sedang menelusuri OMNI itu sendiri dan perlu melihat apa yang sebenarnya dicetak sebuah perintah, atau ketika membaca berkas yang byte persisnya penting.

Awalan itu bekerja di semua jalur, termasuk di dalam agent, tapi bukan karena alasan yang tampak. Sebuah hook adalah proses terpisah yang dijalankan host, jadi ia mewarisi lingkungan host dan tidak pernah melihat variabel yang Anda tulis di depan sebuah perintah. Yang ia lihat adalah string perintahnya, jadi OMNI membaca penugasan variabelnya di situ. Dua akibat yang layak diketahui: hanya penugasan di depan yang dihitung, posisi yang sama dengan yang akan dipakai shell, dan echo OMNI_PASSTHROUGH=1 menyebut namanya tanpa menyetel apa pun sehingga tetap disuling. Meng-export-nya untuk satu sesi penuh bekerja seperti biasa.

Ini variabel lingkungan paling berguna di sini, dan hal pertama yang harus diraih ketika Anda curiga OMNI mengubah sesuatu yang seharusnya tidak ia ubah. Kalau keluarannya identik dengan dan tanpa variabel itu, OMNI tidak terlibat.

Hal-hal yang mirip gerbang ini padahal bukan

Penghematan negatif pada keluaran kecil. Muatan pendek bisa kembali beberapa persen lebih besar, karena penandanya berongkos lebih mahal daripada yang dihemat kompresinya. Wajar, bukan cacat.

Perintah yang keluarannya utuh saja. Sebagian besar panggilan dikembalikan utuh, karena mengambil sesuatu akan tidak aman atau tidak sepadan dengan ongkos penandanya. Itu pipeline yang bekerja.

Aliran biner kubectl. SPDY merusak yang itu, ada atau tidak ada OMNI.

Kutip di shell. Pemisahan kata itu urusan shell Anda, bukan program ini.

Berapa ongkosnya

Bukan nol. Ini seluruh tagihannya.

Latensi

Median dari 12 run masing-masing, binary rilis, diukur ujung ke ujung lewat post-hook:

basis data barubasis data 205 MB
git status (496 B)21,1 ms60,7 ms
cargo test (16,5 KB)24,5 ms64,5 ms

Ukuran muatan hampir tidak berpengaruh. Ukuran basis data berpengaruh, dan itu angka yang perlu diawasi seiring arsip Anda tumbuh.

Penyulingannya sendiri berdurasi milidetik satu digit. Nyaris seluruh sisanya adalah penulisan arsip. Rilis-rilis sebelumnya terukur 82 ms dan 276 ms di mesin yang sama, dan bedanya tiga perbaikan, bukan perangkat keras yang lebih cepat: tokenizer yang dimuat per perintah untuk satu kolom laporan, 249 regex penyaring baris yang dikompilasi entah penyaringnya cocok atau tidak, dan kolam koneksi yang membuka empat handle SQLite dalam proses yang selesai setelah satu muatan.

Ukur latensi dengan cara mencabut, bukan dengan pewaktu di unit test. Sebuah microbenchmark di suite melaporkan 66 ms untuk pekerjaan yang oleh A/B pada binary rilis dihitung 34,3 ms. Hanya angka jenis kedua yang layak dikutip.

Memori

Datar. Pipeline-nya bekerja pada aliran, jadi log 20.000 baris tidak memakan memori residen lebih banyak daripada log pendek.

Disk

Satu berkas SQLite di ~/.omni/omni.db.

Isi yang diarsipkan dibatasi 64 KB per blok. Batas itu datang dari pengukuran: mengarsipkan setiap penyulingan yang kehilangan data berongkos 83,1 MB selama 30 hari, dan batas tersebut menurunkannya ke 13,3 MB sambil tetap mencakup 3.604 dari 3.657 baris.

Jejak benchmark dipangkas pada hari ketujuh (OMNI_TRACE_RETENTION_DAYS). Pemangkasan itu alasan tidak ada angka yang diterbitkan bisa diturunkan ulang seminggu setelah ia diukur.

Token

Bagian yang Anda cari, dan versi jujurnya punya dua paruh.

Yang ia hemat. Atas 6.656 perintah nyata pada 0.7.3: 14,9% lebih sedikit byte di seluruh campuran. Per kelas, sebarannya sangat lebar:

kelaspenyaringdengan ledger
build dan test76,9%78,0%
pembacaan berkas0,0%25,0%
git, gh4,4%22,1%
pencarian4,8%13,3%
infra4,4%8,2%
selebihnya0,6%6,9%

Yang ia biayakan. Setiap penanda adalah byte yang dibayar agent, dan pada keluaran pendek sebuah penanda bisa memakan lebih banyak daripada yang dihemat lipatannya. Karena itu sebuah lipatan harus melewati lantai dulu sebelum diizinkan, dan karena itu pula sebagian besar panggilan dikembalikan utuh. Latensi pipeline dibayar di setiap perintah, diambil atau tidak.

Ada juga ongkos yang tidak bisa dinyatakan hitungan byte mana pun: satu pengambilan. Ketika agent butuh isi di balik sebuah handle, ia membayar satu kali bolak-balik yang tidak perlu ia bayar seandainya byte-nya tiba langsung. Pelipatan bercakupan proyek memikul ambang keuntungan tiga kali lipat persis karena alasan itu.

Ongkos yang bukan tanggungan OMNI

Pada paket berlangganan tetap, kompresi sama sekali tidak mengurangi tagihan. Yang ia beli adalah umur sesi dan lebih sedikit run ulang. Pembacaan prompt cache ditagih sekitar sepersepuluh masukan baru, jadi byte yang dihemat sekali bukan uang yang dihemat per giliran.

Itu sebabnya ukuran utama proyek ini sendiri adalah tekanan jendela konteks untuk pekerjaan yang sama, dan persentase pengurangan adalah alat diagnosis, bukan judul. Lihat Where OMNI is going.

Kalau ia panik

Ia gagal terbuka. Keluaran mentahnya lewat dan agent Anda tidak pernah melihat galat. Setiap hook berjalan di dalam catch_unwind, dan basis data yang tidak mau dibuka berongkos konteks sesi, bukan seluruh pipeline.

Pasang

Ambil binary-nya

macOS dan Linux, lewat Homebrew:

brew install fajarhide/tap/omni

macOS, Linux, WSL:

curl -fsSL omni.weekndlabs.com/install | bash

Windows, PowerShell:

irm omni.weekndlabs.com/install.ps1 | iex

Dari sumber, yang butuh toolchain sesuai pin di rust-toolchain.toml:

git clone https://github.com/fajarhide/omni
cd omni
cargo build --release

Dari dalam Claude Code, kalau Anda lebih suka agent yang mengurus sisanya:

/plugin marketplace add fajarhide/omni
/plugin install omni@omni

Di agent mana pun yang membaca skill, skill yang sama bisa dipasang lewat CLI direktori skill, dan terdaftar di skills.sh/fajarhide/skills/omni:

npx skills add fajarhide/skills --skill omni

Lewat jalur mana pun, yang terpasang adalah sebuah skill, bukan binary-nya. Skill tersebut membawa perintah pemasangan di bawah, langkah verifikasinya, dan cara membaca penanda, supaya agent berhenti menebak-nebak ketiganya. Semua di halaman ini tetap berlaku; plugin hanya berarti ada orang lain yang mengetiknya.

Sambungkan ke agent Anda

omni init            # host tempat Anda berjalan, atau sebuah menu kalau Anda punya terminal
omni init --claude   # atau --cursor, --codex, --gemini, dan 11 lainnya
omni init --all      # semua host, plus .vscode/mcp.json di direktori saat ini

omni init menulis hook dan mendaftarkan server MCP. Ia idempoten, jadi menjalankannya lagi setelah upgrade adalah langkah yang benar, bukan risiko.

Di Claude Code, bagian yang memendekkan keluaran adalah hook-nya, sedangkan server MCP adalah kemudahan yang ada ongkos cache-nya. Membiarkannya terpasang tidak masalah; yang perlu Anda tahu ongkosnya ada di Agent yang didukung.

Tanpa terminal untuk bertanya, yang memang begitulah cara agent menjalankannya, omni init menyetel host tempat ia berjalan alih-alih gagal karena menunya tidak ada. Ia menyebut host mana yang ia pilih. Kalau ia tidak bisa menyebut host-nya, misalnya di shell biasa, ia berhenti dan meminta sebuah flag ketimbang memasang ke tempat yang tidak diminta siapa pun.

Semua flag yang didukung ada di init. Host mana dapat apa ada di Agent yang didukung, dan halaman itu lebih penting daripada kedengarannya: host yang tidak bisa menulis ulang keluaran tool shell-nya sendiri tidak akan menunjukkan byte hasil sulingan ke agent, sebaik apa pun pipeline-nya bekerja.

Verifikasi

omni doctor

Ini bukan seremoni opsional. Ia memeriksa binary-nya ada di PATH, basis datanya bisa dibuka, hook-nya benar-benar terpasang di tempat host membacanya, dan server MCP-nya terdaftar. omni doctor --fix memperbaiki yang bisa ia perbaiki.

Codex CLI butuh satu langkah tambahan. Ia hanya menjalankan hook yang sudah dinyatakan tepercaya dan melewati sisanya diam-diam. Setelah omni init --codex, jalankan codex sekali lalu setujui hook-nya di bagian “Hooks need review”. omni doctor akan terus gagal sampai Anda melakukannya.

Pastikan ia benar-benar jalan

omni doctor bilang sambungannya benar. Yang berikut bilang sambungannya sedang dipakai:

cat berkas-panjang.txt     # lewat agent Anda, bukan shell ini
omni diff                  # mentah dibanding hasil sulingan, untuk perintah terakhir
omni stats

Kalau omni stats menampilkan baris dan omni diff menampilkan perbedaan, hook-nya hidup.

Satu jebakan yang lebih baik diketahui sekarang daripada nanti: angka di omni stats dipisah menurut agent_id, dan baris yang tercatat di bawah terminal adalah keluaran TTY yang tidak pernah dibaca model mana pun. Ketika Anda menilai apakah OMNI layak berada di sana, lihat baris untuk host Anda yang sebenarnya.

Perbarui

omni update      # untuk pemasangan Homebrew
brew upgrade omni

Jalankan ulang omni init sesudahnya kalau sebuah rilis mengubah kontrak hook-nya. Changelog menyebut kapan itu terjadi.

Cabut

omni init --uninstall   # hook dan pendaftaran MCP untuk satu host
omni reset --all        # semua integrasi, dan menawarkan menghapus omni.db

omni reset tanpa flag memberi menu interaktif. Keduanya tidak menyentuh konfigurasi shell Anda, karena OMNI memang tidak pernah menulis apa pun di sana.

Satu jam pertama

Diasumsikan omni init dan omni doctor sudah dijalankan. Tidak ada di sini yang mengubah konfigurasi.

Yang dibeli satu jam ini adalah kemampuan memeriksa OMNI alih-alih mempercayainya. Di ujungnya Anda bisa melihat potongan apa pun berdampingan dengan aslinya, menarik kembali apa pun yang ia buang, dan membedakan penanda miliknya dari baris yang sekadar mirip penanda. Keterampilan terakhir itulah yang membuat dua yang pertama ada gunanya.

Lihat satu penyulingan terjadi

Minta agent Anda menjalankan sesuatu yang berisik. Test atau build paling pas.

Lalu, di shell Anda sendiri:

omni diff

Mentah di satu sisi, hasil sulingan di sisi lain, untuk perintah terakhir. Ini cara tercepat menumbuhkan kepercayaan atau kecurigaan, dan keduanya berguna.

Coba satu dengan tangan

omni exec cargo test

omni exec menjalankan sebuah perintah lewat seluruh pipeline lalu mencetak hasilnya dengan catatan kaki. Ia harness yang diminta dipakai setiap laporan bug di proyek ini, karena ia mengeluarkan host dari gambar.

Bentuk argumennya persis: omni exec cargo test, bukan omni exec -- cargo test dan bukan string yang dikutip. Keduanya gagal dengan “No such file or directory”.

Lihat angkanya

omni stats

Ia memimpin dengan umur sesi, berapa perintah yang dibawa sebuah sesi sebelum host menutupnya, karena itulah yang sebenarnya dibebankan jendela konteks kepada Anda. Persentase penyulingan di bawahnya adalah alat diagnosis untuk pipeline satu host.

Setiap angka mutlak yang ia cetak berupa byte, dan byte itu dihitung. Dulu ia melaporkan token, dan token itu adalah hitungan byte yang sama dibagi konstanta yang dikalibrasi terhadap tokenizer vendor lain, jadi satuannya tidak bisa dipertahankan meski aritmetikanya benar. Persentasenya tidak pernah terpengaruh: pembaginya saling meniadakan di dalam rasio.

omni stats --view detail   # per perintah, per rute, per sesi, per agent
omni stats --rerun         # distiller mana yang berongkos satu run ulang
omni dashboard             # angka yang sama di peramban, hanya di 127.0.0.1

--rerun yang menarik. Persentase pengurangan tidak bisa memberi tahu apakah sebuah distiller membuang sesuatu yang lalu harus diambil ulang agent; yang ini bisa.

Tarik kembali sesuatu yang ia buang

Setiap penanda menyebutkan sebuah handle. Jalankan:

omni retrieve 0000000000000000

Handle itu persisnya adalah contoh dokumentasi dan ditolak dengan menyebut namanya, dan justru itu inti bagian ini. Salin handle sungguhan dari penanda di keluaran Anda sendiri dan byte-nya kembali apa adanya, dan exit code-nya memberi tahu mana yang terjadi: 0 kalau handle-nya ketemu, 1 kalau tidak.

Pasangan itu pemeriksaan kepercayaan tercepat yang ada. Alat yang membuang sesuatu tapi tidak bisa mengembalikannya adalah alat yang harus Anda percayai buta.

Bedakan penanda asli dari yang sekadar teks

Halaman ini penuh penanda, begitu pula source OMNI sendiri, dan begitu pula laporan bug mana pun yang mengutipnya. Mencari bentuk penanda di transkrip Anda akan menemukan semuanya.

Handle-nya yang membedakan. Semua contoh di manual ini memakai nilai cadangan 0000000000000000, yang tidak akan pernah diberikan kepada lipatan sungguhan, jadi:

omni retrieve <handle-dari-keluaran-Anda>   # exit 0, beserta isinya
omni retrieve 0000000000000000              # exit 1, "the documentation example"

Kalau Anda sedang mengukur apakah OMNI melakukan sesuatu sama sekali pada suatu run, exit code itulah jawabannya, bukan hasil grep terhadap [OMNI.

Pancang apa yang sedang Anda kerjakan

omni goal set 'Migrate the billing service off the legacy queue'

Penilainya mengutamakan keluaran yang berkaitan dengan tujuan itu, dan agent diingatkan padanya alih-alih melantur. omni goal show untuk memeriksa, omni goal clear untuk melepasnya.

Matikan untuk satu perintah

OMNI_PASSTHROUGH=1 kubectl get pods -o yaml

Hal pertama yang harus diraih ketika Anda curiga OMNI mengubah sesuatu yang seharusnya tidak ia ubah. Kalau keluarannya identik dengan dan tanpa variabel itu, OMNI tidak terlibat.

Hal yang layak diketahui sebelum ia menggigit

Membaca berkas lewat shell Anda bisa tiba dalam bentuk sulingan. Karena hook-nya memang benar-benar menulis ulang keluaran Bash, cat atau sed atas sebuah berkas sumber bisa kembali terlipat. Pakai perkakas pembaca berkas milik agent Anda, atau OMNI_PASSTHROUGH=1, ketika Anda butuh byte yang persis.

Perintah yang cocok bisa ditulis ulang sebelum ia berjalan. Pre-hook mengubah sebagian perintah menjadi omni exec, termasuk pengalihan keluarannya, sehingga berkas log yang kemudian Anda baca adalah yang sudah disuling. Patahkan awalannya (env cargo test, atau true && cargo test) ketika Anda butuh log mentah di disk.

Jangan menilai OMNI dari keluaran yang Anda baca lewat OMNI. Sebuah cargo test yang dibaca lewat hook pernah melaporkan “1 failed” untuk suite yang hijau dengan 398 lulus. Alihkan ke sebuah berkas dengan passthrough menyala sebelum membuat klaim apa pun tentang sebuah hasil.

Kapan minta bantuan

Kalau keluaran terlihat lebih pendek daripada seharusnya, kalau ada baris yang hilang, atau kalau OMNI melaporkan sukses untuk sesuatu yang gagal, itu layak dilaporkan. Reproduksi dulu dengan omni exec, dan baca seluruh keluaran sulingannya, bukan hasil grep atasnya: mem-grep menyembunyikan judul yang sering justru membuat keluaran itu ternyata tidak kehilangan apa pun.

Membaca penanda

Penanda adalah cara OMNI memberi tahu apa yang ia lakukan. Bentuknya hanya beberapa, dan mengenalinya adalah beda antara memercayai perkakas ini dan mencurigainya.

Bentuk-bentuknya

[OMNI: 406 lines omitted, omni retrieve 0000000000000000 for full output]

Ada isi yang dipotong dan diarsipkan. Enam belas karakter itu sebuah handle: omni retrieve <handle> mencetak aslinya kembali, persis byte demi byte, dari shell mana pun di sesi mana pun.

[OMNI: 40 lines already shown, omni retrieve 0000000000000000]

Ledger. Baris-baris ini sudah dikeluarkan sebelumnya di sesi ini, jadi klaimnya adalah agent masih memegangnya dan handle-nya tidak berongkos kecuali ia memang mau membaca ulang.

[OMNI: 40 lines identical to an earlier run, omni retrieve 0000000000000000]

Ledger lagi, untuk kasus ketika kesamaannya justru jawabannya. Anda menjalankan perintah yang sama untuk kedua kalinya dan ia mencetak baris yang sama, jadi marker menyebut itu alih-alih “already shown”: polling yang diulang untuk melihat apakah sebuah nilai berubah dijawab oleh nilainya yang tidak berubah, dan pembacaan ulang dijawab oleh berkasnya yang tidak berubah.

[OMNI: 40 lines not shown here, omni retrieve 0000000000000000]

Ledger juga, klaim berbeda. Baris-baris ini pergi ke sesi lain dari proyek ini, dan agent ini belum pernah melihatnya. Kalimatnya sengaja bukan “already shown”, karena itu akan salah. Melipatnya adalah taruhan bahwa agent tidak akan membutuhkannya, dan karena itu ia memikul ambang keuntungan tiga kali lipat.

Sesi lain itu bisa jadi juga agent yang lain. Riwayat proyek dikunci pada direktorinya, jadi apa pun yang berjalan di repositori ini ikut menyumbang. Lihat apa yang dibagi dua agent.

[OMNI: identical to the 40 lines already shown, omni retrieve 0000000000000000]
[OMNI: identical to 40 lines from an earlier session, none shown here, omni retrieve 0000000000000000]

Dua klaim yang sama, untuk jawaban yang terulang seluruhnya. Ketika pelipatannya mencakup setiap baris, penandanya adalah seluruh keluaran, bukan sebuah lubang di dalamnya, jadi ia berbunyi identical to dan Anda mendapat satu baris di tempat run ulang akan mencetak ratusan baris yang sama. Apa pun yang kurang dari seluruh jawaban memakai kalimat di atasnya.

[OMNI: 40 lines already shown, omni retrieve 0000000000000000]
⋮
⋮

Di pembacaan file, dan hanya di situ, markernya diikuti satu untuk tiap baris yang digantikannya. Editor menomori baris yang diterimanya, dihitung dari baris tempat pembacaan dimulai, jadi tampilan yang lebih pendek akan menaruh tiap baris yang selamat di nomor yang bukan miliknya. Mempertahankan jumlah baris itulah yang membuat sebuah lipatan boleh berada di antara dua bagian yang masih Anda butuhkan. Baris pengisi itu bukan konten yang bisa diambil: omni retrieve pada handle di atas mencetak baris aslinya.

[OMNI: 40 lines already shown from charlie.tf, omni retrieve 0000000000000000]

Keempatnya bisa membawa from <sumber>, yang menyebut perintah yang keluarannya pertama kali menampilkan baris-baris itu. Ia hanya muncul kalau perintah tersebut bukan perintah yang baru saja Anda jalankan, yaitu kasus yang tidak bisa Anda pastikan dari penandanya sendiri: membaca satu berkas lalu sebuah blok dilipat karena berkas lain sudah menampilkannya lebih dulu. Tanpa klausa itu, membandingkan dua berkas untuk memeriksa apakah blok bersamanya sama dijawab dengan menghapus buktinya.

Menjalankan ulang perintah yang sama tidak membawa klausa itu, karena penanda di atas sudah menyebutkannya dengan kata-kata. Panjang penanda menentukan apa yang layak dilipat sama sekali, jadi mencantumkan sumber di setiap penanda akan memotong penghematan pada kasus yang umum demi menamai kasus yang jarang.

[N similar lines collapsed]

Collapse. Deretan baris yang nyaris identik, diganti sebuah hitungan.

[OMNI Active] ⏺ 93.7% reduction (2.3 KB → 147 B) 3ms

Catatan kaki, pada omni exec dan mode pipa. Ukuran masukan, ukuran keluaran, dan berapa lama pipeline-nya berjalan.

[Partial signal]

Pipeline mengenali sebagian keluarannya, tapi tidak semuanya.

[OMNI: output truncated, 1200 of 4000 lines kept, 2800 dropped from the middle, omni retrieve 0000000000000000]
[OMNI: output truncated, 50000 of 180000 bytes kept]

Potongan terakhir sebelum sebuah jawaban dikirim, di 50 KB. Bentuk barisnya mempertahankan awal dan akhir, karena build atau test run menaruh putusannya di bagian akhir, dan penanda ini menyebut berapa banyak bagian tengah yang dibuang. Bentuk byte dipakai ketika tidak ada struktur baris di dalam anggarannya, dan ia hanya mempertahankan awalnya, jadi satu baris yang sangat panjang kehilangan ekornya. Handle ada kalau bagian yang dibuang diarsipkan; tanpa handle pun penandanya tetap menyebut apa yang dibuang.

[OMNI: 2 sensitive value(s) redacted]

Redaksi kredensial pada keluaran perintah. Baris yang memberi nilai ke nama yang sensitif nilainya diganti [REDACTED], dan penanda ini menghitung barisnya. Tanda kutip dan tanda baca di sekitar nilai tetap ada, jadi baris yang diredaksi masih bisa di-parse.

Namanya yang menentukan, dicocokkan per kata yang dipisah garis bawah sehingga PASSED dan AUTHORS tidak ikut: SECRET, TOKEN, PASSWORD, PASSWD, PASS, AUTH, CREDS, CREDENTIAL, CREDENTIALS, DATABASE_URL, REDIS_URL, MONGO_URL, CLIENT_SECRET, ACCESS_KEY, PRIVATE_KEY, dan apa pun yang diawali API_, AWS_, GITHUB_, ANTHROPIC_, OPENAI_ atau GEMINI_. Beberapa nilai dibiarkan karena tidak memuat kredensial apa pun namanya: nilai kosong, ekspansi shell seperti $DB_PASSWORD, pemanggilan tanpa kutip, atau null.

KEY sendirian adalah pola lemah, karena key= adalah kode biasa. Di bawah pola itu nilainya ikut menentukan, dan identifier pendek berhuruf kecil atau ekspresi { dibiarkan. Di bawah pola lainnya nilai tidak pernah ikut menentukan, jadi hunter2 dan decrypt("ghp_x") tetap dipotong. Kalau ragu, nilainya dipotong: menyembunyikan nilai yang aman hanya berongkos satu baca ulang, sedangkan mencetak kredensial asli tidak bisa ditarik kembali.

Redaksi melindungi apa yang diterima agent, bukan disk Anda. Penyimpanan trace lokal OMNI menyimpan keluaran mentahnya, termasuk kredensialnya, selama tujuh hari.

[OMNI: Re-injecting critical files due to Warning pressure]

Saat konteks tertekan (Warning atau Critical), OMNI secara berkala menaruh kembali sampai tiga berkas pinned_files Anda di depan agent, masing-masing dipotong sekitar 400 karakter. Tidak ada yang dibuang; isi sesudah baris itu adalah tambahan.

Membaca persentase dengan benar

Bug-bug terburuk dalam sejarah proyek ini melaporkan pengurangan paling besar. Distiller yang menghapus jawabannya terkompresi dengan indah.

Jadi angka besar bukan kabar baik dengan sendirinya. omni diff adalah pemeriksanya:

omni diff     # perintah terakhir, mentah dibanding hasil sulingan

Kalau penghematan 99% ternyata membuang jalur berkas yang justru jawabannya, itu bug yang layak dilaporkan, dan itu persis kelas yang paling dipedulikan proyek ini.

Ketika sama sekali tidak ada penanda

Sering, dan itu tandanya pipeline bekerja, bukan gagal. OMNI mengembalikan keluarannya langsung setiap kali mengambil sesuatu akan tidak aman atau tidak sepadan. Itu terjadi ketika:

  • Muatannya JSON, YAML, CSV atau TSV. Tidak pernah disentuh, memang disengaja.
  • Perintahnya gagal. Keluar dengan status bukan nol lewat apa adanya.
  • Tidak ada basa-basi untuk dibuang. Tabel kubectl get pods adalah pendaftaran yang setiap barisnya sebuah data.
  • Keluarannya terlalu pendek untuk pantas diberi penanda.

Mengambil isinya kembali

omni retrieve <handle>

Bekerja di semua host, dengan atau tanpa MCP. Agent yang server MCP-nya terpasang bisa memanggil omni_retrieve sendiri tanpa bertanya ke Anda.

Satu batas yang tidak bisa dijanjikan sebuah handle: arsipnya jendela bergulir 30 hari, jadi omni retrieve atas isi yang lebih tua dari itu tidak akan ketemu. Jejak apa adanya bahkan lebih pendek, tujuh hari.

Membedakan penanda asli dari penanda yang sekadar dicetak

Penanda juga muncul di dalam prosa. Halaman ini penuh dengannya, begitu pula source OMNI sendiri, dan begitu pula laporan bug mana pun yang mengutipnya. Itu penting ketika Anda mengukur apakah OMNI aktif pada suatu run, karena mencari bentuk penanda di dalam transkrip akan menemukan contohnya semudah menemukan lipatan aslinya.

Handle-nya yang membedakan. Setiap contoh di manual ini dan di source OMNI memakai satu nilai cadangan, 0000000000000000, yang tidak akan pernah diberikan kepada lipatan sungguhan:

omni retrieve 0000000000000000   # exit 1, "the documentation example"
omni retrieve <handle-yang-Anda-temukan> # exit 0 jika OMNI benar-benar melipatnya

Jadi exit code-nya yang menjawab pertanyaan itu, dan penanda yang disalin dari dokumentasi tidak bisa disalahartikan sebagai bukti bahwa ada yang dipendekkan.

Melihat berapa yang dihemat

omni stats

Semua yang ada di halaman ini membaca agregasi yang sama, jadi angka di kartu bagikan tidak mungkin berbeda dari angka di laporannya.

Laporannya

omni stats                 # 30 hari terakhir, bawaannya
omni stats --today         # atau --hour, --week, --month
omni stats --view detail        # perintah, rute, sesi, agent
omni stats --limit 0       # semua perintah, bukan cuma yang teratas
omni stats --view projects # dipecah per jalur proyek
omni stats --json          # bisa dibaca mesin

Ia memimpin dengan byte yang tidak pernah sampai ke model Anda, lalu satu baris per mesin:

    5.1 MB  never reached your model

    folded      1.7 MB   41% of what it folded         906 folds
    distilled   3.4 MB   48% of what it distilled    1,056 calls
    left alone       0   by design                  15,718 calls

Kedua persentase itu berasal dari populasi yang berbeda dan tidak boleh dijumlahkan atau dirata-ratakan. Penyuling memangkas 48% dari panggilan yang ia suling; ledger memangkas 41% dari muatan yang ia lipat. Total byte boleh dijumlahkan, dan itulah yang dilakukan baris utamanya. Sampai 0.7.7 laporan ini hanya membaca distillations dan tidak pernah membaca ledger sama sekali, jadi mesin yang paling banyak membuang byte justru hilang dari laporan, dan satu-satunya persentase yang tercetak adalah penyuling dibagi 15.718 panggilan yang sengaja ia lewatkan.

left alone tertulis 0, bukan 31 MB yang lewat begitu saja. Byte itu bukan kemenangan dan bukan kerugian, dan menaruhnya di kolom penghematan membuat pembaca mengira ada yang hilang.

Persentase lipatan hanya mencakup lipatan yang mencatat muatan asalnya. payload_bytes datang lewat migrasi dengan nilai bawaan nol, jadi baris lama membawa penghematan tanpa basis. Laporannya menyebut berapa lipatan yang ia bagi, dan tidak mencetak persentase sama sekali kalau tidak ada satu pun yang mencatatnya.

Umur sesi, tabel per periode, perintah teratas dan pemecahan per agent semuanya pindah ke --detail. --detail juga menyebut alasan tiap panggilan dilewatkan, dari passthrough_events, yang mengubah angka passthrough 94% dari tuduhan menjadi penjelasan.

Angkanya dihitung dalam satuan apa

Byte, dan byte itu dihitung, bukan diturunkan. Setiap angka mutlak yang dicetak laporan ini adalah total byte dari distillations, dan setiap persentase adalah rasio dari dua di antaranya.

Dulu satuannya token, yaitu hitungan byte yang sama dibagi 3,6, konstanta yang dikalibrasi terhadap cl100k_base. Itu encoding milik GPT, jadi satuannya tidak bisa dipertahankan meski aritmetikanya benar. Persentasenya tidak pernah terpengaruh: pembaginya saling meniadakan di dalam rasio, dan itu sebabnya angka reduksinya tidak bergeser ketika angka mutlaknya bergeser.

Satu blok masih berupa taksiran dan ia menyatakannya. Context breakdown mengumpulkan ukuran berkas dari metadata, jadi Context Breakdown eksak untuk apa yang ia hitung dan bukan hitungan token yang menyamar.

Kalau Anda mem-parse --json, field commands[].tokens_saved sekarang bernama bytes_saved. Selama satu rilis ia menyimpan byte dengan nama lama, dan itu permukaan yang dibaca mesin sambil menyatakan satuan yang keliru, jadi ia diganti nama alih-alih dibiarkan berbohong. Konsumennya harus ikut menyesuaikan.

Membacanya tanpa membodohi diri sendiri

Pisahkan menurut agent_id sebelum mengutip apa pun. Baris yang tercatat di bawah terminal adalah byte TTY yang tidak pernah dibaca model mana pun. Pada satu pemasangan, baris seperti itu 73% dari seluruh byte yang diklaim OMNI sudah dihemat. omni stats sekarang mengecualikannya, tapi jebakan yang sama menunggu siapa pun yang mengueri basis datanya langsung.

Persentase tinggi tidak otomatis bagus. Cacat terburuk dalam sejarah proyek ini melaporkan pengurangan paling besar, karena menghapus jawabannya terkompresi dengan sangat baik. Sandingkan angka mana pun dengan omni diff pada perintah sungguhan.

Angka gabungan yang rendah biasanya benar, dan bukan itu ukuran menilai OMNI. Sebagian besar panggilan dikembalikan utuh karena mengambil sesuatu akan tidak aman atau tidak sepadan: muatan terstruktur, perintah yang gagal, dan pendaftaran semuanya lewat begitu saja, memang dirancang begitu. Baris per perintahlah tempat kerjanya terlihat, jadi urutkan berdasarkan apa yang benar-benar dihemat tiap kelas, bukan membaca rata-ratanya.

Pemeriksaan yang tidak bisa dilakukan persentase

omni stats --rerun

Distiller mana yang berongkos satu run ulang. Kalau sebuah distiller membuang sesuatu yang lalu harus diambil ulang agent, pengurangannya bukan penghematan, melainkan penundaan. Tidak ada hitungan byte yang bisa melihat itu.

Membagikannya

omni stats --share     # ringkasan siap tempel dari penghematan terukur Anda sendiri
omni stats --card      # ringkasan yang sama, ditulis sebagai gambar

Keduanya datang dari basis data Anda sendiri, dan itulah maksudnya. Klaim rasio di README orang lain tidak bisa diverifikasi sebelum dipasang.

Di peramban

omni dashboard             # http://127.0.0.1:7717
omni dashboard --port 8080

Hanya baca, basis data yang sama, mengikat loopback dan tidak yang lain.

Menggali lebih jauh

omni stats --view detail              # rincian per perintah dan per rute
omni query errors in last 5 commands
omni query warnings from cargo
omni query timeline today
omni patterns                    # galat yang terus kembali
omni patterns --tool cargo

omni_history memberi baris per panggilan yang sama ke klien MCP, di tier yang mengiklankannya. Di host tier Full biayanya di awal request lebih besar daripada hasilnya, jadi jalurnya di sana adalah omni stats --view detail, yang menggabung perintah berulang jadi satu baris berhitung. Tidak ada subperintah omni history; halaman ini sempat mencantumkannya sampai 0.7.4.

omni query berbicara dalam bahasa kueri kecil yang tetap, bukan teks bebas. Bentuk yang didukung ada di bantuannya sendiri.

Mengueri basis datanya langsung

~/.omni/omni.db adalah SQLite biasa dan tidak ada yang melarang Anda.

Jangan pernah membaca keluaran sqlite3 lewat hook Bash saat sedang menyelidiki OMNI. Pipeline-nya bisa melipat baris yang sedang Anda hitung, dan filter LIKE yang menangkap baris keliru sudah pernah memasukkan angka salah ke sebuah issue yang terbit. Daftarkan barisnya sebelum mengutip agregat apa pun atasnya, dan setel OMNI_PASSTHROUGH=1.

Ingatan antar sesi

Agent yang sama yang membaca terlalu banyak juga melupakan segalanya begitu Anda memulainya ulang. OMNI membawa tiga jenis ingatan, dan ketiganya disimpan dengan lama yang berbeda secara sengaja.

Apa yang disimpan, dan berapa lama

tingkatapadisimpan
Permanenpengetahuan proyek, pola galat yang berulang, engram, ingatan tujuansampai Anda menghapusnya, kecuali ingatan tujuan yang menghormati ttl_days miliknya sendiri
Kerja, 30 harisesi, baris penyulingan, berkas yang sering disentuh, arsip, indeks peristiwa, ledgerjendela bergulir
Apa adanya, 7 harijejak eksekusi dan transkrip sesisengaja lebih pendek, dua orde besaran lebih berat per baris

Jawaban singkat untuk “apakah OMNI masih akan tahu proyek saya setelah sebulan ditinggal” adalah ya untuk kesimpulannya dan tidak untuk byte mentahnya. Batas yang penting dalam praktik: omni retrieve atas isi yang diarsipkan lebih dari 30 hari lalu tidak akan ketemu.

Ledger punya satu cara melupakan lagi yang tidak berdasarkan jam. Saat pemadatan, paruh sesinya dibuang seluruhnya, karena pemadatan adalah tempat agent berhenti memegang apa yang ditunjukkan kepadanya, dan setiap klaim “already shown” menjadi salah pada saat yang sama. Kalau pelipatan tampak berhenti setelah sesi panjang dipadatkan, itu hal ini, sedang bekerja. Paruh proyeknya selamat, dan Ledger menjelaskan pembagiannya.

Memancang sebuah tujuan

omni goal set 'Migrate the billing service off the legacy queue'
omni goal show
omni goal clear

Penilainya mengutamakan keluaran yang berkaitan dengan tujuan itu, dan agent diingatkan padanya di setiap prompt alih-alih melantur dari tugasnya sepanjang sesi yang panjang.

Fakta yang layak disimpan

omni remember 'The staging database ignores migrations run outside the deploy job'

Agent yang MCP-nya terpasang memanggil omni_remember sendiri, dan menarik fakta kembali dengan omni_recall, sebuah pencarian semantik lintas engram, pengetahuan tersimpan dan riwayat penyulingan. Keduanya diiklankan di tier MCP-only dan Handoff-first. Host tier Full seperti Claude Code menulis lewat omni remember di shell yang sudah dipasangi hook OMNI, dan mencapai omni_recall, yang tidak punya padanan CLI, dengan OMNI_MCP_TOOLS=all.

Simpan yang tidak bisa diturunkan dari kodenya: sebuah keputusan dan alasannya, sebuah jebakan, sebuah batasan yang tidak disebut berkas mana pun. Jangan simpan yang sudah dicatat repositorinya.

Membawa satu sesi melewati restart

Konteks sesi disuntikkan saat sesi dimulai, jadi agent baru tahu berkas mana yang sedang panas dan apa galat aktif terakhirnya. Kalau host-nya tertutup atau Anda berganti perkakas, konteks proyeknya masih ada.

omni session --status
omni session --history
omni session --resume        # lanjutkan sesi yang terputus
omni session --transcript
omni session --health

Untuk pindah ke mesin atau host yang tidak berbagi basis data, omni_handoff mengekspor keadaan sesi saat ini sebagai markdown yang bisa dibawa dan ditempel ke sesi baru. Ia hanya perkakas MCP; subperintah CLI-nya sudah dihapus. Ia berada di luar set yang diiklankan secara bawaan, jadi setel OMNI_MCP_TOOLS=all sebelum memakainya.

Engram

Ringkasan subtugas yang selesai, ditulis seiring pekerjaan rampung, bukan disusun ulang belakangan.

omni engram
omni engram --json

Pengetahuan yang hidup lebih lama daripada satu sesi

omni query errors in last 5 commands
omni patterns                # galat yang terus kembali lintas sesi

omni_insight memeringkat persoalan berulang yang sama untuk seluruh proyek, dan ia perkakas MCP tanpa padanan CLI, dan berada di luar set bawaan yang diiklankan, jadi ia butuh OMNI_MCP_TOOLS=all. Ia sempat dicantumkan di blok di atas seolah Anda bisa menjalankannya.

Yang tidak bisa ia lakukan

Ia per mesin. Tidak ada sinkronisasi, tidak ada server, dan tidak ada penyimpanan bersama antar orang. ~/.omni/omni.db adalah keseluruhannya, dan arsip jarak jauh secara eksplisit tidak dibangun, bukan sekadar belum dibangun.

Kalau ada yang terlihat salah

Kerjakan halaman ini berurutan. Tiga bagian pertama menyingkirkan yang mirip-mirip saja, dan di situlah kecurigaan biasanya berakhir.

Pertama, apakah OMNI memang terlibat

OMNI_PASSTHROUGH=1 <perintahnya>

Keluaran yang identik dengan dan tanpa variabel itu berarti OMNI tidak melakukan apa-apa. Itu akhir penyelidikannya, dan itu menyelesaikan lebih banyak kasus daripada apa pun di halaman ini.

Lalu periksa jalur mana yang berjalan, karena keduanya tidak sama:

omni --version && ls -la "$(which omni)"   # binary yang terpasang, bukan checkout Anda
omni doctor

Issue yang sudah ditutup tetap menggigit kalau perbaikannya belum dirilis.

Hal yang mirip bug padahal bukan

Muatan terstruktur tidak disentuh. JSON, YAML, CSV, TSV, base64, terraform plan dan apa pun yang ditujukan ke jq lewat begitu saja, memang dirancang begitu. Bukan kesempatan yang terlewat.

Penghematan negatif pada keluaran kecil, kira-kira -1% sampai -4%. Penandanya berongkos lebih mahal daripada yang dihemat kompresinya pada muatan pendek.

Sebagian besar panggilan tidak menghemat apa pun. Wajar. Mengambil sesuatu akan tidak aman atau tidak sepadan dengan ongkos penandanya, dan memang tidak ada yang bisa dihemat.

Pembacaan berkas menunjukkan nol penghematan token di sesi yang membaca banyak berkas. Permukaan OMNI di sebagian besar host adalah keluaran shell. Perkakas pembaca berkas milik agent Anda, berkas skill dan system prompt ada di luarnya.

Aliran biner kubectl rusak. SPDY melakukan itu, ada atau tidak ada OMNI.

Pemisahan kata dan kutip di shell. Itu shell Anda.

Jebakan yang menghasilkan kesimpulan salah

Jangan menilai OMNI dari keluaran yang Anda baca lewat OMNI. Sebuah cargo test yang dibaca lewat hook pernah melaporkan “1 failed” untuk suite yang oleh cargo sendiri disebut 398 lulus. Alihkan ke sebuah berkas dengan OMNI_PASSTHROUGH=1 sebelum membuat klaim apa pun tentang sebuah hasil.

Jangan mem-grep keluaran sulingannya. Mem-grep menyembunyikan judul grup yang sering justru membuat keluarannya ternyata tidak kehilangan apa pun. Hasil pencarian 116 baris tampak seperti sudah membuang setiap nama berkas sampai muatan penuhnya menunjukkan satu judul nama berkas per grup dengan kecocokannya menjorok di bawahnya. Baca semuanya.

Keluarannya tidak deterministik terhadap basis data yang hangat. Riwayat sesi memberi masukan ke penilainya, jadi perintah yang sama bisa disuling berbeda di dua run. Isolasi:

OMNI_DB_PATH=/tmp/probe.db omni exec <perintah>

Reproduksi yang gagal bukan sebuah vonis. Kalau sebuah bug tidak muncul lagi, baca jalur pengirimannya di kode sumber sebelum menyimpulkan apa pun. Sebuah pipa yang tampak dibuang ternyata adalah pre-hook yang membungkus seluruh string perintahnya, sehingga penyulingannya mendarat di hulu tail milik pemanggil. Tiga reproduksi yang dibuat tangan sudah lebih dulu kembali bersih.

Masalah yang umum

Hook-nya terpasang tapi tidak ada yang disuling. omni doctor memeriksa sambungannya. Lalu periksa tingkat host-nya: host yang mengutamakan handoff atau hanya MCP sama sekali tidak bisa menulis ulang keluaran tool shell bawaannya. Lihat Agent yang didukung.

Codex CLI tidak melakukan apa-apa setelah omni init --codex. Ia hanya menjalankan hook yang sudah dinyatakan tepercaya dan melewati sisanya diam-diam. Jalankan codex sekali lalu setujui di bagian “Hooks need review”.

Peringatan di terminal yang tidak pernah disinggung agent. Penolakan hook dicatat host sebagai lampiran yang tidak pernah masuk ke konteks model. Agent bisa sungguh-sungguh yakin hook-nya baik-baik saja sementara layar Anda penuh peringatan. Di Claude Code:

grep -c hook_error_during_execution ~/.claude/projects/<proyek>/<sesi>.jsonl

Lampiran itu membawa alasan host apa adanya.

Perintah terasa lambat. Wajar, dan ia tumbuh mengikuti ukuran basis data, bukan ukuran muatan: sekitar 21 ms terhadap basis data yang baru dan 61 ms terhadap yang 205 MB.

omni exec tampak menggantung. Basis data bersama yang hangat membuat penulisan berbaris antre. Beri ia miliknya sendiri dengan OMNI_DB_PATH.

Melaporkannya

Yang layak dilaporkan, dalam urutan kepentingan ini:

  1. Klaim palsu. OMNI menyatakan hasil yang tidak didukung masukannya: sukses dilaporkan untuk sebuah kegagalan, hitungan yang tidak cocok dengan hitungan runner-nya sendiri.
  2. Sinyal yang hilang. Sesuatu yang dibutuhkan dibuang tanpa penanda yang menyebutnya.
  3. Kebisingan. Bertele-tele tapi tidak berbahaya.

Laporan yang baik membawa keluaran mentah dan keluaran sulingan berdampingan, termasuk catatan kaki [OMNI Active], perintah omni exec yang persis, dan omni --version. Catatan kakinya sering justru intinya: bug terburuk di sini melaporkan pengurangan paling besar.

Reproduksi pada perintah sintetis kalau bisa, supaya tidak ada yang perlu disamarkan. Keluaran terminal sungguhan membawa nama host, id akun dan alamat internal lebih sering daripada dugaan orang.

Tracker: https://github.com/fajarhide/omni/issues

Discord: https://discord.gg/zHTuvZhF2M, kalau Anda lebih suka bertanya sebelum melapor.

Perintah

Semua subperintah, dikelompokkan seperti omni --help mengelompokkannya: menurut apa yang sedang Anda coba lakukan, bukan menurut abjad.

omni <COMMAND> [FLAGS]
cmd | omni                # suling keluaran perintah apa pun lewat pipa

Pemasangan

perintahapa yang ia lakukan
initPasang OMNI ke agent Anda, hook dan MCP
doctorPeriksa pemasangannya sehat, dan perbaiki yang tidak
updateNaikkan ke rilis terbaru
resetCabut dengan bersih, sambil menyimpan cadangan konfigurasi Anda

Melihat berapa yang dihemat

perintahapa yang ia lakukan
statsBerapa token yang dipotong, dan dari perintah mana
retrieveCetak isi yang diarsipkan sebuah penanda, lewat handle-nya
dashboardAngka yang sama di peramban, di 127.0.0.1
diffKeluaran perintah terakhir, sebelum dibanding sesudah
sessionApa yang sudah dihabiskan sesi ini, dan untuk apa

Menyetelnya

perintahapa yang ia lakukan
execJalankan satu perintah lewat OMNI, untuk melihat apa yang akan ia lakukan
queryCari penyulingan yang sudah lewat
patternsGalat yang terus kembali

Ingatan

perintahapa yang ia lakukan
rememberSimpan sebuah fakta untuk sesi berikutnya
engramRingkasan subtugas yang selesai
goalPancang tujuan utama supaya penilaiannya mengutamakannya
versionRincian versi dan lingkungan

Titik masuk hook

Bukan untuk diketik. Ini yang dipanggil host agent, dan didokumentasikan di Hook.

omni --pre-hook      omni --post-hook     omni --hook
omni --session-start omni --session-end   omni --pre-compact
omni --mcp

Catatan soal cara flag diurai

Kecocokan pada argumen pertama menentukan rute subperintahnya lalu menyerahkan env::args() mentah ke modulnya, jadi setiap modul mengurai flag-nya sendiri dan menyatakan himpunan flag yang ia terima. cli::check_flags menolak apa pun di luar himpunan itu, dan itulah yang mencegah omni stats --detial mencetak ikhtisar bawaan lalu keluar dengan status 0.

Bantuan per perintah itu nyata dan layak dibaca: omni <perintah> --help. Kalau rujukan ini dan bantuannya berbeda, yang tercatat di sini adalah apa yang diterima kode sumbernya.

omni init

Memasang OMNI ke sebuah agent: menulis konfigurasi hook di tempat host itu membacanya, dan mendaftarkan server MCP.

omni init              # menu interaktif, atau host saat ini kalau tidak ada terminal
omni init --claude
omni init --all

Idempoten. Menjalankannya lagi setelah upgrade adalah langkah yang benar, bukan risiko.

Tanpa flag

Di terminal, sebuah menu. Tanpa terminal, yang memang begitulah agent menjalankannya, menunya tidak bisa digambar, jadi omni init menyetel host tempat ia berjalan lalu mencetak host mana itu. Host yang tidak bisa ia sebut dari lingkungannya, termasuk shell biasa, mendapat galat berisi daftar flag, bukan tebakan: memasang ke host yang tidak diminta siapa pun adalah yang lebih buruk dari dua kegagalan itu.

Host

Satu flag per host. Masing-masing menulis format konfigurasi milik host itu di lokasi milik host itu.

flaghost
--claudeClaude Code (Anthropic)
--cursorCursor
--zedZed
--clineCline
--roo, --roo-codeRoo Code
--copilotGitHub Copilot CLI
--geminiGemini CLI
--opencodeOpenCode
--codexCodex CLI
--openclawOpenClaw
--antigravityAntigravity IDE, dan webhook generik
--hermesHermes Agent
--vscodeVS Code (MCP)
--piPi Agent

Apa yang sebenarnya diizinkan masing-masing host untuk dilakukan OMNI berbeda jauh. Lihat Agent yang didukung sebelum menganggap sebuah flag otomatis membeli penyulingan shell.

Mode

flagefeknya
--allSemua host di atas. Juga menulis .vscode/mcp.json di direktori saat ini.
--hookHook saja, tanpa pendaftaran MCP
--mcpPendaftaran MCP saja, tanpa hook
--statusLaporkan apa yang saat ini terpasang, tanpa mengubah apa pun
--uninstallCabut hook dan server MCP milik OMNI
--help, -hBantuan

Setelah menjalankannya

omni doctor

Selalu. init melaporkan apa yang ia tulis; doctor melaporkan apakah host-nya membacanya.

Codex CLI butuh satu langkah lagi. Ia hanya menjalankan hook yang sudah dinyatakan tepercaya dan melewati sisanya tanpa sepatah kata. Jalankan codex sekali lalu setujui di bagian “Hooks need review”. omni doctor gagal sampai Anda melakukannya.

Catatan

--all satu-satunya flag yang menulis ke direktori saat ini. Selebihnya hanya menyentuh konfigurasi di direktori home Anda.

Flag host yang tidak dikenali tidak selalu gagal dengan berisik: flag yang salah ketik pernah menjalankan mode interaktif bawaan lalu keluar dengan status 0 sementara tidak memasang apa pun yang diminta. Baca apa yang ia cetak.

omni doctor

Memeriksa bahwa pemasangannya sehat, dan memperbaiki yang bisa ia perbaiki.

omni doctor
omni doctor --fix

Ia mencakup versi dan keterjangkauan binary-nya, direktori konfigurasi dan basis data, pemasangan hook per host, pendaftaran server MCP, dan pemuatan sinyal.

Flag

flagefeknya
--fixPerbaiki masalah konfigurasi dan integrasi secara otomatis
--detailCetak semua baris integrasi, bukan hanya yang perlu perhatian
--jsonBisa dibaca mesin
--help, -hBantuan

Membaca keluarannya

Tingkat host. doctor mencetak tingkat untuk setiap host yang terpasang, dan tingkat itu adalah langit-langit jujur untuk apa yang bisa dilakukan OMNI di sana. Host yang mengutamakan handoff atau hanya MCP tidak bisa menulis ulang keluaran tool shell bawaannya, jadi sebanyak apa pun pekerjaan pipeline tidak akan menggerakkan angka penyulingannya. Lihat Agent yang didukung.

[N UNRELEASED]. Build yang dikompilasi dari pohon sumber yang CHANGELOG.md-nya masih punya entri di bawah ## [Unreleased] akan mengatakannya, dan menyuruh Anda memotong sebuah tag. Pada build rilis tidak ada baris seperti itu. Ini ada supaya binary yang ditandai tanpa memindahkan entri changelog-nya menuduh dirinya sendiri, bukan terkirim diam-diam.

Hitungan retensi terkini. Berapa banyak yang ada di setiap tingkat ingatan saat ini.

Yang tidak ia periksa

Bahwa host-nya benar-benar menerapkan hasil tulis ulangnya. doctor memverifikasi konfigurasinya ada di tempat host membacanya, dan itu tidak sama dengan host menghormatinya. Buktinya adalah sebuah baris penyulingan di basis data di bawah agent_id host Anda, atau transkrip sesi host itu sendiri.

Di Claude Code, muatan hook yang ditolak host dicatat sebagai lampiran yang tidak pernah sampai ke model, jadi agent bisa yakin semuanya baik-baik saja sementara terminal Anda penuh peringatan:

grep -c hook_error_during_execution ~/.claude/projects/<proyek>/<sesi>.jsonl

omni stats

Analitik penghematan token, dibaca dari basis data Anda sendiri.

omni stats

Satu layar, dan menjawab satu pertanyaan: berapa byte yang tidak pernah sampai ke model. Umur sesi, perintah teratas, rute dan agent pindah ke --view detail.

Flag

flagefeknya
--since <jendela>hour, today, week, month (bawaan), all
--view <nama>summary (bawaan), detail, commands, projects, context, rerun, folds, share
--limit <n>Jumlah baris di tampilan tabel, bawaan 10, 0 untuk semua
--jsonBisa dibaca mesin, ikut jendela --since
--cardTulis ringkasan sebagai gambar, berukuran untuk unggahan media sosial
--help, -hBantuan

Semua ejaan lama tetap jalan: --detail, --today, --day, -d, --week, -w, --month, -m, --hour, -H, --all-commands, --project, --context, --rerun dan --share. Semuanya tidak didaftarkan di sini karena sekarang ada satu cara untuk menyebut tiap hal, dan tidak ada peringatan usang yang dicetak: penggantian namanya keputusan kami, bukan Anda.

--json dan --card itu format keluaran, bukan tampilan. --card mengalahkan semuanya, karena menyebutnya hanya bisa berarti menulis berkasnya; --json mengalahkan --view, karena laporan yang bisa dibaca mesin cuma satu dan bukan per tampilan. Dulu keduanya dibaca sebagai tampilan, dan begitulah --view detail --card sampai tidak menulis gambar sama sekali.

--view folds adalah kalibrasi ledger atas dirinya sendiri

Sebuah fold adalah klaim: pembaca tidak membutuhkan byte ini. Sebuah retrieve atas handle penanda itu adalah pembaca yang membantahnya. Tampilan ini menaruh keduanya bersebelahan, per bentuk penanda, sehingga penjaga dengan angka tertinggi adalah yang pertama dilihat.

omni stats --view folds              # 30 hari terakhir
omni stats --view calibration --since week

calibration adalah tampilan yang sama, dengan kata yang lebih dulu terpikir oleh kebanyakan pembaca.

Tidak ada ambang dan tidak ada warna vonis di dalamnya. Belum ada batas yang pernah diukur, dan angka yang tampak sudah dinilai padahal belum adalah cacat yang justru diperangi proyek ini. Penyimpanan yang ditulis sebelum penanda mulai direkam akan mengatakannya, bukan mencetak nol yang terkesan sempurna.

--rerun yang wajib diketahui

Persentase pengurangan tidak bisa memberi tahu apakah sebuah distiller membuang sesuatu yang lalu harus diambil ulang agent. Kalau iya, pengurangannya sebuah penundaan, bukan penghematan. Flag ini pemeriksaan yang tidak bisa dilakukan persentase.

Jebakan

Baris terminal bukan token. Keluaran yang ditulis ke TTY dibaca manusia, bukan model. Pada satu pemasangan, baris seperti itu 73% dari seluruh byte yang diklaim OMNI sudah dihemat. stats sekarang mengecualikannya, begitu juga harness benchmark-nya, tapi siapa pun yang mengueri ~/.omni/omni.db langsung harus menyaring agent_id sendiri.

Angka tinggi pantas dicurigai. Cacat terburuk di proyek ini melaporkan pengurangan paling besar, karena menghapus jawabannya terkompresi dengan sangat baik. Sandingkan angka mana pun dengan omni diff pada perintah sungguhan.

Angka gabungan yang rendah biasanya benar, dan bukan itu ukuran menilai OMNI. Sebagian besar panggilan memang dikembalikan utuh, jadi baca baris per kelasnya untuk melihat di mana kerjanya benar-benar terjadi.

--share dan --card tidak mungkin berbeda dari laporannya. Keduanya membaca agregasi yang sama dengan omni stats sendiri, sebuah pilihan yang disengaja setelah versi sebelumnya menghitungnya terpisah.

omni exec

Menjalankan satu perintah lewat seluruh pipeline lalu mencetak hasilnya, dengan catatan kaki yang menunjukkan berapa ongkosnya.

omni exec cargo test
cargo test: 411 passed, 1 failed
  FAILED ledger::tests::renders_identical_bytes_for_identical_state
[OMNI Active] ⏺ 93.7% reduction (2.3 KB → 147 B) 3ms

Ini harness yang diminta dipakai setiap laporan bug di proyek ini, karena ia mengeluarkan host dari gambar. Kalau sebuah kerusakan tetap muncul lewat omni exec, itu OMNI.

Bentuk argumennya persis

omni exec cargo test          # benar
omni exec -- cargo test       # gagal: No such file or directory
omni exec 'cargo test'        # jalan, bentuk string tunggal
omni exec sh -c 'a; b'        # jalan, bentuk argv terpisah

Bentuk -- justru yang orang raih dan justru yang tidak bekerja.

Flag

flagefeknya
--session <id>Teruskan id sesi host, dan itulah yang menentukan cakupan ledger
--agent <id>Catat run-nya di bawah agent_id tertentu
--help, -hBantuan

Keduanya yang dipakai pre-hook ketika ia menulis ulang sebuah perintah menjadi omni exec.

--session layak diketahui ketika Anda sedang menyelidiki perilaku ledger: ia satu-satunya cara menjalankan dua sesi berbeda dengan tangan lalu melihat beda antara pelipatan already shown dan pelipatan not shown here.

Isolasi basis datanya saat menyelidik

Keluarannya tidak deterministik terhadap basis data yang hangat, karena riwayat sesi memberi masukan ke penilainya. Beri setiap penyelidikan basis datanya sendiri:

OMNI_DB_PATH=/tmp/probe.db omni exec <perintah>

Basis data bersama yang hangat juga membuat penulisan berbaris antre, dan itu alasan biasa omni exec tampak menggantung.

Terkait

omni diff menunjukkan sebelum dan sesudah yang sama untuk perintah terakhir yang diproses hook, dan itu yang Anda butuhkan ketika perintah yang menarik sudah terlanjur berjalan.

omni retrieve

Mencetak isi yang diarsipkan sebuah penanda.

omni retrieve <handle>

Handle-nya adalah 16 karakter di dalam sebuah penanda:

[OMNI: 406 lines omitted, omni retrieve 0000000000000000 for full output]
[OMNI: 40 lines already shown, omni retrieve 0000000000000000]

Ia mengembalikan byte aslinya. Bukan ringkasan, bukan menjalankan ulang perintah Anda, dan bukan perkiraan.

Bekerja di semua host, di sesi mana pun, dengan atau tanpa MCP terpasang. Agent yang server MCP-nya terdaftar memanggil omni_retrieve sebagai gantinya dan tidak pernah perlu bertanya ke Anda.

Apa yang bisa salah

Handle-nya tidak ketemu. Arsipnya jendela bergulir 30 hari, jadi isi yang lebih tua dari itu sudah hilang. Jejak eksekusi apa adanya dipangkas lebih awal lagi, pada hari ketujuh.

Handle yang gagal ditemukan di dalam jendela itu adalah bug serius, bukan sekadar merepotkan, karena penanda yang menjanjikan isi bisa diambil kembali adalah satu hal yang tidak boleh salah pada mekanisme ini. Laporkan.

Anda mengetik teks penandanya, bukan handle-nya. Hanya heksanya, tanpa kurung siku, tanpa awalan.

Kenapa ia bisa menjanjikan ini

Sebuah run diarsipkan sebelum penandanya ditulis, dan pengarsipan yang gagal membuat run itu tetap apa adanya alih-alih menghasilkan sebuah penanda. Jadi handle yang bisa Anda lihat adalah handle yang isinya ada. Urutan itu sebuah perbaikan, bukan rancangan awalnya: versi sebelumnya mengembalikan kunci bahkan ketika penulisannya gagal.

omni session

Keadaan sesi: apa yang sudah dihabiskan sesi ini, untuk apa, dan cara membawanya melewati sebuah restart.

omni session --status

Flag

flagefeknya
--statusStatus sesi saat ini
--historyRiwayat sesi terkini
--healthDasbor kesehatan sesi secara visual
--transcriptTranskrip sesi terkini
--clearSetel ulang sesi saat ini
--continueLanjutkan sesi yang basi
--resumeLanjutkan sesi yang terputus
--injectKeluarkan konteks sesi untuk dikonsumsi sebuah agent
--jsonBisa dibaca mesin
--help, -hBantuan

omni sessions diterima sebagai alias.

Apa itu sesi di sini

Kunci cakupannya adalah id sesi milik host, bukan cap waktu internal. Perbedaan itu pernah jadi cacat sungguhan: sebuah id berbasis jam dinding internal pernah mencakup 16 proyek dalam satu nilai, yang akan membuat ledger memberi tahu satu sesi bahwa ia sudah ditunjukkan keluaran yang sebenarnya pergi ke sesi lain.

Itu juga alasan omni exec menerima --session: tanpa id host yang diteruskan tidak ada cakupan ledger, dan karena itu untuk beberapa waktu jalur exec sama sekali tidak menjalankan ledger.

Kesinambungan melewati restart

Konteks sesi disuntikkan saat sesi dimulai, jadi agent baru tahu berkas mana yang sedang panas dan apa galat aktif terakhirnya. Memulai ulang editor Anda atau berganti host tidak menghilangkan konteks proyeknya.

--inject adalah bentuk manual dari itu, untuk host yang disambungkan untuk mengonsumsinya.

Untuk menyeberang ke mesin yang tidak berbagi basis data, pakai perkakas MCP omni_handoff, yang mengekspor keadaannya sebagai markdown yang bisa dibawa. Subperintah CLI dengan nama itu sudah dihapus; perkakas MCP-nya tidak berubah. Ia berada di luar set bawaan yang diiklankan, jadi ia butuh OMNI_MCP_TOOLS=all.

Retensi

Sesi ada di tingkat kerja 30 hari. Transkrip apa adanya ada di tingkat 7 hari, karena ia dua orde besaran lebih berat per baris.

Sisanya

Perintah yang cukup butuh satu paragraf ketimbang satu halaman.

update

omni update

Mengambil rilis terbaru dari GitHub lalu memperbarui. Untuk saat ini hanya pemasangan lewat Homebrew; cara pemasangan lain diperbarui lewat kanalnya sendiri.

Jalankan ulang omni init sesudahnya kalau catatan rilisnya menyebut kontrak hook berubah.

reset

omni reset            # menu interaktif
omni reset --all      # semua integrasi, dan menawarkan menghapus omni.db
omni reset --claude   # satu host

Flag per host mencerminkan init: --claude, --cursor, --zed, --cline, --roo / --roo-code, --copilot, --gemini, --opencode, --codex, --antigravity, --hermes, --pi.

--all satu-satunya yang menawarkan menghapus basis data Anda, dan ia bertanya lebih dulu. Ia menyimpan cadangan konfigurasi yang ia cabut.

dashboard

omni dashboard
omni dashboard --port 8080     # bawaannya 7717

Angka yang sama dengan yang dicetak omni stats, di peramban. Hanya baca, membaca basis data yang sama, dan mengikat 127.0.0.1 dan tidak yang lain. Ctrl-C menghentikannya.

diff

omni diff

Keluaran perintah terakhir, mentah dibanding hasil sulingan. Cara tercepat menumbuhkan kepercayaan pada apa yang dikerjakan OMNI, dan hal pertama yang dijalankan ketika sebuah hasil terlihat salah.

query

omni query errors in last 5 commands
omni query warnings from cargo
omni query context for src/main.rs
omni query timeline today
omni query timeline today --json

Bahasa kueri kecil yang tetap atas riwayat penyulingan, bukan teks bebas. Empat bentuk didukung dan itulah keempatnya di atas. --json untuk keluaran yang bisa dibaca mesin.

patterns

omni patterns
omni patterns --tool cargo

Galat yang terus kembali lintas sesi. --tool <nama> membatasinya ke satu tool.

Berguna untuk pertanyaan “apakah saya pernah kena ini”, pertanyaan yang tidak bisa dijawab sendiri oleh sesi yang baru.

remember

omni remember 'The staging database ignores migrations run outside the deploy job'

Menyimpan sebuah fakta di ingatan permanen, bisa diambil kembali lewat omni_recall atau lewat suntikan konteks sesi.

Layak disimpan: sebuah keputusan dan alasannya, sebuah jebakan, sebuah batasan yang tidak disebut berkas mana pun. Tidak layak disimpan: apa pun yang sudah dicatat repositorinya.

engram

omni engram
omni engram --json

Ringkasan subtugas yang selesai, ditulis seiring pekerjaan rampung.

goal

omni goal set 'Migrate the billing service off the legacy queue'
omni goal show
omni goal clear

Memancang sebuah tujuan utama. Penilainya mengutamakan keluaran yang berkaitan dengannya, dan agent diingatkan padanya alih-alih melantur sepanjang sesi yang panjang. Ingatan tujuan menghormati ttl_days miliknya sendiri, bukan tingkat retensi standar.

set adalah subperintah bawaannya, jadi omni goal 'sebuah teks' juga bekerja.

version

omni version
omni version --json

Rincian versi dan lingkungan: tanggal build, hash git, dan jalur yang diputuskan OMNI untuk konfigurasi dan basis datanya. Layak disertakan di laporan bug mana pun.

Variabel lingkungan

Semua variabel OMNI_* yang dibaca binary-nya. Dikelompokkan menurut alasan Anda akan meraihnya.

Yang benar-benar akan Anda pakai

variabelefeknya
OMNI_PASSTHROUGH=1Lewati pipeline sepenuhnya. Keluaran mentah, setiap kali.

Ini hal pertama yang harus diraih ketika Anda curiga OMNI mengubah sesuatu yang seharusnya tidak ia ubah, dan hal yang perlu disetel ketika Anda butuh byte yang persis dari berkas yang dibaca lewat shell Anda. Keluaran yang identik dengan dan tanpa variabel itu berarti OMNI tidak terlibat.

Di mana segala sesuatu tinggal

variabelefeknya
OMNI_HOMEMenaruh seluruh pohonnya, konfigurasi dan data, di satu direktori
OMNI_CONFIG_HOMEDirektori konfigurasi, kalau Anda mau ia terpisah dari data
OMNI_DATA_HOMEDirektori data, begitu juga
OMNI_DB_PATHJalur ke basis data SQLite
OMNI_TRANSCRIPT_DIRTempat transkrip sesi ditulis

OMNI_DB_PATH pantas mendapat catatan sendiri. Arahkan ia ke berkas coretan setiap kali Anda menyelidiki perilaku OMNI dengan tangan:

OMNI_DB_PATH=/tmp/probe.db omni exec <perintah>

Keluarannya tidak deterministik terhadap basis data yang hangat, karena riwayat sesi memberi masukan ke penilainya, dan basis data bersama yang hangat membuat penulisan berbaris antre, yang biasanya jadi alasan omni exec tampak menggantung. Ia juga wajib ketika menjalankan test suite terhadap pemasangan yang hidup.

Perintah yang dijalankan lewat server MCP

variabelefeknya
OMNI_RUN_TIMEOUT_SECSBerapa lama omni_run menunggu sebuah perintah. Bawaannya 60.

Bawaannya ada di bawah semua batas waktu MCP host yang kami tahu, jadi perintah yang macet kembali sebagai satu kalimat yang menyebut dirinya sendiri, bukan galat idle timeout milik host. Naikkan kalau sebuah build memang butuh lebih lama, dan ingat host punya batasnya sendiri: milik Cursor 120 detik, dan tidak ada yang bisa OMNI lakukan untuk memperpanjangnya.

Retensi

variabelefeknya
OMNI_TRACE_RETENTION_DAYSBerapa hari jejak eksekusi apa adanya disimpan. Bawaannya 7.
OMNI_SESSION_TTLUmur sesi, dalam menit

Tahan jendela jejaknya tetap terbuka selagi sebuah pengukuran berjalan:

OMNI_TRACE_RETENTION_DAYS=90 ...

Tujuh hari itu alasan tidak ada angka benchmark yang diterbitkan bisa diturunkan ulang seminggu setelah ia diukur, termasuk oleh orang yang menerbitkannya. Naikkan sebelum Anda mulai, bukan sesudah.

Tekanan konteks

variabelefeknya
OMNI_CONTEXT_WINDOWPetunjuk ukuran jendela konteks, dalam token
OMNI_PRESSURE_WARNAmbang peringatan, sebagai bagian dari jendelanya
OMNI_PRESSURE_CRITICALAmbang kritis

OMNI memperkirakan seberapa penuh konteks sesinya lalu menyuntikkan peringatan setelah ambang-ambang ini. Setel jendelanya agar cocok dengan model yang sebenarnya Anda jalankan.

Perilaku sesi

variabelefeknya
OMNI_FRESHPaksa sesi baru alih-alih melanjutkan yang ada
OMNI_CONTINUEDisetel secara internal oleh dispatcher untuk menandai sesi lanjutan
OMNI_SUBAGENT=1Mode subagent
OMNI_AGENT_IDIdentitas agent, dicatat di setiap baris

OMNI_AGENT_ID yang perlu dipahami sebelum mengutip angka apa pun. Setiap baris penyulingan membawanya, dan baris yang tercatat di bawah terminal adalah byte TTY yang tidak pernah dibaca model mana pun. Mencampur baris itu dengan baris hook pernah membuat 73% penghematan yang diterbitkan menjadi fiksi. Ketika beberapa agent berjalan berdampingan, beri masing-masing id-nya sendiri.

Loop

variabelefeknya
OMNI_LOOP_IDPengenal loop. Alfanumerik dan tanda hubung, 64 karakter.
OMNI_LOOP_GOALString tujuan, 500 karakter, tanpa metakarakter shell
OMNI_LOOP_BUDGETAnggaran token per iterasi, sampai 10 juta
OMNI_LOOP_ITERATIONNomor iterasi saat ini. Bawaannya 0.

Lihat Loop engineering.

Keluaran

variabelefeknya
OMNI_QUIET=1Redam baris statistik di stderr pada mode pipa
OMNI_OUTPUT_JSONKeluaran JSON dari jalur pipa
OMNI_EXPORT_CSVEkspor data sesi sebagai CSV saat sesi berakhir

Build dan internal

Bukan untuk disetel dengan tangan. Didaftar supaya melihat salah satunya di stack trace atau di konfigurasi yang dihasilkan bukan lagi misteri.

variabeldisetel oleh
OMNI_BINDitulis ke dalam plugin Hermes yang dihasilkan, menyebut jalur binary-nya
OMNI_CMDPerintah yang sedang diproses, jatuh ke CMD kalau kosong
OMNI_GIT_HASH, OMNI_BUILD_DATEDicap saat build, dilaporkan omni version
OMNI_UNRELEASED_ENTRIESDihitung build.rs dari CHANGELOG.md, jadi binary yang dibangun dari pohon tanpa tag mengatakannya di omni doctor
OMNI_PI_PACKAGE_SOURCESumber paket untuk integrasi agent Pi
OMNI_DATA_HOME_UNSET_FOR_TESTHanya untuk fixture test

Benchmark

variabelefeknya
OMNI_BENCH_DBBasis data yang diputar ulang
OMNI_BENCH_ALL=1Putar ulang populasi yang lebih luas termasuk keluaran terminal
OMNI_BENCH_RTKJalur ke binary rtk, menambahkan lengan adu langsung

OMNI_BENCH_ALL ada supaya harness-nya bisa menyebut populasi mana yang ia ukur, bukan membiarkannya disimpulkan sendiri. Menyertakan keluaran terminal mencetak 79,1% sementara populasi yang menghadap model mencetak 43,3%, atas data yang sama.

Perkakas MCP

omni init mendaftarkan OMNI sebagai server MCP, yang memberi agent perkakas yang bisa ia panggil sendiri tanpa lewat Anda. Halaman ini menjelaskan seluruh 25 perkakas. Host Anda hanya diberi tahu sebagiannya.

Yang diberitahukan ke host Anda

Definisi perkakas berada di awal setiap request, jadi perkakas yang tidak pernah dipanggil akan dibaca ulang pada setiap request di setiap sesi, bukan dibayar sekali saja. Karena itu OMNI hanya mengiklankan set yang bisa dipakai oleh tier host Anda:

tieryang diiklankan
Fullomni_retrieve, omni_explain_savings
Handoff-first, dan host apa pun yang tidak dikenali OMNIdua itu, ditambah omni_remember, omni_recall, omni_run, omni_find_noise, omni_context_breakdown, omni_history
MCP-onlykeempatnya, ditambah omni_run: tanpa hook, output tool milik host tidak pernah ditulis ulang, jadi omni_run satu-satunya jalan agar model membaca lebih sedikit

Host tier Full mendapat daftar terpendek justru karena shell-nya sudah dipasangi hook oleh OMNI. Diukur pada 256 sesi yang terekam, dua perkakas itu membawa 138 dari 149 panggilan dengan 467 byte, sedangkan enam sisanya memakan 1.631 byte untuk 11 panggilan sepanjang korpus. Host Handoff-first tidak pernah mendapat penulisan ulang pada output perkakas bawaannya, jadi MCP adalah satu-satunya pintu OMNI di sana dan tidak ada yang dipangkas.

Di Claude Code, daftar terpendek pun tetap ada ongkosnya, dan byte-nya justru bagian yang lebih kecil: host membuang seluruh cache prompt ketika sebuah server MCP tersambung atau terputus sementara perkakasnya sudah dimuat. Agent yang didukung menjelaskan artinya dan cara menjalankan hook tanpa server MCP.

Perkakas yang tidak diiklankan juga tidak bisa dipanggil di tier itu, jadi jalan kembalinya adalah CLI atau override:

perkakasdi host tier Full
omni_runomni exec <perintah>
omni_rememberomni remember '<fakta>'
omni_context_breakdownomni stats --view context
omni_historyomni stats --view detail, yang menggabung perintah berulang jadi satu baris berhitung, bukan satu baris per panggilan
omni_recall, omni_find_noisetidak ada padanan CLI; OMNI_MCP_TOOLS=all

OMNI_MCP_TOOLS=all mengiklankan seluruh 25 perkakas, dan omni doctor menyebutkan set mana yang sedang berlaku serta host mana yang terdeteksi:

  MCP tools:      2 of 25 advertised to claude_code (OMNI_MCP_TOOLS=all restores the rest)

Pastikan daftarnya terhadap binary Anda sendiri, bukan terhadap halaman ini:

{ echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"p","version":"1"}}}'
  echo '{"jsonrpc":"2.0","method":"notifications/initialized"}'
  echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'; } \
| omni --mcp | tail -1 | jq -r '.result.tools[].name'

Mengambil isi kembali

perkakasapa yang ia lakukan
omni_retrieveAmbil isi lengkap yang dihilangkan sebuah penanda, lewat handle-nya
omni_runJalankan perintah shell lalu kembalikan keluaran sulingannya
omni_signal_extractTarik sinyal dari teks mentah, tanpa pipeline hook

omni_run paling penting di host yang tidak bisa menulis ulang tool shell bawaannya. Di sana, ia satu-satunya jalan menuju keluaran sulingan, dan itu sebabnya omni init --cursor memasang sebuah aturan yang menyuruh agent mengutamakannya.

Memahami apa yang dikerjakan OMNI

perkakasapa yang ia lakukan
omni_explain_savingsRute, penyaring, byte masuk dan keluar, persentase hemat per perintah terkini
omni_historyPenyulingan terkini beserta penghematan dan rasio per panggilan
omni_context_breakdownRincian token menurut sumbernya untuk giliran saat ini
omni_densitySeberapa banyak sinyal dibanding kebisingan dalam sepotong teks
omni_budgetPemakaian anggaran token dan efisiensi kompresi untuk sesi ini

Keempat ini jawaban yang tepat untuk “apakah OMNI membantu di sini”. Tarik angkanya, jangan membentuk kesan.

Ingatan

perkakasapa yang ia lakukan
omni_rememberSimpan sebuah keputusan, jebakan atau batasan
omni_recallPencarian semantik lintas engram, pengetahuan dan riwayat penyulingan
omni_knowledgeKueri atau simpan pengetahuan proyek lintas sesi
omni_insightPersoalan dan pola galat berulang teratas di seluruh proyek
omni_adaptive_insightsPola pengambilan kembali, sebagai penilaian atas keefektifan penyulingan
omni_handoffEkspor keadaan sesi sebagai markdown yang bisa dibawa, tanpa perlu jaringan

omni_handoff hanya ada di MCP. Subperintah CLI dengan nama itu sudah dihapus.

Sesi dan pencarian

perkakasapa yang ia lakukan
omni_sessionKeadaan sesi: status, konteks, bersihkan
omni_searchCari di riwayat sesi ini
omni_queryKueri riwayat penyulingan dengan bentuk kueri yang tetap
omni_agentsAgent lain yang sedang aktif di proyek ini

Penyetelan

perkakasapa yang ia lakukan
omni_find_noiseAnalisis jejak mentah terkini untuk mencari kebisingan yang berulang

Sifatnya saran saja, dan pembelajarnya memperlakukan “berulang” sebagai “kebisingan”. Ia pernah menyarankan membuang ^metadata:, ^spec:, pagar blok kode dan ^\[stderr\], yang justru struktur dan kanal galat. Jangan pernah menempelkan keluarannya ke mana pun tanpa membacanya baris demi baris.

Loop

perkakasapa yang ia lakukan
omni_loop_statusCek status sekali panggil untuk orkestrator sebelum tiap iterasi
omni_loop_memoryBaca dan tulis ingatan loop yang selamat dari restart sesi
omni_set_loop_contextPerbarui konteks loop secara dinamis
omni_budget_statusStatus anggaran untuk iterasi ini. Panggil sebelum pekerjaan mahal.
omni_verifySebagai subagent pemeriksa, nilai pekerjaan terkini agent pembuat

Lihat Loop engineering.

Satu perkakas yang bukan perkakas

omni_auto_noise muncul sebagai sebuah string di kode sumber server dan bukan sebuah perkakas. Ia nama penyaring yang diteruskan ke pembangkit TOML. Memanggilnya mengembalikan -32602 tool not found.

Ia pernah salah hitung: grep atas kode sumber untuk "omni_*" mengembalikan 27, jadi 27 salah di mana pun ia muncul. Jalankan panggilan tools/list di atas untuk hitungannya.

Yang keluar dari permukaan

omni_context diiklankan sampai 0.7.7 dan tidak pernah sekali pun dipanggil di 253 sesi yang terekam, jadi ia memakan 189 byte di prefix setiap request untuk kapabilitas yang tidak pernah dijangkau siapa pun. Sekarang ia omni context <file>, yang tidak memakan biaya per request:

omni context src/ledger/mod.rs

Agen tetap bisa menjangkaunya lewat omni_run.

Hook

Titik masuk yang dipanggil host agent. Anda tidak pernah mengetik ini; omni init menuliskannya ke konfigurasi host.

titik masukkapan host memanggilnya
omni --pre-hookSebelum sebuah tool berjalan
omni --post-hookSetelah sebuah tool menghasilkan keluaran
omni --hookDispatcher universal, untuk host dengan satu slot hook
omni --session-startSesi dimulai
omni --session-endSesi berakhir
omni --pre-compactSebelum host memadatkan percakapan
omni --mcpJalan sebagai server MCP lewat stdio
cmd | omniMode pipa, tanpa host sama sekali

Satu panggilan, dua hook

Shell menjalankan apa pun yang diserahkan pre-hook dan tidak pernah tahu OMNI ada. Hanya jawabannya yang ditulis ulang, dan itu sebabnya tidak ada apa pun di sini yang bisa mengubah apa yang dilakukan perintah Anda.

Apa yang dilakukan masing-masing

Pre-tool memutuskan apakah sebuah perintah perlu dilewatkan OMNI sama sekali, dan bisa menulis ulangnya menjadi omni exec. Tulis ulang itu membungkus seluruh string perintahnya, termasuk pengalihan keluaran, dan itu sebabnya berkas log di disk dari sebuah perintah yang cocok bisa ternyata versi sulingannya. Patahkan awalannya (env cargo test) ketika Anda butuh log mentahnya.

Post-tool acara utamanya: keluaran mentah datang, pipeline berjalan, dan hasil sulingannya diserahkan kembali untuk disubstitusi host.

Post-tool-failure ada karena perintah yang gagal harus lewat apa adanya, dan para host sangat tidak sepakat soal bagaimana mereka menyatakan sebuah perintah gagal. Claude Code mengirim string biasa, Error: Exit code N. Yang lain membawa penanda galat terstruktur. Membaca satu bentuk saja adalah bug yang pernah dimiliki proyek ini.

Session start menyuntikkan konteks proyek: berkas yang sedang panas, galat aktif terakhir, pengetahuan yang tersimpan, tujuan yang dipancang.

Session end menulis ringkasannya dan bisa mengekspor CSV.

Pre-compact adalah peringatan dari host bahwa percakapannya sebentar lagi dipendekkan.

Dua pintu menuju satu pipeline

post_tool dan pipe adalah titik masuk terpisah yang menjalankan tahapan yang sama, dan menjaga keduanya seiring sudah berulang kali jadi sumber bug. Tiga perbaikan terpisah masing-masing membetulkan satu salinan dan meninggalkan yang lain. Tahap ledger sempat ada di post_tool selama satu rilis sebelum pipe memilikinya sama sekali, jadi perintah yang ditulis ulang pre-hook menjadi omni exec mendapat penyaringnya dan tidak lebih.

Kalau Anda mengubah perilaku pipeline, ubah keduanya, atau periksa kenapa tidak.

Kenapa ia tidak pernah membuat agent Anda mati

Setiap hook berjalan di dalam catch_unwind, di titik masuk tertinggi. Panik di satu tahap berongkos satu penyulingan, bukan satu sesi. Basis data yang tidak mau dibuka berongkos konteks sesi, bukan pipeline-nya.

Itu aturan gagal terbuka, dan ia punya satu sisi tajam yang layak disebut: gagal terbuka berarti menyerahkan kembali byte mentahnya. Ia tidak berarti mengeluarkan ringkasan yang riang. Distiller yang tidak mengurai apa pun lalu mengembalikan 0 tests passed sedang gagal tertutup, dan dengan percaya diri.

Apa yang harus dilakukan sebuah host supaya semua ini berarti

Mendaftarkan hook-nya, lalu menghormati apa yang ia kembalikan.

Paruh kedua tidak dijamin. OMNI pernah mengeluarkan hasil sulingannya di bawah kunci yang diabaikan Claude Code, jadi tidak ada yang diterapkan di jalur itu selama dua rilis sementara OMNI mencatat sebuah penghematan dan mencetak catatan kaki untuk masing-masingnya. Perbaikannya membetulkan kuncinya dan meninggalkan bentuk nilainya tetap salah, dan gejalanya bertahan tanpa disadari.

Dua hal yang diajarkannya, keduanya tidak kentara:

  • Tulis ulangnya divalidasi terhadap skema keluaran milik tool host itu sendiri, satu bentuk per tool. Tidak ada bentuk universal.
  • Bidangnya saling bebas. Tulis ulang yang ditolak tetap meloloskan pesan konteksnya, jadi catatan kaki penghematan tercetak untuk penyulingan yang dibatalkan.

Jadi bukti sebuah hook bekerja bukan catatan kakinya dan bukan omni stats. Buktinya adalah transkrip sesi milik host sendiri:

grep -c hook_error_during_execution ~/.claude/projects/<proyek>/<sesi>.jsonl

Peringatan yang bisa Anda lihat bukan peringatan yang bisa dilihat agent. Lampiran seperti itu tidak pernah masuk ke konteks model, jadi sebuah agent bisa bilang hook-nya baik-baik saja sementara terminal Anda penuh penolakan.

Menguji sebuah hook dengan tangan

Beri ia muatan secara langsung ketimbang menebak jalur mana yang berjalan:

echo '<json muatan host>' | omni --post-hook

omni exec dan post-hook memilih rute yang berbeda, jadi hasil dari yang satu bukan bukti tentang yang lain.

Bentuk muatannya, dan ia berbeda per tool

Salah bentuk gagal secara diam-diam dan seragam: hook keluar 0, tidak mencetak apa pun, dan sebuah probe membacanya sebagai 0.0% saved. Tidak ada error untuk disadari, jadi distiller yang sebenarnya memotong 96% bisa dianggap tidak berjalan.

Bash menaruh keluarannya langsung di tool_response:

{ "session_id": "s1", "tool_name": "Bash",
  "tool_input":    { "command": "cat server.log" },
  "tool_response": { "content": "baris satu\nbaris dua\n" } }

Read membungkusnya di dalam file, dan kunci tambahannya bukan hiasan. startLine adalah titik hitung penomoran cat -n di sisi host, jadi fold yang membuang baris di atas baris yang selamat harus menggesernya:

{ "session_id": "s1", "tool_name": "Read",
  "tool_input":    { "path": "notes.txt" },
  "tool_response": { "file": { "filePath": "notes.txt", "content": "...",
                               "startLine": 1, "numLines": 40, "totalLines": 400 } } }

Balasannya berada di bawah hookSpecificOutput.updatedToolOutput, dan Claude Code memvalidasinya terhadap skema keluaran milik tool itu sendiri. Read yang terbungkus mendapat balasan file, dan itulah bentuk yang diterima host.

tool_response.content yang polos tidak mendapat balasan polos. Diverifikasi, bukan diasumsikan: ia kembali sebagai {status, result}, yaitu bentuk milik OMNI sendiri dan itulah pokok #187. Jadi bentuk polos berguna untuk menanyakan apa yang dilakukan ledger, dan balasannya bukan yang akan diterima Read sungguhan.

Kedua bentuk Read itu sama-sama sah dan keduanya mencapai tahap yang berbeda. Muatan Read dengan tool_response.content polos tetap diterima dan sampai ke ledger, sedangkan tool_response.file.content sampai ke distiller readfile dan ke penyesuaian startLine. Tidak ada yang salah; keduanya menjawab pertanyaan berbeda. Probe yang membidik satu tapi dibangun di atas yang lain mengembalikan nol bersih dan tampak seperti sebuah kesimpulan.

Agent yang didukung

Host mana yang Anda jalankan menentukan apa yang bisa dilakukan OMNI, dan langit-langitnya milik host, bukan milik pipeline-nya. Halaman ini layak dibaca sebelum menilai apakah OMNI layak berada di sana.

Tingkatannya

tingkathostyang Anda dapat
PenuhClaude Code, Codex CLI, Gemini CLI, OpenClaw, Hermes, Pi, Aider (pipa)Host menerapkan tulis ulang OMNI, jadi model membaca keluaran sulingan dari tool bawaannya sendiri.
Handoff duluCursor, WindsurfHost tidak bisa menulis ulang keluaran tool bawaannya. omni_run menyuling apa pun yang dilewatkan melaluinya, dan omni init --cursor memasang aturan yang membuat agent meraihnya.
MCP sajaCline, Roo, OpenCode, VS Code, Zed, Copilot, AntigravityIngatan, pemanggilan kembali dan keadaan sesi, ditambah omni_run. Keluaran tool milik host tidak pernah ditulis ulang, jadi omni_run satu-satunya jalan agar model membaca lebih sedikit.
omni doctor     # mencetak tingkat untuk setiap host yang terpasang

Penghematan hanya pernah dihitung di tempat model benar-benar menerima lebih sedikit. Host yang tidak bisa menerapkan tulis ulangnya tidak akan menggerakkan angka penyulingan sebaik apa pun penyaringnya, dan mengaku sebaliknya akan menjadi cacat yang sama dengan distiller yang melaporkan penghematan yang tidak ia lakukan.

Memasang untuk masing-masing

omni init --claude       omni init --cursor      omni init --zed
omni init --cline        omni init --roo         omni init --roo-code
omni init --copilot      omni init --gemini      omni init --opencode
omni init --codex        omni init --openclaw    omni init --antigravity
omni init --hermes       omni init --vscode      omni init --pi
omni init --all

Catatan khusus per host

Codex CLI hanya menjalankan hook yang sudah dinyatakan tepercaya, dan melewati sisanya tanpa sepatah kata. Setelah omni init --codex, jalankan codex sekali lalu setujui di bagian “Hooks need review”. omni doctor gagal sampai Anda melakukannya. Ini pernah menggigit: Codex menjalankan nol hook selama satu rilis penuh sementara semuanya tampak terpasang dengan benar.

Cursor tidak bisa menulis ulang keluaran tool shell bawaannya. Mencegat shell-nya dengan menolak eksekusi lalu mengembalikan keluarannya sebagai pesan hook secara teknis mungkin dan sudah ditolak: itu memberi tahu agent bahwa perintahnya diblokir, menghilangkan kode keluarnya, memindahkan semantik eksekusi ke dalam OMNI, dan melewati alur persetujuan host.

Claude Code mencocokkan lebih dari sekadar Bash. Pencocok post-tool-nya Bash|Read|Grep|WebFetch, dan itulah yang akhirnya membuat distiller pembacaan berkas, pencarian dan pengambilan web berjalan sama sekali. Tiga di antaranya sudah ditulis dan diuji sepenuhnya dan tidak pernah sekali pun berjalan di sesi sungguhan.

Ia juga host tempat omni init memasang dua hal dan hanya satu di antaranya yang bekerja. Hook-lah yang memendekkan keluaran. Server MCP adalah kemudahan yang menaruh omni_retrieve dan omni_explain_savings di tempat yang bisa dipanggil agent, dan di host ini ia sebuah pertukaran dengan cache prompt: dua definisi itu berukuran 471 byte JSON di awal setiap request, dan host membuang seluruh cache ketika sebuah server MCP tersambung atau terputus sementara perkakasnya sudah dimuat, yang bisa terjadi sendiri saat proses server keluar lalu tersambung lagi di tengah sesi tanpa Anda melakukan apa pun. omni init --claude mendaftarkannya. Jalur plugin tidak menambah definisi perkakas sama sekali. Untuk tetap memakai hook tanpa pertukaran itu, pasang separuhnya saja:

omni init --hook     # hook saja, tanpa pendaftaran MCP
omni init --mcp      # server MCP saja, kalau Anda berubah pikiran

omni doctor kemudian melaporkan server MCP sebagai tidak terdaftar, bukan sebagai kesalahan, dan baik ia maupun --fix tidak akan memasangnya kembali (#757). Menyebut host-nya, omni init --claude, tetap memasang keduanya.

OpenClaw Penuh di giliran berikutnya, bukan giliran saat ini. Hook tool_result_persist-nya menulis ulang hasil tool yang disimpan OpenClaw, jadi model membaca byte sulingan setiap kali transkrip dibaca ulang, sementara giliran yang menjalankan perintahnya masih melihat keluaran mentah. Di situlah biaya sebuah hasil tool sebenarnya berada, karena ia dibaca ulang berkali-kali, tetapi ini Penuh yang lebih sempit daripada milik Claude Code.

Hermes menyerahkan setiap hasil tool ke OMNI, bukan hanya terminal, dan itu jangkauan terluas di antara host di sini: ia yang menjalankan distiller baca berkas, pencarian dan fetch di host yang punya ketiganya. Ia juga punya halaman integrasinya sendiri: Hermes Agent.

Windows didukung. Jalur, akhiran baris dan imbuhan .exe sudah ditangani, dan matriks CI-nya menyertakan windows-latest.

Beberapa agent sekaligus

Beri masing-masing identitasnya sendiri supaya angkanya tetap bisa dipisah:

OMNI_AGENT_ID=claude ...
OMNI_AGENT_ID=cursor ...

omni_agents melaporkan agent mana yang sedang aktif di proyeknya. Setiap baris penyulingan membawa id-nya, dan angka apa pun yang mencampurnya sedang menggambarkan sebuah campuran, bukan sebuah produk.

Menambahkan sebuah host

Modul agent-nya ada di src/agents/, satu berkas per host, dan masing-masing menulis format konfigurasi milik host itu di lokasi milik host itu. Polanya kecil dan sebagian besar mekanis.

Bagian yang tidak mekanis adalah verifikasinya. “Penyedia tidak bisa dihubungi” bukan alasan membiarkan sebuah jalur hook tak terverifikasi: sajikan API-nya, dan palsukan modelnya saja. Hook yang tidak pernah berjalan di produksi sudah ditemukan di tiga host justru dengan cara itu.

Hermes Agent

OMNI menancap ke Hermes dua kali: sebuah plugin di jalur hook, dan server MCP.

lapisanmekanismeapa yang berubah
hook~/.hermes/plugins/omni-signal-engine/__init__.py yang memanggil omni --pre-hook, --post-hook, --session-startkeluaran tool terminal disuling sebelum masuk ke konteks Hermes
MCPmcp_servers.omni yang menjalankan omni --mcpperkakas MCP OMNI menjadi perkakas kelas satu di Hermes

Prasyarat

brew install fajarhide/tap/omni
omni --version
omni doctor

export HERMES_VENV="${HERMES_HOME:-$HOME/.hermes}/hermes-agent/venv"
export HERMES_PY="$HERMES_VENV/bin/python"
"$HERMES_PY" --version      # 3.11 atau lebih baru

Python dari venv-nya dibutuhkan karena hermes plugins enable berjalan di dalamnya.

Pasang

omni init --hermes
hermes plugins enable omni-signal-engine
hermes gateway restart
"$HERMES_PY" -m pip install hermes-omni-plugin

omni init --hermes idempoten. Ia memasang kerangka plugin-nya, mendaftarkan server MCP di ~/.hermes/config.yaml kalau belum ada di sana, menyalakan kompresi Hermes ketika itu aman, dan menulis nilai bawaan berorientasi Hermes ke ~/.omni/config.toml tanpa menimpa konfigurasi OMNI yang sudah ada.

Pakai salah satu, hermes-omni-plugin atau kerangka omni init --hermes, jangan keduanya sekaligus, atau Anda akan dapat pendaftaran plugin ganda.

Konfigurasi

# ~/.hermes/config.yaml

plugins:
  enabled:
    - omni-signal-engine

mcp_servers:
  omni:
    command: "/opt/homebrew/bin/omni"
    args: ["--mcp"]
    env:
      OMNI_AGENT_ID: "hermes"

compression:
  enabled: true
  threshold: 0.50     # kompres pada pemakaian konteks 50%
  target_ratio: 0.20  # sisakan 20%

Tiga hal harus benar: plugins.enabled memuat omni-signal-engine, mcp_servers.omni menunjuk binary yang sebenarnya, dan compression.enabled menyala supaya pemadatan Hermes sendiri dan peringatan tekanan OMNI sejalan, bukan saling berkelahi.

OMNI_AGENT_ID: "hermes" lebih penting daripada kelihatannya. Tanpa itu, baris milik Hermes bercampur dengan milik semua host lain dan tidak ada angka tentang keduanya yang berarti.

Verifikasi

omni doctor

hermes plugins list | grep omni        # harapkan: omni-signal-engine enabled
hermes tools list | grep mcp_omni_     # himpunan yang diiklankan, setelah restart

Lalu satu pemeriksaan fungsional pada fixture sungguhan:

cat tests/fixtures/cargo_test_500.txt | omni --post-hook 2>&1 | head -20
# baris test yang lulus dibuang, kegagalannya dipertahankan

Untuk uji langsung, jalankan sesuatu yang berisik lewat tool terminal milik Hermes (terminal("npm install", timeout=120)) lalu bandingkan ukuran hasil tool-nya dengan keluaran npm mentah. Pastikan dengan omni stats.

Baca daftarnya, jangan percaya angka yang tertulis. Panduan ini pernah menyebut 27, yang datang dari mem-grep kode sumber server dan menghitung nama penyaring sebagai perkakas, lalu 25, yang adalah seluruh permukaannya dan bukan yang diberitahukan ke host. Hermes host tingkat Penuh, jadi yang diiklankan kepadanya omni_retrieve dan omni_explain_savings, dua yang membayar tempatnya di prefiks setiap permintaan. OMNI_MCP_TOOLS=all menyajikan seluruh permukaannya.

Di mana OMNI membantu dan di mana tidak

keluaranefek OMNI
npm install, cargo build, docker buildbesar, 70% ke atas. Progres, cache hit dan hash layer murni basa-basi.
run testbesar. Vonis dan kegagalannya selamat, baris ok tidak.
pembacaan berkasnol dari penyaringnya, banyak dari ledger saat dibaca ulang
kubectl -o json, terraform plannol, disengaja. Muatan terstruktur lewat begitu saja.
perintah pendeknol, atau sedikit negatif. Penandanya berongkos lebih mahal daripada penghematannya.

Pakai perkakas MCP-nya sebagai kendali Hermes atas semua itu: omni_explain_savings untuk melihat berapa sebenarnya ongkos sebuah perintah terkini, omni_retrieve untuk mengambil kembali isi yang terlipat, dan omni_budget untuk melihat token sesinya pergi ke mana. Perkakas itu berada di luar set yang diiklankan secara bawaan, jadi ia butuh OMNI_MCP_TOOLS=all.

Setelah Hermes di-upgrade

hermes plugins list | grep omni
hermes tools list | grep mcp_omni_
omni doctor

Sebuah upgrade bisa menyetel ulang plugins.enabled atau memindahkan venv-nya. Keduanya gagal diam-diam: plugin-nya sekadar berhenti dipanggil, dan tidak ada yang mengumumkannya.

Loop engineering

Menjalankan agent dalam sebuah loop, ketika setiap iterasi menambah isi jendela konteks yang tidak ikut membesar. Bagian OMNI adalah melacak apa yang sudah dihabiskan loop-nya dan membawa ingatan melintasi iterasi yang kalau tidak begitu akan direset.

Menyiapkan sebuah loop

export OMNI_LOOP_ID=$(uuidgen)
export OMNI_LOOP_GOAL="Migrate the billing service off the legacy queue"
export OMNI_LOOP_BUDGET=100000
export OMNI_LOOP_ITERATION=0
variabelbatasan
OMNI_LOOP_IDalfanumerik dan tanda hubung, 64 karakter
OMNI_LOOP_GOAL500 karakter, tanpa metakarakter shell
OMNI_LOOP_BUDGETanggaran token per iterasi, sampai 10 juta
OMNI_LOOP_ITERATIONiterasi saat ini, bawaannya 0
OMNI_SUBAGENT=1mode subagent
OMNI_AGENT_IDidentitas, supaya jejaknya tetap bisa dipisah

Anggaran

Anggarannya adalah perkiraan pemakaian jendela konteks per iterasi, bukan batas belanja.

bentuk loopanggaranyang OMNI lakukan
perbaikan cepat, 1 sampai 5 iterasi200.000pelacakan pasif
pengerjaan fitur, 5 sampai 20100.000penyulingan aktif, engram
refactor besar, 20 sampai 10080.000penyulingan agresif, peringatan prediktif
maraton, 100 ke atas60.000kompresi maksimum, ingatan loop yang bertahan

Peringatan menyala di 65% dan kritis di 82%, bisa disetel dengan OMNI_PRESSURE_WARN dan OMNI_PRESSURE_CRITICAL.

Jangan setel anggaran di atas 1 juta: peringatannya tidak akan pernah menyala sebelum kehabisan sungguhan. Jangan setel di bawah 30 ribu: agent-nya akan memadatkan terus-menerus dan kehilangan ingatan jangka pendeknya.

String tujuannya juga menggeser tingkat keagresifan penyulingan. Tujuan yang memuat “test” mempertahankan detail test, “debug” menyimpan konteks galat, “refactor” mengompres lebih keras.

Perkakas yang dipanggil orkestrator

Tidak satu pun dari perkakas ini diiklankan secara bawaan. OMNI hanya memberi tahu host tentang perkakas yang memang dipakai tier-nya, dan perkakas loop berada di luar set itu, jadi orkestrator yang memanggilnya membutuhkan OMNI_MCP_TOOLS=all di environment-nya. omni doctor menyebutkan set mana yang sedang berlaku. Daftar per tier ada di rujukan perkakas MCP.

perkakaskapan
omni_loop_statussekali sebelum tiap iterasi, gambaran lengkap termurah
omni_budget_statussebelum apa pun yang mahal
omni_set_loop_contextketika tujuan atau cakupannya bergeser di tengah loop
omni_loop_memorybaca dan tulis ingatan yang selamat dari restart sesi
omni_verifysebagai pemeriksa, untuk menilai pekerjaan terkini si pembuat

Pembuat dan pemeriksa

Dua agent, satu lapisan konteks bersama.

LOOP_ID=$(uuidgen)

# perkakas loop berada di luar set bawaan yang diiklankan
export OMNI_MCP_TOOLS=all

# pembuat
export OMNI_AGENT_ID=maker OMNI_LOOP_ID=$LOOP_ID
claude "Implement: $GOAL"

# pemeriksa
export OMNI_AGENT_ID=checker OMNI_SUBAGENT=1
RESULT=$(claude "Verify the implementation of: $GOAL. Use the omni_verify tool.")

case "$RESULT" in
  *PASS*) echo "verification passed" ;;
  *)      echo "checker found issues" ;;
esac

Nilai OMNI_AGENT_ID yang berbeda itulah yang menjaga keduanya tidak saling mengotori. Jejaknya ditandai per agent, jadi omni_verify bisa membaca lintas sesi sementara penulisannya tetap terisolasi.

Empat hal yang membuatnya bekerja: beri pemeriksanya kriteria yang spesifik dan terukur, jaga last_n_calls antara 5 dan 20, naikkan ke manusia setelah tiga kegagalan pemeriksa berturut-turut, dan ingat bahwa setiap interaksi dicatat sehingga jejak auditnya nyata.

Pemantauan

omni stats                 # waktu nyata
omni stats --view detail
omni stats --json          # untuk dibaca orkestrator
omni doctor                # kesehatan

omni handoff bukan subperintah CLI. Ia sudah dihapus. Perkakas MCP omni_handoff tidak berubah, jadi ekspor sesi bisa dijangkau dari klien MCP, bukan dari shell.

Peringatan soal angkanya

Setiap angka yang dilaporkan sebuah loop dicakup oleh agent_id. Kalau orkestrator dan para agent berbagi satu id, penghematan si pembuat dan si pemeriksa jadi satu angka dan tidak ada yang berarti. Setel id-nya per peran sebelum iterasi pertama, bukan setelah Anda menyadarinya.

Bagian pengembang, dalam bahasa Inggris

Tujuh halaman ini tidak diterjemahkan. Isinya berubah paling sering dan pembacanya orang yang akan mengirim patch, jadi salinan Indonesia-nya akan lebih sering salah daripada membantu.

  • Architecture Peta modulnya dan apa yang dimiliki masing-masing.
  • The pipeline, stage by stage Setiap tahap, apa yang boleh ia lakukan, dan apa yang tidak.
  • Adding a distiller Perubahan yang paling sering dilakukan orang di sini.
  • Testing Termasuk cara membuktikan sebuah test bisa gagal, yang di repo ini bukan formalitas.
  • Benchmarks Metode di balik setiap angka di manual ini, dan perintah untuk memutarnya ulang di riwayat Anda sendiri.
  • Where OMNI is going Termasuk daftar hal yang sengaja tidak dibangun, beserta alasannya.
  • Releasing Urutan langkahnya, dan jebakan yang pernah membuat satu rilis tidak menghasilkan binary sama sekali.