JEV FOR CONTEXT DECISIONS
Jev Context Compaction
Decide which tool calls and results may still matter for the next step. Edit a bounded history, ask Jev for two Boolean probabilities per candidate, then review a reversible local pruning policy against the complete original.
Try the context tool ↓Review the record before it leaves your control
The examples are synthetic input, not model answers. The original stays available throughout. A run sends the text you choose to this site’s server and the configured Jev provider.
Conversation & paired tools
Each tool record contains its call input and result together. First and latest tool records are always pinned.
Selected task, constraints, messages, tool inputs and results are sent to this site’s server and its configured Jev provider. Remove secrets or private data before running. No files or real agent sessions are read or changed.
One batched logical evaluation; bounded provider fallback may make another physical attempt if the direct provider fails.The complete original stays available
Edit the synthetic history, then evaluate. The result and probabilities will appear here without altering your input.
Before · complete source
{
"task": "Fix the failing pagination test while keeping the public API stable.",
"constraints": "Do not change authentication or production data. Preserve the test failure and the relevant source code.",
"entries": [
{
"kind": "message",
"id": "user1",
"role": "user",
"text": "The dashboard pagination test fails after a refactor. Please find the regression."
},
{
"kind": "tool",
"id": "baseline",
"tool": "git status",
"input": "git status --short",
"result": "main clean; no uncommitted changes",
"pinned": false
},
{
"kind": "tool",
"id": "search",
"tool": "rg",
"input": "rg 'pagination' src tests",
"result": "src/query/paginate.ts:17 paginate(items, page)\ntests/pagination.test.ts:42 expected page 2 to begin with item 11",
"pinned": false
},
{
"kind": "message",
"id": "assistant1",
"role": "assistant",
"text": "I found the shared pagination helper and will inspect its boundary handling."
},
{
"kind": "tool",
"id": "oldlog",
"tool": "test runner",
"input": "npm test -- old-suite",
"result": "An older unrelated color-snapshot test passed. Its output is no longer relevant to the pagination regression.",
"pinned": false
},
{
"kind": "tool",
"id": "source",
"tool": "read file",
"input": "sed -n '1,80p' src/query/paginate.ts",
"result": "export function paginate(items, page, size) { const start = page * size; return items.slice(start, start + size); }\nThe UI uses one-based page numbers.",
"pinned": true
},
{
"kind": "tool",
"id": "failure",
"tool": "test runner",
"input": "npm test -- pagination.test",
"result": "FAIL pagination.test: page 2 expected item 11, received item 21. Current call stack points to src/query/paginate.ts:17.",
"pinned": false
}
]
}After · unchanged original
{
"task": "Fix the failing pagination test while keeping the public API stable.",
"constraints": "Do not change authentication or production data. Preserve the test failure and the relevant source code.",
"entries": [
{
"kind": "message",
"id": "user1",
"role": "user",
"text": "The dashboard pagination test fails after a refactor. Please find the regression."
},
{
"kind": "tool",
"id": "baseline",
"tool": "git status",
"input": "git status --short",
"result": "main clean; no uncommitted changes",
"pinned": false
},
{
"kind": "tool",
"id": "search",
"tool": "rg",
"input": "rg 'pagination' src tests",
"result": "src/query/paginate.ts:17 paginate(items, page)\ntests/pagination.test.ts:42 expected page 2 to begin with item 11",
"pinned": false
},
{
"kind": "message",
"id": "assistant1",
"role": "assistant",
"text": "I found the shared pagination helper and will inspect its boundary handling."
},
{
"kind": "tool",
"id": "oldlog",
"tool": "test runner",
"input": "npm test -- old-suite",
"result": "An older unrelated color-snapshot test passed. Its output is no longer relevant to the pagination regression.",
"pinned": false
},
{
"kind": "tool",
"id": "source",
"tool": "read file",
"input": "sed -n '1,80p' src/query/paginate.ts",
"result": "export function paginate(items, page, size) { const start = page * size; return items.slice(start, start + size); }\nThe UI uses one-based page numbers.",
"pinned": true
},
{
"kind": "tool",
"id": "failure",
"tool": "test runner",
"input": "npm test -- pagination.test",
"result": "FAIL pagination.test: page 2 expected item 11, received item 21. Current call stack points to src/query/paginate.ts:17.",
"pinned": false
}
]
}Review omitted evidence before using exported text. Shorter context is not proof of better answers, lower total cost, or lossless preservation. Nothing is written into an agent session.
What the local policy actually does
Keep the pair verbatim
First and latest tool pairs, plus manual pins, remain complete. A candidate result above the keep threshold also keeps its call and full result.
Keep the call and a result prefix
When the call is useful but the complete result falls below the threshold, the tool keeps the call input, a chosen result prefix, and an explicit truncation marker. If that would be longer, it keeps the original.
Remove the pair together
When both probabilities fall below the threshold, call and result leave the exported context together. The full original remains visible and Restore needs no Jev request.
A shorter record is a proposal, not a guarantee
Before and After use the same JSON serialization for character counts. Expand a decision to inspect the full removed result. Restoring shows the complete original; exporting never writes to an agent conversation. Historical tool output can be irreplaceable or describe a side effect, so human review matters even when a tool could be called again.
Keeping the original intact does not make a pruned export lossless. Fewer characters do not establish better answers or lower total cost. The threshold and preview length are application policy; changing them only recomputes the result locally.
This browser tool and a host plugin solve different parts
Inspect a bounded draft
You paste or edit a task, constraints, messages and up to eight paired tool records. The entire bounded State is sent for at most twelve Boolean/Noul questions in one logical evaluation. No local files or real session history are read.
Work inside Claude Code hooks
fast-jev-compaction pairs calls and results by tool ID, pins boundaries, and stages shorter State representations. Its hook path depends on Claude Code function-hook support. This page does not install or reproduce that integration, its long-history batching, or its native-compaction fallback.
Filter new output earlier
Winnow filters tool results before they enter the agent context and can cache hidden output for recall. That differs from pruning an existing history; caching and recall are not features of this page.
What this demonstration can establish
TypeSafe documents Noul as a probability for a yes/no question and supports multiple questions over one State. This tool uses two independently judged questions per candidate. Noul has no separate Choice confidence. We do not treat a returned probability as proof that deleting evidence is safe.
The source review used fast-jev-compaction at e3f262a, Winnow at 51d80b9, and the Codex proof of concept at 7147a4b. The latter’s maintainer explicitly does not recommend it for real work. A published npm package exists for the upstream experiment, but its host compatibility and installation path were not independently exercised here; consult the upstream repository and current host documentation before trying it.
This is not a replacement for native model compaction or internal state handling, and it does not generate summaries or promise lossless compression. Community interest does not establish production quality. Model judgments for this new scenario have not been benchmarked here.