One place for the skills, credentials and memory of every agent you use.
Because switching from Claude Code to Codex should not mean starting over.
brew install fajarhide/tap/contexere
Shipping today: the context and token layer. Memory and skills across agents are next.
The context and token layer: repeated reads fold to one line, noisy builds keep the result, credentials are redacted before the model reads them.
3,220 B becomes 84 B: a successful build is a hundred lines of Compiling. The agent gets one line and a handle for the rest.
Install
brew install fajarhide/tap/contexere curl -fsSL omni.weekndlabs.com/install | bash irm omni.weekndlabs.com/install.ps1 | iex Then run contexere init to wire it into your agent.
Your agent pays to read every line a command prints
Progress bars, a few hundred passing tests, the same git hints every time, a file it read ten minutes ago. Each line costs tokens and pushes something useful further back in the context window. Some of it is noise, and some of it the agent is already holding.
What git status printed 496 B
On branch feature/omni
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: src/main.rs
new file: src/lib.rs
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: Cargo.toml
modified: README.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
tests/fixtures/ What the agent read 187 B
git: on feature/omni | staged:2 mod:2 untracked:1 Staged: src/main.rs, src/lib.rs Modified: Cargo.toml, README.md [OMNI: 12 lines omitted, omni retrieve 2a4f08eb59bf14a0 for full output]
git_status_dirty.txt fixture through omni exec 0.7.13. The handle in the last line prints the original back.
Five things on every command, and one cost
- Drops noise
- A distiller written for the command keeps errors, stack frames and what changed, and drops progress bars, passing tests and the hints git prints every time. If it cannot parse the output, it hands it back untouched rather than guessing. issue 143
- Folds repeats
- Output the agent has already been shown this session comes back as one marker with a handle, because those bytes are already in its context. A file it asks to read is always delivered whole. When the context compacts, Contexere forgets what it had shown.
- Keeps everything
- Everything cut is archived to local SQLite keyed by SHA-256, for inputs up to 64 KB, and
omni retrieveprints it back on any host. Above that size the marker says so. Handles last a rolling 30 days. issue 271 - Leaves failures alone
- A command that exits non-zero reaches the agent whole, and JSON, YAML, NDJSON and CSV go through byte for byte. Most commands are not touched at all: 98.8% in the current benchmark, with zero bytes added. issue 120
- Remembers the project
-
omni rememberstores rules and gotchas,omni goalrestates the objective on every prompt, and a new session, or a new editor, starts with a summary of the last one. - What it costs
- About 21 ms per hooked command on a fresh database and about 61 ms against a 205 MB one, growing with your history rather than with the output. Budget for it.
If Contexere panics, it fails open: the raw output passes through and your agent never notices.
What each agent lets Contexere do
Only a host that can rewrite its own tool output gets shell distillation. The rest get memory, and no claim of more. omni doctor prints the tier for every host you have installed.
- Full
- Claude Code, Codex CLI, Gemini CLI, Aider (pipe) The host applies Contexere'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_rundistils anything you route through it, andomni init --cursorinstalls 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.
2.4% fewer bytes on the current benchmark, and why that is low
9,478 commands from one developer's week, replayed on the release binary: 0.8% from the distillers, 2.4% once the ledger folds repeats, and 98.8% of calls left untouched. That week was mostly short shell plumbing with little to cut. The figure moves a lot with the workload, which is why the manual publishes every run, including the ones that read worse.
| Class | Calls | In | Filters | With ledger |
|---|---|---|---|---|
other | 6,457 | 4.81 MB | 0.8% | |
file read | 1,056 | 1.89 MB | 0.0% | |
git | 899 | 0.86 MB | 0.0% | |
search | 810 | 0.77 MB | 3.4% | |
infra | 215 | 0.14 MB | 2.4% | |
build and test | 41 | 0.02 MB | 9.0% |
The manual also replays rtk, lean-ctx, caveman and headroom on the same bytes and publishes every arm, including the ones where Contexere loses.
benchmarks Run omni stats for your own.
Apache 2.0, no account, no paid tier
Everything runs on your machine. If it saves you nothing, omni stats will say so and omni reset removes it. omni help lists the rest.
- contexere init
- Wire the hook and the MCP server into your agent. Interactive.
- contexere doctor --fix
- Check the hooks and the MCP wiring, then repair whatever is broken.
- contexere stats
- What it actually saved on your machine, and from which commands.
- omni retrieve
- Print what a marker archived, by the 16 characters inside it.
- contexere reset
- Take it back out. Clean uninstall, keeping a backup of your config.
There are no filters to write. The pattern layer was retired in 0.7.4, and what runs is the Rust distillers and the ledger, compiled in. If a tool needs handling, open an issue and it ships in the binary.