Skip to content

Repository files navigation

OpenSlimedit

An OpenCode plugin that reduces token usage by up to 45% with zero configuration. It compresses tool descriptions, compacts read output, and adds line-range edit support.


Token Savings at a Glance

Total tokens vs baseline (lower is better)
GPT 5.3 Codex [================================> ] -45.1% saved
Claude Sonnet 4.5 [========================> ] -32.6% saved
GPT 5.2 Codex [====================> ] -26.7% saved
Minimax M2.5 Free [==================> ] -24.8% saved
Claude Opus 4.6 [=================> ] -21.8% saved
ModelBaselineOpenSlimeditSaved
GPT 5.3 Codex77,494 tokens42,509 tokens-45.1%
Claude Opus 4.660,841 tokens47,590 tokens-21.8%
Claude Sonnet 4.5120,884 tokens81,471 tokens-32.6%
GPT 5.2 Codex39,185 tokens28,713 tokens-26.7%
Minimax M2.5 Free28,031 tokens21,073 tokens-24.8%

Measured across 4 edit tasks (single-edit, multi-line-replace, multi-edit, large-file-edit) on small test files. Separate sessions, no prompt caching.


How It Works

Three optimizations that compound across every API call:

  1. Tool description compression — Replaces verbose built-in tool descriptions with minimal versions. Since tool schemas are sent with every API call, this saves thousands of input tokens per step.

  2. Compact read output — Shortens absolute file paths to relative paths, strips type tags and footer boilerplate from file reads.

  3. Line-range edit expansion — Allows the model to specify oldString as a line range like "55-64" instead of reproducing exact file content. The plugin transparently expands the range to the actual lines before the edit tool runs.

No custom tools. No system prompt injection. No modifications to built-in tool behavior. Everything works through lightweight hooks.


Installation

Add to your OpenCode config:

// .opencode/opencode.jsonc
{
"plugin": ["openslimedit@latest"]
}

Using @latest ensures you always get the newest version automatically when OpenCode starts.

Restart OpenCode. The plugin will automatically start optimizing your sessions.


Benchmark

We tested multiple approaches to find the most token-efficient editing strategy. All benchmarks run on an isolated test folder with no project context, 1 iteration per case, separate sessions to avoid prompt caching effects.

Test cases:

  • single-edit — 21-line file, change one word
  • multi-line-replace — 48-line file, rewrite a function body
  • multi-edit — 35-line file, 3 separate changes across the file
  • large-file-edit — 115-line file, add try/catch + retry logic

Approaches tested:

  • baseline — No plugin, default OpenCode behavior
  • hashline — Tags every line with a content hash, model references lines by hash instead of reproducing content. Custom tool schema, system prompt injection.
  • smart_edit — Shortens descriptions of unused tools only + line-range expansion in edit. No custom tools.
  • OpenSlimedit (current) — Aggressively shortens ALL tool descriptions + compact read output + line-range expansion. No custom tools, no system prompt.

Why Not Hashline?

The hashline approach seemed promising in theory: tag lines with hashes so models don't need to reproduce code. In practice, it increases token usage for most models:

Total token change vs baseline (negative = savings, positive = regression)
Hashline:
Claude Opus 4.6 ██████████████ +14.0%
Claude Sonnet 4.5 ███████████████ +15.2%
GPT 5.2 Codex █████████████████████████████████████████████████ +49.9%
Minimax M2.5 Free █████████ +9.1%
OpenSlimedit:
GPT 5.3 Codex ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ -45.1%
Claude Opus 4.6 ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ -21.8%
Claude Sonnet 4.5 ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ -32.6%
GPT 5.2 Codex ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ -26.7%
Minimax M2.5 Free ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ -24.8%

The hash-tagged read output, custom tool schemas, and system prompt injection add per-step overhead that outweighs any savings from shorter oldString values. The biggest win comes from compressing tool descriptions — they're sent with every API call and the savings compound.

Results — Total Tokens (% vs baseline)

Claude Opus 4.6

CaseBaselineHashlineSmart EditOpenSlimedit
single-edit13,41913,915 (+3.7%)12,739 (-5.1%)9,902 (-26.2%)
multi-line-replace13,96516,940 (+21.3%)13,289 (-4.8%)10,547 (-24.5%)
multi-edit17,58319,125 (+8.8%)16,572 (-5.7%)13,743 (-21.8%)
large-file-edit15,87419,377 (+22.1%)16,691 (+5.1%)13,398 (-15.6%)
Total60,84169,357 (+14.0%)59,291 (-2.5%)47,590 (-21.8%)

Claude Sonnet 4.5

CaseBaselineHashlineOpenSlimedit
single-edit38,11126,881 (-29.5%)18,460 (-51.6%)
multi-line-replace26,99719,039 (-29.5%)20,042 (-25.8%)
multi-edit39,78547,923 (+20.5%)19,940 (-49.9%)
large-file-edit15,99145,429 (+184.1%)23,029 (+44.0%)
Total120,884139,272 (+15.2%)81,471 (-32.6%)

GPT 5.2 Codex

CaseBaselineHashlineOpenSlimedit
single-edit8,00211,208 (+40.1%)14,027 (+75.3%)
multi-line-replace8,32519,350 (+132.4%)7,019 (-15.7%)
multi-edit9,510FAIL4,797 (-49.5%)
large-file-edit13,3488,189 (-38.6%)2,870 (-78.5%)
Total39,18558,747*28,713 (-26.7%)

*Hashline multi-edit failed (760s timeout loop); total includes failed run

GPT 5.3 Codex

CaseBaselineOpenSlimedit
single-edit10,44510,402 (-0.4%)
multi-line-replace20,46811,312 (-44.7%)
multi-edit21,2996,068 (-71.5%)
large-file-edit25,28214,727 (-41.8%)
Total77,49442,509 (-45.1%)

Minimax M2.5 Free

CaseBaselineHashlineSmart EditOpenSlimedit
single-edit10,69111,098 (+3.8%)9,994 (-6.5%)7,405 (-30.7%)
multi-line-replace11,10512,045 (+8.5%)10,396 (-6.4%)1,721 (-84.5%)
multi-edit2,3082,331 (+1.0%)2,357 (+2.1%)8,034 (+248.1%)
large-file-edit3,9275,100 (+29.9%)3,986 (+1.5%)3,913 (-0.4%)
Total28,03130,574 (+9.1%)26,733 (-4.6%)21,073 (-24.8%)

Summary

ModelHashlineSmart EditOpenSlimedit
GPT 5.3 Codex-45.1%
Claude Opus 4.6+14.0%-2.5%-21.8%
Claude Sonnet 4.5+15.2%-32.6%
GPT 5.2 Codex+49.9%*-26.7%
Minimax M2.5 Free+9.1%-4.6%-24.8%

*Includes failed multi-edit run

Large File Scaling

The benchmarks above use small files (21-115 lines). How does OpenSlimedit perform on real-world file sizes?

Minimax M2.5 Free

File SizeBaselineOpenSlimeditSaved
1k lines37,74330,697-18.7%
3k lines29,02125,832-11.0%
6k lines29,42225,747-12.5%
10k lines29,40525,742-12.5%

GPT 5.3 Codex (5-iteration average)

File SizeBaselineOpenSlimeditSaved
1k lines38,96229,833-23.4%
3k lines59,28338,861-34.4%
6k lines70,38029,193-58.5%
10k lines65,88834,315-47.9%

Minimax shows consistent savings (11-19%) at all file sizes. GPT 5.3 Codex shows even larger savings (23-59%) that increase with file size — the baseline becomes noisier and more expensive on larger files while OpenSlimedit stays consistent.

Key Findings

  • Tool description compression is the biggest win. Tool schemas are sent with every API call. Shortening them saves thousands of input tokens per step, and this compounds across multi-step tasks.
  • Hashline increases token usage for most models. The hash-tagged read output, custom tool schemas, and system prompt injection add per-step overhead that outweighs the savings from shorter oldString values.
  • OpenSlimedit consistently saves 11-45% across all tested models and file sizes with zero regressions on Opus 4.6. GPT 5.3 Codex shows the largest savings at 45.1%. Some models show regressions on individual cases (Minimax on multi-edit, Codex 5.2 on single-edit) but the total is always significantly lower.
  • Custom tools confuse some models. Minimax and Codex struggle with non-standard tool schemas, leading to extra steps or failures. OpenSlimedit avoids this entirely by only modifying descriptions of existing tools.
Raw data — Hashline runs
ModeModelCaseTimeInputOutputTotalSuccess
hashlineclaude-sonnet-4.5single-edit10,745 ms26,58229926,881yes
hashlineclaude-sonnet-4.5multi-line-replace37,231 ms17,1881,85119,039yes
hashlineclaude-sonnet-4.5multi-edit52,668 ms44,6043,31947,923yes
hashlineclaude-sonnet-4.5large-file-edit25,097 ms44,46696345,429yes
hashlineclaude-opus-4.6single-edit12,994 ms13,61729813,915yes
hashlineclaude-opus-4.6multi-line-replace21,080 ms16,20873216,940yes
hashlineclaude-opus-4.6multi-edit46,637 ms17,0312,09419,125yes
hashlineclaude-opus-4.6large-file-edit25,787 ms18,40197619,377yes
hashlinegpt-5.2-codexsingle-edit12,458 ms10,92927911,208yes
hashlinegpt-5.2-codexmulti-line-replace24,931 ms18,38196919,350yes
hashlinegpt-5.2-codexmulti-edit760,890 ms146,51653,250199,766no
hashlinegpt-5.2-codexlarge-file-edit27,601 ms6,9791,2108,189yes
hashlineminimax-m2.5-freesingle-edit13,806 ms10,68041811,098yes
hashlineminimax-m2.5-freemulti-line-replace56,046 ms11,08296312,045yes
hashlineminimax-m2.5-freemulti-edit19,062 ms1,6546772,331yes
hashlineminimax-m2.5-freelarge-file-edit61,973 ms3,2221,8785,100yes
Raw data — Baseline runs
ModeModelCaseTimeInputOutputTotalSuccess
baselineclaude-sonnet-4.5single-edit11,107 ms37,77533638,111yes
baselineclaude-sonnet-4.5multi-line-replace12,876 ms26,54145626,997yes
baselineclaude-sonnet-4.5multi-edit17,343 ms38,89089539,785yes
baselineclaude-sonnet-4.5large-file-edit21,273 ms15,03595615,991yes
baselineclaude-opus-4.6single-edit12,464 ms13,14627313,419yes
baselineclaude-opus-4.6multi-line-replace14,016 ms13,55441113,965yes
baselineclaude-opus-4.6multi-edit43,656 ms15,8731,71017,583yes
baselineclaude-opus-4.6large-file-edit20,120 ms14,98189315,874yes
baselinegpt-5.2-codexsingle-edit11,662 ms7,6563468,002yes
baselinegpt-5.2-codexmulti-line-replace11,922 ms8,0392868,325yes
baselinegpt-5.2-codexmulti-edit22,087 ms8,5199919,510yes
baselinegpt-5.2-codexlarge-file-edit29,591 ms11,7011,64713,348yes
baselineminimax-m2.5-freesingle-edit10,740 ms10,38930210,691yes
baselineminimax-m2.5-freemulti-line-replace16,274 ms10,66843711,105yes
baselineminimax-m2.5-freemulti-edit43,462 ms1,2331,0752,308yes
baselineminimax-m2.5-freelarge-file-edit20,430 ms3,2506773,927yes
baselinegpt-5.3-codexsingle-edit12,075 ms10,21822710,445yes
baselinegpt-5.3-codexmulti-line-replace22,378 ms20,11035820,468yes
baselinegpt-5.3-codexmulti-edit17,870 ms20,72357621,299yes
baselinegpt-5.3-codexlarge-file-edit22,028 ms24,38489825,282yes
Raw data — Smart Edit runs
ModeModelCaseTimeInputOutputTotalSuccess
smart_editclaude-opus-4.6single-edit13,016 ms12,43230712,739yes
smart_editclaude-opus-4.6multi-line-replace15,812 ms12,84744213,289yes
smart_editclaude-opus-4.6multi-edit40,820 ms14,9191,65316,572yes
smart_editclaude-opus-4.6large-file-edit32,170 ms15,3771,31416,691yes
smart_editminimax-m2.5-freesingle-edit11,149 ms9,7072879,994yes
smart_editminimax-m2.5-freemulti-line-replace21,405 ms9,99240410,396yes
smart_editminimax-m2.5-freemulti-edit20,998 ms1,3779802,357yes
smart_editminimax-m2.5-freelarge-file-edit41,250 ms3,2127743,986yes
Raw data — OpenSlimedit runs
ModeModelCaseTimeInputOutputTotalSuccess
openslimeditclaude-opus-4.6single-edit12,126 ms9,6292739,902yes
openslimeditclaude-opus-4.6multi-line-replace15,326 ms10,06648110,547yes
openslimeditclaude-opus-4.6multi-edit41,378 ms12,0951,64813,743yes
openslimeditclaude-opus-4.6large-file-edit28,135 ms12,1611,23713,398yes
openslimeditclaude-sonnet-4.5single-edit10,884 ms18,14831218,460yes
openslimeditclaude-sonnet-4.5multi-line-replace13,208 ms19,52851420,042yes
openslimeditclaude-sonnet-4.5multi-edit20,895 ms18,98595519,940yes
openslimeditclaude-sonnet-4.5large-file-edit20,498 ms22,05397623,029yes
openslimeditgpt-5.2-codexsingle-edit8,745 ms13,84118614,027yes
openslimeditgpt-5.2-codexmulti-line-replace10,123 ms6,7702497,019yes
openslimeditgpt-5.2-codexmulti-edit13,653 ms4,2395584,797yes
openslimeditgpt-5.2-codexlarge-file-edit14,786 ms2,2066642,870yes
openslimeditminimax-m2.5-freesingle-edit15,159 ms7,1402657,405yes
openslimeditminimax-m2.5-freemulti-line-replace14,744 ms1,3164051,721yes
openslimeditminimax-m2.5-freemulti-edit13,289 ms7,3856498,034yes
openslimeditminimax-m2.5-freelarge-file-edit21,090 ms3,2146993,913yes
openslimeditgpt-5.3-codexsingle-edit10,638 ms10,18621610,402yes
openslimeditgpt-5.3-codexmulti-line-replace10,419 ms10,97433811,312yes
openslimeditgpt-5.3-codexmulti-edit15,752 ms5,4705986,068yes
openslimeditgpt-5.3-codexlarge-file-edit28,453 ms13,3591,36814,727yes
Raw data — Large file scaling runs
ModeModelCaseTimeInputOutputTotalSuccess
baselineminimax-m2.5-free1k-lines51,367 ms36,7331,01037,743yes
baselineminimax-m2.5-free3k-lines39,505 ms28,39262929,021yes
baselineminimax-m2.5-free6k-lines47,862 ms28,3981,02429,422yes
baselineminimax-m2.5-free10k-lines40,794 ms28,52388229,405yes
openslimeditminimax-m2.5-free1k-lines25,237 ms29,78890930,697yes
openslimeditminimax-m2.5-free3k-lines45,621 ms25,24758525,832yes
openslimeditminimax-m2.5-free6k-lines33,315 ms25,15858925,747yes
openslimeditminimax-m2.5-free10k-lines19,114 ms25,17356925,742yes
baselinegpt-5.3-codex1k-lines59,368 ms36,8501,81838,668yes
baselinegpt-5.3-codex1k-lines39,687 ms35,6501,69237,342yes
baselinegpt-5.3-codex1k-lines30,868 ms34,3451,55135,896yes
baselinegpt-5.3-codex1k-lines30,132 ms34,1231,43635,559yes
baselinegpt-5.3-codex1k-lines36,521 ms45,7861,55847,344yes
baselinegpt-5.3-codex3k-lines37,920 ms61,0051,59562,600yes
baselinegpt-5.3-codex3k-lines42,808 ms63,1272,08865,215yes
baselinegpt-5.3-codex3k-lines29,531 ms48,8451,42250,267yes
baselinegpt-5.3-codex3k-lines29,003 ms71,6411,26072,901yes
baselinegpt-5.3-codex3k-lines29,224 ms44,0101,42145,431yes
baselinegpt-5.3-codex6k-lines32,856 ms53,0291,66554,694yes
baselinegpt-5.3-codex6k-lines35,228 ms79,9071,76481,671yes
baselinegpt-5.3-codex6k-lines42,342 ms92,0612,14494,205yes
baselinegpt-5.3-codex6k-lines33,617 ms74,5141,56276,076yes
baselinegpt-5.3-codex6k-lines35,195 ms43,8471,40745,254yes
baselinegpt-5.3-codex10k-lines29,958 ms77,7131,41279,125yes
baselinegpt-5.3-codex10k-lines37,031 ms61,8441,75863,602yes
baselinegpt-5.3-codex10k-lines29,698 ms61,0341,49362,527yes
baselinegpt-5.3-codex10k-lines41,649 ms60,9751,53362,508yes
baselinegpt-5.3-codex10k-lines26,924 ms60,5251,15261,677yes
openslimeditgpt-5.3-codex1k-lines35,515 ms16,9601,69618,656yes
openslimeditgpt-5.3-codex1k-lines27,865 ms42,4851,19843,683yes
openslimeditgpt-5.3-codex1k-lines30,197 ms20,2971,54021,837yes
openslimeditgpt-5.3-codex1k-lines42,478 ms31,4441,95933,403yes
openslimeditgpt-5.3-codex1k-lines23,994 ms30,3601,22531,585yes
openslimeditgpt-5.3-codex3k-lines35,438 ms46,0561,77447,830yes
openslimeditgpt-5.3-codex3k-lines38,383 ms60,5271,98362,510yes
openslimeditgpt-5.3-codex3k-lines39,220 ms23,6571,69925,356yes
openslimeditgpt-5.3-codex3k-lines28,254 ms27,7371,42829,165yes
openslimeditgpt-5.3-codex3k-lines29,321 ms28,4301,01329,443yes
openslimeditgpt-5.3-codex6k-lines29,934 ms27,3321,45128,783yes
openslimeditgpt-5.3-codex6k-lines29,402 ms22,9841,44524,429yes
openslimeditgpt-5.3-codex6k-lines34,198 ms28,6391,41030,049yes
openslimeditgpt-5.3-codex6k-lines32,525 ms33,4171,66935,086yes
openslimeditgpt-5.3-codex6k-lines26,625 ms26,3301,28627,616yes
openslimeditgpt-5.3-codex10k-lines26,953 ms28,1061,18029,286yes
openslimeditgpt-5.3-codex10k-lines33,084 ms28,0651,42329,488yes
openslimeditgpt-5.3-codex10k-lines33,384 ms38,1561,32439,480yes
openslimeditgpt-5.3-codex10k-lines32,269 ms42,2591,27743,536yes
openslimeditgpt-5.3-codex10k-lines28,136 ms28,4761,30829,784yes

Project Structure

openslimedit/
├── src/
│ └── index.ts # Plugin implementation (single file)
├── package.json
├── LICENSE
└── README.md

Contributing

Contributions are welcome. Please open an issue or submit a pull request.

License

This project is licensed under the MIT License.

About

An OpenCode plugin that reduces token usage by up to 45% with zero configuration. It compresses tool descriptions, compacts read output, and adds line-range edit support.

Resources

Contributing

Security policy

Stars

108 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages