plumbbob 0.4.12 → 0.4.13

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,7 +1,7 @@
1
1
  {
2
2
  "name": "plumbbob",
3
3
  "displayName": "PlumbBob",
4
- "version": "0.4.12",
4
+ "version": "0.4.13",
5
5
  "description": "Attention-first build process — driver skills + a CLI that keep you the decider; guidance, not enforcement.",
6
6
  "author": { "name": "Rob McLarty", "email": "hello@robmclarty.com", "url": "https://robmclarty.com" },
7
7
  "homepage": "https://github.com/robmclarty/plumbbob#readme",
package/README.md CHANGED
@@ -4,272 +4,116 @@
4
4
  <img src="hero.jpg" alt="A row of plumb bobs of varying shapes hanging from strings" width="600">
5
5
  </p>
6
6
 
7
- A guidance-first build process for working *with* an LLM instead of being dragged
8
- behind one. It's the layer below Ridgeline: where Ridgeline runs autonomously
9
- without you, Plumbbob keeps you in the driver's seat for the small-to-medium work
10
- that doesn't justify a full autonomous build — a feature, a bug, a refactor — while
11
- staying deliberate rather than vibing. You decide on a surface outside the chat;
12
- Plumbbob orients you, runs each step's labor, and then **stops and waits for you to
13
- advance** — the human is the clock, not a lock.
7
+ A [guidance-first build process](docs/attention-first-development.md) for working
8
+ *with* an LLM instead of being dragged behind one. It's the layer below [Ridgeline](https://github.com/robmclarty/ridgeline):
9
+ where Ridgeline runs autonomously without you, PlumbBob keeps you in the driver's seat
10
+ for the small-to-medium work that doesn't justify a full autonomous build — a feature,
11
+ a bug, a refactor — while staying deliberate rather than vibing. You decide on a surface
12
+ outside the chat; PlumbBob orients you, runs each step's labor, and then **stops and
13
+ waits for you to advance** — the human is the clock, not a lock.
14
+
15
+ > Establish *plumb* before you build. The LLM is a hand, not a head.
16
+
17
+ The name is the method. A plumb bob is a weight on a string — gravity pulls it into
18
+ a perfectly straight vertical line, the builder's oldest reference for *true*: the
19
+ fixed mark you hold the work against so it never drifts out of square. PlumbBob hangs
20
+ your **intent** as that line and keeps every step aligned to it, so the build stays
21
+ plumb with what you decided instead of wandering off behind the model.
22
+
23
+ Its one law is **vibe to execute, never vibe to decide**: the human owns every
24
+ decision, the LLM owns the labor, and the boundary between them is a **pause you
25
+ advance**, not a wall that refuses you. The *why* behind that — attention as the
26
+ scarce resource — is the subject of the guidance-first article above; the *how* of
27
+ each method is in [`docs/techniques.md`](docs/techniques.md). This repository was
28
+ built using PlumbBob, dogfooded on its own build under its own loop.
14
29
 
15
- > Ridgeline is the line. Plumbbob establishes *true* before you build.
16
- > The LLM is a hand, not a head.
17
-
18
- This repository was built using Plumbbob v2, dogfooded on its own build under its
19
- own loop.
20
-
21
- ## The one law
22
-
23
- **Vibe to execute, never vibe to decide.**
24
-
25
- Vibing is fine — *once every decision being carried out was already made on a
26
- surface outside the chat.* It becomes a slot machine only when the deciding happens
27
- inside the stream while code is flowing. The whole job of Plumbbob is to keep
28
- decisions and execution from fusing:
29
-
30
- - The **human** owns convergence. You decide, choose, pick the branch.
31
- - The **LLM** owns divergence in design (finding holes, generating options) and
32
- convergence *only* in build (executing a decided step).
33
- - The **boundary** between deciding and executing is held by a **pause you
34
- advance**, not a wall that refuses you.
35
-
36
- If you feel tired and lost, those two activities have fused again. The fix is never
37
- "prompt better." It's "stop, leave the chat, go decide, come back."
38
-
39
- ## Why it works: get the plan out of your head
40
-
41
- The exhaustion is a working-memory problem. You can't *produce* intent and
42
- *consume* the model's output at once — consuming overwrites producing. So Plumbbob
43
- externalizes your plan onto durable surfaces that survive the flood:
44
-
45
- - `intent.md` — what you decided, before any code. Your canonical intent.
46
- - `build-log.md` — the live ledger of steps, parked ideas, and decisions.
47
-
48
- When the model floods you, you read the page, not your memory. The chat is
49
- ephemeral; the docs persist. **The chat is a hand; the docs are the head.**
50
-
51
- ## The shift: a clock, not a lock
52
-
53
- Plumbbob v1 enforced the deciding/executing boundary with a hard file lock — a
54
- pre-edit muzzle that *refused* code edits unless you were in the right state. It
55
- provided no real security (a determined model routed around it), so its only product
56
- was forced ritual.
57
-
58
- v2 replaces the lock with a **clock**. Nothing blocks your edits. Instead, the
59
- system does a step's work, then pauses at a verify gate for your approval before it
60
- checkpoints. You stay the decider not because a wall refuses you, but because the
61
- loop pulls up to a line — the verify pause — and idles there until you approve.
62
- Pull, not block. The pause *is* the product; it is the moment your judgment enters,
63
- and it cannot be skipped.
64
-
65
- ## The eight skills
66
-
67
- You drive the whole loop from your IDE with eight `/plumbbob:*` skills — no step numbers to
68
- remember, no raw CLI to type. Each is `disable-model-invocation`, so *you* fire
69
- every move, and `/plumbbob:pb-status` always names your next one.
70
-
71
- | Skill | Does |
72
- |-------|------|
73
- | `/plumbbob:pb-plan` | plan the whole goal — scaffold the session + author intent's Frame, Decisions, Constraints, **and all Steps** |
74
- | `/plumbbob:pb-step` | revise/sharpen the next step (empty input auto-syncs it to reality) |
75
- | `/plumbbob:pb-build` | *(optional)* implement the next planned step, then verify it to the pause — `--auto` self-approves and chains to done |
76
- | `/plumbbob:pb-verify` | the tick — check → self-review → validate → **PAUSE** → checkpoint |
77
- | `/plumbbob:pb-park` | capture an idea without chasing it |
78
- | `/plumbbob:pb-status` | orient — where you are, the next step's done-when + seam, and the next move |
79
- | `/plumbbob:pb-harvest` | triage parked ideas at a boundary (blocker / tangent / pivot) |
80
- | `/plumbbob:pb-wrap` | wrap up — write the report, archive safely, clear for a fresh goal |
81
-
82
- Three optional power moves survive for when you need them: `/plumbbob:pb-revert` (recover to
83
- a checkpoint), `/plumbbob:pb-spike` (throwaway worktree experiment), and `/plumbbob:pb-refine` (attack
84
- the frame for holes, or repair the plan when it drifts — usable at any point).
85
-
86
- ## The loop
87
-
88
- The happy path is **plan the whole thing up front, then drive `/plumbbob:pb-build` until
89
- done** — approving each step at its verify pause:
90
-
91
- ```text
92
- /plumbbob:pb-plan author the whole plan (incl. all steps) (once)
93
- └ per step:
94
- /plumbbob:pb-status review the next step (done-when + seam)
95
- /plumbbob:pb-step (optional) sharpen/revise it first if needed
96
- /plumbbob:pb-build (or DIY) implement it → verify → PAUSE → checkpoint
97
- /plumbbob:pb-park capture strays mid-build
98
- /plumbbob:pb-harvest triage them at a boundary
99
- /plumbbob:pb-wrap report + archive + clear (once)
100
- ```
101
-
102
- Each `/plumbbob:pb-build` builds the next undone step and stops at the pause for your
103
- approval — re-firing it is itself the clock tick. (`/plumbbob:pb-build --auto` is the opt-in
104
- that lets the agent self-approve and chain to done, halting on a red check or any
105
- mismatch.) For a worked example that walks one goal end to end — planning, building
106
- each step, wrapping up, archiving, and starting the next task — see
107
- [`docs/happy-path.md`](docs/happy-path.md).
108
-
109
- **Three ways to plan.** `/plumbbob:pb-plan` produces the same artifact — a complete, standalone
110
- `intent.md` — from whichever seed you give it: **no argument** runs a short interview;
111
- **a file path** absorbs an out-of-band spec (retaining its detail so the plan stands on
112
- its own); **any other text** expands your inline intent. No quotes required — it
113
- disambiguates the mode itself.
114
-
115
- **The pluggable executor.** `/plumbbob:pb-build` is one way to turn a planned step into code
116
- — it is *optional*. Implement by hand, in a vibe session, or with another harness,
117
- and run `/plumbbob:pb-verify` instead: it reads the *diff, not the author*. Plumbbob is the
118
- harness-agnostic spine; how the diff appears is a slot you fill however you like.
119
-
120
- ## Calibration: size everything to the work
121
-
122
- The fastest way to abandon this is ceremony on a one-liner. The discipline is
123
- *decisions before code*, not *always produce three files*.
124
-
125
- - **Tiny** (typo, one-liner): no session. Just fix it.
126
- - **Small** (a contained bug/change): `/plumbbob:pb-plan` a frame + 2–3 decisions; one or two
127
- steps; build → verify → checkpoint.
128
- - **Medium** (a feature touching a few modules): the full loop above.
129
- - **Large / architectural**: that's Ridgeline's job, not Plumbbob's.
130
-
131
- Calibration is the skill. When in doubt, smaller.
132
-
133
- ## What ships
134
-
135
- - A `plumbbob` CLI (TypeScript, run natively by Node ≥ 22.18, zero runtime
136
- dependencies) — the dumb mechanical verbs the skills shell out to. You never type
137
- it by hand (beyond `plumbbob --help` and `plumbbob --version`). The marketplace
138
- plugin carries it on PATH via `bin/` shims; `npm i -g` installs it globally.
139
- - The eight `/plumbbob:*` skills plus the optional power moves, each
140
- `disable-model-invocation` so *you* fire every move.
141
- - One session-gated Claude Code hook — `post-edit.sh`, a non-blocking light-feedback
142
- pass that injects file-scoped lint into the model's context so it self-corrects in
143
- flow. (v1's pre-edit muzzle, seam-guard, and bash-guard are gone — guidance, not
144
- enforcement.)
145
- - A `.plumbbob/` sidecar of flat files: `STATE` (the session sentinel — its presence
146
- means a session is live), `intent.md`, `build-log.md`, `checkpoints`, and `archive/`.
147
-
148
- ## Gates — two tiers, different jobs
149
-
150
- - **Light** — the non-blocking `post-edit` feedback above. Per changed file. Never
151
- blocks an edit. It exists only because Claude can't see your editor's LSP, so the
152
- light tier *serves the model*.
153
- - **Heavy** — the full `pnpm check` (tsc, oxlint, ast-grep, vitest, knip,
154
- markdownlint). Not a hook: it runs *inside* `/plumbbob:pb-verify`, which refuses to
155
- checkpoint while red. The hard gate lives on the deliberate boundary, not the
156
- keystroke.
157
-
158
- ## Position is derived, not stored
159
-
160
- There is no stored state machine. The dashboard's phase — `DESIGN`, `BUILD`, or `SPIKE` —
161
- is *derived* from what's on disk: a `STEP` file means a step is in flight (BUILD), the
162
- `SPIKE` marker means a fork is open (SPIKE), otherwise you're at a boundary (DESIGN). The
163
- position gates nothing — it's a label on a map, read by `/plumbbob:pb-status` to tell you
164
- where you are and what to do next, never a locked door. `.plumbbob/STATE` is just the
165
- session sentinel: its presence means a session is live, and the post-edit hook is gated on
166
- it, so a repo with no `.plumbbob/STATE` behaves exactly like plain Claude Code.
167
-
168
- ## Git footprint — additive only
30
+ ## Install
169
31
 
170
- Plumbbob commits cheap checkpoint markers (`plumbbob: step n done`) on your feature
171
- branch and reverts to its own recorded SHAs. It **never rewrites pushed history**;
172
- your normal squash-merge collapses the checkpoints at PR time. `start` records the
173
- baseline HEAD; `revert [--to n]` does `git reset --hard` to a recorded SHA; `wrap`
174
- archives plain markdown under `.plumbbob/archive/` and never touches git.
32
+ PlumbBob installs **once, globally** like `gh` or your dotfiles in one of two
33
+ co-equal, mutually-exclusive ways (both register a Claude Code plugin named
34
+ `plumbbob`).
175
35
 
176
- ## The `.plumbbob/` folder
36
+ **Marketplace plugin** self-contained; ships the skills *and* the CLI on PATH, so
37
+ it needs neither `npm` nor `init`:
177
38
 
178
39
  ```text
179
- .plumbbob/
180
- STATE # session sentinel — its presence means a session is live
181
- SEAM # the in-flight step's declared paths (awareness, not a lock)
182
- STEP # the in-flight step number (its presence is the BUILD phase)
183
- SPIKE # marker — present while a spike fork is open
184
- config # key=value; check=<heavy-check command> (defaults to pnpm run check)
185
- checkpoints # "baseline <sha>" then "step N <sha>", one per verified step
186
- intent.md # canonical intent
187
- build-log.md # live ledger
188
- archive/
189
- <date>-<slug>/
190
- intent.md
191
- build-log.md
192
- report.md
40
+ /plugin install plumbbob@<marketplace>
193
41
  ```
194
42
 
195
- ## Install
196
-
197
- Plumbbob installs **once, globally** — like `gh` or your dotfiles. There are two co-equal,
198
- mutually-exclusive ways to do it (both register a Claude Code plugin named `plumbbob`;
199
- running both collides over the `/plumbbob:*` namespace).
200
-
201
- **npm global + `init`** — the npm package ships the CLI, the skills, and the hook; `plumbbob
202
- init` links them into Claude Code as an in-place plugin:
43
+ **npm global + `init`** — installs the CLI, then links the skills and hook into
44
+ Claude Code in place:
203
45
 
204
46
  ```sh
205
47
  npm i -g plumbbob # the CLI (also a `pb` shorthand)
206
48
  plumbbob init # link it into Claude Code; --uninstall to undo
207
49
  ```
208
50
 
209
- `init` symlinks the package into `~/.claude/skills/plumbbob`, where Claude Code loads it as a
210
- plugin; the post-edit hook auto-registers from `hooks.json`. Because it's a symlink, a later
211
- `npm i -g plumbbob@latest` stays live with no re-link.
212
-
213
- **The marketplace plugin** — self-contained: it ships the skills *and* the `plumbbob`/`pb`
214
- CLI on PATH (via its `bin/` shims), so it needs neither `npm i -g` nor `plumbbob init`:
215
-
216
- ```text
217
- /plugin install plumbbob@<marketplace>
218
- ```
219
-
220
- Either way, Claude Code namespaces the skills as `/plumbbob:<skill>`, so they appear as
221
- `/plumbbob:pb-plan`, `/plumbbob:pb-status`, and the rest. Nothing else under `~` is touched
222
- and `settings.json` is left alone — restart Claude Code (or `/reload-plugins`) to activate.
223
- If a marketplace plumbbob is already installed, `plumbbob init` refuses rather than create
224
- the collision (`--force` overrides), and `plumbbob doctor` flags a double-install.
51
+ Restart Claude Code (or `/reload-plugins`) to activate, then run `plumbbob doctor`
52
+ (or `/pb-doctor` in-session) to confirm the wiring. The full guide — namespacing,
53
+ per-project sessions, the agent-neutral roadmap is in
54
+ [`docs/install.md`](docs/install.md).
225
55
 
226
- **Sessions are per-project.** Install scope is not session scope: you install the
227
- tool once, but each goal lives in its own repo — `plumbbob start "<goal>"` writes a
228
- `.plumbbob/` sidecar there, independent of the one global link.
56
+ ## Features
229
57
 
230
- **Other agents (roadmap).** The npm package is the agent-neutral carrier; a future
231
- `plumbbob init --host codex|cursor|zed` will place the same skills where those tools
232
- look. Claude Code is the first, first-class target.
58
+ You drive the whole loop from your IDE with `/plumbbob:*` skills — no step numbers to
59
+ remember, no raw CLI to type. Each is `disable-model-invocation`, so *you* fire every
60
+ move, and `/pb-status` always names your next one. (For readability these docs write
61
+ the short form: `/pb-plan` means `/plumbbob:pb-plan`.)
233
62
 
234
- ### Verify
63
+ | Skill | Does |
64
+ |-------|------|
65
+ | `/pb-plan` | plan the whole goal — scaffold the session and author intent's Frame, Decisions, Constraints, **and all Steps** |
66
+ | `/pb-step` | revise/sharpen the next step (empty input auto-syncs it to reality) |
67
+ | `/pb-build` | *(optional)* implement the next planned step, then verify it to the pause — `--auto` self-approves and chains to done |
68
+ | `/pb-verify` | the tick — check → self-review → validate → **PAUSE** → checkpoint |
69
+ | `/pb-park` | capture an idea without chasing it |
70
+ | `/pb-status` | orient — where you are, the next step's done-when + seam, and the next move |
71
+ | `/pb-harvest` | triage parked ideas at a boundary (blocker / tangent / pivot) |
72
+ | `/pb-wrap` | wrap up — write the report, archive safely, clear for a fresh goal |
73
+
74
+ Three power moves round it out — `/pb-revert` (recover to a checkpoint), `/pb-spike`
75
+ (throwaway worktree experiment), and `/pb-refine` (attack the frame for holes or
76
+ repair a drifted plan) — plus `/pb-doctor` to check your install.
77
+
78
+ Under the skills ships a zero-dependency `plumbbob` CLI (the mechanical verbs the
79
+ skills shell out to), one session-gated post-edit hook (non-blocking lint feedback in
80
+ flow), and a `.plumbbob/` sidecar of flat files (`intent.md`, `build-log.md`,
81
+ checkpoints, archive). `/pb-build` is just one executor — implement a step by hand or
82
+ in any other harness and run `/pb-verify` instead; it reads the *diff, not the author*.
83
+
84
+ ## Getting started
85
+
86
+ The happy path is **plan the whole thing up front, then drive `/pb-build` until
87
+ done** — approving each step at its verify pause:
235
88
 
236
- ```sh
237
- plumbbob doctor
89
+ ```text
90
+ /pb-plan author the whole plan (incl. all steps) (once)
91
+ └ per step:
92
+ /pb-status review the next step (done-when + seam)
93
+ /pb-step (optional) sharpen/revise it first if needed
94
+ /pb-build (or DIY) implement it → verify → PAUSE → checkpoint
95
+ /pb-park capture strays mid-build
96
+ /pb-harvest triage them at a boundary
97
+ /pb-wrap report + archive + clear (once)
238
98
  ```
239
99
 
240
- `doctor` works for either install path: it confirms a marketplace plugin, or checks that the
241
- skills-dir link resolves to the plugin manifest, the skills, and the hook — flagging a
242
- double-install collision and prints the exact fix for anything broken. The terminal command
243
- above is for the **global / skills-dir** install; a **marketplace** plugin puts the CLI on
244
- PATH only *inside a Claude Code session*, so run **`/plumbbob:pb-doctor`** there instead. Run
245
- it first if a `/plumbbob:*` skill ever opens with an empty dashboard;
246
- [`docs/troubleshooting.md`](docs/troubleshooting.md) covers the rest.
247
-
248
- ## Development
249
-
250
- ```sh
251
- pnpm install
252
- pnpm check # tsc, oxlint, ast-grep, vitest, knip, markdownlint
253
- pnpm build # emit dist/ (what the published bin runs)
254
- ```
100
+ Each `/pb-build` builds the next undone step and stops at the pause for your
101
+ approval — re-firing it is itself the clock tick. (`/pb-build --auto` is the opt-in
102
+ that lets the agent self-approve and chain to done, halting on a red check or any
103
+ mismatch.) For one goal walked end to end planning, building each step, wrapping
104
+ up, and starting the next see [`docs/happy-path.md`](docs/happy-path.md).
255
105
 
256
106
  ## Documentation
257
107
 
108
+ - [`docs/install.md`](docs/install.md) — the full install guide and the agent-neutral roadmap.
258
109
  - [`docs/techniques.md`](docs/techniques.md) — the methods behind the loop, each on its own.
259
110
  - [`docs/happy-path.md`](docs/happy-path.md) — one goal walked end to end.
260
- - [`docs/cli-reference.md`](docs/cli-reference.md) — every verb, flag, and exit code.
111
+ - [`docs/cli-reference.md`](docs/cli-reference.md) — every verb, flag, exit code, and the `.plumbbob/` sidecar.
261
112
  - [`docs/troubleshooting.md`](docs/troubleshooting.md) — fixes for the common snags.
262
113
  - [`docs/decisions.md`](docs/decisions.md) — the `D#` / `C#` design-decision key.
263
114
  - [`docs/attention-first-development.md`](docs/attention-first-development.md) — the philosophy: attention as the scarce resource.
264
115
  - [`CONTRIBUTING.md`](CONTRIBUTING.md) — setup, conventions, and how to submit changes.
265
116
 
266
- ## The shape, in one line
267
-
268
- The human owns convergence; the LLM owns divergence in design and convergence only
269
- in implementation; and the boundary between deciding and executing is a **pause you
270
- advance**, not a lock you fight — the system does the labor and waits for you to be
271
- the clock.
272
-
273
117
  ## License
274
118
 
275
119
  Licensed under the [Apache License 2.0](LICENSE).
@@ -161,7 +161,7 @@ export function formatOrientation(o) {
161
161
  const cp = o.lastCheckpoint;
162
162
  const cpLine = cp === null ? 'last checkpoint none yet' : `last checkpoint step ${cp.n} · ${cp.sha.slice(0, 7)}`;
163
163
  return [
164
- `Plumbbob — ${o.title ?? '(untitled)'} [${o.phase}]`,
164
+ `PlumbBob — ${o.title ?? '(untitled)'} [${o.phase}]`,
165
165
  '',
166
166
  stepsBlock,
167
167
  '',
@@ -16,7 +16,7 @@ export function start(cwd, args) {
16
16
  }
17
17
  const root = findRepoRoot(cwd);
18
18
  if (root === null) {
19
- process.stderr.write('plumbbob: not a git repository. Plumbbob records a baseline commit — run `git init` and make an initial commit first.\n');
19
+ process.stderr.write('plumbbob: not a git repository. PlumbBob records a baseline commit — run `git init` and make an initial commit first.\n');
20
20
  return 1;
21
21
  }
22
22
  if (!hasCommit(root)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plumbbob",
3
- "version": "0.4.12",
3
+ "version": "0.4.13",
4
4
  "description": "Attention-first build process: 11 skills + a CLI that keep you the decider — guidance, not enforcement.",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -7,37 +7,37 @@ model: opus
7
7
  allowed-tools: Read, Edit, Write, Bash(plumbbob status:*), Bash(plumbbob build:*), Bash(plumbbob check:*), Bash(plumbbob checkpoint:*), Bash(git diff:*)
8
8
  ---
9
9
 
10
- # Plumbbob — build a step (the optional engine)
10
+ # PlumbBob — build a step (the optional engine)
11
11
 
12
12
  Current session state (injected when this skill runs): !`plumbbob status 2>/dev/null || echo "plumbbob CLI not found - install the dep and re-run: npm i -g plumbbob && plumbbob init"`
13
13
 
14
14
  This is the **bundled executor** — one way to turn a planned step into code. It is
15
15
  **optional** (D3): you can implement any step by hand, in a vibe session, or with
16
- another harness and go straight to `/plumbbob:pb-verify` instead — plumbbob does not care how
16
+ another harness and go straight to `/pb-verify` instead — plumbbob does not care how
17
17
  the diff appeared. When you do run it, it reads the plan, writes the step, and
18
18
  carries straight through to the verify pause.
19
19
 
20
- Since `/plumbbob:pb-plan` lays down the whole step list up front, the happy path is to fire
21
- `/plumbbob:pb-build` once per step until done — each run builds the next undone step and stops
22
- at the pause for your approval. **Re-firing `/plumbbob:pb-build` is itself the clock tick.**
20
+ Since `/pb-plan` lays down the whole step list up front, the happy path is to fire
21
+ `/pb-build` once per step until done — each run builds the next undone step and stops
22
+ at the pause for your approval. **Re-firing `/pb-build` is itself the clock tick.**
23
23
 
24
24
  ## What this skill does, in order
25
25
 
26
- 1. **Pick the step.** Use the number you were invoked with (e.g. `/plumbbob:pb-build 4`), else
26
+ 1. **Pick the step.** Use the number you were invoked with (e.g. `/pb-build 4`), else
27
27
  the next undone, planned step in `.plumbbob/intent.md`. If there is no planned step
28
- to build, stop and tell the human to `/plumbbob:pb-step` first.
28
+ to build, stop and tell the human to `/pb-step` first.
29
29
  2. **Enter the step.** Run `plumbbob build <n>` (records the in-flight STEP +
30
- SEAM so `/plumbbob:pb-status` shows the step in flight; in v2 the seam is awareness, not a
30
+ SEAM so `/pb-status` shows the step in flight; in v2 the seam is awareness, not a
31
31
  lock).
32
32
  3. **Read the plan.** Read the step's **done-when**, its **seam**, and the
33
33
  **Decisions** and **Constraints** in `intent.md`. Build to *that* — the deciding
34
34
  already happened, off the chat.
35
35
  4. **Implement** the step, and only that step, staying within the declared seam. A
36
- new problem or "ooh what if" that surfaces mid-build is a `/plumbbob:pb-park`, **not** an
36
+ new problem or "ooh what if" that surfaces mid-build is a `/pb-park`, **not** an
37
37
  edit — capture it and stay on the step. If you genuinely cannot finish without
38
38
  touching more than the seam, that is scope drift: surface it to the human rather
39
39
  than sprawling.
40
- 5. **Verify, through to the pause.** Run the verify tick exactly as `/plumbbob:pb-verify`
40
+ 5. **Verify, through to the pause.** Run the verify tick exactly as `/pb-verify`
41
41
  does: `plumbbob check` → self-review the diff against the done-when, the
42
42
  Decisions, and the Constraints (a single structured read, D16) → validate → **PAUSE
43
43
  for the human's approval** → only on approval, checkpoint with
@@ -47,7 +47,7 @@ at the pause for your approval. **Re-firing `/plumbbob:pb-build` is itself the c
47
47
 
48
48
  ## `--auto` — let the agent be the clock (opt-in)
49
49
 
50
- `/plumbbob:pb-build --auto` is the explicit escape hatch when the human wants unattended
50
+ `/pb-build --auto` is the explicit escape hatch when the human wants unattended
51
51
  progress instead of approving each step. It does the same work, but **the agent reviews
52
52
  and approves in the human's place**, and it **chains**:
53
53
 
@@ -63,10 +63,10 @@ human asked for it by name. The default — no flag — always ends at the pause
63
63
 
64
64
  ## The hard contracts
65
65
 
66
- - **Optional, never required.** The loop works without this skill; `/plumbbob:pb-verify`
66
+ - **Optional, never required.** The loop works without this skill; `/pb-verify`
67
67
  checkpoints a hand-built or vibed diff just the same (D3).
68
68
  - **Build the decided step, not a new one.** Implement what `intent.md` settled. A
69
- new idea mid-build is a `/plumbbob:pb-park`, not an edit.
69
+ new idea mid-build is a `/pb-park`, not an edit.
70
70
  - **Default ends at the pause.** Implement → verify → wait for approval; never
71
71
  checkpoint without it. Only an explicit `--auto` lets the agent approve in your place,
72
72
  and it still halts on a red check or any mismatch.
@@ -6,7 +6,7 @@ model: haiku
6
6
  allowed-tools: Bash(plumbbob doctor:*)
7
7
  ---
8
8
 
9
- # Plumbbob — doctor (the is-it-installed-right move)
9
+ # PlumbBob — doctor (the is-it-installed-right move)
10
10
 
11
11
  Install diagnostic (injected when this skill runs): !`if command -v plumbbob >/dev/null 2>&1; then plumbbob doctor 2>&1; else echo "plumbbob CLI not on PATH in this session. Marketplace install: confirm the plugin is enabled in /plugin, then /reload-plugins. Skills-dir/global install: npm i -g plumbbob && plumbbob init."; fi`
12
12
 
@@ -6,11 +6,11 @@ model: opus
6
6
  allowed-tools: Read, Edit, Bash(plumbbob status:*)
7
7
  ---
8
8
 
9
- # Plumbbob — harvest the park list
9
+ # PlumbBob — harvest the park list
10
10
 
11
11
  Current session state (injected when this skill runs): !`plumbbob status 2>/dev/null || echo "plumbbob CLI not found - install the dep and re-run: npm i -g plumbbob && plumbbob init"`
12
12
 
13
- `/plumbbob:pb-harvest` is the complement of `/plumbbob:pb-park` (D7): you parked ideas as seeds during a
13
+ `/pb-harvest` is the complement of `/pb-park` (D7): you parked ideas as seeds during a
14
14
  build; now, at a boundary, you harvest them — decide what each one is.
15
15
 
16
16
  ## When to run it — boundary only
@@ -20,7 +20,7 @@ DESIGN boundary, not mid-step. Read the dashboard injected above:
20
20
 
21
21
  - `NO ACTIVE SESSION` — **refuse**; tell the human to `plumbbob start "<title>"` first.
22
22
  - A step in flight (the dashboard reads `[BUILD]`, and `next →` points at finishing the
23
- step) — **refuse** and suggest finishing it with `/plumbbob:pb-verify` before harvesting.
23
+ step) — **refuse** and suggest finishing it with `/pb-verify` before harvesting.
24
24
  Chasing parked items mid-step is the disease parking prevents.
25
25
  - At the boundary (the dashboard reads `[DESIGN]`) — go ahead.
26
26
 
@@ -41,7 +41,7 @@ one line of reasoning, then **wait for the human to confirm or override**. Write
41
41
  **only after** per-item confirmation:
42
42
 
43
43
  - Record each confirmed class in `build-log.md`'s `## Harvest` section.
44
- - **Flip the harvested item** from `- [ ]` to `- [x]` in the Park list, so `/plumbbob:pb-status`
44
+ - **Flip the harvested item** from `- [ ]` to `- [x]` in the Park list, so `/pb-status`
45
45
  stops counting it as open.
46
46
  - A confirmed **blocker** also folds its decision into `intent.md`.
47
47
  - Never reclassify or resolve an item the human hasn't confirmed, and default every
@@ -7,11 +7,11 @@ model: haiku
7
7
  allowed-tools: Bash(plumbbob status:*), Bash(plumbbob park:*)
8
8
  ---
9
9
 
10
- # Plumbbob — park an idea (capture, don't chase)
10
+ # PlumbBob — park an idea (capture, don't chase)
11
11
 
12
12
  Current session state (injected when this skill runs): !`plumbbob status 2>/dev/null || echo "plumbbob CLI not found - install the dep and re-run: npm i -g plumbbob && plumbbob init"`
13
13
 
14
- `/plumbbob:pb-park` is the **capture** half of the loop; `/plumbbob:pb-harvest` is where parked items
14
+ `/pb-park` is the **capture** half of the loop; `/pb-harvest` is where parked items
15
15
  get triaged later (D7). Capturing the instant an idea arrives — instead of acting on
16
16
  it — is the whole point: it protects the step in flight.
17
17
 
@@ -7,14 +7,14 @@ model: opus
7
7
  allowed-tools: Read, Edit, Write, Bash(plumbbob status:*), Bash(plumbbob start:*)
8
8
  ---
9
9
 
10
- # Plumbbob — plan a goal (the whole-goal move)
10
+ # PlumbBob — plan a goal (the whole-goal move)
11
11
 
12
12
  Current session state (injected when this skill runs): !`plumbbob status 2>/dev/null || echo "plumbbob CLI not found - install the dep and re-run: npm i -g plumbbob && plumbbob init"`
13
13
 
14
- `/plumbbob:pb-plan` is the **whole-goal** move — it opens a session and gets the deciding out
14
+ `/pb-plan` is the **whole-goal** move — it opens a session and gets the deciding out
15
15
  of your head and onto `intent.md` *before* any code. By default it authors the
16
16
  **complete plan, including all the Steps**, so the happy path afterward is just
17
- `/plumbbob:pb-build` until done. (Revising a single increment later is the separate `/plumbbob:pb-step`
17
+ `/pb-build` until done. (Revising a single increment later is the separate `/pb-step`
18
18
  move; do not confuse the two.)
19
19
 
20
20
  ## Three input modes (disambiguated for you — no quotes needed)
@@ -34,7 +34,7 @@ Look at the argument the human gave and pick the mode yourself:
34
34
  genuinely ambiguous.
35
35
 
36
36
  All three modes converge on the **same artifact**: a complete, standalone `intent.md`
37
- an agent can follow with `/plumbbob:pb-build`. The argument only seeds how you get there.
37
+ an agent can follow with `/pb-build`. The argument only seeds how you get there.
38
38
 
39
39
  ## What this skill does
40
40
 
@@ -56,11 +56,11 @@ an agent can follow with `/plumbbob:pb-build`. The argument only seeds how you g
56
56
  - seam: `<file>`, `<file>`
57
57
  ```
58
58
 
59
- Every step needs a **done-when** `/plumbbob:pb-verify` can check and a **seam** (the exact
59
+ Every step needs a **done-when** `/pb-verify` can check and a **seam** (the exact
60
60
  paths it touches). Later steps may be fuzzier than the first — that's fine; they get
61
- sharpened just-in-time when you reach them with `/plumbbob:pb-step`. Keep each small enough to
61
+ sharpened just-in-time when you reach them with `/pb-step`. Keep each small enough to
62
62
  verify in one review pass.
63
- 5. **Offer to stress-test it.** Suggest `/plumbbob:pb-refine` to attack the frame for holes (or
63
+ 5. **Offer to stress-test it.** Suggest `/pb-refine` to attack the frame for holes (or
64
64
  to repair the plan as it drifts). Optional, the human's call.
65
65
 
66
66
  ## The interview (mode 1)
@@ -73,11 +73,11 @@ Make it easy and non-intrusive:
73
73
  without typing** ("done-when: the 6th request in 60s returns 429 — good?"), while
74
74
  taking arbitrary detail when they want to give it, including pointers to other files.
75
75
  - **Let them double back.** They will revise as the picture sharpens; that's expected.
76
- They can also edit `intent.md` by hand at any time, or call `/plumbbob:pb-refine` to repair it.
76
+ They can also edit `intent.md` by hand at any time, or call `/pb-refine` to repair it.
77
77
 
78
78
  ## The hard contracts
79
79
 
80
- - **Deciding before code.** `/plumbbob:pb-plan` writes `intent.md` only — never source.
80
+ - **Deciding before code.** `/pb-plan` writes `intent.md` only — never source.
81
81
  - **The human converges.** You surface options and draft wording; the human picks.
82
82
  An unresolved hole is an Open question, not a guessed Decision.
83
83
  - **Stands on its own.** Whatever the input mode, the finished `intent.md` carries
@@ -7,20 +7,20 @@ model: opus
7
7
  allowed-tools: Read, Edit, Bash(plumbbob status:*)
8
8
  ---
9
9
 
10
- # Plumbbob — refine the plan
10
+ # PlumbBob — refine the plan
11
11
 
12
12
  Current session state (injected when this skill runs): !`plumbbob status 2>/dev/null || echo "plumbbob CLI not found - install the dep and re-run: npm i -g plumbbob && plumbbob init"`
13
13
 
14
- `/plumbbob:pb-refine` keeps `intent.md` honest. Use it at **any point** — right after `/plumbbob:pb-plan`
14
+ `/pb-refine` keeps `intent.md` honest. Use it at **any point** — right after `/pb-plan`
15
15
  to stress-test a fresh frame, or mid-build to repair a plan that drifted from what the
16
- code is actually doing. It is the document-level complement to `/plumbbob:pb-step` (which only
17
- sharpens the *next* step): `/plumbbob:pb-refine` works the *whole* plan.
16
+ code is actually doing. It is the document-level complement to `/pb-step` (which only
17
+ sharpens the *next* step): `/pb-refine` works the *whole* plan.
18
18
 
19
19
  ## No-session refusal
20
20
 
21
21
  This skill refines an existing plan, so it needs one. Read the state injected above: if
22
22
  it is `NO ACTIVE SESSION`, **refuse** in one line and tell the human to run
23
- `plumbbob start "<title>"` (or `/plumbbob:pb-plan`) first, and edit nothing. Every active state
23
+ `plumbbob start "<title>"` (or `/pb-plan`) first, and edit nothing. Every active state
24
24
  is fine — refining is always available.
25
25
 
26
26
  ## Two modes
@@ -42,5 +42,5 @@ is fine — refining is always available.
42
42
  approves every change to `intent.md`. Never guess a hole into a Decision.
43
43
  - **Open questions for holes, edits for drift.** New uncertainty goes to
44
44
  `## Open questions`; settled drift gets repaired in place once the human OKs it.
45
- - **Refine the plan, not the code.** `/plumbbob:pb-refine` touches `intent.md` only — turning a
46
- decision into a diff is `/plumbbob:pb-build` or your own hands, never this skill.
45
+ - **Refine the plan, not the code.** `/pb-refine` touches `intent.md` only — turning a
46
+ decision into a diff is `/pb-build` or your own hands, never this skill.
@@ -7,7 +7,7 @@ model: haiku
7
7
  allowed-tools: Bash(plumbbob status:*), Bash(plumbbob revert:*)
8
8
  ---
9
9
 
10
- # Plumbbob — revert to a checkpoint (driver)
10
+ # PlumbBob — revert to a checkpoint (driver)
11
11
 
12
12
  Current session state (injected when this skill runs): !`plumbbob status 2>/dev/null || echo "plumbbob CLI not found - install the dep and re-run: npm i -g plumbbob && plumbbob init"`
13
13
 
@@ -15,6 +15,6 @@ This is a **driver skill** — a chat-side trigger for the mechanical `plumbbob
15
15
 
16
16
  ## What it does
17
17
 
18
- 1. Read an optional target step from the way you were invoked (e.g. `/plumbbob:pb-revert --to 2` → step `2`). With no target, revert goes to the last done-checkpoint.
18
+ 1. Read an optional target step from the way you were invoked (e.g. `/pb-revert --to 2` → step `2`). With no target, revert goes to the last done-checkpoint.
19
19
  2. Run `plumbbob revert` (or `plumbbob revert --to <n>`) via Bash. This is a `git reset --hard` — it discards the current in-progress step. Run it exactly as the human asked; do not add or drop the `--to` on your own.
20
20
  3. Report the verb's output verbatim — which checkpoint it reset to, or any refusal.
@@ -7,7 +7,7 @@ model: haiku
7
7
  allowed-tools: Bash(plumbbob status:*), Bash(plumbbob spike:*)
8
8
  ---
9
9
 
10
- # Plumbbob — spike an experiment (driver)
10
+ # PlumbBob — spike an experiment (driver)
11
11
 
12
12
  Current session state (injected when this skill runs): !`plumbbob status 2>/dev/null || echo "plumbbob CLI not found - install the dep and re-run: npm i -g plumbbob && plumbbob init"`
13
13
 
@@ -15,6 +15,6 @@ This is a **driver skill** — a chat-side trigger for the mechanical `plumbbob
15
15
 
16
16
  ## What it does
17
17
 
18
- 1. Read the spike target from the way you were invoked: a slug to open one (e.g. `/plumbbob:pb-spike redis-cache`), or the literal `done` to tear the current spike down (`/plumbbob:pb-spike done`). If neither is present, ask which and run nothing.
18
+ 1. Read the spike target from the way you were invoked: a slug to open one (e.g. `/pb-spike redis-cache`), or the literal `done` to tear the current spike down (`/pb-spike done`). If neither is present, ask which and run nothing.
19
19
  2. Run `plumbbob spike "<slug>"` or `plumbbob spike done` via Bash.
20
20
  3. Report the verb's output verbatim — the worktree it created or removed, or any refusal.
@@ -6,7 +6,7 @@ model: haiku
6
6
  allowed-tools: Bash(plumbbob status:*)
7
7
  ---
8
8
 
9
- # Plumbbob — orient (the where-am-I move)
9
+ # PlumbBob — orient (the where-am-I move)
10
10
 
11
11
  Current session state (injected when this skill runs): !`plumbbob status 2>/dev/null || echo "plumbbob CLI not found - install the dep and re-run: npm i -g plumbbob && plumbbob init"`
12
12
 
@@ -19,4 +19,4 @@ skill carries **no Edit and no Write tool**: the CLI is the source of truth, so
19
19
  ## What it does
20
20
 
21
21
  1. Surface the injected `status` output — the dashboard and its suggested next move.
22
- 2. If it reads `NO ACTIVE SESSION`, tell the human to `/plumbbob:pb-plan` to frame a goal.
22
+ 2. If it reads `NO ACTIVE SESSION`, tell the human to `/pb-plan` to frame a goal.
@@ -7,25 +7,25 @@ model: opus
7
7
  allowed-tools: Read, Edit, Bash(plumbbob status:*)
8
8
  ---
9
9
 
10
- # Plumbbob — revise the next step (the single-increment move)
10
+ # PlumbBob — revise the next step (the single-increment move)
11
11
 
12
12
  Current session state (injected when this skill runs): !`plumbbob status 2>/dev/null || echo "plumbbob CLI not found - install the dep and re-run: npm i -g plumbbob && plumbbob init"`
13
13
 
14
- `/plumbbob:pb-plan` authors the **whole** step list up front, so `/plumbbob:pb-step` is the
14
+ `/pb-plan` authors the **whole** step list up front, so `/pb-step` is the
15
15
  **just-in-time revision** move: it keeps the *next* undone step honest against what the
16
- build has actually taught you, right before you `/plumbbob:pb-build` it. (Framing the whole goal
17
- is the separate `/plumbbob:pb-plan` move.) It can also add or re-cut a step when scope genuinely
16
+ build has actually taught you, right before you `/pb-build` it. (Framing the whole goal
17
+ is the separate `/pb-plan` move.) It can also add or re-cut a step when scope genuinely
18
18
  grew — but its everyday job is to sharpen, not to invent.
19
19
 
20
20
  ## Two ways to fire it
21
21
 
22
- - **`/plumbbob:pb-step` (no input) → automatic sharpen.** Re-examine the next undone step
22
+ - **`/pb-step` (no input) → automatic sharpen.** Re-examine the next undone step
23
23
  against the completed code, the Decisions, the Constraints, and the build-log, then
24
24
  make the obvious revisions to its **done-when** and **seam** so it matches reality —
25
25
  e.g. a file moved, a decision narrowed the scope, an earlier step already did part of
26
26
  it. This is the zero-effort "keep my next step in sync" move: if the human does
27
27
  nothing else, the next step stays current.
28
- - **`/plumbbob:pb-step <what changed>` → directed revision.** Take the human's input and propose
28
+ - **`/pb-step <what changed>` → directed revision.** Take the human's input and propose
29
29
  the matching change: tighten the done-when, adjust the seam, split the step in two, or
30
30
  add a new increment the plan was missing.
31
31
 
@@ -34,7 +34,7 @@ grew — but its everyday job is to sharpen, not to invent.
34
34
  1. **Read the plan and the reality.** Read `intent.md`'s Frame, Decisions, Constraints,
35
35
  and the steps already done, plus the next undone step, to see what it *should* now be.
36
36
  2. **Propose the revision** (or the new/split step): a one-line **title**, a **done-when**
37
- `/plumbbob:pb-verify` can validate, and a **seam** (exact paths, or a `dir/` grant). Keep it
37
+ `/pb-verify` can validate, and a **seam** (exact paths, or a `dir/` grant). Keep it
38
38
  small enough to verify in one review pass. Show the before/after so the human can see
39
39
  what you changed and why.
40
40
  3. **Get the human's OK**, then write it into `## Steps` in the standard format —
@@ -43,7 +43,7 @@ grew — but its everyday job is to sharpen, not to invent.
43
43
 
44
44
  ## The hard contracts
45
45
 
46
- - **One verifiable increment.** Each step carries a done-when `/plumbbob:pb-verify` can check
46
+ - **One verifiable increment.** Each step carries a done-when `/pb-verify` can check
47
47
  and a seam small enough to review in one pass.
48
48
  - **Edit `## Steps` only**, in the standard format `status` and `build` parse — never
49
49
  the Roadmap, never loose prose. A done step (`[x]`) is history; do not rewrite it.
@@ -6,12 +6,12 @@ model: opus
6
6
  allowed-tools: Read, Bash(plumbbob status:*), Bash(plumbbob check:*), Bash(plumbbob checkpoint:*), Bash(git diff:*), Bash(git status:*)
7
7
  ---
8
8
 
9
- # Plumbbob — verify a step (the tick)
9
+ # PlumbBob — verify a step (the tick)
10
10
 
11
11
  Current session state (injected when this skill runs): !`plumbbob status 2>/dev/null || echo "plumbbob CLI not found - install the dep and re-run: npm i -g plumbbob && plumbbob init"`
12
12
 
13
13
  This is the **tick** — the one beat where the human is the clock. Whatever produced
14
- the current diff — `/plumbbob:pb-build`, your own hands, a vibe session, another harness —
14
+ the current diff — `/pb-build`, your own hands, a vibe session, another harness —
15
15
  this skill verifies it the same way: **it reads the diff, not the author** (D3).
16
16
 
17
17
  ## What this skill does, in order
@@ -40,7 +40,7 @@ this skill verifies it the same way: **it reads the diff, not the author** (D3).
40
40
  - **Never skip the pause.** Check → self-review → validate, then wait. Approval is
41
41
  the only thing that triggers the checkpoint.
42
42
  - **Read the diff, not the author** (D3). Verify identically whether the code was
43
- built by `/plumbbob:pb-build`, by hand, vibed, or by another harness.
43
+ built by `/pb-build`, by hand, vibed, or by another harness.
44
44
  - **Red means stop, not pause.** A failing check is not an approval decision; report
45
45
  it and end your turn.
46
46
  - **You review; you do not build.** If the self-review finds a problem, surface it
@@ -6,11 +6,11 @@ model: opus
6
6
  allowed-tools: Read, Write, Bash(plumbbob status:*), Bash(plumbbob wrap:*)
7
7
  ---
8
8
 
9
- # Plumbbob — wrap the build (the close-out)
9
+ # PlumbBob — wrap the build (the close-out)
10
10
 
11
11
  Current session state (injected when this skill runs): !`plumbbob status 2>/dev/null || echo "plumbbob CLI not found - install the dep and re-run: npm i -g plumbbob && plumbbob init"`
12
12
 
13
- `/plumbbob:pb-wrap` ends the build: it captures what happened, archives it, and clears the
13
+ `/pb-wrap` ends the build: it captures what happened, archives it, and clears the
14
14
  sidecar for the next goal. **Report by default** (D9) — no refuse-without-report gate,
15
15
  and no separate docs phase.
16
16
 
@@ -30,7 +30,7 @@ and no separate docs phase.
30
30
  to the report, archives intent + build-log + report to
31
31
  `.plumbbob/archive/<date>-<slug>/`, and clears the sidecar (STATE last). Git is not
32
32
  touched.
33
- 3. **Point at the next goal** — `/plumbbob:pb-plan` to frame the next one.
33
+ 3. **Point at the next goal** — `/pb-plan` to frame the next one.
34
34
 
35
35
  ## The hard contracts
36
36
 
@@ -6,7 +6,7 @@ step boundaries. The antidote to "my plan got lost in the noise."
6
6
  Park list : where ideas go so you do not chase them. CAPTURE, never act inline.
7
7
  Harvest : the boundary ritual that keeps you on one branch.
8
8
  Log : the build's history. `plumbbob checkpoint` appends a line per step as it
9
- lands; feeds the /plumbbob:pb-wrap report, then gets archived.
9
+ lands; feeds the /pb-wrap report, then gets archived.
10
10
  -->
11
11
 
12
12
  # Build log — {{TITLE}}
@@ -17,8 +17,8 @@ step boundaries. The antidote to "my plan got lost in the noise."
17
17
  ## Steps
18
18
 
19
19
  *(Mirror of intent.md's Steps, with live status. Only ONE step is in flight. A step
20
- is done only after a checkpoint — check green + checkpoint taken, via `/plumbbob:pb-verify` or
21
- `/plumbbob:pb-build`.)*
20
+ is done only after a checkpoint — check green + checkpoint taken, via `/pb-verify` or
21
+ `/pb-build`.)*
22
22
 
23
23
  - ☐ 1. <step>
24
24
 
@@ -26,16 +26,16 @@ is done only after a checkpoint — check green + checkpoint taken, via `/plumbb
26
26
 
27
27
  > Mid-step, every new problem / idea / "ooh what if" lands HERE, untouched, and you
28
28
  > go straight back to the step. Acting the instant an idea arrives is the disease.
29
- > Capture is one line (`/plumbbob:pb-park` composes it). Harvest happens only at the boundary.
29
+ > Capture is one line (`/pb-park` composes it). Harvest happens only at the boundary.
30
30
 
31
- ## Harvest *(run `/plumbbob:pb-harvest` at each step boundary, after green)*
31
+ ## Harvest *(run `/pb-harvest` at each step boundary, after green)*
32
32
 
33
33
  Classify each parked item as exactly ONE. Naming it before acting is what keeps you
34
34
  from sprawling across branches.
35
35
 
36
36
  | Class | Meaning | Action |
37
37
  |------------------|-------------------------------------------|---------------------------------|
38
- | **blocker** | Plan was wrong/incomplete; can't proceed | `/plumbbob:pb-revert`, fold into intent |
38
+ | **blocker** | Plan was wrong/incomplete; can't proceed | `/pb-revert`, fold into intent |
39
39
  | **tangent** | A different path, not clearly better | Defer or kill. Default here. |
40
40
  | **pivot signal** | Evidence the whole approach is wrong | Stop. Replan deliberately. |
41
41
 
@@ -49,8 +49,8 @@ Harvest results this boundary:
49
49
  ## Log
50
50
 
51
51
  *(The build's history, oldest first. `plumbbob checkpoint` appends a dated line here
52
- every time a step lands — via `/plumbbob:pb-build` or `/plumbbob:pb-verify` — so this
52
+ every time a step lands — via `/pb-build` or `/pb-verify` — so this
53
53
  fills in as you go, not at the end. Add your own decision/event lines too: this is what
54
54
  you point at to say "I did that — the LLM helped, but those were my calls."
55
- `/plumbbob:pb-wrap` reads this for the report; `plumbbob wrap` archives it under
55
+ `/pb-wrap` reads this for the report; `plumbbob wrap` archives it under
56
56
  `.plumbbob/archive/`.)*
@@ -32,24 +32,24 @@ open. If the implementor (you-later, or the LLM) has to guess, the doc failed.
32
32
  ## Decisions
33
33
 
34
34
  *(One line each. Settled, not re-litigated in the chat. Grows as you resolve the
35
- holes `/plumbbob:pb-refine` surfaces, and as blockers fold in during BUILD.)*
35
+ holes `/pb-refine` surfaces, and as blockers fold in during BUILD.)*
36
36
 
37
37
  - D1: <decision> — *because* <the one reason that mattered>
38
38
 
39
39
  ## Constraints
40
40
 
41
- *(Hard rules the build must honor. `/plumbbob:pb-verify` and `/plumbbob:pb-refine` read against these.)*
41
+ *(Hard rules the build must honor. `/pb-verify` and `/pb-refine` read against these.)*
42
42
 
43
43
  - C1: <e.g. functional/procedural only; no new dependencies>
44
44
 
45
45
  ## Steps
46
46
 
47
- *(The build plan. `/plumbbob:pb-plan` authors the **whole list up front** — each step a small,
47
+ *(The build plan. `/pb-plan` authors the **whole list up front** — each step a small,
48
48
  verifiable increment with its own **done-when** and **seam** (the paths it will touch,
49
- which `/plumbbob:pb-build` records in `.plumbbob/SEAM` for orientation — awareness, not a lock
50
- in v2). Then drive `/plumbbob:pb-build` until done. Later steps may be fuzzier than the first;
51
- sharpen the next one just-in-time with `/plumbbob:pb-step` (empty input auto-syncs it), and use
52
- `/plumbbob:pb-refine` to repair the whole plan when a blocker rewrites it.)*
49
+ which `/pb-build` records in `.plumbbob/SEAM` for orientation — awareness, not a lock
50
+ in v2). Then drive `/pb-build` until done. Later steps may be fuzzier than the first;
51
+ sharpen the next one just-in-time with `/pb-step` (empty input auto-syncs it), and use
52
+ `/pb-refine` to repair the whole plan when a blocker rewrites it.)*
53
53
 
54
54
  1. [ ] <step> — **done when:** <criterion, ideally a test or check result>
55
55
  - seam: `<file>`, `<file>`