pi-compact-jev
September 20, 2026 · View on GitHub
Uses Jev to compact Pi Coding Agent conversations by removing or shortening tool output and preserving retained text verbatim. Automatic compaction is enabled by default; if Jev pruning cannot be used, Pi falls back to its built-in summarizer.
Install
Choose one installation source.
pi install npm:pi-compact-jev
pi install git:github.com/dev-willbird1936/pi-compact-jev
Restart Pi, or run /reload in an existing session.
What it does
When Pi would summarize a dropped prefix, this extension scores unpinned tool calls with Jev:
- not useful → delete the call
- useful and needed in full → keep the output word for word
- useful but not full → keep the first and last 25% of the output, each capped at 2,500 characters
Unresolved errors, git commits, edits, writes, images, and invoked skills skip Jev and stay. Auto-compact can call Pi compact() after a settled turn. At 512,000 tokens it compacts without waiting for Jev.
Scoring sends selected conversation, tool output, and workspace context to TypeSafe or OpenRouter. It does not share Pi’s live session cache.
Exact prune path: HOW.md.
Commands
| Command | Effect |
|---|---|
/jev-compact | Compact now |
/jev-compact on / off | Enable or disable the package |
/jev-compact-config | Settings menu |
Status bar: compact:auto, compact:jev, compact:off, or compact:no key.
Requirements
- Node.js
>=22.19.0 - Pi Coding Agent
>=0.84.0 - Pi compaction enabled (
settings.json→"compaction": { "enabled": true }) - A Jev key (TypeSafe first, else OpenRouter)
Keys, in order:
- TypeSafe:
TYPESAFE_API_KEYorJEV_API_KEY, then~/.brain/secrets/typesafe-api-key.txtor~/.brain/secrets/jev-api-key.txt - OpenRouter:
OPENROUTER_API_KEY, then~/.brain/secrets/openrouter-api-key.txt
provider: auto uses a TypeSafe/Jev key when present, otherwise OpenRouter.
Configuration
~/.pi/agent/pi-jev-compact.json is created on first load. /jev-compact on|off writes enabled. /jev-compact-config edits the rest.
| Field | Default | Role |
|---|---|---|
enabled | true | Hook no-ops when false |
provider | auto | typesafe, openrouter, or auto |
autoCompact | true | After a settled turn, Jev may call Pi compact() |
minContextTokens | 64000 | Auto-compact will not judge below this |
forceCompactTokens | 512000 | Compact without Jev at this size |
keepThreshold | 0.5 | Minimum useful score to keep |
preserveRecentTurns | 5 | Last N user and N assistant windows |
windowChars | 2000 | Stored head/tail per windowed prompt/reply |
maxStateTokens | 28000 | Fitted Jev state ceiling |
maxRequestTokens | 64000 | State plus one batch of questions |
truncateHeadChars | 2500 | Max chars at each end of a stubbed dump |
minReduction | 0.25 | Else fall back to Pi’s summarizer |
timeoutMs | 30000 | Per Jev request |
debug | false | Log stats to stderr |
Development
bun test
bun run typecheck
By dev-willbird1936.