@skill-map/cli 0.68.1 → 0.69.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.
Files changed (31) hide show
  1. package/dist/cli/tutorial/sm-tutorial/references/_core.md +15 -6
  2. package/dist/cli/tutorial/sm-tutorial/references/_manifest.json +70 -70
  3. package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +38 -38
  4. package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +3 -3
  5. package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +25 -8
  6. package/dist/cli/tutorial/sm-tutorial/references/part-basic-daily.md +77 -29
  7. package/dist/cli/tutorial/sm-tutorial/references/part-basic-fundamentals.md +1 -1
  8. package/dist/cli/tutorial/sm-tutorial/references/part-basic-kickoff.md +1 -1
  9. package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +1 -1
  10. package/dist/cli/tutorial/sm-tutorial/references/part-daily-loop.md +77 -31
  11. package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +3 -3
  12. package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +1 -1
  13. package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +2 -2
  14. package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +2 -2
  15. package/dist/cli.js +699 -326
  16. package/dist/conformance/index.js +3 -3
  17. package/dist/index.js +11 -10
  18. package/dist/kernel/index.d.ts +27 -17
  19. package/dist/kernel/index.js +11 -10
  20. package/dist/migrations/001_initial.sql +7 -3
  21. package/dist/ui/chunk-E7GLGHVY.js +1 -0
  22. package/dist/ui/chunk-RLRSNHYG.js +3 -0
  23. package/dist/ui/{chunk-22EQLC23.js → chunk-RRRXQNG6.js} +1 -1
  24. package/dist/ui/{chunk-K3ZRQNN5.js → chunk-SI4MGFOW.js} +1 -1
  25. package/dist/ui/index.html +1 -1
  26. package/dist/ui/{main-R7BIU4HU.js → main-23NGLEUB.js} +3 -3
  27. package/migrations/001_initial.sql +7 -3
  28. package/package.json +2 -2
  29. package/dist/ui/chunk-PU5OP5RN.js +0 -1
  30. package/dist/ui/chunk-TLMV4LOQ.js +0 -3
  31. /package/dist/ui/{chunk-KMHXNOFZ.js → chunk-SXSNTF26.js} +0 -0
@@ -101,6 +101,9 @@ inside the `> ` blockquote):
101
101
  > output; the harness on the canvas is Layer 1. Your nodes are not a diagram,
102
102
  > they are runnable, and you just ran one.
103
103
  >
104
+ > If the new page is not showing, refresh the browser with F5, the site does
105
+ > not reload on its own.
106
+ >
104
107
  > See the new page on the site, and the Map unchanged?
105
108
 
106
109
  Wait for confirmation. Mark `add-page`: done. Auto-advance to `broken-ref`.
@@ -146,30 +149,30 @@ Wait for confirmation. The harness MUST be clean again before Act C. Mark
146
149
 
147
150
  ## Chapter `reserved` - A reserved name collides (~2 min)
148
151
 
149
- **Preparation**: `Write` `<provider_dir>/config/SKILL.md`:
152
+ **Preparation**: `Write` `<provider_dir>/model/SKILL.md`:
150
153
  ```markdown
151
154
  ---
152
- name: config
155
+ name: model
153
156
  description: |
154
157
  Scaffolds a new empty page in public/ from the shared template.
155
158
  ---
156
159
 
157
- # config
160
+ # model
158
161
 
159
162
  Creates a blank page so you can start writing.
160
163
  ```
161
164
 
162
165
  The watcher picks up the new skill. Tell the tester:
163
166
 
164
- > I added a skill named `config`. Watch the **Map**: the new `config` skill node
167
+ > I added a skill named `model`. Watch the **Map**: the new `model` skill node
165
168
  > appears, but flagged with a **warning** marker. Open its inspector: it reads
166
- > `name-reserved`, `config` shadows one of the agent runtime's own built-in verbs
167
- > (like `help`, `clear`, `model`), so the runtime would silently ignore your
169
+ > `name-reserved`, `model` shadows one of the agent runtime's own built-in verbs
170
+ > (like `help`, `clear`, `config`), so the runtime would silently ignore your
168
171
  > skill, it never runs. The fix is a name the runtime does not own.
169
172
  >
170
- > Rename it to `new-page`: first rename the folder `<provider_dir>/config/` to
173
+ > Rename it to `new-page`: first rename the folder `<provider_dir>/model/` to
171
174
  > `<provider_dir>/new-page/`. Then open `new-page/SKILL.md` and, at the top where
172
- > the frontmatter says `name: config`, change it to `name: new-page`. Save.
175
+ > the frontmatter says `name: model`, change it to `name: new-page`. Save.
173
176
  >
174
177
  > Watch the **Map** again: the warning clears and the node is now `new-page`, all
175
178
  > live. What cleared it was changing `frontmatter.name` (which for a skill must
@@ -186,37 +189,82 @@ Wait for confirmation. Mark `reserved`: done. Auto-advance to `publish`.
186
189
 
187
190
  ## Chapter `publish` - Ship it: run the publish skill for real (~4 min)
188
191
 
189
- **Preparation**: make sure the pages exist (`index`, `about`, `projects`). When
190
- the tester asks to publish, **execute the publish flow for real** by following
191
- `<provider_dir>/publish/SKILL.md`: run the `check-links` logic over every `.html`
192
- under `public/` (does each internal `href` resolve to a file that exists?); if
193
- any link is broken, hand it to the `content-editor` and re-run; then walk the
194
- deploy runbook. Do not role-play it.
192
+ **Context**: the publish flow only earns its keep when something is actually
193
+ wrong, so first you plant a real bug in the site, then watch the publish skill
194
+ catch and fix it for real.
195
195
 
196
- Tell the tester:
196
+ **Preparation**: make sure the pages exist (`index`, `about`, `projects`).
197
+
198
+ This chapter has two beats: the tester breaks a link in the HTML first, then runs
199
+ the publish skill so `check-links` catches the break. The split is required, the
200
+ publish run cannot demonstrate the catch until the break is in place.
201
+
202
+ **Beat 1, plant the bug (the tester breaks the HTML, their file).** Tell the
203
+ tester:
204
+
205
+ > Before we ship, let's break something on purpose. Open `public/index.html` in
206
+ > your editor and find the **About** link in the top nav:
207
+ >
208
+ > ```html
209
+ > <a href="/about.html">About</a>
210
+ > ```
211
+ >
212
+ > Change the target to a typo that points at a page that does not exist, then
213
+ > save:
214
+ >
215
+ > ```html
216
+ > <a href="/abuot.html">About</a>
217
+ > ```
218
+ >
219
+ > Now watch the **Map**. Nothing happens: no arrow moves, no red marker. Back in
220
+ > the `broken-ref` chapter, breaking a link between your `.md` files lit up the
221
+ > graph the instant you saved. This break is invisible to it, and that is
222
+ > correct: skill-map maps your **harness** (the `.md` files, Layer 1), not the
223
+ > HTML pages it produces (Layer 2, your `public/` folder, which is even in
224
+ > `.skillmapignore`). A broken link inside your actual site never shows on the
225
+ > graph. The one thing that catches it is your `check-links` skill, which is
226
+ > exactly what the publish skill runs as its first step.
227
+ >
228
+ > Saved the typo, and the Map stayed unchanged?
229
+
230
+ Wait for confirmation. The Map MUST stay unchanged; if a marker appeared they
231
+ edited a `.md` by mistake, point them back at `public/index.html`.
232
+
233
+ **Beat 2, run the publish skill for real.** Tell the tester:
234
+
235
+ > Now ship it. Tell me to publish and I'll run your `publish` skill for real,
236
+ > exactly as written. (You can read the skill anytime by clicking the `publish`
237
+ > node on the Map, then opening its **Body** section.)
197
238
 
198
- > The site is ready. Tell me to publish and I'll run your `publish` skill for
199
- > real: I follow its steps, run the link check across your pages, fix anything
200
- > through the `content-editor`, and walk the deploy runbook, exactly what the
201
- > skill says to do. (You can read the skill's content anytime by clicking the
202
- > `publish` node on the Map, then opening its **Body** section.)
239
+ When the tester asks to publish, **execute the publish flow for real** by
240
+ following `<provider_dir>/publish/SKILL.md`: run the `check-links` logic over
241
+ every `.html` under `public/` (does each internal `href` resolve to a file that
242
+ exists?), which now finds the planted typo; per step 2, hand it to the
243
+ `content-editor` to fix (point the link back at `/about.html`), re-run the check
244
+ until it is clean, then walk the deploy runbook. Do not role-play it; `Read`
245
+ `public/index.html` before and after the fix so the report is honest.
203
246
 
204
- After running the flow, report what actually happened (keep promises conditional
205
- on the real result):
247
+ After running the flow, report what actually happened:
206
248
 
207
249
  > Here is what just ran, for real:
208
250
  >
209
251
  > - **check-links** walked every page under `public/` and followed each internal
210
- > link. Result: 0 broken links. (Had it found one, the next step would hand it
211
- > to `content-editor` to fix, then re-check.)
252
+ > link. It caught **1 broken link**: `/abuot.html` on `index.html`, the typo
253
+ > you planted. The graph never flagged it, but the skill did, because the skill
254
+ > reads your real pages.
255
+ > - **step 2 kicked in**: I handed it to your `content-editor` to fix. It pointed
256
+ > the link back at `/about.html`, and a re-run of **check-links** came back
257
+ > clean: 0 broken links.
212
258
  > - the **deploy runbook** (`docs/DEPLOYMENT.md`) lists the ship steps:
213
- > regenerate the pages (done), run the link check (done), start the server
214
- > (next chapter).
259
+ > regenerate the pages (done), run the link check (done, now clean), start the
260
+ > server (next chapter).
215
261
  >
216
- > The link check came back clean and `publish` is wired correctly across your
217
- > pages. Shall we continue?
262
+ > That is the whole point of the harness: you broke the site, the graph stayed
263
+ > quiet because the HTML is its output and not its map, and your own publish
264
+ > skill caught the break and fixed it before it shipped. Shall we continue?
218
265
 
219
- Wait for confirmation. Mark `publish`: done. Auto-advance to `stability`.
266
+ Wait for confirmation. The site MUST be clean again (the typo fixed) before
267
+ `golive`. Mark `publish`: done. Auto-advance to `stability`.
220
268
 
221
269
  ## Chapter `stability` - Set a node's stability (and the `.sm` sidecar) (~3 min)
222
270
 
@@ -315,7 +315,7 @@ host-dependent rendering rule. Per Inviolable rule #2, the agent does NOT touch
315
315
  ├── .agents/skills/
316
316
  │ ├── demo-skill/SKILL.md
317
317
  │ └── sm-tutorial/SKILL.md ← the tutorial you loaded
318
- ├── .skill-map/ ← project DB + settings (managed)
318
+ ├── .skill-map/ ← project DB + settings
319
319
  ├── .skillmapignore ← the file we're about to edit
320
320
  └── notes/
321
321
  ├── todo.md
@@ -1,4 +1,4 @@
1
- # Part 1 (basic track): The project from zero (step library, `kickoff-*` ids)
1
+ # Part 1 (basic track): The harness from zero (step library, `kickoff-*` ids)
2
2
 
3
3
  The campaign turns real here for the **basic track** (the open-standard family:
4
4
  `agent-skills`, `antigravity`). After the abstract prologue, the tester starts an
@@ -1,4 +1,4 @@
1
- # Part 4: The CLI in depth - step library
1
+ # Part 3: The CLI for you and your agent - step library
2
2
 
3
3
  The deep-dive into the rest of the CLI: browsing verbs, ASCII graph + export, broken-ref issues, the `.sm` annotation consent prompt, and validating links to folders outside the scan scope. `pace: auto-advance` (walk straight into the next chapter's Announcement once one is marked done) and `preflight: seed` with the `prologue-built` snapshot: it self-seeds its own copy of the Part 0 demo fixture, so it works even if the campaign already replaced that fixture with the portfolio (see SKILL.md §Entering a part, the `cli` case). Shared conventions (tone, provider detection / substitution, the `> ` rendering rule, the per-step cycle) live in `_core.md`; do not restate them here.
4
4
 
@@ -31,7 +31,7 @@ kind of those two nodes changes. Per chapter:
31
31
  - `broken-ref`: the deploy link that breaks lives in the `publish` SKILL; fix it
32
32
  in `.agents/skills/publish/SKILL.md` (not a `.claude/commands/` file).
33
33
  - `reserved`: Codex has no command, so create a SKILL with a reserved name
34
- instead, `Write` `.agents/skills/config/SKILL.md` named `config` (it shadows
34
+ instead, `Write` `.agents/skills/model/SKILL.md` named `model` (it shadows
35
35
  the open-standard `COMMONS_RESERVED_NAMES`); clear it by renaming the folder +
36
36
  `frontmatter.name` to `new-page`, exactly like the basic track's `reserved`
37
37
  chapter, on a skill.
@@ -249,6 +249,9 @@ the `> ` blockquote, do NOT drop the bar when you personalise it.
249
249
  > output; the harness on the canvas is Layer 1. Your nodes are not a diagram,
250
250
  > they are runnable, and you just ran one.
251
251
  >
252
+ > If the new page is not showing, refresh the browser with F5, the site does
253
+ > not reload on its own.
254
+ >
252
255
  > See the new page on the site, and the Map unchanged?
253
256
 
254
257
  Wait for confirmation. Mark `add-page`: done. Auto-advance to `broken-ref`.
@@ -297,30 +300,30 @@ done. Auto-advance to `reserved`.
297
300
 
298
301
  ## Chapter `reserved` - A reserved name collides (~2 min)
299
302
 
300
- **Preparation**: `Write` `.claude/commands/init.md`:
303
+ **Preparation**: `Write` `.claude/commands/model.md`:
301
304
  ```markdown
302
305
  ---
303
- name: init
306
+ name: model
304
307
  description: |
305
308
  Scaffolds a new empty page in public/ from the shared template.
306
309
  ---
307
310
 
308
- # init
311
+ # model
309
312
 
310
313
  Creates a blank page so you can start writing.
311
314
  ```
312
315
 
313
316
  The watcher picks up the new command. Tell the tester:
314
317
 
315
- > I added a command named `init`. Watch the **Map**: the new `init` command node
318
+ > I added a command named `model`. Watch the **Map**: the new `model` command node
316
319
  > appears, but flagged with a **warning** marker. Open its inspector: it reads
317
- > `name-reserved`, `init` shadows one of Claude Code's own slash commands (like
320
+ > `name-reserved`, `model` shadows one of Claude Code's own slash commands (like
318
321
  > `/help`, `/clear`, `/config`), so the runtime would silently ignore your file,
319
322
  > it never runs. The fix is a name the runtime does not own.
320
323
  >
321
- > Rename it to `new-page`: first rename the file `.claude/commands/init.md` to
324
+ > Rename it to `new-page`: first rename the file `.claude/commands/model.md` to
322
325
  > `.claude/commands/new-page.md`. Then open it in your text editor / IDE and, at
323
- > the top, where the frontmatter says `name: init`, change it to
326
+ > the top, where the frontmatter says `name: model`, change it to
324
327
  > `name: new-page`. Save.
325
328
  >
326
329
  > Watch the **Map** again: the warning clears and the node is now `new-page`,
@@ -338,40 +341,83 @@ Wait for confirmation. Mark `reserved`: done. Auto-advance to `publish`.
338
341
 
339
342
  ## Chapter `publish` - Ship it: run /publish for real (~4 min)
340
343
 
344
+ **Context**: the publish flow only earns its keep when something is actually
345
+ wrong, so first you plant a real bug in the site, then watch `/publish` catch and
346
+ fix it for real.
347
+
341
348
  **Preparation**: make sure the pages exist (`index`, `about`, `projects` from the
342
- earlier chapters; lay any that are missing from the templates in `setup`). When the tester asks to publish, **execute the publish flow for real**
343
- by following `.claude/commands/publish.md`: run the `check-links` logic over
344
- every `.html` under `public/` (does each internal `href` resolve to a file that
345
- exists?); if any link is broken, brief the `content-editor` to fix it and
346
- re-run the check; then walk the deploy runbook steps. Do not role-play it.
349
+ earlier chapters; lay any that are missing from the templates in `setup`).
347
350
 
348
- Tell the tester:
351
+ This chapter has two beats: the tester breaks a link in the HTML first, then runs
352
+ `/publish` so the skill catches the break. The split is required, the publish run
353
+ cannot demonstrate the catch until the break is in place.
354
+
355
+ **Beat 1, plant the bug (the tester breaks the HTML, their file).** Tell the
356
+ tester:
357
+
358
+ > Before we ship, let's break something on purpose. Open `public/index.html` in
359
+ > your editor and find the **About** link in the top nav:
360
+ >
361
+ > ```html
362
+ > <a href="/about.html">About</a>
363
+ > ```
364
+ >
365
+ > Change the target to a typo that points at a page that does not exist, then
366
+ > save:
367
+ >
368
+ > ```html
369
+ > <a href="/abuot.html">About</a>
370
+ > ```
371
+ >
372
+ > Now watch the **Map**. Nothing happens: no arrow moves, no red marker. Back in
373
+ > the `broken-ref` chapter, breaking a link between your `.md` files lit up the
374
+ > graph the instant you saved. This break is invisible to it, and that is
375
+ > correct: skill-map maps your **harness** (the `.md` files, Layer 1), not the
376
+ > HTML pages it produces (Layer 2, your `public/` folder, which is even in
377
+ > `.skillmapignore`). A broken link inside your actual site never shows on the
378
+ > graph. The one thing that catches it is your `check-links` skill, which is
379
+ > exactly what `/publish` runs as its first step.
380
+ >
381
+ > Saved the typo, and the Map stayed unchanged?
382
+
383
+ Wait for confirmation. The Map MUST stay unchanged; if a marker appeared they
384
+ edited a `.md` by mistake, point them back at `public/index.html`.
385
+
386
+ **Beat 2, run /publish for real.** Tell the tester:
387
+
388
+ > Now ship it. Tell me to publish (or type `/publish`) and I'll run your publish
389
+ > command for real, exactly as written. (You can read the command anytime by
390
+ > clicking the `publish` node on the Map, then opening its **Body** section.)
349
391
 
350
- > The site is ready. Tell me to publish (or type `/publish`) and I'll run your
351
- > publish command for real: I follow its steps, run the link check across your
352
- > pages, fix anything through the `content-editor`, and walk the deploy runbook,
353
- > exactly what the command says to do. (You can read the command's content
354
- > anytime by clicking the `publish` node on the Map, then opening its **Body**
355
- > section.)
392
+ When the tester asks to publish, **execute the publish flow for real** by
393
+ following `.claude/commands/publish.md`: run the `check-links` logic over every
394
+ `.html` under `public/` (does each internal `href` resolve to a file that
395
+ exists?), which now finds the planted typo; per step 2, brief the
396
+ `content-editor` to fix it (point the link back at `/about.html`), re-run the
397
+ check until it is clean, then walk the deploy runbook. Do not role-play it;
398
+ `Read` `public/index.html` before and after the fix so the report is honest.
356
399
 
357
- After running the flow, report what actually happened (keep the promises
358
- conditional on the real result):
400
+ After running the flow, report what actually happened:
359
401
 
360
402
  > Here is what just ran, for real:
361
403
  >
362
404
  > - **check-links** walked every page under `public/` and followed each internal
363
- > link. Result: 0 broken links. (Had it found one, the next step would have
364
- > briefed `content-editor` to fix it, then re-checked, that is what step 2 is
365
- > for.)
405
+ > link. It caught **1 broken link**: `/abuot.html` on `index.html`, the typo
406
+ > you planted. The graph never flagged it, but the skill did, because the skill
407
+ > reads your real pages.
408
+ > - **step 2 kicked in**: I briefed your `content-editor` to fix it. It pointed
409
+ > the link back at `/about.html`, and a re-run of **check-links** came back
410
+ > clean: 0 broken links.
366
411
  > - the **deploy runbook** (`docs/DEPLOYMENT.md`) lists the ship steps:
367
- > regenerate the pages (done), run the link check (done), start the server
368
- > (next chapter).
412
+ > regenerate the pages (done), run the link check (done, now clean), start the
413
+ > server (next chapter).
369
414
  >
370
- > As you saw in the lines just above, I did not report anything odd: the link
371
- > check came back clean and `/publish` is wired correctly across your pages.
372
- > Shall we continue?
415
+ > That is the whole point of the harness: you broke the site, the graph stayed
416
+ > quiet because the HTML is its output and not its map, and your own publish
417
+ > command caught the break and fixed it before it shipped. Shall we continue?
373
418
 
374
- Wait for confirmation. Mark `publish`: done. Auto-advance to `stability`.
419
+ Wait for confirmation. The site MUST be clean again (the typo fixed) before
420
+ `golive`. Mark `publish`: done. Auto-advance to `stability`.
375
421
 
376
422
  ## Chapter `stability` - Set a node's stability (and the `.sm` sidecar) (~3 min)
377
423
 
@@ -5,7 +5,7 @@ The live-UI prologue: the tester runs `sm init`, opens the browser, and watches
5
5
  **Codex deltas (rich track).** When `tutorial.provider == codex` the lay commands are unchanged (the `--only` ids match the Codex overlay), but the on-disk shapes differ; substitute in the tester-facing prose:
6
6
 
7
7
  - `init`: the boot node `demo-agent` is a **TOML agent** at `.codex/agents/demo-agent.toml`.
8
- - `kinds`: the node list reads `.codex/agents/demo-agent.toml` (agent), `.agents/skills/demo-command/SKILL.md` (Codex has no `command`, so this node is a **skill**), `.agents/skills/demo-skill/SKILL.md` (skill), and the `notes/*.md`. Name the kinds as agent + skill + markdown.
8
+ - `kinds`: the node list reads `.codex/agents/demo-agent.toml` (agent), `.agents/skills/demo-command/SKILL.md` (skill), `.agents/skills/demo-skill/SKILL.md` (skill), and the `notes/*.md`. Name the kinds as agent + skill + markdown (two new kinds this step: skill + markdown). Present `demo-command` as a plain skill: do NOT tell the tester it "is a command" or narrate any command-to-skill substitution. Codex has no `command` kind, so on this track `demo-command` is simply one of the two skills, nothing to explain.
9
9
  - `first-edit`: the description to edit lives in `.codex/agents/demo-agent.toml` (the `description = "…"` TOML field, not YAML frontmatter).
10
10
  - `connectors` onward: identical, the `@`/`/` bullets resolve the same on Codex; only the `ignore` chapter's directory tree shows `.codex/agents/` + `.agents/skills/` instead of `.claude/`.
11
11
 
@@ -177,7 +177,7 @@ The canvas only draws the resolved arrows; the full per-link breakdown, includin
177
177
  > confidence: the numeric value. Here you'll see the contrast, the
178
178
  > `references` to `demo-guideline2` reads `1.00` (resolved), while the
179
179
  > `mentions` to `demo-guideline` reads `0.50` and is marked broken,
180
- > that 0.5 is the broken-reference penalty, not "half sure".
180
+ > that 0.5 is the broken-reference penalty, it's a "half sure".
181
181
  >
182
182
  > Now open the Inspector for a couple of the nodes to read their
183
183
  > Incoming count. The four resolved nodes (`demo-agent`,
@@ -313,7 +313,7 @@ Give the tester a mental map of the folder so they know where the file lives, th
313
313
  │ └── skills/
314
314
  │ ├── demo-skill/SKILL.md
315
315
  │ └── sm-tutorial/SKILL.md ← the tutorial you loaded
316
- ├── .skill-map/ ← project DB + settings (managed)
316
+ ├── .skill-map/ ← project DB + settings
317
317
  ├── .skillmapignore ← the file we're about to edit
318
318
  └── notes/
319
319
  ├── todo.md
@@ -1,4 +1,4 @@
1
- # Part 3 (b): Extend skill-map - plugins (step library, `tour-*` ids)
1
+ # Part 4 (b): Extend skill-map - plugins (step library, `tour-*` ids)
2
2
 
3
3
  Guided tour of the **built-in plugins** that ship with `sm`. Three
4
4
  steps: a quick mental model of what plugins are plus a peek at
@@ -1,4 +1,4 @@
1
- # Part 1: The project from zero (step library, `kickoff-*` ids)
1
+ # Part 1: The harness from zero (step library, `kickoff-*` ids)
2
2
 
3
3
  The campaign turns real here. After the abstract prologue, the tester
4
4
  starts an actual project: a tiny personal **portfolio website**,
@@ -38,7 +38,7 @@ The chapters grow the harness from there.
38
38
  no `command`. Lay only `docs/DEPLOY.md` here (STYLE landed in `first-agent`),
39
39
  and name the kinds as agent + skill + markdown (the skill + the publish piece
40
40
  arrive later in this part as skills).
41
- - `publish`: Codex has no `command` kind, so the tester creates a **skill** at `.agents/skills/publish/SKILL.md` instead of `.claude/commands/publish.md`. The body is the Codex one (same `/check-links` + `@content-editor` + deploy reference); fetch it with `fixtures.js cat harness --file "__PROVIDER__/skills/publish/SKILL.md" --provider codex --lang <lang>`. Tell the tester they are creating a `skill` (one node, three connectors, same as the claude command). The fixture lays no `publish` for codex in this chapter (the tester authors it), so the `cat` is the source.
41
+ - `publish`: Codex has no `command` kind, so the tester creates a **skill** at `.agents/skills/publish/SKILL.md` instead of `.claude/commands/publish.md`. The body is the Codex one (same `/check-links` + `@content-editor` + deploy reference); fetch it with `fixtures.js cat harness --file "__PROVIDER__/skills/publish/SKILL.md" --provider codex --lang <lang>`. Tell the tester they are creating a `skill` (one node, three connectors); present it plainly as a skill, with no mention of a command or a substitution (per _core.md §Rendering the rich book on Codex, silent substitution). The fixture lays no `publish` for codex in this chapter (the tester authors it), so the `cat` is the source.
42
42
  - `links`: the `content-editor-style` reference is baked into the Codex content-editor's TOML (`developer_instructions`) at lay time, so the `edit content-editor-style` step is a no-op on Codex, the `content-editor -> docs/STYLE.md` arrow is already drawn from earlier in this part. Run only `edit agents-hub` and narrate the two `AGENTS.md` arrows; mention the style-guide arrow as already present.
43
43
 
44
44
  ## Chapter `kickoff` - Start the portfolio (~2 min)
@@ -1,6 +1,6 @@
1
- # Part 3 (a): Extend skill-map - settings (step library, `settings-*` ids)
1
+ # Part 4 (a): Extend skill-map - settings (step library, `settings-*` ids)
2
2
 
3
- Step bodies for the settings chapters of Part 3 (config layers, the
3
+ Step bodies for the settings chapters of Part 4 (config layers, the
4
4
  `sm config` verbs, the active provider lens). The SKILL.md
5
5
  orchestrator dispatches each `settings-*` chapter id here;
6
6
  `authoring-*` ids it dispatches to `part-authoring.md`.