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.

Works today

The context and token layer: repeated reads fold to one line, noisy builds keep the result, credentials are redacted before the model reads them.

1 of 3 · cargo build --release raw 3,220 B
cargo build --release
Compiling proc-macro2 v1.0.86
Compiling unicode-ident v1.0.13
Compiling cfg-if v1.0.0
Compiling libc v0.2.161
Compiling autocfg v1.4.0
Compiling syn v2.0.87
[ 94 lines shortened for this page ]
Compiling ciborium-io v0.2.2
Compiling omni v0.5.4 (/Users/fajar/project/token-efficient/omni)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 42.31s
Build: ok
[OMNI: 102 lines omitted, omni retrieve c1e393afcc6ee81a for full output]
97.4% smaller, every cut line archived exit 0, omni 0.7.13

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.

Why

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]
The git_status_dirty.txt fixture through omni exec 0.7.13. The handle in the last line prints the original back.
What it does

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 retrieve prints 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 remember stores rules and gotchas, omni goal restates 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.

Where it works

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_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.
Numbers

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.

Read from the manual on main at build time, so the two cannot drift apart. Best class build and test at 10.7%, worst git at 1.3%.
Class Calls In Filters With ledger
other 6,457 4.81 MB 0.8% 2.8%
file read 1,056 1.89 MB 0.0% 1.5%
git 899 0.86 MB 0.0% 1.3%
search 810 0.77 MB 3.4% 3.4%
infra 215 0.14 MB 2.4% 2.7%
build and test 41 0.02 MB 9.0% 10.7%

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.

Commands

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.