Claude is not expensive.
Your terminal is.
OMNI sits on a shell hook and takes the noise out of command output before your agent reads it. It also remembers your project between sessions, so you stop re-explaining it. Lossy, always reversible, and it never invents a result.
brew install fajarhide/tap/omni Then omni init. Also on and
v0.6.8 Stable
Reproducible on tests/fixtures/: 16.5 KB of test output becomes 1,100 B, a 93.3% cut.
- Cut
- The compile log, the timing footer, and 478 passing tests. A test that passed tells your agent nothing it can act on.
- Kept
- The one test that failed, the panic and its file and line, and the runner's own result line. The count is copied, never recomputed.
Where it fails, then what it promises
A tool that asks to sit between you and your output should lead with the parts that go badly.
- 63.6%of all calls
- saved nothing at all. Across 1,810 replayed executions close to two thirds went straight back, zero bytes added, zero removed. All of the 58.9% headline comes from the other 36.4%.
- 82 to 308 msper hooked command
- and the cost grows with your history. A 496 byte
git statustakes about 82ms against a fresh database and about 308ms against a 97 MB one. A 16.5 KBcargo testtakes about 276ms. Budget for it. - exit != 0never compressed
- Failing commands pass through whole, structured output is never touched, and a distiller that cannot parse its input stays quiet instead of guessing.
- Reversible
- Everything cut is archived to local SQLite keyed by SHA-256. Your agent gets the hash and calls it back when it wants the rest. omni_retrieve
- Never invents
- A distiller that parsed no signal hands back the raw output. It will not write a green "no errors" line that nothing supports. issue 143
- Never hides
- Any command that exits non-zero passes through untouched. A buried error costs more than an uncompressed one. issue 120
- Never mangles
- JSON, YAML, NDJSON and CSV go through byte for byte, because a corrupted payload costs more than a missed compression. pipeline::format
Any tool claiming to save 90% of every command is telling you it summarised output you needed.
1,810 real commands, replayed on the release binary
One developer's actual usage over months, not a fixture set chosen to flatter the result. 15.0 MB in, 6.2 MB out.
| Command | Calls | In | Out | Saved |
|---|---|---|---|---|
cargo | 29 | 424 KB | 13 KB | |
git | 256 | 5.9 MB | 509 KB | |
ls | 52 | 71 KB | 29 KB | |
kubectl | 212 | 4.4 MB | 2.3 MB | |
find | 39 | 83 KB | 53 KB | |
grep | 184 | 534 KB | 385 KB | |
cat | 85 | 515 KB | 468 KB |
cargo over 29 calls cat over 85 calls cargo carries the result and cat is close to a no-op. The weak row stays in the table, because quietly dropping the rows that look bad is how 58.9% turns into a fake 90%. Run omni stats for your own.
Your agent also forgets everything overnight
- New session
- You re-explain the project layout, which module is broken, and that it is Postgres rather than MySQL. The agent already has it. You carry on from where you stopped.
- Bug you already fixed
- The agent walks into the same framework quirk it solved yesterday, because nothing kept the answer. The agent pulls the stored fix back through omni_recall before it repeats the mistake.
- Cursor to Claude Code
- New editor, new agent, no context. You start over. The session summary is injected on the way in. The new agent is current.
- Agent drifts off task
- Three prompts later it is refactoring something you never asked about. omni goal restates the objective on every prompt.
Nine commands, all of them local
No dashboard and no account. Nothing about your machine leaves it.
- omni init
- Wire the hook into Claude Code, Cursor, Windsurf, Codex or Antigravity. Interactive.
- omni doctor --fix
- Check hooks, MCP wiring and filter cost, then repair whatever is broken.
- omni stats
- What it actually saved on your machine. Takes
--today,--week,--month. - omni diff
- The last raw input beside what the agent received. This is how you check its work.
- omni session --status
- Context pressure, stored engrams, and the errors still open in this session.
- omni learn --discover
- Read your shell history and propose filters for your own internal tools.
- omni goal
- Set the objective once. OMNI restates it on every prompt so the agent stops drifting.
- omni remember
- Store a project rule or a gotcha in local SQLite. Recalled by semantic search later.
- omni reset
- Take it back out. Clean uninstall, keeping a backup of your config.
Six stages, and the second one usually ends it
- Read
- A shell hook catches stdout on its way to the agent. Nothing about how you work changes.
- Guard
- Non-zero exit, or JSON, YAML, NDJSON, CSV? Straight through. This branch is taken more often than not.
- Score
- Every line gets a weight. Stack frames and errors score high, progress bars and passing tests score low.
- Collapse
- Repetition folds. Four hundred passing tests become the runner's own summary line, never a paraphrase of it.
- Distill
- A command-specific reader runs. Returning the input is always allowed, inventing a summary is not.
- Persist
- Everything cut is hashed into local SQLite, so any of it comes back on demand.
If OMNI panics it fails open: the raw output passes through and your agent never notices. That is the design, not a safety net bolted on afterwards.
What people ask before installing it
- Does OMNI delete my logs?
- No. Everything it cuts is compressed and archived to a local SQLite store, keyed by SHA-256. Your agent receives the hash and pulls the full original back whenever it needs it, through the omni_retrieve MCP tool. Nothing is deleted and nothing leaves your machine.
- Will it slow down my terminal?
- Yes, measurably. OMNI runs on every hooked command and the cost grows with your history. A 496 byte git status takes about 82ms against a fresh database and about 308ms against a 97 MB one. A 16.5 KB cargo test takes about 276ms.
- How much does it actually save?
- 58.9% fewer bytes across 1,810 replayed real commands. That average hides a lot: 63.6% of those commands saved nothing at all. The whole saving comes from the remaining 36.4%, mostly cargo and other noisy tooling.
- Can it hide an error from my agent?
- No. Any command that exits non-zero passes through verbatim, uncompressed. Structured output such as JSON, YAML, NDJSON and CSV is never touched. A distiller that cannot parse its input returns the raw output rather than summarising it.
- Which agents does it work with?
- Claude Code, Cursor, Windsurf, Roo Code, OpenAI Codex and Antigravity. It installs as a shell hook rather than a wrapper, so you keep typing the commands you already type and nothing about your workflow changes.
- Can I add filters for my own tools?
- Yes. Filters are TOML files in ~/.omni/signals/ that match a command by regex and strip lines by pattern. You can write them by hand, or run omni learn --discover to have OMNI read your shell history and draft them from the noise it already sees.
- What does OMNI cost?
- Nothing. It is MIT licensed with no paid tier, no account and no telemetry. If it saves you nothing, omni stats will tell you so and omni reset removes it.
A passion project, MIT licensed
Built by one developer who got tired of paying to read progress bars. If it saves you nothing, omni stats will say so and omni reset removes it. That is the whole deal.