Compaction levels

a dial, not a switch

Smoower.Minified is a dial. You choose how far to push token savings against how readable the code stays on disk. The Claude Code skill asks which level before it generates; planned tooling (a VS Code virtual view + a names.map) restores full readability at the deeper levels. At every level the contract — routes, status codes, JSON/DB values — is unchanged; only the in-code handle moves.

L1 — Aliases

Short handles for framework ceremony

The smoower short handles plus the optional [Crud<>] generator — [HG], :Ctl, Tr, .w/.s/.nt, .ok1(). 100% ordinary C#. Reaches the framework ceremony (roughly 18–35% on a controller) and stays completely readable in any editor.

readable on disksame ILno tooling needed
L2 — Mapped

Short domain names, contract pinned

Short domain identifiers, with the long form pinned once in [JPN]/[Col]/global using and recorded in a names.map. Reaches the business-logic and contract floor, and the saving compounds as the codebase grows: the long name is paid once at the declaration, the short name everywhere it is referenced.

readable with toolingcontract values unchanged
L3 — Max

Whitespace packed

Everything from L2 with newlines and indentation removed — the densest form. Authored and read through the planned pack/expand tooling, which round-trips it back to fully formatted C# on the way in.

tooling viewdeterministic round-trip

The ladder, side by side

LevelWhat it addsReachesReadable on disk?
L1 — Aliasessmoower short handles + optional [Crud<>] generatorframework ceremony (~18–35% on a controller)yes
L2 — Mappedshort domain names, long form pinned in [JPN]/[Col]/global using + a names.mapthe business-logic / contract floor; compounds with codebase sizewith tooling
L3 — Maxwhitespace packed — every newline + indentation removedeverythingtooling view

Measured on a real API

On a real task-management API (samples/TodoApi) the ladder measured traditional → smoower → packed at 5,049 → 4,121 (~18%) → 3,785 (~25%) Claude tokens. Short-naming the hot domain vocabulary (L2) keeps paying as the codebase grows (see bench/FINDINGS.md §4–6).

~18%
L1 aliases vs traditional
~25%
packed (L3) vs traditional
compounding
L2 domain naming, as the codebase grows
Pick by taste. If you value readable-on-disk above all, stay at L1 — it is plain C# and needs no tooling. Reach for L2/L3 when raw token count matters most and you are using the pack/expand tooling that restores readability.

Where to next