🐕 claude-much-wow
such token. very save. much wow.
why use many word when few word do trick
Claude Code skill. Make Claude respond in doge speak. Same technical content. Far fewer tokens.
before / after
Prompt: "Explain the difference between useMemo and useCallback in React. When should I use each one?"
normal Claude — 382 tokens
useMemo vs useCallback
Both memoize values across renders to avoid unnecessary recomputation or re-renders. The difference is what they memoize.
useMemo — memoizes a value
Runs the function and caches its return value. Recomputes only when dependencies change.
const sortedUsers = useMemo(
() => users.slice().sort((a, b) => a.name.localeCompare(b.name)),
[users]
);
Use when:
- A computation is expensive (sorting, filtering large lists, heavy math).
- You need a stable reference for an object/array passed to a memoized child or used in another hook's dependency array.
(…continues for ~220 more tokens…)
muchwow — 259 tokens (−32%)
such hook both memoize. Different return.
useMemo → memoize value. Run fn, cache result. const x = useMemo(() => heavyCompute(a, b), [a, b])
useCallback → memoize function itself. Return same fn ref across renders. const fn = useCallback(() => doThing(a), [a])
much equivalent: useCallback(fn, deps) === useMemo(() => fn, deps).
When useMemo: very expensive compute · object/array passed as prop → stable ref stop child re-render · value feed into other hook deps
When useCallback: fn pass to memoized child (React.memo) → stop re-render · fn in useEffect deps → stop effect re-fire · fn pass to custom hook that care about ref
No wrap when: cheap compute · fn only used inline, no memo child downstream. such waste.
React Compiler (React 19+) auto-memoize. Manual useMemo/useCallback much less needed if compiler on.
wow
Same facts — memoize-value vs memoize-function, equivalence formula, when-to-use, when-not-to, React 19 compiler note. Far fewer word.
stats
Real numbers from evals/llm_run.py — 5 prompts × 3 arms × 3 runs = 45 API calls via claude CLI. Tokens counted with tiktoken o200k_base (approximation of Claude's BPE). Model: default via claude -p.
muchwow savings (aggregate, mean across 3 runs per prompt):
| metric | vs baseline | vs terse control |
|---|
| median savings | 45% | 52% |
| mean savings | 43% | 51% |
| range | 31% – 51% | 41% – 57% |
| stdev | 8% | 6% |
| content preserved | ✅ 100% | ✅ 100% |
per-prompt breakdown:
| prompt | baseline | terse | muchwow | vs baseline | vs terse |
|---|
| 01_explain_bug (React re-render) | 537 | 592 | 264 | −51% | −55% |
| 02_code_review (transferFunds) | 1084 | 1259 | 744 | −31% | −41% |
03_debug_error (Cannot read 'map') | 447 | 455 | 227 | −49% | −50% |
| 04_explain_concept (useMemo vs useCallback) | 430 | 549 | 262 | −39% | −52% |
| 05_api_question (slow feed endpoint) | 825 | 1044 | 453 | −45% | −57% |
notable finding — terse control made things worse: the "Be concise and direct, no filler." arm produced 17% more tokens than plain baseline, not fewer. Asking Claude to be concise appears to make it over-structure with headings and bullet lists. muchwow's doge grammar cut tokens where a generic terseness instruction could not — the 52% median savings vs terse is the honest measure of the skill's effect.
Eval snapshot: evals/snapshots/results.json. Re-run with uv run python evals/llm_run.py && uv run --with tiktoken python evals/measure.py.
install
as plugin from GitHub (recommended once published):
Inside a Claude Code session:
/plugin marketplace add shaun117/muchwow
/plugin install much-wow@much-wow
The syntax is <plugin-name>@<marketplace-name>. Both happen to be much-wow here — the first comes from .claude-plugin/plugin.json, the second from .claude-plugin/marketplace.json.
as plugin from a local clone:
/plugin marketplace add /path/to/muchwow
/plugin install much-wow@much-wow
Handy for hacking on the skill — edit skills/much-wow/SKILL.md, run /plugin marketplace update, and the change is live.
as raw skill (no plugin system):
Copy the skill directory into your user-level skills folder:
mkdir -p ~/.claude/skills/much-wow
cp skills/much-wow/SKILL.md ~/.claude/skills/much-wow/SKILL.md
Or for project-scoped: copy to .claude/skills/much-wow/SKILL.md inside the repo where you want it active.
usage
muchwow has three levels — lite, default, and ultra — controlling how aggressively Claude compresses. Once on, the level holds until you turn it off.
turn it on
Slash command (registered, fires the skill directly):