winnow
Calibrated context sieve for Claude Code: Jev judges each block of large tool output and hides confident-no blocks behind recallable stubs.
Overview
winnow filters large Read, Bash and Grep results before they enter Claude Code's context. It splits output into roughly 25-line blocks and makes one call to a judge asking, for each block, whether it is needed for the current task. Confident-yes and uncertain blocks are kept verbatim; confident-no blocks are cached and replaced with a three-line stub: what was hidden, a short summary from a cheap model (or a deterministic digest), and a key to restore the full text with winnow_recall. Nothing is lost.
By default the judge is Jev, which answers many yes/no questions in one call in a few hundred milliseconds. Because Jev was in early access, TypeSafe's system-one-adapter can stand in by prompting Claude Haiku 4.5, which works but is not calibrated. It runs as a tool.call hook, is MIT licensed and has tests.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Yes / no | Is block N needed for the current task? | yes · no |
How it works
- A large tool result is intercepted by the hook.
- Split into ~25-line blocks and ask the judge about each in one call.
- Hide confident-no blocks behind stubs with recall keys.
- Claude recalls hidden text on demand.
Strengths
- Reduces tokens from large tool outputs.
- Nothing is lost; hidden text is recallable.
- Uncertain blocks are kept by default.
Caveats
- Adapter fallback is not calibrated.
- Misjudged blocks cost a recall round trip.
At a glance
- Type
- Project
- Status
- beta
- Runtime
- Claude Code hook
- Has code
- yes
- Has tests
- yes
- License
- MIT
- Stars
- 110
Use cases and integrations
How curated lists describe it
A context filter for Claude Code that hides irrelevant tool-output blocks and keeps the original text available for recall.
logicrw/awesome-jev-projectsA calibrated context sieve for Claude Code: every tool result is judged by a System One model before it enters context.
wh000wh000/awesome-jev-liveJudges tool results before admitting them into Claude Code context.
cobanov/awesome-jevA calibrated context sieve for Claude Code: every tool result is judged by a System One model before it enters context.
hellogumbo/awesome-jevContext sieve for Claude Code. Jev judges each tool result (Read, Bash, Grep output) for relevance before it enters the context window.
MrJev/awesome-jev
Frequently asked questions
Does winnow delete information?
No, hidden blocks are cached and can be recalled with a key.
What if Jev is unsure?
Uncertain blocks are kept verbatim.
Can I use it without Jev?
Yes, via TypeSafe's adapter that prompts Claude Haiku, though it is not calibrated.
Related projects
Codex and Claude Code skills that narrow a repository locally and let Jev judge which candidate files the coding model needs.
ProjectprototypeGoLocal proxy for Claude Code that uses Jev to remove stale tool results from the context once it reaches about 120K tokens, failing open.
ProjectbetaJavaScriptClaude Code /fc command where Jev picks which old tool outputs to keep whole; the rest are trimmed and saved to files.
ProjectbetaTypeScriptLocal compaction proxy for Claude Code and Codex that compacts more often with local rules and keeps full history searchable.
ProxybetaGoClaude Code (and Codex) plugin that trims long Bash output chunk by chunk with Jev before it reaches the model, without summarising.
PluginbetaTypeScriptScores installed Claude Code skills against the current project with Jev and hides irrelevant ones via skillOverrides.
Agent skillbetaJavaScript