Skip to content

winnow

Calibrated context sieve for Claude Code: Jev judges each block of large tool output and hides confident-no blocks behind recallable stubs.

ProjectbetaMIT

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

TypeQuestionAnswers
Yes / noIs block N needed for the current task?yes · no

How it works

  1. A large tool result is intercepted by the hook.
  2. Split into ~25-line blocks and ask the judge about each in one call.
  3. Hide confident-no blocks behind stubs with recall keys.
  4. 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-projects
  • A calibrated context sieve for Claude Code: every tool result is judged by a System One model before it enters context.

    wh000wh000/awesome-jev-live
  • Judges tool results before admitting them into Claude Code context.

    cobanov/awesome-jev
  • A calibrated context sieve for Claude Code: every tool result is judged by a System One model before it enters context.

    hellogumbo/awesome-jev
  • Context 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.

    ProjectprototypeGo
  • Local proxy for Claude Code that uses Jev to remove stale tool results from the context once it reaches about 120K tokens, failing open.

    ProjectbetaJavaScript
  • Claude Code /fc command where Jev picks which old tool outputs to keep whole; the rest are trimmed and saved to files.

    ProjectbetaTypeScript
  • Local compaction proxy for Claude Code and Codex that compacts more often with local rules and keeps full history searchable.

    ProxybetaGo
  • Claude Code (and Codex) plugin that trims long Bash output chunk by chunk with Jev before it reaches the model, without summarising.

    PluginbetaTypeScript
  • Scores installed Claude Code skills against the current project with Jev and hides irrelevant ones via skillOverrides.

    Agent skillbetaJavaScript