Skip to content

Repository files navigation

OMNI Logo

OMNI

Your agent reads everything your terminal prints, then reads most of it again next turn. OMNI drops the noise before the model sees it, and hands back a reference for the lines it has already shown. Nothing is deleted, and it never invents a result.

🇺🇸 English | 🇯🇵 日本語 | 🇨🇳 简体中文 | 🇸🇦 العربية | 🇮🇩 Bahasa Indonesia | 🇻🇳 Tiếng Việt | 🇰🇷 한국어

CI Release Rust MCP License: MIT Hits

brew install fajarhide/tap/omni && omni init

OMNI distilling a noisy cargo test run down to the verdict, then omni stats

What it does

Drops the noise. Build logs, Docker layer hashes, progress bars, ANSI colour. The part of the output nobody reads is removed before it reaches the model.

Stops re-sending what the agent has already seen. A run of lines it was shown earlier in the session comes back as one marker with a handle, not as the bytes again. This is the half a filter cannot do: it removes bytes because they are already in the context, not because a pattern calls them noise.

Remembers across sessions. Restart your editor or switch agents, and the project context is still there.

Gets out of the way. A failing command passes through verbatim. JSON, YAML and CSV are never touched. Most commands are handed back unchanged, and that is the intended behaviour rather than a gap.


The same git log, side by side

Without OMNI, one commit's Author / Date / body already fills the screen. With OMNI, every commit is kept, as one hash subject line. Nothing is summarised away.

Without OMNI
raw git log -15
With OMNI
every commit kept, 94% smaller
a raw verbose git log -15: one commit's Author, Date and body fill the screen the same git log -15 through OMNI: every commit as a compact hash + subject line, 94% smaller

Measured on the fixtures in tests/fixtures/, so you can reproduce any row:

Command Without OMNI With OMNI Saved
cargo test (490 passed, 10 failed) 16.5 KB of per-test output the runner's own pass/fail summary 92.9%
git status (dirty) 496 B of porcelain the branch and the changed paths 61.7%
docker build (heavy cache noise) 9.2 KB of layer hashes and progress bars the build result, cache hits folded 35.9%
git diff (multi-file) lockfiles, whitespace, generated churn the code that actually changed 25.2%
kubectl get pods (35 pods, 5 crashing) the full table the full table 0%, by design

That last row is the point of the table. A pod listing is an enumeration where every row is a datum, so there is nothing to drop, and OMNI reports nothing rather than inventing a saving.


Nothing is ever lost. It never makes something up.

Four guarantees, each one a link to the code or the issue that made it true rather than a sentence asking you to trust it.

Guarantee How Proof
Get the original back, byte-for-byte everything cut is archived in a local SQLite RewindStore; the marker carries a handle, and omni retrieve <handle> prints it on any host, with the omni_retrieve MCP tool where MCP is wired Architecture
Never fabricates a result a distiller that parsed no signal returns the raw output, never a green no errors / passed string #143
Failures are never masked a command that exits non-zero passes through verbatim #120
Structured data is never touched JSON / YAML / NDJSON / CSV pass through byte-for-byte pipeline::format

What OMNI remembers, and for how long

Three tiers, already in the schema, never written down until now. The short answer to "will OMNI still know my project after a month away" is yes for the conclusions and no for the raw bytes.

Tier What Kept
Permanent project knowledge, recurring error patterns, engrams, goal memory until you delete it, except goal memory, which honours its own ttl_days
Working, 30 days sessions, distillation rows, hot files, the RewindStore, the event index, the ledger rolling window
Verbatim, 7 days execution_traces and the session transcript shorter on purpose: it is two orders of magnitude heavier per row

The boundary this sets is worth stating plainly, because it is the one thing a handle cannot promise: omni retrieve for content archived more than 30 days ago will not resolve. Hold the shortest window open while measuring with OMNI_TRACE_RETENTION_DAYS=90.

omni reset wipes all of it, and omni doctor shows the live counts.


What each host lets OMNI do

Tier Hosts What you get
Full Claude Code, Codex CLI, Gemini CLI, Aider (pipe) The host applies OMNI's rewrite, so the model reads distilled output from its own built-in tools.
Handoff-first Cursor, Windsurf The host cannot rewrite built-in tool output. omni_run distils anything you route through it, and omni init --cursor installs the rule that makes the agent reach for it.
MCP-only Cline, Roo, OpenCode, VS Code, Zed, Copilot, Antigravity, Hermes, Pi Memory, recall and session state. No shell distillation, and no claim of it.

omni doctor prints the tier for every installed host. Savings are only ever counted where the model actually received less.

Codex CLI needs one extra step. It runs only hooks it has been told to trust and skips the rest without a word, so after omni init --codex start codex once and approve them under "Hooks need review". omni doctor fails until you do. See #359.


Install

macOS / Linux:

brew install fajarhide/tap/omni
omni init      # interactive setup for Claude, Cursor, VS Code, Codex, Antigravity
omni doctor    # verify, or `omni doctor --fix`

Universal (macOS / Linux / WSL):

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

Windows (PowerShell):

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

Then run your commands normally. There is nothing to prefix and no proxy to wrap.


Numbers

Every figure OMNI publishes states the corpus it came from and the week it covers, because execution_traces is pruned after seven days and a number that outlives its corpus cannot be checked by anyone, us included.

On the 2026-08-03 to 08-10 UTC window, replayed on the release binary over real command executions that reached a model:

  • Build and test output: 76.9%. File re-reads, the largest class: 0.0% from the filters and 26.3% from the ledger, which is the gap the ledger exists for.
  • 97.3% of calls saved nothing at all, and we publish that because it tells you what the rest are worth. No call came back larger in this measurement. There were 2 until (#398), and we published them while they stood.
  • 21 ms per command, growing with your history rather than with the payload. On a 205 MB database it is 61 ms.

Full corpus, per-class breakdown, fixtures and latency tables: docs/BENCHMARKS.md. Reproduce them with cargo test --release --test bench_replay -- --ignored.


FAQ

Does OMNI permanently delete my logs? No. Raw logs are stored locally in the SQLite RewindStore. The agent receives a hash and can retrieve the full log at any time.

Will this slow down my terminal? Measurably, yes, and the cost grows with your history rather than with the payload. A 496-byte git status takes about 21 ms against a fresh database and 61 ms against a 205 MB one. Budget for it. OMNI_PASSTHROUGH=1 skips the pipeline entirely.

Can I add my own filters? No, and that is deliberate as of 0.7.0. The filters are compiled into the binary, so the set that runs is the set the tests cover and there is no file on disk that changes what your agent is shown. Two tiers were removed to get there: a project's own .omni/signals/, which made a filter a thing a repository could ship to its visitors, and ~/.omni/signals/. The whole filter layer is worth 804 bytes over 6,656 recorded commands, so what it cost in surface it was not paying back. If a tool needs a signal, open an issue and it ships in the binary for everyone.

How do I get back something OMNI folded? omni retrieve <handle>, where the handle is the 16 characters inside the marker. It works on every host, with or without MCP. Agents that have the MCP server wired can call omni_retrieve instead.

Can I watch the numbers instead of running a command? omni dashboard serves them on 127.0.0.1, read-only, from the same database omni stats reads. It binds loopback and nothing else.

How do I see my own savings? omni stats after a few days. It leads with session lifetime, how many commands a session carries before the host closes it, because that is what the context window costs you. The distillation percentage below it is a diagnostic for one host's pipeline, not a product claim. omni stats --share prints a copy-pasteable summary, and omni stats --card writes it as an image.


Learn more


brew install fajarhide/tap/omni && omni init

A passion project for the era of agentic AI. Contributions welcome. MIT License.

Star History Chart

Built with care by Fajar Hidayat

About

Decides what your AI coding agent reads, and keeps receipts. Every cut is recoverable byte for byte, it never invents a result, and the numbers are replayed from your own corpus.

Topics

Resources

Contributing

Security policy

Stars

320 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages