⚠️ EDUCATIONAL & EXPERIMENTAL PROJECT. DYOR. terse is released for educational and experimental purposes only. no warranty. not professional advice. not affiliated with Anthropic. always verify compressed output before acting on it — especially in security, legal, medical, financial, or compliance contexts. readDISCLAIMER.mdandNOTICE.mdbefore using. by using terse you accept those terms.
token compression for Claude. ten modes, five levels, measured honestly.
58–78% output-token reduction on the published corpus. all numbers reproducible with one python command.
claude often replies with preamble, hedging, and sign-offs that don't add information.
terse is a claude code skill that cuts that — with engineering, not vibes.
the caveman skill had a good idea: claude wastes tokens on filler. but it shipped as one rule in one file with an unverified claim. terse takes the same idea and builds the actual system:
| caveman | terse | |
|---|---|---|
| skill format | .skill file |
directory + SKILL.md (current spec) |
| modes | 1 | 10 |
| aggressiveness levels | 1 | 5 |
| preservation rules | informal | 6-category engineered list |
| anti-patterns | — | hard-stops for security, legal, teaching |
| benchmarks | "75%" claim | 20 prompts × 10 modes, measured |
| trigger phrases | ~5 | 60+ with auto-activation |
10 modes × 5 levels = 50 compression profiles. pick one that matches your context.
# clone into your personal skills directory
git clone https://github.com/Dragoon0x/terse ~/.claude/skills/terse
# or curl the tarball
mkdir -p ~/.claude/skills/terse && \
curl -sL https://github.com/Dragoon0x/terse/archive/main.tar.gz \
| tar -xz --strip-components=1 -C ~/.claude/skills/terseonce installed, claude auto-loads terse when you say things like be terse, caveman mode, save tokens, /terse, or complain about long responses.
| mode | vibe | measured reduction |
|---|---|---|
spartan |
clean, readable, military-direct | 62.0% |
caveman |
drop articles, pleasantries, soft verbs | 75.1% |
telegraph |
short. sentences. stop. | 71.9% |
tweet |
280-char paragraph budget | 73.3% |
headline |
news-wire, noun-first | 72.9% |
bullet |
every statement a bullet | 58.6% |
schema |
JSON/YAML-shaped responses | 68.5% |
zen |
one idea per line, blank space between | 77.5% |
engineer |
answer first, reasoning on request | 75.7% |
dense |
max information per token, expert-to-expert | 76.4% |
see benchmarks/report.md for the full data including preservation pass rates and per-category breakdowns. see modes/ for the full rule set per mode.
levels compose with any mode. they control how far the mode is pushed.
| level | name | effect |
|---|---|---|
| 1 | trim | cut preamble and sign-offs only |
| 2 | snip | + hedges, pleasantries, filler |
| 3 | cut | + tighter sentences, active voice |
| 4 | strip | + drop articles and soft verbs |
| 5 | bare | + telegraphic, edge of readability |
say more to climb a level. say less to drop. levels persist across turns until you say normal mode.
compression without preservation is just data loss. these categories pass through every mode and every level unchanged:
- code blocks and inline code (every character inside backticks)
- identifiers (function names, class names, variable names, API names)
- shell commands, flags, file paths, URLs
- numbers, versions, constants, big-O
- user-quoted text and error messages
- safety caveats that change correctness
the benchmark runner enforces these programmatically. full rules in references/preservation-rules.md.
normal claude (76 words, ~80 tokens):
"Great question! The reason your React component is re-rendering is likely
because you're creating a new object reference on each render cycle. When
you pass an inline object as a prop, React's shallow comparison sees it as
a different object every time, which triggers a re-render. I'd recommend
using useMemo to memoize the object."
terse · caveman mode (19 words, ~22 tokens):
"New object ref each render. Inline object prop = new ref = re-render.
Wrap in `useMemo`."
same answer, 72% fewer tokens.
terse has a hard-stop list. in these contexts, it refuses to compress or warns before doing so:
- security audits and incident response
- legal, medical, or financial advice
- teaching fundamentals to a beginner
- post-mortems
- customer-facing writing
full list in references/anti-patterns.md.
one command:
cd benchmarks
python runner.pyreads corpus.json, writes results.json, regenerates report.md. stdlib only. corpus.json is human-reviewable (20 prompts × 11 responses each = 220 total strings, all human-authored).
the token estimator uses the published ~4-chars-per-token heuristic for english under cl100k_base, averaged with a words-to-tokens estimator. calibration error is ~5% on responses over 40 words. install tiktoken and run python scripts/measure.py --tiktoken <file> for exact counts.
full methodology and honest limitations in benchmarks/methodology.md.
terse/
├── SKILL.md # the skill Claude reads
├── modes/ # 10 compression modes
├── levels/ # 5 aggressiveness levels
├── references/ # preservation rules, anti-patterns, domain rules
├── benchmarks/ # corpus, runner, results, methodology
├── scripts/ # measure.py — token estimator
├── examples/ # worked examples per context
└── docs/ # landing page (github pages)
examples/code-review.md— using terse for pr reviewexamples/debugging.md— using terse for bug huntsexamples/daily-work.md— terse for standups and status updatesexamples/deep-work.md— when NOT to use terse
PRs welcome. four kinds of contributions are especially appreciated:
- new modes. one file in
modes/, following the existing template (rules, example, when-not-to-use, typical reduction). add corresponding compressed versions tocorpus.jsonand re-run the benchmark. - larger corpus. more prompts per category, or new categories. keep
corpus.jsonhuman-readable. - true tiktoken calibration data. if you run the benchmark with
tiktokeninstalled, PR the calibration numbers. - preservation rules. edge cases we missed.
MIT. see LICENSE for the full terms including warranty disclaimer and liability limitation.
educational and experimental use only. no warranty, no fitness for any purpose, no professional advice.
terse is an experimental, open-source project released under MIT. it is not audited, certified, or validated for any commercial, regulated, or mission-critical use. outputs are AI-generated and may contain errors. compressed responses can lose nuance that matters in specific contexts — you are responsible for verifying every output before acting on it.
do your own research. do not use terse for:
- security audits, incident response, or vulnerability disclosure
- legal, medical, financial, tax, or compliance advice
- safety-critical, life-critical, or regulated systems
- anything where a missing caveat could cause harm
for the full terms, including the warranty disclaimer, liability limitation, trademark notices, and non-affiliation statement, read:
DISCLAIMER.md— full experimental/educational termsNOTICE.md— trademark acknowledgments and third-party attributionsSECURITY.md— scope, threat model, and reportingLICENSE— MIT license (warranty disclaimer binding)
not affiliated with Anthropic. "Claude" and "Claude Code" are trademarks of Anthropic, PBC. references are nominative only.
inspired by @JuliusBrussee/caveman — tribute, then engineer. the original's meme energy was the spark; terse is what happens when you take the idea seriously.
built by Dragoon0x. contributions welcome under MIT.