KISS
Measure twice, cut once. Every cut — every line written, edited, or deleted — is preceded by a
measurement. Measure, cut once, confirm the cut landed clean. Most bloat and breakage is cheapest
to prevent at the wellspring, before the cut exists; guards catch errors downstream, KISS
prevents them at the source.
This is the front door. It does three things: holds the measure-twice discipline, runs a
one-time kickoff that makes a project start clean, and routes to the focused KISS skills.
The pre-cut gate — before any write, edit, or delete
The two measurements already live in the focused skills. This gate just makes sure they happened
before you cut:
| Measure (before the cut) |
Skill |
| Does it already exist / where is it / does it have a twin? |
kiss-map — consult .kiss/inert.md |
| Does this concept already have an OWNER? (grep the store, not the name) |
kiss-coherence |
| About to hardcode a visual constant (font size, color, spacing, radius)? Does a design token already own that value? |
kiss-coherence → design values |
| Do I understand the frame and the slot it goes in? |
kiss-plan |
| Is the change scoped to one bounded unit? |
kiss-blast-radius |
| If replacing a condition — what is it incidentally preventing? |
kiss-blast-radius |
| If DELETING an entity — what is its full footprint? (assets, config rows, data dirs, build output) |
kiss-blast-radius → residue trap |
| Is the host file within its size budget? |
kiss-clean-edits (extract-on-touch) |
| Then cut — once, deliberately. |
the edit |
| Did it land clean — nothing else touched? |
kiss-blast-radius verify |
If you can't answer a measurement, you have not measured twice. Stop and measure.
The two measurements people skip, and what they cost:
- Skipping the concept check is how one system ended up with eight implementations of "which
agents are installed?" — each named differently, each locally clean, every twin-check passing. They
drifted until the app told its own AI that agents which plainly existed did not exist. A symbol map
cannot catch this; only grepping the store can.
- Skipping the incidental-prevention check is how a correct, cleaner refactor silently deleted a
licence gate and, separately, un-hid an object that was never meant to be listed. Both passed 700+
tests, because the rule they destroyed was never tested — it was never even intended.
Kickoff — when starting a project or sizable feature
- Plan into the frame →
kiss-plan produces a design.md (modules, interfaces, verify-stepped
build sequence) before code.
- Build the map →
kiss-map generates .kiss/inert.md, the cheap source-of-truth index the
agent consults first.
- Set the budget →
kiss-modularity records the size/responsibility tiers.
- Arm the guards →
kiss-debt-guard installs the size audit + config; kiss-coherence installs the
concept guard (fails the build when a second site starts deriving a concept that already has an owner)
and seeds a concept index — question · canonical accessor · store · consumers.
- Establish the design system → one source for the visual constants the UI reasons about — a type
scale, a spacing scale, a color palette, radii — defined in a token file (the machine-readable
source:
tokens.css, Tokens.xaml, tokens.ts) and explained in a ## Design values section of
design.md (the scale, the rungs, the rationale). This is a coherence store like any other: register
the token file with kiss-coherence so a hardcoded literal that duplicates a token's value is caught as
divergent duplication. Adopt it from the first line — no component hardcodes a value a token owns. A
token layer with near-zero adoption is worse than none: it reads as a design system but every value is
answered in N hardcoded places, so the app cannot be retuned from one file and every screen is hand-
fixed forever. That section is a living deliverable — when the scale gains a rung, it is recorded there.
One design doc, and it is always design.md
Never split the design system into a second DESIGN.md. Windows (NTFS) and macOS (APFS default)
are case-insensitive: design.md and DESIGN.md are the same file, so a system that asks for both
is literally unbuildable on the two platforms most people use. On Linux it is worse than unbuildable —
it succeeds, and you now have two rival answers to "where is the design recorded?", which is the
precise duplication this skill exists to prevent. KISS must not violate KISS.
The plan (goal · modules · interfaces · build sequence) and the design values (tokens · scale ·
rationale) are sections of one file. If that file is getting long, that is a signal to shorten the
prose — not to spawn a case-variant sibling. Applies to every doc this system emits: one concept, one
file, one canonical spelling, lowercase.
Kickoff writes into the repo: design.md (plan and design values) + its token file,
.kiss/inert.md (gitignored), a budget/guard config, and a short KISS contract merged into
CLAUDE.md/AGENTS.md. That makes KISS a base, not advice.
Routing — during ongoing work
| Moment |
Skill |
| Starting a multi-step task or feature |
kiss-plan |
| Finding where something is / whether it exists / has a twin |
kiss-map |
| Writing or laying out code so it reads and lifts cleanly |
kiss-readable |
| Creating a file / deciding where code belongs |
kiss-modularity |
| Editing existing code without harming its neighbors |
kiss-blast-radius |
| The same concept is derived in more than one place / auditing an existing codebase |
kiss-coherence |
| About to hardcode a visual constant (size, color, spacing) a token could own / a token layer exists but nothing uses it |
kiss-coherence (design values) |
| Adding or changing code (a method, branch, member) |
kiss-clean-edits |
| A repo needs enforceable size/debt control |
kiss-debt-guard |
Retrofit — applying KISS to a codebase that was NOT built with it
Kickoff assumes greenfield: prevent at the wellspring. Most real work is the opposite — an existing
codebase, written without KISS, that you are now cleaning. The hazards invert.
In greenfield you are stopping bad code from being written. In a retrofit the bad code is already load-
bearing, and your clean-up is the most dangerous thing in the repo.
Retrofit order (do not reorder — later steps are riskier):
- Measure, don't touch. File sizes, concept duplication (grep by store), dead code, doc drift. Produce
the numbers before producing a diff. A guard that only inspects changed files says nothing about the
codebase — run it over the whole tree.
- Guards before cleanup. Install the ratchets first (
kiss-debt-guard, kiss-coherence), with the
existing violations recorded as tracked debt. This stops the bleeding while you work, and every
subsequent step is verified as it lands.
- Consolidate concepts (
kiss-coherence) — this finds live product bugs, not just ugly code. It is
the highest-value pass in a retrofit and the one no size audit can do for you.
- Sweep dead DATA, not just dead code (
kiss-coherence → the reverse pass). Run each store
backwards: does every record still have an owner in code? Dead-code sweeps prove the code is gone
and say nothing about the avatars, config rows, vaults and build artifacts it left behind — which a
wildcard packaging glob will cheerfully ship. Check the deployed tree, not just the repo.
- Split by byte-motion — pure moves, no logic changes. Cheap and safe.
- Refactor logic last. Highest risk, lowest urgency. Often correctly deferred forever.
The retrofit-specific traps — all three cost real regressions:
- Deliberate behaviour that looks like a bug. Old code is full of odd-looking constructs that are
load-bearing. A permissive default (
unknown ⇒ enabled) may be the only reason new records appear at
all. Investigate before "correcting", and when you conclude it's intentional, WRITE THAT AT THE SITE
(kiss-coherence → Record the negative finding) — or you, or the next agent, will re-litigate it and
eventually "fix" it into a real bug.
- Conditions that enforce a rule by accident. See
kiss-blast-radius → the silent-deletion trap.
Consolidation deletes conditions; some were doing a second, unwritten job. A green test suite does not
protect you — the rule was never tested because it was never intended.
- Tests prove structure, not behaviour. In a retrofit the suite was written against the old shape. It
will happily stay green while you change what the product does. Verify at runtime, on the actual surface.
And the finding worth carrying into every retrofit: code can be locally immaculate — small files,
clean names, one responsibility each — and globally incoherent, with one concept answered eight different
ways. Size audits score that codebase as excellent. Only a coherence pass sees it.
The model underneath
Every unit of code is a block: bounded, labeled, self-documenting, reusable, slotted into a
known frame — the way a modular installer or a reusable UI panel is built. The plugin is the frame;
each skill is a block. KISS keeps everything bite-size, human-legible, and easy to transplant —
enforced by discipline, not by template files.
1---2name: kiss3description: Use at the base of a project — when starting a new project, a sizable feature, or a fresh module, before much code exists — to set it up to stay clean, and as the entry point to the KISS discipline (plan, map, readable sections, modularity, blast-radius, debt). Use whenever you want clean-code structure established from the start rather than bolted on later.4---56# KISS78**Measure twice, cut once.** Every cut — every line written, edited, or deleted — is preceded by a9measurement. Measure, cut once, confirm the cut landed clean. Most bloat and breakage is cheapest10to prevent at the wellspring, *before* the cut exists; guards catch errors downstream, KISS11prevents them at the source.1213This is the **front door**. It does three things: holds the measure-twice discipline, runs a14one-time **kickoff** that makes a project start clean, and **routes** to the focused KISS skills.1516## The pre-cut gate — before any write, edit, or delete1718The two measurements already live in the focused skills. This gate just makes sure they happened19before you cut:2021| Measure (before the cut) | Skill |22|---|---|23| Does it already exist / where is it / does it have a twin? | `kiss-map` — consult `.kiss/inert.md` |24| **Does this concept already have an OWNER?** (grep the **store**, not the name) | **`kiss-coherence`** |25| **About to hardcode a visual constant** (font size, color, spacing, radius)? **Does a design token already own that value?** | **`kiss-coherence`** → *design values* |26| Do I understand the frame and the slot it goes in? | `kiss-plan` |27| Is the change scoped to one bounded unit? | `kiss-blast-radius` |28| **If replacing a condition — what is it *incidentally* preventing?** | **`kiss-blast-radius`** |29| **If DELETING an entity — what is its full footprint?** (assets, config rows, data dirs, build output) | **`kiss-blast-radius`** → *residue trap* |30| Is the host file within its size budget? | `kiss-clean-edits` (extract-on-touch) |31| **Then cut — once, deliberately.** | the edit |32| Did it land clean — nothing else touched? | `kiss-blast-radius` verify |3334If you can't answer a measurement, you have not measured twice. Stop and measure.3536**The two measurements people skip, and what they cost:**3738- **Skipping the concept check** is how one system ended up with **eight** implementations of *"which39 agents are installed?"* — each named differently, each locally clean, every twin-check passing. They40 drifted until the app told its own AI that agents which plainly existed did not exist. A symbol map41 cannot catch this; only grepping the **store** can.42- **Skipping the incidental-prevention check** is how a *correct*, cleaner refactor **silently deleted a43 licence gate** and, separately, un-hid an object that was never meant to be listed. Both passed 700+44 tests, because the rule they destroyed was never tested — it was never even *intended*.4546## Kickoff — when starting a project or sizable feature47481. **Plan into the frame** → `kiss-plan` produces a `design.md` (modules, interfaces, verify-stepped49 build sequence) before code.502. **Build the map** → `kiss-map` generates `.kiss/inert.md`, the cheap source-of-truth index the51 agent consults first.523. **Set the budget** → `kiss-modularity` records the size/responsibility tiers.534. **Arm the guards** → `kiss-debt-guard` installs the size audit + config; `kiss-coherence` installs the54 concept guard (fails the build when a second site starts deriving a concept that already has an owner)55 and seeds a **concept index** — `question · canonical accessor · store · consumers`.565. **Establish the design system** → one source for the **visual constants** the UI reasons about — a type57 scale, a spacing scale, a color palette, radii — defined in a **token file** (the machine-readable58 source: `tokens.css`, `Tokens.xaml`, `tokens.ts`) and explained in a **`## Design values` section of59 `design.md`** (the scale, the rungs, the rationale). This is a coherence store like any other: register60 the token file with `kiss-coherence` so a hardcoded literal that duplicates a token's value is caught as61 divergent duplication. **Adopt it from the first line — no component hardcodes a value a token owns.** A62 token layer with near-zero adoption is *worse* than none: it reads as a design system but every value is63 answered in N hardcoded places, so the app cannot be retuned from one file and every screen is hand-64 fixed forever. That section is a living deliverable — when the scale gains a rung, it is recorded there.6566> ### One design doc, and it is always `design.md`67>68> **Never split the design system into a second `DESIGN.md`.** Windows (NTFS) and macOS (APFS default)69> are case-insensitive: `design.md` and `DESIGN.md` are **the same file**, so a system that asks for both70> is literally unbuildable on the two platforms most people use. On Linux it is worse than unbuildable —71> it *succeeds*, and you now have two rival answers to *"where is the design recorded?"*, which is the72> precise duplication this skill exists to prevent. **KISS must not violate KISS.**73>74> The plan (goal · modules · interfaces · build sequence) and the design values (tokens · scale ·75> rationale) are **sections of one file**. If that file is getting long, that is a signal to shorten the76> prose — not to spawn a case-variant sibling. Applies to every doc this system emits: one concept, one77> file, one canonical spelling, lowercase.7879Kickoff **writes into the repo**: `design.md` (plan **and** design values) + its token file,80`.kiss/inert.md` (gitignored), a budget/guard config, and a short KISS contract merged into81`CLAUDE.md`/`AGENTS.md`. That makes KISS a base, not advice.8283## Routing — during ongoing work8485| Moment | Skill |86|---|---|87| Starting a multi-step task or feature | `kiss-plan` |88| Finding where something is / whether it exists / has a twin | `kiss-map` |89| Writing or laying out code so it reads and lifts cleanly | `kiss-readable` |90| Creating a file / deciding where code belongs | `kiss-modularity` |91| Editing existing code without harming its neighbors | `kiss-blast-radius` |92| The same concept is derived in more than one place / auditing an existing codebase | `kiss-coherence` |93| About to hardcode a visual constant (size, color, spacing) a token could own / a token layer exists but nothing uses it | `kiss-coherence` (design values) |94| Adding or changing code (a method, branch, member) | `kiss-clean-edits` |95| A repo needs enforceable size/debt control | `kiss-debt-guard` |9697## Retrofit — applying KISS to a codebase that was NOT built with it9899Kickoff assumes greenfield: prevent at the wellspring. Most real work is the opposite — an existing100codebase, written without KISS, that you are now cleaning. **The hazards invert.**101102In greenfield you are stopping bad code from being written. In a retrofit **the bad code is already load-103bearing**, and your clean-up is the most dangerous thing in the repo.104105**Retrofit order (do not reorder — later steps are riskier):**1061071. **Measure, don't touch.** File sizes, concept duplication (grep by store), dead code, doc drift. Produce108 the numbers before producing a diff. A guard that only inspects *changed* files says nothing about the109 codebase — run it over the whole tree.1102. **Guards before cleanup.** Install the ratchets *first* (`kiss-debt-guard`, `kiss-coherence`), with the111 existing violations recorded as tracked debt. This stops the bleeding while you work, and every112 subsequent step is verified as it lands.1133. **Consolidate concepts** (`kiss-coherence`) — this finds *live product bugs*, not just ugly code. It is114 the highest-value pass in a retrofit and the one no size audit can do for you.1154. **Sweep dead DATA, not just dead code** (`kiss-coherence` → *the reverse pass*). Run each store116 **backwards**: does every record still have an owner in code? Dead-code sweeps prove the *code* is gone117 and say **nothing** about the avatars, config rows, vaults and build artifacts it left behind — which a118 wildcard packaging glob will cheerfully **ship**. Check the *deployed* tree, not just the repo.1195. **Split by byte-motion** — pure moves, no logic changes. Cheap and safe.1206. **Refactor logic last.** Highest risk, lowest urgency. Often correctly deferred forever.121122**The retrofit-specific traps — all three cost real regressions:**123124- **Deliberate behaviour that looks like a bug.** Old code is full of odd-looking constructs that are125 load-bearing. A permissive default (`unknown ⇒ enabled`) may be the only reason new records appear at126 all. **Investigate before "correcting", and when you conclude it's intentional, WRITE THAT AT THE SITE**127 (`kiss-coherence` → *Record the negative finding*) — or you, or the next agent, will re-litigate it and128 eventually "fix" it into a real bug.129- **Conditions that enforce a rule by accident.** See `kiss-blast-radius` → *the silent-deletion trap*.130 Consolidation deletes conditions; some were doing a second, unwritten job. **A green test suite does not131 protect you** — the rule was never tested because it was never intended.132- **Tests prove structure, not behaviour.** In a retrofit the suite was written against the *old* shape. It133 will happily stay green while you change what the product does. Verify at runtime, on the actual surface.134135**And the finding worth carrying into every retrofit:** code can be *locally* immaculate — small files,136clean names, one responsibility each — and *globally* incoherent, with one concept answered eight different137ways. Size audits score that codebase as excellent. Only a coherence pass sees it.138139## The model underneath140141Every unit of code is a **block**: bounded, labeled, self-documenting, reusable, slotted into a142known frame — the way a modular installer or a reusable UI panel is built. The plugin is the frame;143each skill is a block. KISS keeps everything bite-size, human-legible, and easy to transplant —144enforced by discipline, not by template files.