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 kali | 97,2% dari bacaan kedua |
git log -15 | 94% lebih kecil, semua commit tetap ada |
cargo test, 490 lulus dan 10 gagal | 92,9% lebih kecil, kegagalannya tetap ada |
| keluaran build dan test di seluruh korpus | 78,0% |
| definisi perkakas di setiap request | 4.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 panjang | Konteks yang tidak habis untuk basa-basi berarti lebih banyak giliran sebelum mentok, dan lebih sedikit pemadatan yang memutus alur kerja Anda. |
| Tagihan lebih kecil | 14,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 hilang | Semua yang dibuang diarsipkan secara lokal. omni retrieve <handle> mencetaknya kembali. |
| Tidak ada yang dikarang | Kalau OMNI tidak paham sebuah keluaran, keluaran itu dikembalikan apa adanya, bukan ditebak. |
| Ingatan antar sesi | Tutup editor, kembali besok, pindah dari Claude Code ke Codex: konteks proyeknya masih ada. |
| Tidak ada yang perlu diubah | Tanpa 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
okdan 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:
| Solusinya | Kenapa gagal |
|---|---|
| Potong keluaran yang panjang | Yang terpotong bagian akhir, dan vonis justru tinggal di akhir |
| Minta model meringkas | Satu panggilan inferensi per perintah, dan peringkas bisa salah |
| Minta agent lebih hati-hati | Berhasil 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:
- Menolak. JSON, YAML, base64, terraform plan, apa pun yang akan diurai oleh langkah berikutnya: dikembalikan tanpa disentuh. Lihat Yang tidak pernah disentuh.
- 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.
- Melipat baris berulang. Deretan panjang baris yang nyaris identik menjadi satu baris yang menyebut ada berapa banyak.
- 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 perintah | Panggilan di korpus | Hemat |
|---|---|---|
| build dan test | 69 | 78,0% |
| pembacaan berkas | 699 | 25,0% |
git, gh | 661 | 22,1% |
pencarian (grep, rg, find) | 828 | 13,3% |
infra (kubectl, az, docker) | 254 | 8,2% |
| selebihnya | 4.145 | 6,9% |
| semuanya | 6.656 | 14,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.
| tingkat | bobot | apa yang mendarat di sini |
|---|---|---|
| Critical | 1,0 | galat, kegagalan, baris vonis, apa pun yang menyebut nama berkas dan nomor baris |
| Important | 0,7 | peringatan, hitungan, keadaan yang berubah |
| Noise | 0,1 | progres, 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:
- 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.
- Jangan pernah menghilangkan jawaban diam-diam. Apa pun yang dibuang meninggalkan penanda, dan kalau isinya memungkinkan, sebuah handle yang mengambilnya kembali.
- 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.
| asal | penanda | artinya |
|---|---|---|
| sesi | N lines already shown | agent masih memegang byte ini, jadi handle-nya gratis kecuali ia memilih membaca ulang |
| proyek | N lines not shown here | ini 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.
| memuat | ukuran | |
|---|---|---|
ledger_lines | (scope, line_hash, ts, agent_id) | 16 byte hash per baris |
rewind_store | byte asli dari deretan yang dilipat, dikunci dengan SHA-256 miliknya | isinya, 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:
| byte | hemat | |
|---|---|---|
| omni, penyaring saja | 6.469.047 ke 6.292.856 | 2,7% |
rtk pipe | 6.469.047 ke 6.067.012 | 6,2% |
lean-ctx compress | 6.469.047 ke 6.073.757 | 6,1% |
| omni, dengan ledger | 6.469.047 ke 5.506.627 | 14,9% |
rtk pipe + ledger omni | 6.469.047 ke 5.333.483 | 17,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 baru | basis data 205 MB | |
|---|---|---|
git status (496 B) | 21,1 ms | 60,7 ms |
cargo test (16,5 KB) | 24,5 ms | 64,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:
| kelas | penyaring | dengan ledger |
|---|---|---|
| build dan test | 76,9% | 78,0% |
| pembacaan berkas | 0,0% | 25,0% |
git, gh | 4,4% | 22,1% |
| pencarian | 4,8% | 13,3% |
| infra | 4,4% | 8,2% |
| selebihnya | 0,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 podsadalah 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
sqlite3lewat hook Bash saat sedang menyelidiki OMNI. Pipeline-nya bisa melipat baris yang sedang Anda hitung, dan filterLIKEyang menangkap baris keliru sudah pernah memasukkan angka salah ke sebuah issue yang terbit. Daftarkan barisnya sebelum mengutip agregat apa pun atasnya, dan setelOMNI_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
| tingkat | apa | disimpan |
|---|---|---|
| Permanen | pengetahuan proyek, pola galat yang berulang, engram, ingatan tujuan | sampai Anda menghapusnya, kecuali ingatan tujuan yang menghormati ttl_days miliknya sendiri |
| Kerja, 30 hari | sesi, baris penyulingan, berkas yang sering disentuh, arsip, indeks peristiwa, ledger | jendela bergulir |
| Apa adanya, 7 hari | jejak eksekusi dan transkrip sesi | sengaja 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:
- Klaim palsu. OMNI menyatakan hasil yang tidak didukung masukannya: sukses dilaporkan untuk sebuah kegagalan, hitungan yang tidak cocok dengan hitungan runner-nya sendiri.
- Sinyal yang hilang. Sesuatu yang dibutuhkan dibuang tanpa penanda yang menyebutnya.
- 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
| perintah | apa yang ia lakukan |
|---|---|
init | Pasang OMNI ke agent Anda, hook dan MCP |
doctor | Periksa pemasangannya sehat, dan perbaiki yang tidak |
update | Naikkan ke rilis terbaru |
reset | Cabut dengan bersih, sambil menyimpan cadangan konfigurasi Anda |
Melihat berapa yang dihemat
| perintah | apa yang ia lakukan |
|---|---|
stats | Berapa token yang dipotong, dan dari perintah mana |
retrieve | Cetak isi yang diarsipkan sebuah penanda, lewat handle-nya |
dashboard | Angka yang sama di peramban, di 127.0.0.1 |
diff | Keluaran perintah terakhir, sebelum dibanding sesudah |
session | Apa yang sudah dihabiskan sesi ini, dan untuk apa |
Menyetelnya
| perintah | apa yang ia lakukan |
|---|---|
exec | Jalankan satu perintah lewat OMNI, untuk melihat apa yang akan ia lakukan |
query | Cari penyulingan yang sudah lewat |
patterns | Galat yang terus kembali |
Ingatan
| perintah | apa yang ia lakukan |
|---|---|
remember | Simpan sebuah fakta untuk sesi berikutnya |
engram | Ringkasan subtugas yang selesai |
goal | Pancang tujuan utama supaya penilaiannya mengutamakannya |
version | Rincian 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.
| flag | host |
|---|---|
--claude | Claude Code (Anthropic) |
--cursor | Cursor |
--zed | Zed |
--cline | Cline |
--roo, --roo-code | Roo Code |
--copilot | GitHub Copilot CLI |
--gemini | Gemini CLI |
--opencode | OpenCode |
--codex | Codex CLI |
--openclaw | OpenClaw |
--antigravity | Antigravity IDE, dan webhook generik |
--hermes | Hermes Agent |
--vscode | VS Code (MCP) |
--pi | Pi 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
| flag | efeknya |
|---|---|
--all | Semua host di atas. Juga menulis .vscode/mcp.json di direktori saat ini. |
--hook | Hook saja, tanpa pendaftaran MCP |
--mcp | Pendaftaran MCP saja, tanpa hook |
--status | Laporkan apa yang saat ini terpasang, tanpa mengubah apa pun |
--uninstall | Cabut hook dan server MCP milik OMNI |
--help, -h | Bantuan |
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
| flag | efeknya |
|---|---|
--fix | Perbaiki masalah konfigurasi dan integrasi secara otomatis |
--detail | Cetak semua baris integrasi, bukan hanya yang perlu perhatian |
--json | Bisa dibaca mesin |
--help, -h | Bantuan |
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
| flag | efeknya |
|---|---|
--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 |
--json | Bisa dibaca mesin, ikut jendela --since |
--card | Tulis ringkasan sebagai gambar, berukuran untuk unggahan media sosial |
--help, -h | Bantuan |
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
| flag | efeknya |
|---|---|
--session <id> | Teruskan id sesi host, dan itulah yang menentukan cakupan ledger |
--agent <id> | Catat run-nya di bawah agent_id tertentu |
--help, -h | Bantuan |
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
| flag | efeknya |
|---|---|
--status | Status sesi saat ini |
--history | Riwayat sesi terkini |
--health | Dasbor kesehatan sesi secara visual |
--transcript | Transkrip sesi terkini |
--clear | Setel ulang sesi saat ini |
--continue | Lanjutkan sesi yang basi |
--resume | Lanjutkan sesi yang terputus |
--inject | Keluarkan konteks sesi untuk dikonsumsi sebuah agent |
--json | Bisa dibaca mesin |
--help, -h | Bantuan |
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
| variabel | efeknya |
|---|---|
OMNI_PASSTHROUGH=1 | Lewati 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
| variabel | efeknya |
|---|---|
OMNI_HOME | Menaruh seluruh pohonnya, konfigurasi dan data, di satu direktori |
OMNI_CONFIG_HOME | Direktori konfigurasi, kalau Anda mau ia terpisah dari data |
OMNI_DATA_HOME | Direktori data, begitu juga |
OMNI_DB_PATH | Jalur ke basis data SQLite |
OMNI_TRANSCRIPT_DIR | Tempat 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
| variabel | efeknya |
|---|---|
OMNI_RUN_TIMEOUT_SECS | Berapa 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
| variabel | efeknya |
|---|---|
OMNI_TRACE_RETENTION_DAYS | Berapa hari jejak eksekusi apa adanya disimpan. Bawaannya 7. |
OMNI_SESSION_TTL | Umur 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
| variabel | efeknya |
|---|---|
OMNI_CONTEXT_WINDOW | Petunjuk ukuran jendela konteks, dalam token |
OMNI_PRESSURE_WARN | Ambang peringatan, sebagai bagian dari jendelanya |
OMNI_PRESSURE_CRITICAL | Ambang 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
| variabel | efeknya |
|---|---|
OMNI_FRESH | Paksa sesi baru alih-alih melanjutkan yang ada |
OMNI_CONTINUE | Disetel secara internal oleh dispatcher untuk menandai sesi lanjutan |
OMNI_SUBAGENT=1 | Mode subagent |
OMNI_AGENT_ID | Identitas 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
| variabel | efeknya |
|---|---|
OMNI_LOOP_ID | Pengenal loop. Alfanumerik dan tanda hubung, 64 karakter. |
OMNI_LOOP_GOAL | String tujuan, 500 karakter, tanpa metakarakter shell |
OMNI_LOOP_BUDGET | Anggaran token per iterasi, sampai 10 juta |
OMNI_LOOP_ITERATION | Nomor iterasi saat ini. Bawaannya 0. |
Lihat Loop engineering.
Keluaran
| variabel | efeknya |
|---|---|
OMNI_QUIET=1 | Redam baris statistik di stderr pada mode pipa |
OMNI_OUTPUT_JSON | Keluaran JSON dari jalur pipa |
OMNI_EXPORT_CSV | Ekspor 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.
| variabel | disetel oleh |
|---|---|
OMNI_BIN | Ditulis ke dalam plugin Hermes yang dihasilkan, menyebut jalur binary-nya |
OMNI_CMD | Perintah yang sedang diproses, jatuh ke CMD kalau kosong |
OMNI_GIT_HASH, OMNI_BUILD_DATE | Dicap saat build, dilaporkan omni version |
OMNI_UNRELEASED_ENTRIES | Dihitung build.rs dari CHANGELOG.md, jadi binary yang dibangun dari pohon tanpa tag mengatakannya di omni doctor |
OMNI_PI_PACKAGE_SOURCE | Sumber paket untuk integrasi agent Pi |
OMNI_DATA_HOME_UNSET_FOR_TEST | Hanya untuk fixture test |
Benchmark
| variabel | efeknya |
|---|---|
OMNI_BENCH_DB | Basis data yang diputar ulang |
OMNI_BENCH_ALL=1 | Putar ulang populasi yang lebih luas termasuk keluaran terminal |
OMNI_BENCH_RTK | Jalur 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:
| tier | yang diiklankan |
|---|---|
| Full | omni_retrieve, omni_explain_savings |
| Handoff-first, dan host apa pun yang tidak dikenali OMNI | dua itu, ditambah omni_remember, omni_recall, omni_run, omni_find_noise, omni_context_breakdown, omni_history |
| MCP-only | keempatnya, 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:
| perkakas | di host tier Full |
|---|---|
omni_run | omni exec <perintah> |
omni_remember | omni remember '<fakta>' |
omni_context_breakdown | omni stats --view context |
omni_history | omni stats --view detail, yang menggabung perintah berulang jadi satu baris berhitung, bukan satu baris per panggilan |
omni_recall, omni_find_noise | tidak 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
| perkakas | apa yang ia lakukan |
|---|---|
omni_retrieve | Ambil isi lengkap yang dihilangkan sebuah penanda, lewat handle-nya |
omni_run | Jalankan perintah shell lalu kembalikan keluaran sulingannya |
omni_signal_extract | Tarik 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
| perkakas | apa yang ia lakukan |
|---|---|
omni_explain_savings | Rute, penyaring, byte masuk dan keluar, persentase hemat per perintah terkini |
omni_history | Penyulingan terkini beserta penghematan dan rasio per panggilan |
omni_context_breakdown | Rincian token menurut sumbernya untuk giliran saat ini |
omni_density | Seberapa banyak sinyal dibanding kebisingan dalam sepotong teks |
omni_budget | Pemakaian 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
| perkakas | apa yang ia lakukan |
|---|---|
omni_remember | Simpan sebuah keputusan, jebakan atau batasan |
omni_recall | Pencarian semantik lintas engram, pengetahuan dan riwayat penyulingan |
omni_knowledge | Kueri atau simpan pengetahuan proyek lintas sesi |
omni_insight | Persoalan dan pola galat berulang teratas di seluruh proyek |
omni_adaptive_insights | Pola pengambilan kembali, sebagai penilaian atas keefektifan penyulingan |
omni_handoff | Ekspor 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
| perkakas | apa yang ia lakukan |
|---|---|
omni_session | Keadaan sesi: status, konteks, bersihkan |
omni_search | Cari di riwayat sesi ini |
omni_query | Kueri riwayat penyulingan dengan bentuk kueri yang tetap |
omni_agents | Agent lain yang sedang aktif di proyek ini |
Penyetelan
| perkakas | apa yang ia lakukan |
|---|---|
omni_find_noise | Analisis 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
| perkakas | apa yang ia lakukan |
|---|---|
omni_loop_status | Cek status sekali panggil untuk orkestrator sebelum tiap iterasi |
omni_loop_memory | Baca dan tulis ingatan loop yang selamat dari restart sesi |
omni_set_loop_context | Perbarui konteks loop secara dinamis |
omni_budget_status | Status anggaran untuk iterasi ini. Panggil sebelum pekerjaan mahal. |
omni_verify | Sebagai 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 masuk | kapan host memanggilnya |
|---|---|
omni --pre-hook | Sebelum sebuah tool berjalan |
omni --post-hook | Setelah sebuah tool menghasilkan keluaran |
omni --hook | Dispatcher universal, untuk host dengan satu slot hook |
omni --session-start | Sesi dimulai |
omni --session-end | Sesi berakhir |
omni --pre-compact | Sebelum host memadatkan percakapan |
omni --mcp | Jalan sebagai server MCP lewat stdio |
cmd | omni | Mode 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
| tingkat | host | yang Anda dapat |
|---|---|---|
| Penuh | Claude 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 dulu | Cursor, Windsurf | Host 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 saja | Cline, Roo, OpenCode, VS Code, Zed, Copilot, Antigravity | Ingatan, 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.
| lapisan | mekanisme | apa yang berubah |
|---|---|---|
| hook | ~/.hermes/plugins/omni-signal-engine/__init__.py yang memanggil omni --pre-hook, --post-hook, --session-start | keluaran tool terminal disuling sebelum masuk ke konteks Hermes |
| MCP | mcp_servers.omni yang menjalankan omni --mcp | perkakas 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-pluginatau kerangkaomni 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-
grepkode 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 kepadanyaomni_retrievedanomni_explain_savings, dua yang membayar tempatnya di prefiks setiap permintaan.OMNI_MCP_TOOLS=allmenyajikan seluruh permukaannya.
Di mana OMNI membantu dan di mana tidak
| keluaran | efek OMNI |
|---|---|
npm install, cargo build, docker build | besar, 70% ke atas. Progres, cache hit dan hash layer murni basa-basi. |
| run test | besar. Vonis dan kegagalannya selamat, baris ok tidak. |
| pembacaan berkas | nol dari penyaringnya, banyak dari ledger saat dibaca ulang |
kubectl -o json, terraform plan | nol, disengaja. Muatan terstruktur lewat begitu saja. |
| perintah pendek | nol, 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
| variabel | batasan |
|---|---|
OMNI_LOOP_ID | alfanumerik dan tanda hubung, 64 karakter |
OMNI_LOOP_GOAL | 500 karakter, tanpa metakarakter shell |
OMNI_LOOP_BUDGET | anggaran token per iterasi, sampai 10 juta |
OMNI_LOOP_ITERATION | iterasi saat ini, bawaannya 0 |
OMNI_SUBAGENT=1 | mode subagent |
OMNI_AGENT_ID | identitas, supaya jejaknya tetap bisa dipisah |
Anggaran
Anggarannya adalah perkiraan pemakaian jendela konteks per iterasi, bukan batas belanja.
| bentuk loop | anggaran | yang OMNI lakukan |
|---|---|---|
| perbaikan cepat, 1 sampai 5 iterasi | 200.000 | pelacakan pasif |
| pengerjaan fitur, 5 sampai 20 | 100.000 | penyulingan aktif, engram |
| refactor besar, 20 sampai 100 | 80.000 | penyulingan agresif, peringatan prediktif |
| maraton, 100 ke atas | 60.000 | kompresi 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.
| perkakas | kapan |
|---|---|
omni_loop_status | sekali sebelum tiap iterasi, gambaran lengkap termurah |
omni_budget_status | sebelum apa pun yang mahal |
omni_set_loop_context | ketika tujuan atau cakupannya bergeser di tengah loop |
omni_loop_memory | baca dan tulis ingatan yang selamat dari restart sesi |
omni_verify | sebagai 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.