paperthin 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,19 @@
1
- {
2
- "name": "paperthin",
3
- "description": "Plain-Markdown skills that turn old engineering wisdom into reflexes your agent reaches for on its own — on any agent.",
4
- "skills": [
5
- "./skills/single/re0",
6
- "./skills/single/re0-git",
7
- "./skills/single/shower",
8
- "./skills/single/tasting",
9
- "./skills/cross/ssotchk",
10
- "./skills/cross/ssotize"
11
- ]
12
- }
1
+ {
2
+ "name": "paperthin",
3
+ "description": "Plain-Markdown skills that turn old engineering wisdom into reflexes your agent reaches for on its own — on any agent.",
4
+ "skills": [
5
+ "./skills/depth/factchk",
6
+ "./skills/depth/mandela",
7
+ "./skills/depth/re0",
8
+ "./skills/depth/re0-git",
9
+ "./skills/depth/hate",
10
+ "./skills/depth/shower",
11
+ "./skills/depth/sip",
12
+ "./skills/breadth/ssotchk",
13
+ "./skills/breadth/ssotize",
14
+ "./skills/coil/retro",
15
+ "./skills/coil/scratch",
16
+ "./skills/coil/flywheel",
17
+ "./skills/coil/nba"
18
+ ]
19
+ }
@@ -0,0 +1,17 @@
1
+ name: ci
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+
8
+ jobs:
9
+ validate:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ - uses: actions/setup-node@v4
14
+ with:
15
+ node-version: 22
16
+ - name: Validate the skill catalog
17
+ run: bash scripts/validate-skills.sh
@@ -0,0 +1,39 @@
1
+ name: release
2
+
3
+ on:
4
+ push:
5
+ tags: ['v*.*.*']
6
+
7
+ permissions:
8
+ contents: write # create the GitHub Release
9
+ id-token: write # npm provenance via OIDC
10
+
11
+ jobs:
12
+ publish:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+
17
+ - uses: actions/setup-node@v4
18
+ with:
19
+ node-version: 22
20
+ registry-url: https://registry.npmjs.org
21
+
22
+ - name: Validate the skill catalog
23
+ run: bash scripts/validate-skills.sh
24
+
25
+ - name: Verify tag matches package.json
26
+ run: |
27
+ PKG=$(node -p "require('./package.json').version")
28
+ TAG=${GITHUB_REF_NAME#v}
29
+ test "$PKG" = "$TAG" || { echo "tag $TAG != package.json $PKG"; exit 1; }
30
+
31
+ - name: Publish to npm (public, with provenance)
32
+ run: npm publish --provenance --access public
33
+ env:
34
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
35
+
36
+ - name: Create the GitHub Release
37
+ env:
38
+ GH_TOKEN: ${{ github.token }}
39
+ run: gh release create "$GITHUB_REF_NAME" --title "PaperThin ${GITHUB_REF_NAME#v}" --notes-from-tag
package/CLAUDE.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # PaperThin
2
2
 
3
- The guide for authoring these skills — and itself a skill artifact, so `re0` it when it drifts. The shipped catalog is [README](./README.md).
3
+ PaperThin is an agent-agnostic suite of plain-Markdown skills that keep an artifact **clean and true** — hygiene reflexes an agent reaches for on its own. This is the guide for authoring them — and itself a skill artifact, so `re0` it when it drifts. Every skill it names below — `re0`, `factchk`, `hate`, … — is defined in the shipped catalog, the [README](./README.md).
4
4
 
5
5
  ## Philosophy
6
6
 
7
- - **Trust the artifact, not the author.** A skill exists to make work read true to someone who wasn't there. The maker's in-session mind is the worst judge of whether it does — so a skill either re-derives the work from what's true now, or imports outside eyes to test it.
7
+ - **Trust the artifact, not the author.** A skill exists to make work read true to someone who wasn't there — *clear* (does it read?) and *correct* (is what it claims real?). The maker's in-session mind is the worst judge of either — so a skill either re-derives the work from what's true now, or imports outside eyes to test it.
8
8
  - **Single source of truth.** One fact lives in one place; everything else references it by name. Skills compose by naming each other in prose — never by copying content or reaching into another skill's files. Shared material lives in its owning skill; others point to it.
9
9
  - **Restraint.** Change only what genuinely improves — a pass that finds nothing to improve changes nothing. The enemy is slop (noise, duplication, padding), not addition.
10
10
  - **Recursive.** Every skill is general enough to use *while building the skills*, so we maintain the skills with the skills, and each pass is audited and refined by the tools it ships. Treat that loop as the point.
@@ -15,12 +15,34 @@ The guide for authoring these skills — and itself a skill artifact, so `re0` i
15
15
  skills/<perspective>/<name>/SKILL.md
16
16
  ```
17
17
 
18
- Group by **artifact perspective** which is the suite's two vectors made physical:
18
+ Topic domains belong in separate plugins, so within a plugin the only durable cut is **perspective**. One skill = one directory with a `SKILL.md`.
19
+
20
+ That cut is two orthogonal axes, **cardinality × time**:
21
+
22
+ ```text
23
+ skills/
24
+ ├── depth/ one artifact · now
25
+ │ refine or verify the thing in hand
26
+ │ re0 · re0-git · shower · sip · factchk · mandela · hate
27
+
28
+ ├── breadth/ many artifacts · now
29
+ │ reconcile one truth across files and platforms
30
+ │ ssotchk · ssotize
31
+
32
+ ├── coil/ one project · across iterations
33
+ │ carry learning between build cycles
34
+ │ retro · scratch · flywheel · nba
35
+
36
+ └── mesh/ many minds · across rounds
37
+ converge independent views into consensus
38
+ (reserved · v0.8)
39
+ ```
40
+
41
+ **File by trigger-scope, not by what a skill invokes.** A skill lives where the work it *triggers or emits* ranges, even when it orchestrates skills from other folders — `sip` gates one finished deliverable, so it's `depth/`, though its check runs a cross-file `ssotchk`.
19
42
 
20
- - `single/` **depth**: refine or verify the one artifact in hand (`re0`, `re0-git`, `shower`, `tasting`).
21
- - `cross/` — **breadth**: reconcile one truth across many artifacts and platforms (`ssotchk`, `ssotize`).
43
+ Reach for `breadth/` to *establish* order (legacy refactor, knowledge-base build, fresh scaffolding); once a fact is cleanly SSOT'd, *maintain* it with `re0` rather than re-consolidating. Keep drafts and retired skills out of the README and `plugin.json`.
22
44
 
23
- Reach for `cross/` to *establish* order (legacy refactor, knowledge-base build, fresh scaffolding); once a fact is cleanly SSOT'd, *maintain* it with `re0` rather than re-consolidating. Topic domains belong in separate plugins, so within a plugin the only durable cut is perspective. One skill = one directory with a `SKILL.md`; keep drafts and retired skills out of the README and `plugin.json`.
45
+ **Name it for the reflex it fires** a plain real word (`shower`, `sip`) or a tight compression of a real term (`re0`, `ssotchk`, `ssotize`); a stranger should half-guess what it does from the name alone, so no opaque coinage. A self-evident metaphor-noun is allowed only as a deliberate exception, when its own intuition carries it.
24
46
 
25
47
  ## SKILL.md format
26
48
 
@@ -28,6 +50,7 @@ Reach for `cross/` to *establish* order (legacy refactor, knowledge-base build,
28
50
  ---
29
51
  name: <kebab-name> # matches the directory and the invocation
30
52
  description: "<trigger-rich one-liner>"
53
+ # disable-model-invocation: true ← user-invoked skills only
31
54
  ---
32
55
 
33
56
  <one line: what the skill does>
@@ -42,7 +65,14 @@ description: "<trigger-rich one-liner>"
42
65
 
43
66
  Every `SKILL.md` is either user-invoked (`disable-model-invocation: true`, reachable only by the human) or model-invoked (model- or user-reachable). For the full definitions, description conventions, and why a user-invoked skill can invoke model-invoked skills but never another user-invoked one, see [docs/invocation.md](./docs/invocation.md).
44
67
 
45
- Default to model-invoked. Make a skill user-invoked only when the model should never reach it on its own — its trigger is a deliberate, human-decided action (commit, push, publish, deploy), or its mere presence in reach would bias the agent toward one. A user-invoked skill can't be composed, so it also stays out of `tasting`. Today only `re0-git` qualifies: it cleans a commit's message, and committing is human-decided.
68
+ Default to model-invoked. Make a skill user-invoked only when the model should never reach it on its own — its trigger is a deliberate, human-decided action (commit, push, publish, deploy), or its mere presence in reach would bias the agent toward one. A user-invoked skill can't be composed, so it also stays out of `sip`. Two qualify today: `re0-git` (it cleans a commit's message committing is human-decided) and `hate` (a hate-it reflex always in the agent's reach would bias it toward demolition).
69
+
70
+ ## Conventions
71
+
72
+ Shared rules a skill references rather than restates:
73
+
74
+ - **edit-safety** (any mutating skill — `re0`, `ssotize`, `scratch`): a find-replace that could match nothing must **assert its target exists** (report a MISS, never silently no-op); byte-level tools corrupt multibyte text, so mutate with a **unicode-safe** pass (`PYTHONUTF8=1`, stdout reconfigured to UTF-8); never **blanket-replace a single target whose right replacement is positional** (the same token mapping to different replacements per location) — decide per occurrence, never a blind sweep; and make large *structural* moves with a script, not by retyping.
75
+ - **negatives-as-corpus**: "cut" means **move-to-archive, never delete** — pruned and failed branches are assets, not waste.
46
76
 
47
77
  ## Shipping
48
78
 
@@ -52,7 +82,7 @@ Before committing:
52
82
  2. **README** lists it — grouped Model-/User-invoked, each linked to its `SKILL.md`.
53
83
  3. **plugin.json** registers its path.
54
84
  4. **package.json** bumps version (new skill = minor; fix/docs = patch); `keywords` stay grouped logically.
55
- 5. Run **`tasting`** — `shower` the artifact, `ssotchk` the repo, `re0` the docs.
85
+ 5. Run **`sip`** — `shower` the artifact, `ssotchk` the repo, `re0` the docs.
56
86
 
57
87
  Commit messages: Conventional Commits, one bullet per real change — no padding, no mechanical trivia, no co-author tags. `re0-git` cleans a drifted message back to its essence, in the author's own style.
58
88
 
package/README.md CHANGED
@@ -1,132 +1,194 @@
1
- <div align="center">
2
-
3
- # PaperThin
4
-
5
- <img src="https://raw.githubusercontent.com/LilMGenius/paperthin/main/assets/banner.svg" alt="PaperThin — Trust the artifact, not the author." width="820">
6
-
7
- Plain-Markdown skills that turn old engineering wisdom into reflexes your agent reaches for on its own — on any agent: Claude Code, Codex, Cursor, Antigravity, Grok-Build, Hermes, OpenClaw, Pi, etc.
8
-
9
- [Quickstart](#quickstart-15-seconds) · [Reference](#reference) · [The Problem](#the-problem) · [The Fixes](#the-fixes) · [Credits](#credits)
10
-
11
- </div>
12
-
13
- ---
14
-
15
- ## Quickstart (15 seconds)
16
-
17
- 1. **Install** for every agent you use:
18
- ```bash
19
- npx skills@latest add LilMGenius/paperthin --global --agent '*'
20
- ```
21
- 2. **Run it elevated** so the skills are symlinked (they auto-update), not copied.
22
- 3. **Use them** — model-invoked, so your agent reaches for them on its own; or call one by name, like `/re0`.
23
-
24
- **Not sure?** Paste that command into whatever agent you're using and just say "set this up for me" — it'll do the rest.
25
-
26
- ## Reference
27
-
28
- ### Model-invoked — your agent reaches for these on its own
29
- | Skill | Scope | What it does |
30
- |---|---|---|
31
- | ♻️ **[re0](./skills/single/re0/SKILL.md)** | one artifact | Rewrite a drifted artifact into a clean v0 — not another patch |
32
- | 🚿 **[shower](./skills/single/shower/SKILL.md)** | one artifact | Cold-read it with fresh, zero-context eyes — does it stand on its own? *(read-only)* |
33
- | 🔎 **[ssotchk](./skills/cross/ssotchk/SKILL.md)** | many artifacts | Find where one fact is scattered or duplicated; name the canonical source *(read-only)* |
34
- | 🧲 **[ssotize](./skills/cross/ssotize/SKILL.md)** | many artifacts | Consolidate it into one home and point the rest at it |
35
- | 🍴 **[tasting](./skills/single/tasting/SKILL.md)** | your output | After any change, auto-runs `shower` + `ssotchk` + `re0` on it |
36
-
37
- ### User-invoked you run these yourself
38
- | Skill | Scope | What it does |
39
- |---|---|---|
40
- | 🧾 **[re0-git](./skills/single/re0-git/SKILL.md)** | one commit | Rewrite a finished commit's message into a clean v0 so `git log` alone hands off |
41
-
42
- ## The Problem
43
-
44
- **Most agent skills are slop.**
45
-
46
- Point an agent at a goal and it **adds** more files, more options, more "helpful" boilerplate. Adding looks like progress, and nothing ever makes it go back and delete.
47
-
48
- > [!WARNING]
49
- > Repeat that across a project and you get the familiar AI-generated toolkit: near-duplicate skills, dead settings, a README that says the same thing three times. Plausible, busy, and quietly unmaintainable.
50
-
51
- These skills bet the other way **every one of them removes:**
52
-
53
- - `re0` rewrites a draft into a clean v0 instead of patching it,
54
- - `ssotchk` / `ssotize` collapse the same fact scattered across files,
55
- - `shower` cuts whatever a stranger can't follow,
56
- - `tasting` runs all of it on your own output, automatically.
57
-
58
- > [!TIP]
59
- > The hard part isn't adding features — it's restraint. A pass that finds nothing to improve changes nothing. **That restraint is the product.**
60
-
61
- ## The Fixes
62
-
63
- **Each is a well-worn principle, made automatic.**
64
-
65
- ### #1 — Artifacts rot
66
- Edit a doc one piece at a time across a session and it bloats: stale deltas, duplicated noise, changelog scars. Patching on top just preserves the rot.
67
-
68
- **The fix `re0`:** rewrite the artifact as a clean v0, as if it were the first version.
69
-
70
- > *Prior art: the Boy Scout Rule "leave it cleaner than you found it" (Robert C. Martin, [Clean Code](https://www.informit.com/articles/article.aspx?p=1235624&seqNum=6), 2008). `re0` goes further: rewrite, don't just tidy.*
71
-
72
- <details>
73
- <summary><b>[PROOF]</b></summary>
74
-
75
- - **Setup** — we asked `re0` to refresh these docs once more, but they were already at v0.
76
- - **Result** — it found nothing to improve and left every line of prose untouched.
77
- - **So** a tool that does nothing when nothing is wrong never bloats your repo: these skills remove noise, they never add it.
78
- </details>
79
-
80
- ### #2 — You go blind to your own work
81
- After a long session you're the one person who *can't* read your own work straight: you know too much, so your brain quietly fills every gap and the holes turn invisible.
82
-
83
- **The fix → `shower`:** hand a stranger who never saw your session only the artifact, and ask "does this actually make sense?"
84
-
85
- > *Prior art: [egoless programming](https://en.wikipedia.org/wiki/Egoless_programming) you can't review your own work objectively; someone else must (Gerald Weinberg, 1971). Here, that someone is a context-free sub-session.*
86
-
87
- <details>
88
- <summary><b>[PROOF]</b></summary>
89
-
90
- - **Setup**we handed `shower` its own spec, to a sub-session with zero context, holding only the file.
91
- - **Result** — in minutes it found three bugs the author had missed:
92
- - a step that hinted the answer it should hide,
93
- - a path that leaked spoiler files,
94
- - a scope too vague to act on.
95
- - **So** — a skill that catches its own bugs can catch yours.
96
- </details>
97
-
98
- ### #3 — The same fact ends up everywhere
99
- A timeout value, a decision, a status — copied into a README, a doc, a ticket, and a Slack thread. The copies drift, and now no one knows which is true.
100
-
101
- **The fix `ssotchk` + `ssotize`:** find the scatter, name the canonical source, then consolidate and point the rest at it.
102
-
103
- > *Prior art: [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) one fact, one authoritative home (Hunt & Thomas, The Pragmatic Programmer, 1999).*
104
-
105
- ### #4"Remember to verify" never fires
106
- A guideline buried in docs won't trigger in a brand-new session — exactly when author bias is highest.
107
-
108
- **The fix → `tasting`:** the moment you finish something, it runs `shower`, `ssotchk`, and `re0` on your output, automatically.
109
-
110
- > *Prior art: [dogfooding](https://en.wikipedia.org/wiki/Eating_your_own_dog_food) eat your own dog food (Microsoft, 1988). Taste your own cooking before you serve it.*
111
-
112
- ### #5 Your session doesn't travel; the git log does
113
- Your session is stuck where it ran — this agent, this account, this machine. A teammate or another agent can't load the context your work happened in.
114
-
115
- **The fix → `re0-git`:** clean a finished commit's message so `git log` the one thing every environment shares carries the handoff, and anyone picks up from the log alone.
116
-
117
- <details>
118
- <summary><b>[PROOF]</b></summary>
119
-
120
- - **Setup** — `re0-git`'s very first target was its own release commit.
121
- - **Result** dogfooding it surfaced two faults, both fixed:
122
- - a message padded with trivia,
123
- - a spec that preached "no redundancy" while repeating itself.
124
- - **So** — its first cleanup was after itself.
125
- </details>
126
-
127
- ## Credits
128
-
129
- - **Built on** [mattpocock/skills](https://github.com/mattpocock/skills) (MIT) — its architecture and philosophy.
130
- - **Not a fork** — these are [LilMGenius](https://github.com/LilMGenius)'s own, non-overlapping workflows.
131
- - **Vendored verbatim** — a few shared building blocks, kept as-is with per-source attribution in [NOTICE](./NOTICE).
132
- - **Authoring guide** conventions and philosophy live in [CLAUDE.md](./CLAUDE.md).
1
+ <div align="center">
2
+
3
+ # PaperThin
4
+
5
+ <img src="https://raw.githubusercontent.com/LilMGenius/paperthin/main/assets/banner.svg" alt="PaperThin — Trust the artifact, not the author." width="820">
6
+
7
+ Plain-Markdown skills that turn old engineering wisdom into reflexes your agent reaches for on its own — on any agent: Claude Code, Codex, Cursor, Antigravity, Grok-Build, Hermes, OpenClaw, Pi, etc.
8
+
9
+ [Quickstart](#quickstart-15-seconds) · [Index](#index) · [The Map](#the-map) · [The Problem](#the-problem) · [The Fixes](#the-fixes) · [Credits](#credits)
10
+
11
+ </div>
12
+
13
+ ---
14
+
15
+ ## Quickstart (15 seconds)
16
+
17
+ 1. **Install** for every agent you use:
18
+ ```bash
19
+ npx skills@latest add LilMGenius/paperthin --global --agent '*'
20
+ ```
21
+ 2. **Run it elevated** so the skills are symlinked (they auto-update), not copied.
22
+ 3. **Use them** — model-invoked, so your agent reaches for them on its own; or call one by name, like `/re0`.
23
+
24
+ **Not sure?** Paste that command into whatever agent you're using and just say "set this up for me" — it'll do the rest.
25
+
26
+ ## Index
27
+
28
+ ### Model-invoked — your agent reaches for these on its own
29
+ | Skill | Scope | What it does |
30
+ |---|---|---|
31
+ | ♻️ **[re0](./skills/depth/re0/SKILL.md)** | one artifact | Rewrite a drifted artifact into a clean v0 — not another patch |
32
+ | 🚿 **[shower](./skills/depth/shower/SKILL.md)** | one artifact | Cold-read it with fresh, zero-context eyes — does it stand on its own? *(read-only)* |
33
+ | 🔬 **[factchk](./skills/depth/factchk/SKILL.md)** | one claim | Verify a reality-grounded claim against sources, both directions could the absurd be real, the obvious false? *(read-only → fix)* |
34
+ | 🧪 **[mandela](./skills/depth/mandela/SKILL.md)** | one eval | Audit a validation for leakage does outside ground-truth actually enter? Walks 8 patterns *(read-only)* |
35
+ | 🔎 **[ssotchk](./skills/breadth/ssotchk/SKILL.md)** | many artifacts | Find where one fact is scattered or duplicated; name the canonical source *(read-only)* |
36
+ | 🧲 **[ssotize](./skills/breadth/ssotize/SKILL.md)** | many artifacts | Consolidate it into one home and point the rest at it |
37
+ | 🧭 **[retro](./skills/coil/retro/SKILL.md)** | one project, across iterations | Extract lessons, anti-patterns, gates, and vocabulary from a finished or failed cycle |
38
+ | 🧱 **[scratch](./skills/coil/scratch/SKILL.md)** | one project, across iterations | Restart from v0 while preserving only proven lessons, contracts, gates, and negative corpus |
39
+ | 🌀 **[flywheel](./skills/coil/flywheel/SKILL.md)** | one project, across iterations | Run build → QA → retro → scratch cycles without mistaking code accumulation for learning |
40
+ | 🎯 **[nba](./skills/coil/nba/SKILL.md)** | one project, across iterations | Read the live cycle state and return the single next best action, not a menu *(read-only)* |
41
+ | 🥄 **[sip](./skills/depth/sip/SKILL.md)** | your output | After any change, auto-runs `shower` + `ssotchk` + `re0` on it |
42
+
43
+ ### User-invoked — you run these yourself
44
+ | Skill | Scope | What it does |
45
+ |---|---|---|
46
+ | 🧾 **[re0-git](./skills/depth/re0-git/SKILL.md)** | one commit | Rewrite a finished commit's message into a clean v0 so `git log` alone hands off |
47
+ | 😈 **[hate](./skills/depth/hate/SKILL.md)** | one plan | Refuse to be nice to it — the one objection that could kill it + the cheapest test |
48
+
49
+ ## The Map
50
+
51
+ **How many artifacts, and across how much time?**
52
+
53
+ Two axes **cardinality × time** carve four regions.
54
+
55
+ <div align="center">
56
+ <img src="https://raw.githubusercontent.com/LilMGenius/paperthin/main/assets/map.svg" alt="The PaperThin map: a two-by-two matrix. Horizontal axis cardinality (one, then many); vertical axis time (now, then across iterations); four regions. Top-left, depth: one artifact, now; is this one thing clean and true? Top-right, breadth: many artifacts, now; is one truth consistent everywhere? Bottom-left, coil: one project, across iterations; did each pass teach the next? Bottom-right, mesh: many minds, across rounds; does the crowd converge on truth?" width="820">
57
+ </div>
58
+
59
+ ## The Problem
60
+
61
+ **Most agent skills are slop.**
62
+
63
+ Point an agent at a goal and it **adds** — more files, more options, more "helpful" boilerplate. Adding looks like progress, and nothing ever makes it go back and delete.
64
+
65
+ > [!WARNING]
66
+ > Repeat that across a project and you get the familiar AI-generated toolkit: near-duplicate skills, dead settings, a README that says the same thing three times. Plausible, busy, and quietly unmaintainable.
67
+
68
+ These skills bet the other way **every one of them removes:**
69
+
70
+ - `re0` rewrites a draft into a clean v0 instead of patching it,
71
+ - `ssotchk` / `ssotize` collapse the same fact scattered across files,
72
+ - `shower` cuts whatever a stranger can't follow,
73
+ - `retro` / `scratch` preserve the lesson and let the wrong build die,
74
+ - `sip` runs all of it on your own output, automatically.
75
+
76
+ > [!TIP]
77
+ > The hard part isn't adding features it's restraint. A pass that finds nothing to improve changes nothing. **That restraint is the product.**
78
+
79
+ ## The Fixes
80
+
81
+ <!-- Fixes follow the lifecycle of a piece of work, not the skill list: first keep it clean (draft → read fresh reconcile across files automate → ship), then keep it true (a single claim a validation → the whole plan). Slot any new fix in by where it acts in that arc. -->
82
+
83
+ **Each is a well-worn principle, made automatic.**
84
+
85
+ ### #1Artifacts rot
86
+ Edit a doc one piece at a time across a session and it bloats: stale deltas, duplicated noise, changelog scars. Patching on top just preserves the rot.
87
+
88
+ **The fix → `re0`:** rewrite the artifact as a clean v0, as if it were the first version.
89
+
90
+ > *Prior art: the Boy Scout Rule "leave it cleaner than you found it" (Robert C. Martin, [Clean Code](https://www.informit.com/articles/article.aspx?p=1235624&seqNum=6), 2008). `re0` goes further: rewrite, don't just tidy.*
91
+
92
+ <details>
93
+ <summary><b>[PROOF]</b></summary>
94
+
95
+ - **Setup** — we asked `re0` to refresh these docs once more, but they were already at v0.
96
+ - **Result** — it found nothing to improve and left every line of prose untouched.
97
+ - **So** — a tool that does nothing when nothing is wrong never bloats your repo: these skills remove noise, they never add it.
98
+ </details>
99
+
100
+ ### #2 — You go blind to your own work
101
+ After a long session you're the one person who *can't* read your own work straight: you know too much, so your brain quietly fills every gap and the holes turn invisible.
102
+
103
+ **The fix `shower`:** hand a stranger who never saw your session only the artifact, and ask "does this actually make sense?"
104
+
105
+ > *Prior art: [egoless programming](https://en.wikipedia.org/wiki/Egoless_programming) you can't review your own work objectively; someone else must (Gerald Weinberg, 1971). Here, that someone is a context-free sub-session.*
106
+
107
+ <details>
108
+ <summary><b>[PROOF]</b></summary>
109
+
110
+ - **Setup** we handed `shower` its own spec, to a sub-session with zero context, holding only the file.
111
+ - **Result** — in minutes it found three bugs the author had missed:
112
+ - a step that hinted the answer it should hide,
113
+ - a path that leaked spoiler files,
114
+ - a scope too vague to act on.
115
+ - **So**a skill that catches its own bugs can catch yours.
116
+ </details>
117
+
118
+ ### #3 — The same fact ends up everywhere
119
+ A timeout value, a decision, a status — copied into a README, a doc, a ticket, and a Slack thread. The copies drift, and now no one knows which is true.
120
+
121
+ **The fix `ssotchk` + `ssotize`:** find the scatter, name the canonical source, then consolidate and point the rest at it.
122
+
123
+ > *Prior art: [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) one fact, one authoritative home (Hunt & Thomas, The Pragmatic Programmer, 1999).*
124
+
125
+ ### #4 — "Remember to verify" never fires
126
+ A guideline buried in docs won't trigger in a brand-new session — exactly when author bias is highest.
127
+
128
+ **The fix → `sip`:** the moment you finish something, it runs `shower`, `ssotchk`, and `re0` on your output, automatically.
129
+
130
+ > *Prior art: [dogfooding](https://en.wikipedia.org/wiki/Eating_your_own_dog_food) — eat your own dog food (Microsoft, 1988). Taste your own cooking before you serve it.*
131
+
132
+ ### #5Your session doesn't travel; the git log does
133
+ Your session is stuck where it ran — this agent, this account, this machine. A teammate or another agent can't load the context your work happened in.
134
+
135
+ **The fix → `re0-git`:** clean a finished commit's message so `git log` — the one thing every environment shares — carries the handoff, and anyone picks up from the log alone.
136
+
137
+ <details>
138
+ <summary><b>[PROOF]</b></summary>
139
+
140
+ - **Setup** — `re0-git`'s very first target was its own release commit.
141
+ - **Result** — dogfooding it surfaced two faults, both fixed:
142
+ - a message padded with trivia,
143
+ - a spec that preached "no redundancy" while repeating itself.
144
+ - **So** — its first cleanup was after itself.
145
+ </details>
146
+
147
+ > [!NOTE]
148
+ > The five fixes above keep an artifact **clean**. The next three keep it **true** — the same distrust of the author, turned on the reasoning instead of the prose.
149
+
150
+ ### #6 — Your gut isn't a source
151
+ "Plausible," "absurd," "novel" — the least reliable line in any artifact. Human priors fail **both ways**: they exclude the real (desert frogs exist) and normalize the impossible (weightless crates).
152
+
153
+ **The fix → `factchk`:** verify any reality-grounded claim against external sources, in both directions, before it ships — and flag, don't guess, when you can't reach one.
154
+
155
+ > *Prior art: [WEIRD bias](https://www.cambridge.org/core/journals/behavioral-and-brain-sciences/article/abs/weirdest-people-in-the-world/BF84F7517D56AFF7B7EB58411A554C17) (Henrich, Heine & Norenzayan, 2010) and the [naive-physics / impetus error](https://www.science.org/doi/10.1126/science.210.4474.1139) (McCloskey, Caramazza & Green, 1980) — intuition misjudges reality in both directions.*
156
+
157
+ <details>
158
+ <summary><b>[PROOF]</b></summary>
159
+
160
+ - **Setup** — we ran `factchk` on its own shipped citations, in both directions.
161
+ - **Result** — all held, and it still caught two attribution slips to fix: the famous "what's measured becomes the target" wording is Strathern (1997), not Goodhart; and "McCloskey 1980" is the co-authored *Science* paper, not the 1983 *Scientific American* piece.
162
+ - **So** — a fact-checker that audits its own footnotes will audit yours.
163
+ </details>
164
+
165
+ ### #7 — The eval confirms itself
166
+ A model, a scorer, and a designer can all agree a result is real while no outside ground-truth ever entered the loop — a whole room confidently remembering something that never independently happened.
167
+
168
+ **The fix → `mandela`:** audit any eval, metric, or experiment against an 8-pattern leakage taxonomy — does external ground-truth enter independently, or is the verifier the designer?
169
+
170
+ > *Prior art: [Goodhart's law](https://en.wikipedia.org/wiki/Goodhart%27s_law), [data leakage](https://dl.acm.org/doi/10.1145/2382577.2382579) (Kaufman et al., 2012), and [circular analysis](https://www.nature.com/articles/nn.2303) — "double dipping" (Kriegeskorte et al., 2009).*
171
+
172
+ ### #8 — You can't kill your own plan
173
+ You built it, so you defend it. The questions that would break it are exactly the ones you won't ask.
174
+
175
+ **The fix → `hate`:** refuse to be nice to the plan — return the one load-bearing objection that could kill it and the cheapest experiment that would prove it matters. User-invoked: you point it at a plan deliberately.
176
+
177
+ > *Prior art: [egoless programming](https://en.wikipedia.org/wiki/Egoless_programming) (Weinberg, 1971 — the same root `shower` cites), hostile review, and fail-fast.*
178
+
179
+ ### #9 — A build can run and still be wrong
180
+ Long agentic builds can produce many working parts while missing the product: panels, routes, screenshots, and tests that prove activity more than value. The mistake is carrying that architecture forward because it cost effort.
181
+
182
+ **The fix → `retro` + `scratch`:** extract the lesson, anti-pattern, vocabulary, and next gate, then restart from a clean v0 when the foundation is wrong. Keep only what earned reuse.
183
+
184
+ ### #10 — Iterations can spin without learning
185
+ After a disappointing pass, the next move can blur into a dozen plausible threads: patch, rebuild, test more, write docs, add features. That is how projects accumulate surfaces instead of compounding.
186
+
187
+ **The fix → `flywheel` + `nba`:** run the build → QA → retro → scratch loop, and when the thread is lost, read the state and return one next best action with a clear done-when.
188
+
189
+ ## Credits
190
+
191
+ - **Built on** [mattpocock/skills](https://github.com/mattpocock/skills) (MIT) — its architecture and philosophy.
192
+ - **Not a fork** — these are [LilMGenius](https://github.com/LilMGenius)'s own, non-overlapping workflows.
193
+ - **Vendored verbatim** — a few shared building blocks, kept as-is with per-source attribution in [NOTICE](./NOTICE).
194
+ - **Authoring guide** — conventions and philosophy live in [CLAUDE.md](./CLAUDE.md).