@ghilteras/opencode-reasoning-prunerPrunes historical reasoning parts from the message history sent to the LLM (keeping the last turn's), saving context window and tokens on reasoning models. Model-agnostic; uses the idiomatic experimental.chat.messages.transform hook.
1
243
24 in 7 days
36.8
Multi-signal model
12 days ago
2026-08-07
Install and configure
opencode.jsonWrites to this project's opencode.json — applies to this repository only.
opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["@ghilteras/opencode-reasoning-pruner@1.0.0"]
}Writes to ~/.config/opencode/opencode.json — applies to every project.
~/.config/opencode/opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["@ghilteras/opencode-reasoning-pruner@1.0.0"]
}If you want to modify the plugin locally, install it into the project and reference the local path.
shell
pnpm add -D @ghilteras/opencode-reasoning-pruneropencode loads npm dependencies through its embedded runtime on startup and caches them locally — no manual global install needed.
Prunes historical reasoning parts from the message history before it is re-sent to the LLM, keeping only the last turn's reasoning. Saves context window and tokens on reasoning models (DeepSeek, GLM, Kimi, Qwen, ...) without touching what the model sees in the current turn.
- Model-agnostic: strips any
part.type === "reasoning", regardless of provider key naming (reasoning_contentvsreasoning/reasoning_details). - Zero regex, zero event-stream manipulation, zero system-prompt injection.
- Reasoning is still visible in the TUI (
/thinking) and still consumed during generation — only the historical copies are pruned.
Install
npm i @ghilteras/opencode-reasoning-pruner
# or: bun add @ghilteras/opencode-reasoning-pruner
Then add it to the plugin array of opencode.json:
{
"plugin": ["@ghilteras/opencode-reasoning-pruner"]
}
How it works
Hooks experimental.chat.messages.transform: finds the index of the last KEEP_TURNS user message(s) and removes every reasoning part before that index. Default KEEP_TURNS = 1 (keeps the reasoning of the current turn, prunes everything older).
Config
Edit the KEEP_TURNS constant in plugin.js (default 1).
Notes
- opencode's built-in
compaction.pruneonly trims tool-output bytes — it does NOT touch reasoning parts. This plugin complements it. - Adjacent plugins exist for tool-output pruning (DCP/ACP) and for the opposite direction (preserving reasoning to fix provider 400s); none strip reasoning parts from history.
License
MIT © 2026 Angelo Pantano