Find out where your Claude Code tokens actually go — then cut the bill and prove it.
ShortIT is a Claude Code skill that audits your real session transcripts, identifies which cost lever matters on your setup, applies the reduction, and measures the result against a recorded baseline.
It exists because the intuitive fix ("tell it to be concise") targets the smallest line item. In most real sessions the dominant cost is the cached prefix — system prompt, MCP tool schemas, CLAUDE.md, skills, and accumulated conversation — re-read on every single request.
git clone https://github.com/Masriyan/ShortIT.git
cd ShortIT
python3 scripts/token_audit.py --days 30 # where the money went
python3 scripts/context_audit.py # what rides every request
python3 scripts/savings_report.py baseline # record a beforeThen apply reference/playbook.md, work for a day, and:
python3 scripts/savings_report.py compare # measured deltaPython 3.9+, standard library only. Reads local files; no network calls unless
you pass --exact.
As a plugin (recommended — gets updates via /plugin):
/plugin marketplace add Masriyan/ShortIT
/plugin install shortit@shortit
As a plain skill:
git clone https://github.com/Masriyan/ShortIT.git ~/.claude/skills/ShortITEither way, invoke it with /shortit, or just ask about token costs — the
description triggers on cost, context-window, and MCP-pruning questions.
Update the marketplace copy later with /plugin marketplace update shortit.
INPUT TOKENS
cache read (recurring prefix) 3.0B ###########################. 98.2% @0.1x
cache write (prefix build) 55.2M #........................... 1.8% @1.25x
uncached input (new content) 277.7K ............................ 0.0% @1.0x
output tokens 10.3M
RECURRING OVERHEAD (the ShortIT target)
Cached prefix re-read per request : ~283.2K tokens
COST
Actual spend : $2,216.69
Without prompt caching : $14,721.11
Caching already saved : $12,504.42 (85%)
And the context audit separates what you control from what you don't:
MEASURED STATIC PREFIX (from your own transcripts)
Median first-request size : 35.0K tokens
ITEMIZED — what's in it, by file
915 tok 71.6% 20 global skill descriptions
363 tok 28.4% ~/.claude/rules/context7.md
33.8K tok UNACCOUNTED — the harness system prompt and
the tool schemas of connected MCP servers.
That gap is the actionable finding: 1.3K from your own files, 33.8K from connected MCP servers and the harness. Disconnecting servers a project doesn't use is worth more than any amount of prompt tightening.
| Lever | Targets | Typical share of the win |
|---|---|---|
| Prune resident context — disconnect unused MCP servers, trim CLAUDE.md, one-line skill descriptions | cached prefix (R) | largest |
| Session hygiene — one task per session, subagents for wide searches, never re-read | prefix growth (R) | large |
Read/search discipline — grep before read, offset/limit, batched calls |
uncached input | moderate |
| Output + routing — terse answers, Haiku for mechanical work, lower effort | output (5x, uncached) | moderate |
R = recurring, paid on every request. That's why the first two dominate.
85% is reachable, but only by stacking all four levers — and the largest component is not behavior change. Output-terseness discipline alone lands around 15-25%. The multiplier lives in the recurring per-request overhead.
The scripts measure your real split instead of asserting a number, and
savings_report.py compare reports per-request cost so the result isn't
just "you worked less this week."
Per million tokens (Anthropic API rates):
| Model | Input | Output |
|---|---|---|
| Claude Opus 5 | $5.00 | $25.00 |
| Claude Sonnet 5 | $3.00 | $15.00 |
| Claude Haiku 4.5 | $1.00 | $5.00 |
Cache writes bill at 1.25x input (5-minute TTL) or 2x (1-hour TTL). Cache reads bill at 0.1x input.
ShortIT/
├── .claude-plugin/
│ ├── marketplace.json marketplace catalog entry
│ └── plugin.json plugin manifest
├── .github/
│ ├── ISSUE_TEMPLATE/ bug / feature / audit-data templates
│ └── PULL_REQUEST_TEMPLATE.md
├── banner.png README banner
├── SKILL.md the skill definition
├── README.md this file
├── CONTRIBUTING.md how to contribute (claims need numbers)
├── CODE_OF_CONDUCT.md community standards
├── SECURITY.md what ShortIT reads, and how to report issues
├── CHANGELOG.md release history
├── LICENSE MIT
├── scripts/
│ ├── token_audit.py where the money went
│ ├── context_audit.py what rides every request
│ └── savings_report.py baseline / compare
├── reference/
│ └── playbook.md the full checklist, with rationale
├── docs/
│ ├── INSTALLATION.md install, verify, uninstall
│ ├── COST_MODEL.md why sessions cost what they do
│ ├── METHODOLOGY.md how it measures, and where it's wrong
│ ├── FAQ.md common questions
│ └── TROUBLESHOOTING.md when something breaks
└── examples/
└── example_usage.md worked end-to-end session
| Doc | Read it when |
|---|---|
| INSTALLATION.md | Installing, verifying, or removing ShortIT |
| COST_MODEL.md | You want to understand why the prefix dominates |
| METHODOLOGY.md | You want to know how far to trust the numbers |
| FAQ.md | "Is 85% real?", "should I disable caching?", etc. |
| TROUBLESHOOTING.md | A script errors or the results look wrong |
| reference/playbook.md | You're ready to apply changes |
| examples/example_usage.md | You want to see a full pass first |
Contributions welcome — especially real audit numbers, which is what replaces ShortIT's estimated projection rates with measured ones. There is one rule: claims must be backed by numbers.
See CONTRIBUTING.md and the Code of Conduct. For security issues, see SECURITY.md.
MIT — see LICENSE.
Author: Masriyan
