creole-llm
Training-free context compaction for coding agents: Creole, a compact working language for notes, plans and replies, plus compaction of long sessions into a small session graph of the task, the user's constraints and the current work.
Package details
Install creole-llm from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:creole-llm- Package
creole-llm- Version
1.0.3- Published
- Nov 9, 2026
- Downloads
- 732/mo · 65/wk
- Author
- gluppler
- License
- MIT
- Types
- extension, skill
- Size
- 234.8 KB
- Dependencies
- 0 dependencies · 0 peers
Pi manifest JSON
{
"skills": [
"./skills"
],
"extensions": [
"./extensions/creole.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
Install
Claude Code:
claude plugin marketplace add gluppler/Creole-LLM
claude plugin install creole@creole-llm
Other agents:
| Agent | Install |
|---|---|
| GitHub Copilot CLI | copilot plugin marketplace add gluppler/Creole-LLM, then copilot plugin install creole@creole-llm |
| Devin CLI | devin plugins install gluppler/Creole-LLM |
| Grok Build | grok plugin install gluppler/Creole-LLM --trust |
| OpenCode | add "creole-llm" to plugin in opencode.json |
| npm (any tool that installs packages) | npm install creole-llm |
| Codex, Cursor, Qoder, omp, pi | install from a clone: INSTALL.md |
| Any agent with skills | npx skills add gluppler/Creole-LLM |
Any agent that reads AGENTS.md or a rules folder |
copy AGENTS.md, or the rules file for your agent |
Update (Claude Code): claude plugin marketplace update creole-llm, then
claude plugin update creole@creole-llm, and restart.
Every agent, updating, uninstalling and the data Creole leaves behind: INSTALL.md.
What it does
creole-llm is a plugin that makes a coding agent cheaper on long sessions without forgetting the task, by teaching it Creole, a compact working language. No training, no GPU, no second model.
- A compact working language. The agent thinks, plans and replies in plain English words in the shape of code: one fact per line, no filler, every number and error kept.
- Compaction that keeps the task. When the context fills, the conversation becomes a session graph of about 250 words (task, the user's constraints word for word, what is built, decisions, open issues, the last step) plus the user's own messages.
- One record for every agent. Subagents start from the session graph and merge what they learn back into it, so the main agent and its subagents share one wiki.
- Works beside other plugins. Another plugin's rules win for what they prescribe, and after each compaction the agent is told to reload the skills it had invoked.
- Runs on 20+ agents. Compaction on Claude Code, Codex, Cursor, Qoder, omp and pi;
the rules every turn on OpenCode and at session start on Copilot CLI; and the rules
file on every agent that reads
AGENTS.mdor a rules folder.
Before / after
Before
6 tests are still failing:
test_blend_bucket_700(util8): expects 31, got 32test_clamp_bucket_723(util8): expects 20, got 21- ... four more ...
All 6 failures are in util8.py, which you explicitly withdrew from the task. These are not to be fixed per your constraint.
After
Done: issues 1-24 fixed; the 6 you withdrew still fail, as asked. checked: full suite -> 24 pass, 6 fail
The rules
Full text in SKILL.md.
- One fact, step or action per line; drop filler, keep every meaning-bearing word.
- Read the code a change touches first; take the first option that fully works.
- The shortest working diff wins; never cut validation, safety or accessibility.
- A user's constraint on a file beats a listed task, for the whole session.
- Find every target with one search; run the checks once, after the last edit.
- Reply with the outcome, what was checked, and any next action. Nothing else.
- Another skill or plugin in force wins for what it prescribes.
Numbers
Cost per session as Claude Code reports it, which may differ from what a subscription
bills. Each plugin runs in its own sandbox with a pinned copy. One session per task and
setting on Claude Code 2.1.309. Lowest is thinking off on Haiku and --effort low
elsewhere; default sets no flag; max is --effort max.
Bug fixes, the mean of a short fix and a 30-issue review (lowest in bold):
| Model | Effort | Creole | native | Ponytail | i-have-adhd | Caveman |
|---|---|---|---|---|---|---|
| Haiku 4.5 | lowest | $0.228 | $0.362 | $0.334 | $0.263 | $0.250 |
| Haiku 4.5 | default | $0.264 | $0.298 | $0.417 | $0.283 | $0.299 |
| Haiku 4.5 | max | $0.243 | $0.374 | $0.286 | $0.363 | $0.288 |
| Sonnet 5.5 | lowest | $0.251 | $0.295 | $0.301 | $0.330 | $0.313 |
| Sonnet 5.5 | default | $0.237 | $0.303 | $0.314 | $0.338 | $0.333 |
| Sonnet 5.5 | max | $0.392 | $0.871 | $0.574 | $0.627 | $0.524 |
| Opus 5.5 | lowest | $0.539 | $0.628 | $0.590 | $0.690 | $0.675 |
| Opus 5.5 | default | $0.498 | $0.571 | $0.607 | $0.706 | $0.586 |
| Opus 5.5 | max | $0.705 | $1.085 | $1.034 | $1.457 | $0.918 |
A review with two subagents:
| Model | Effort | Creole | native | llm-wiki |
|---|---|---|---|---|
| Haiku 4.5 | lowest | $0.615 | $0.738 | $1.021 |
| Haiku 4.5 | default | $0.513 | $0.764 | $0.902 |
| Haiku 4.5 | max | $0.544 | $0.884 | $0.892 |
| Sonnet 5.5 | lowest | $0.541 | $0.785 | $0.849 |
| Sonnet 5.5 | default | $0.456 | $0.795 | $0.940 |
| Sonnet 5.5 | max | $1.352 | $2.152 | $2.207 |
| Opus 5.5 | lowest | $1.174 | $1.685 | $1.821 |
| Opus 5.5 | default | $1.200 | $1.602 | $1.913 |
| Opus 5.5 | max | $2.306 | $3.759 | $4.444 |
Ponytail's own tasks (four small coding jobs from its benchmark, with hidden checks for correctness and safety): tasks passed, Python source lines changed per task with tests aside (Ponytail's own measure), and cost.
| Model | Effort | Creole passed | native passed | Ponytail passed | Creole lines | native lines | Ponytail lines | Creole cost | native cost | Ponytail cost |
|---|---|---|---|---|---|---|---|---|---|---|
| Haiku 4.5 | lowest | 4/4 | 4/4 | 4/4 | 95.0 | 73.0 | 42.3 | $0.037 | $0.035 | $0.038 |
| Haiku 4.5 | default | 4/4 | 4/4 | 3/4 | 53.3 | 44.3 | 9.8 | $0.042 | $0.033 | $0.036 |
| Haiku 4.5 | max | 4/4 | 4/4 | 4/4 | 67.0 | 57.5 | 30.0 | $0.039 | $0.040 | $0.041 |
| Sonnet 5.5 | lowest | 4/4 | 4/4 | 4/4 | 48.3 | 59.0 | 24.3 | $0.050 | $0.045 | $0.049 |
| Sonnet 5.5 | default | 4/4 | 4/4 | 4/4 | 55.3 | 74.5 | 35.8 | $0.056 | $0.065 | $0.056 |
| Sonnet 5.5 | max | 4/4 | 4/4 | 4/4 | 66.8 | 200.5 | 32.8 | $0.346 | $0.588 | $0.303 |
| Opus 5.5 | lowest | 4/4 | 4/4 | 4/4 | 51.5 | 71.5 | 32.3 | $0.122 | $0.114 | $0.107 |
| Opus 5.5 | default | 4/4 | 4/4 | 4/4 | 64.8 | 92.5 | 48.0 | $0.153 | $0.156 | $0.127 |
| Opus 5.5 | max | 4/4 | 4/4 | 4/4 | 77.0 | 196.0 | 36.0 | $0.854 | $2.138 | $0.750 |
Against each plugin at its own thing, across the nine settings (Creole better / tied / plugin better):
| Plugin | Its own thing, as measured | Result | Cost |
|---|---|---|---|
| Ponytail | source lines changed, on Ponytail's own tasks | 0 / 0 / 9 | 2 / 0 / 7 |
| Ponytail | lines per fix, on the bug fixes | 0 / 9 / 0 | 9 / 0 / 0 |
| i-have-adhd | words in the final reply | 7 / 0 / 2 | 9 / 0 / 0 |
| Caveman | output tokens | 5 / 0 / 4 | 9 / 0 / 0 |
| llm-wiki | subagent session passing its task and hard rules | 1 / 8 / 0 | 9 / 0 / 0 |
- Cheaper than plain Claude Code at all nine settings over the three tasks, but not on every task: the short fix cost more at six of them.
- All 27 Creole sessions passed their task and broke no hard rule. Ponytail failed one of its own tasks (Haiku 4.5, default: no file written, which also lowers its line count there).
- Ponytail writes less code on its own tasks at every setting, often half of Creole's, and costs less there at seven settings. Creole does not beat it at that.
- Caveman's output tokens and Creole's are within 12% of each other at every setting.
- Replies to the review's last question, checked against the session: Creole and i-have-adhd each gave the right failing-test count in the first line and named the cause in 9 of 9, and showed the tests run in 6 of 9; Creole's replies averaged 45 words, i-have-adhd's 81.
- Creole's bug-fix and subagent sessions are from a later run than the other arms (same tasks, sandboxes and Claude Code version). One session per cell, so these are observations, not verdicts; single sessions vary by about a quarter, which is more than some of these gaps.
- Not tested: Fable 5.1, which needs usage credits. Not shown: lower cost on every kind of task, public benchmark scores, or five hours of maximum-effort work.
Support
| Agent | Route | Tier |
|---|---|---|
| Claude Code 2.1.309 | function hooks (hooks/creole-module.mjs) |
live-verified |
| Codex 0.162.1 | command hooks | mock-tested |
| omp, pi | extension (extensions/creole.ts) |
mock-tested; no session wiki |
| Windsurf, Cline, Kiro | their rules folders | instruction |
| GitHub Copilot | .github/copilot-instructions.md |
instruction |
| Gemini CLI, Qwen Code, Kimi Code | AGENTS.md as context, .kimi-plugin/ |
instruction |
| OpenCode | server plugin (.opencode/plugins/creole.mjs) |
mock-tested |
| Cursor, Qoder | plugins with Creole's hooks (or a rules file) | mock-tested |
| GitHub Copilot CLI | plugin, rules at session start | mock-tested |
| Devin CLI, Grok Build | their plugin installers | instruction |
Amp, Zed, Jules, Goose, Junie and any agent that reads AGENTS.md |
AGENTS.md |
instruction |
Tiers are defined in INSTALL.md.
Settings
| Setting | Default / behavior |
|---|---|
CREOLE_HEADROOM_TOKENS |
100000; compact once the context has grown this far past its smallest size (below 100k, the window's share binds) |
CREOLE_THRESHOLD_PERCENT |
60; never let the context pass this share of the window first |
CREOLE_CONTEXT_WINDOW_TOKENS |
For routes without a host-reported window |
CREOLE_MAX_WORDS |
250; the graph's target, soft after one correction |
CREOLE_LANGUAGE |
On; off removes the language and its work and reply rules |
CREOLE_WIKI |
On; off stops the session wiki and the codebase map, and deletes nothing |
CREOLE_AUTO_COMPACT=0 |
Stops the compactions the omp extension starts |
CREOLE_CHECKPOINT |
graph; natural and proposal exist for comparison experiments only |
Nothing to configure: the defaults adapt on their own (an unset headroom grows when
compactions come close together and shrinks back). To override one, set its CREOLE_*
environment variable. Claude Code's own auto-compaction settings win
over Creole's. Each compaction says what it did, or why Creole could not and the host
compacted instead; --debug-file <path> logs every turn, compaction and subagent merge.
Privacy. Session records (the user's messages with known credential patterns removed, and the last graph) stay on your machine, capped at 256 KiB per session and 3 MiB in all, and are removed once a session has gone 30 days without use. Redaction is pattern-based. Where they live and how to delete them: INSTALL.md.
Access. No dependencies, no install scripts, no network. Creole reads the host's
plugin folder and data folder variables (CLAUDE_PLUGIN_ROOT, CLAUDE_PLUGIN_DATA,
PLUGIN_ROOT, PLUGIN_DATA, COPILOT_PLUGIN_DATA, CURSOR_VERSION, Claude Code's
CLAUDE_PLUGIN_OPTION_* settings) and its own CREOLE_* settings, and no other
environment variable. It reads the host's session log for token use, its skill file,
and, for the codebase map, the first 64 KiB of the project's source files and
git ls-files (run with fsmonitor off; CREOLE_WIKI=off turns the map off). It writes
only in its data folder, and /creole compress rewrites only the file you name.
Limits
- Compaction is lossy: the agent may re-read what the graph left out.
- A graph is refused when a constraint is not the user's words or a code name, path or quoted error is not in the conversation (on Claude Code's module; elsewhere, constraints only). Its other wording is a model's and is not checked.
- An edit to a file the user said to leave alone is refused (Claude Code's module only; a clause it can't read, or a change made through a shell command, gets through).
- The language section (about 3,500 characters) rides on every request.
- A subagent's rows are a model's words; of two subagents changing one row, the later merge wins.
- Labels around the graph and the codebase map do not stop a model from following a hostile line inside them.
Development
npm test
Node 22.18 or later. Start at CONTRIBUTING.md. The rules files for
other agents are written from the skill: after editing skills/creole/SKILL.md, run
node scripts/sync-rules.mjs (the tests fail while they differ). The project proposal
is in thesis/.
License
MIT.