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.
- package/.claude-plugin/plugin.json +19 -12
- package/.github/workflows/ci.yml +17 -0
- package/.github/workflows/release.yml +39 -0
- package/CLAUDE.md +38 -8
- package/README.md +194 -132
- package/assets/map.svg +103 -0
- package/package.json +5 -1
- package/scripts/validate-skills.sh +39 -0
- package/skills/{cross → breadth}/ssotchk/SKILL.md +5 -7
- package/skills/{cross → breadth}/ssotize/SKILL.md +3 -8
- package/skills/coil/flywheel/SKILL.md +55 -0
- package/skills/coil/nba/SKILL.md +49 -0
- package/skills/coil/retro/SKILL.md +52 -0
- package/skills/coil/scratch/SKILL.md +47 -0
- package/skills/depth/factchk/SKILL.md +28 -0
- package/skills/depth/hate/SKILL.md +31 -0
- package/skills/depth/mandela/SKILL.md +41 -0
- package/skills/{single → depth}/re0/SKILL.md +5 -9
- package/skills/depth/re0-git/SKILL.md +38 -0
- package/skills/{single → depth}/shower/SKILL.md +4 -5
- package/skills/{single/tasting → depth/sip}/SKILL.md +6 -7
- package/skills/single/re0-git/SKILL.md +0 -36
|
@@ -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/
|
|
6
|
-
"./skills/
|
|
7
|
-
"./skills/
|
|
8
|
-
"./skills/
|
|
9
|
-
"./skills/
|
|
10
|
-
"./skills/
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 `
|
|
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 **`
|
|
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) · [
|
|
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
|
-
##
|
|
27
|
-
|
|
28
|
-
### Model-invoked — your agent reaches for these on its own
|
|
29
|
-
| Skill | Scope | What it does |
|
|
30
|
-
|---|---|---|
|
|
31
|
-
| ♻️ **[re0](./skills/
|
|
32
|
-
| 🚿 **[shower](./skills/
|
|
33
|
-
|
|
|
34
|
-
|
|
|
35
|
-
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
|
39
|
-
|
|
40
|
-
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
**
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
- **
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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
|
+
### #1 — Artifacts 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
|
+
### #5 — Your 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).
|