Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use to compress any agent-instruction file (AGENTS.md, CLAUDE.md, .claude/rules/*.md, legacy AIBOARDING.md) into terse, high-signal prose without altering commands, code, URLs, or paths. Standalone compression engine with levels (off/lite/full/ultra), byte-preservation verification, and token receipts. Also invoked by the create/update onboarding skills.
.claude/skills/hashgraph-online-compress-onboarding/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 334% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 346% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -21% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -21% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 64% | 0% |
Instruction files load every session, so every saved token compounds. Compress prose aggressively while never touching the technical payload - and never trading away clarity where ambiguity is dangerous.
Announce at start: "Using compress-onboarding on <file> at level <level>."
Usage: compress-onboarding <file> [--level off|lite|full|ultra] Default file: the repo's AGENTS.md. Works under any SKILL.md-compatible runtime.
Resolve the level from --level if given, else .aiboarding/config.json: compression_level, else full. When --level is given, persist it back to config.json - the level is a per-repo decision, not per-run.
off - no rewriting. Still run the size report (step 5) so bloat is visible.lite - remove filler, pleasantries, hedging, and restatement. Full sentenceskept. ("In order to build the project, you should run…" → "To build, run…")
full (default) - additionally drop articles, compress to fragments andshort synonyms, allow X → Y notation. ("The dev server can be started with npm run dev" → "Dev server: npm run dev.")
ultra - telegraphic; every non-load-bearing word goes. Only for repospressed against the 32 KiB Codex cap; confirm with the user before first use.
Compression must NEVER alter: fenced code blocks (including the fence lines), inline backtick spans, shell commands, URLs, file paths, identifiers and symbol names, quoted error strings, <!-- aiboarding-* --> markers, YAML frontmatter, and table structure. If a protected span is wrong, fixing it is an update, not a compression - route it through update-agent-onboarding.
While rewriting, keep commands/identifiers/paths/error strings backtick-quoted (add backticks where the source lacks them - adding protection is allowed; removing it is not). The checker treats backtick spans as protected.
Never compress below full sentences, regardless of level:
Agent Guardrails and Escalation - Ask the User When sections: cap at lite.A misread guardrail costs more than its tokens.
column backup first" - unclear; keep explicit ordering words).
before).and exemptions above.
.aiboarding/tools/check-preservation <before> <after> (fallback to the plugin's templates/tools/check-preservation if not installed). Fix every reported span and re-run until clean. Never hand-wave this step.
original. Write only after approval.
with a real tokenizer if one is available in the environment (e.g. Python tiktoken), otherwise tokens_approx = bytes / 4, explicitly labeled approximate. Append to .aiboarding/state.json:receipts (one object per line, keeping the file hook-readable): json { "file": "AGENTS.md", "level": "full", "bytes_before": 8123, "bytes_after": 4310, "lines_before": 190, "lines_after": 121, "tokens_before_approx": 2031, "tokens_after_approx": 1078, "measured_at": "2026-07-02" } Report the saving to the user; since the file loads every session, note the per-session saving - never claim unlabeled exact token numbers without a real tokenizer.
.aiboarding/tools/check-size-budget <file>; if it stillWARNs after full, suggest moving detail to .claude/rules/ or nested AGENTS.md files rather than jumping to ultra.
When compression output must land inside a file that also has user-owned content (e.g. a hand-written CLAUDE.md), write only within the aiboarding marker fence via .aiboarding/tools/inject-fenced - re-runs stay idempotent and uninstall stays clean.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-19 | pass→pass | 12,105 | 11,064 | -9% | 1 | 1 | 0% | 1,165 | 2,158 | +85% | 0 | 0 | — |
case-01 | fail→pass | 15,021 | 7,433 | -51% | 1 | 1 | 0% | 317 | 1,377 | +334% | 0 | 0 | — |
case-02 | fail→pass | 10,254 | 9,010 | -12% | 1 | 1 | 0% | 366 | 1,634 | +346% | 0 | 0 | — |
case-03 | fail→fail | 9,063 | 8,605 | -5% | 1 | 1 | 0% | 308 | 1,536 | +399% | 0 | 0 | — |
case-04 | fail→pass | 10,066 | 1,784 | -82% | 1 | 1 | 0% | 1,769 | 1,395 | -21% | 0 | 0 | — |
case-05 | fail→pass | 13,326 | 8,504 | -36% | 1 | 1 | 0% | 2,254 | 1,775 | -21% | 0 | 0 | — |
case-06 | fail→fail | 14,031 | 3,810 | -73% | 1 | 1 | 0% | 1,484 | 1,794 | +21% | 0 | 0 | — |
case-07 | fail→pass | 6,758 | 3,662 | -46% | 1 | 1 | 0% | 1,098 | 1,800 | +64% | 0 | 0 | — |
case-08 | fail→pass | 13,871 | 3,525 | -75% | 1 | 1 | 0% | 1,362 | 1,790 | +31% | 0 | 0 | — |
case-09 | pass→pass | 6,128 | 4,022 | -34% | 1 | 1 | 0% | 1,000 | 1,723 | +72% | 0 | 0 | — |
case-10 | pass→pass | 12,992 | 4,090 | -69% | 1 | 1 | 0% | 1,294 | 1,768 | +37% | 0 | 0 | — |
case-11 | fail→pass | 14,876 | 2,155 | -86% | 1 | 1 | 0% | 1,858 | 1,499 | -19% | 0 | 0 | — |
case-12 | fail→pass | 10,991 | 2,095 | -81% | 1 | 1 | 0% | 2,121 | 1,466 | -31% | 0 | 0 | — |
case-13 | fail→pass | 16,915 | 9,344 | -45% | 1 | 1 | 0% | 2,227 | 1,918 | -14% | 0 | 0 | — |
case-14 | fail→pass | 17,979 | 7,911 | -56% | 1 | 1 | 0% | 2,163 | 2,462 | +14% | 0 | 0 | — |
case-15 | fail→pass | 21,508 | 5,016 | -77% | 1 | 1 | 0% | 2,969 | 1,938 | -35% | 0 | 0 | — |
case-16 | fail→fail | 17,714 | 8,546 | -52% | 1 | 1 | 0% | 2,345 | 1,729 | -26% | 0 | 0 | — |
case-17 | fail→pass | 8,720 | 3,051 | -65% | 1 | 1 | 0% | 1,462 | 1,757 | +20% | 0 | 0 | — |
case-18 | pass→pass | 11,476 | 9,922 | -14% | 1 | 1 | 0% | 1,015 | 1,955 | +93% | 0 | 0 | — |
case-20 | fail→pass | 5,304 | 10,705 | +102% | 1 | 1 | 0% | 883 | 2,106 | +139% | 0 | 0 | — |
case-21 | fail→pass | 16,068 | 5,911 | -63% | 1 | 1 | 0% | 1,954 | 2,039 | +4% | 0 | 0 | — |
case-22 | fail→pass | 10,581 | 5,257 | -50% | 1 | 1 | 0% | 1,622 | 1,944 | +20% | 0 | 0 | — |
case-23 | pass→pass | 6,888 | 3,457 | -50% | 1 | 1 | 0% | 1,116 | 1,755 | +57% | 0 | 0 | — |
case-24 | fail→pass | 8,111 | 6,562 | -19% | 1 | 1 | 0% | 1,403 | 1,360 | -3% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted, and 22 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +67 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.