@skill-map/cli 0.61.0 → 0.61.2

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.
@@ -32,6 +32,15 @@ landed (this keeps the node-count promises honest). If the subagent is not
32
32
  invocable in the tester's setup, act as the `content-editor` yourself following
33
33
  its rules and `docs/STYLE.md`, so the beat still lands.
34
34
 
35
+ **Live-map note (read once).** Every chapter here is watched on the live
36
+ **Map**, so skill-map's UI (`sm`) MUST be running before you start, watcher
37
+ picking up edits. In the full campaign the tester booted it back in the kickoff
38
+ chapter and kept it open; if they entered this part directly (via seed) or
39
+ closed it, have them start it now, run `sm` from the project root and open the
40
+ URL it prints, before the first chapter. This part has NO `sm scan` / `sm check`
41
+ steps: the watcher re-scans on every save, and the Map shows new nodes,
42
+ broken-reference markers, and confidence live.
43
+
35
44
  ---
36
45
 
37
46
  **Act A - Add**
@@ -160,16 +169,31 @@ footer.site { border-top: 1px solid var(--border); padding: 2rem 0; color: var(-
160
169
  </html>
161
170
  ```
162
171
 
163
- Then tell the tester to serve it (the tester runs these; do not run them):
172
+ Tell the tester the face is on (no serving yet, that is the next chapter):
173
+
174
+ > I gave your site a face: a shared stylesheet plus a styled **Home** and
175
+ > **About** page, named after you. These are Layer 2 (the harness's output), so
176
+ > the **Map** did not move, and that is correct: skill-map maps the harness (the
177
+ > `.md` files, Layer 1), not the HTML it produces. Next we bring it up so you
178
+ > can see it.
179
+
180
+ Mark `setup`: done. Auto-advance to `preview`.
181
+
182
+ ## Chapter `preview` - Bring it up and see your site (~2 min)
183
+
184
+ **Context**: the first look. The site is styled but the tester has only seen it
185
+ as files; now serve it and open it in the browser, the early payoff before the
186
+ daily loop fills it with pages. The tester runs the commands themselves (one of
187
+ the few non-`sm` beats); guide them, do not run them.
164
188
 
165
189
  ```bash
166
190
  npm install
167
191
  node server.js
168
192
  ```
169
193
 
170
- > Your portfolio has a face now. `npm install` pulls the one small library the
171
- > server needs (Express, on the Node you already have), and `node server.js`
172
- > starts it and prints a line like `Listening on http://localhost:3000`.
194
+ > Bring your site up. `npm install` pulls the one small library the server needs
195
+ > (Express, on the Node you already have), and `node server.js` starts it and
196
+ > prints a line like `Listening on http://localhost:3000`.
173
197
  >
174
198
  > Open `http://localhost:3000`: there is your site, named after you, with a
175
199
  > clean layout. Click **About** and back to **Home**.
@@ -182,7 +206,11 @@ node server.js
182
206
  >
183
207
  > Does the site load and look clean?
184
208
 
185
- Wait for confirmation. Mark `setup`: done. Auto-advance to `add-page`.
209
+ Wait for confirmation. If `node server.js` reports `Cannot find module
210
+ 'express'`, `npm install` did not run first, run it (it reads `package.json` and
211
+ pulls Express), then retry; if `npm install` itself fails, check they are in the
212
+ project root and Node is on PATH. Mark `preview`: done. Auto-advance to
213
+ `add-page`.
186
214
 
187
215
  ## Chapter `add-page` - Add a page with your agent (~4 min)
188
216
 
@@ -209,6 +237,10 @@ following the agent's own steps and `docs/STYLE.md` (the shared shell, link
209
237
  home nav. Do NOT write any `.md`, do NOT touch the harness. Then `Read` the file
210
238
  it produced.
211
239
 
240
+ Report back using the block below as the template: adapt the page name and add a
241
+ one-line description of what it actually wrote, but keep the ENTIRE report inside
242
+ the `> ` blockquote, do NOT drop the bar when you personalise it.
243
+
212
244
  > Your `content-editor` ran for real and wrote `public/projects.html`, linked
213
245
  > from the home nav. Refresh the site: the new page is there, in the same style
214
246
  > as the rest.
@@ -219,88 +251,12 @@ it produced.
219
251
  >
220
252
  > See the new page on the site, and the Map unchanged?
221
253
 
222
- Wait for confirmation. Mark `add-page`: done. Auto-advance to `orphan-draft`.
223
-
224
- ## Chapter `orphan-draft` - A page nobody links to yet (~2 min)
225
-
226
- **Context**: mid-day you jot an idea for the next page but do not wire it up yet.
227
- skill-map shows it as an **orphan**: a real node with nothing pointing at it.
228
-
229
- **Preparation**: `Write` `docs/draft.md` (markdown kind):
230
- ```markdown
231
- ---
232
- name: draft
233
- description: |
234
- A rough idea for the next page. Not linked from anywhere yet.
235
- ---
236
-
237
- # Draft
238
-
239
- Notes toward a posts page. Nothing wired up.
240
- ```
241
-
242
- Tell the tester to run:
243
-
244
- ```bash
245
- sm scan
246
- sm show docs/draft.md
247
- ```
248
-
249
- > A new `docs/draft` node appeared on the Map as a floating dot, no arrows in or
250
- > out. `sm show docs/draft.md` has no "Links in" section: nothing references it.
251
- > That is an **orphan**, a valid node with no incoming links.
252
- >
253
- > An orphan is NOT an error: run `sm check` and the harness still reads clean.
254
- > It is just a node nobody points at yet. Keep three ideas apart: an **orphan**
255
- > (a real node, no incoming link), a **broken reference** (a link with no target
256
- > on the other end), and an **issue** (a rule violation `sm check` flags). You
257
- > will meet the other two in a moment.
258
- >
259
- > See the floating dot, and the empty "Links in"?
260
-
261
- Wait for confirmation. Mark `orphan-draft`: done. Auto-advance to `wire-and-improve`.
254
+ Wait for confirmation. Mark `add-page`: done. Auto-advance to `broken-ref`.
262
255
 
263
256
  ---
264
257
 
265
258
  **Act B - Modify / improve**
266
259
 
267
- ## Chapter `wire-and-improve` - Wire the draft in (~3 min)
268
-
269
- **Context**: you turn the draft into a real page and link it, so it stops being
270
- an orphan. Two moves: the `content-editor` writes the actual page (Layer 2), and
271
- you add a link to the draft note from the handbook (Layer 1), which gives the
272
- orphan an incoming edge.
273
-
274
- **Preparation**: invoke the `content-editor` via the Task tool (real-execution
275
- contract) to write `public/posts.html` from the draft idea (a couple of short
276
- sample posts, shared shell, nav link back to Home). `Read` it afterwards.
277
-
278
- Then tell the tester to wire the note in (their file, Inviolable rule #2):
279
-
280
- > Two moves to close the loop on that draft. First, I had your `content-editor`
281
- > turn it into a real page: `public/posts.html` now exists (Layer 2, so the Map
282
- > stays put for it). Second, your turn: open `AGENTS.md` and add this line to
283
- > the body, so the handbook actually points at the draft note:
284
- >
285
- > ```markdown
286
- > - The next page started as notes in [draft](docs/draft.md).
287
- > ```
288
- >
289
- > Save it, then re-scan and look at the draft again:
290
-
291
- ```bash
292
- sm scan
293
- sm show docs/draft.md
294
- ```
295
-
296
- > `docs/draft` is no longer an orphan: `sm show` now lists `Links in (1)
297
- > ← references AGENTS.md`, and on the Map the floating dot is connected to the
298
- > handbook. One incoming link is all it took to fold it into the graph.
299
- >
300
- > Did the draft connect to the handbook?
301
-
302
- Wait for confirmation. Mark `wire-and-improve`: done. Auto-advance to `broken-ref`.
303
-
304
260
  ## Chapter `broken-ref` - A rename breaks a link (~4 min)
305
261
 
306
262
  **Context**: real reorganizing breaks things, and this is where skill-map earns
@@ -311,60 +267,41 @@ On `agent-skills` / Antigravity there is no `/publish` command holding the deplo
311
267
  link; use the variant in the note at the end of this chapter (rename
312
268
  `docs/STYLE.md` to break the `content-editor`'s style-guide reference instead).
313
269
 
314
- **Preparation**: none (the tester drives).
270
+ **Preparation**: none (the tester drives). Everything here is watched live on
271
+ the Map; no `sm` commands.
315
272
 
316
273
  Tell the tester to rename the deploy runbook (their file):
317
274
 
318
275
  ```bash
319
276
  mv docs/DEPLOY.md docs/DEPLOYMENT.md
320
- sm scan
321
- sm check
322
277
  ```
323
278
 
324
279
  > You renamed the deploy runbook, but `/publish` still links to the old path.
325
- > `sm check` flags it:
326
- >
327
- > ```
328
- > sm check: 1 error
280
+ > Watch the **Map**: the `publish → docs/DEPLOY.md` arrow disappears (a broken
281
+ > link resolves to no node, so skill-map stops drawing it) and the `publish`
282
+ > card gets a red **broken-reference** marker, a link whose target no longer
283
+ > exists. Open the `publish` node's inspector and the broken reference is listed
284
+ > there.
329
285
  >
330
- > .claude/commands/publish.md
331
- > ✕ reference-broken Broken references reference → docs/DEPLOY.md
332
- > ```
333
- >
334
- > That is the `reference-broken` analyzer: a link whose target no longer exists.
335
- > On the Map the `publish → docs/DEPLOY.md` arrow has disappeared: a broken link
336
- > resolves to no node, so skill-map stops drawing it and flags the `publish` card
337
- > with a red error instead. `sm check` runs the full analyzer catalogue (around a
338
- > dozen rules); to narrow it to one rule:
339
-
340
- ```bash
341
- sm check --analyzers reference-broken
342
- ```
343
-
344
286
  > Now fix it the way you would for real: open `.claude/commands/publish.md` and
345
- > point the deploy-runbook link at `docs/DEPLOYMENT.md` (the new name). Then
346
- > re-scan and re-check:
347
-
348
- ```bash
349
- sm scan
350
- sm check
351
- ```
352
-
353
- > `✓ No issues`. The arrow is solid again. That is the daily safety net: rename
354
- > and move things freely, and skill-map tells you exactly what you forgot to
355
- > update, before it ships broken.
287
+ > point the deploy-runbook link at `docs/DEPLOYMENT.md` (the new name). Save.
288
+ >
289
+ > Watch the **Map** again: the arrow snaps back, solid, and the red marker
290
+ > clears, all live, no command to run. That is the daily safety net: rename and
291
+ > move things freely, and skill-map shows you exactly what you forgot to update
292
+ > before it ships broken.
356
293
  >
357
- > Did `sm check` go from 1 error back to clean?
294
+ > Did the broken marker appear and then clear?
358
295
 
359
- Wait for confirmation. The harness MUST read `✓ No issues` before Act C (the
360
- real `/publish` later follows this runbook). Mark `broken-ref`: done.
361
- Auto-advance to `reserved`.
296
+ Wait for confirmation. The harness MUST be clean again (the red marker gone)
297
+ before Act C (the real `/publish` later follows this runbook). Mark `broken-ref`:
298
+ done. Auto-advance to `reserved`.
362
299
 
363
300
  On `agent-skills` / Antigravity (no `command` kind), run the same beat on a link
364
301
  that exists there: `mv docs/STYLE.md docs/STYLE-GUIDE.md`, which breaks the
365
- `content-editor` skill's `[style guide]` reference; `sm check` flags
366
- `reference-broken` on the `content-editor`; fix the link in the skill body and
367
- re-check to clean.
302
+ `content-editor` skill's `[style guide]` reference; the Map flags the broken
303
+ reference on the `content-editor`; fix the link in the skill body and watch it
304
+ clear.
368
305
 
369
306
  ## Chapter `reserved` - A reserved name collides (~2 min)
370
307
 
@@ -390,41 +327,24 @@ description: |
390
327
  Creates a blank page so you can start writing.
391
328
  ```
392
329
 
393
- Tell the tester to scan and check:
330
+ The watcher picks up the new command. Tell the tester:
394
331
 
395
- ```bash
396
- sm scan
397
- sm check
398
- ```
399
-
400
- > `sm check` warns:
401
- >
402
- > ```
403
- > sm check: 1 warning
332
+ > I added a command named `init`. Watch the **Map**: the new `init` command node
333
+ > appears, but flagged with a **warning** marker. Open its inspector: it reads
334
+ > `name-reserved`, `init` shadows one of Claude Code's own slash commands (like
335
+ > `/help`, `/clear`, `/config`), so the runtime would silently ignore your file,
336
+ > it never runs. The fix is a name the runtime does not own.
404
337
  >
405
- > .claude/commands/init.md
406
- > ⚠ name-reserved .claude/commands/init.md shadows a built-in claude command. The runtime ignores this file in favour of its own built-in. Rename the file or `frontmatter.name` to a non-reserved value.
407
- > ```
338
+ > Rename it to `new-page`: rename the file `.claude/commands/init.md` to
339
+ > `.claude/commands/new-page.md`, AND change `frontmatter.name` to `new-page`
340
+ > and the H1 to `# new-page` (a command's H1 stays a plain title, never
341
+ > `# /new-page`). Save.
408
342
  >
409
- > `init` is one of Claude Code's own slash commands (like `/help`, `/clear`,
410
- > `/config`), so your file would be silently ignored, it never runs. The fix is
411
- > to give it a name the runtime does not own.
412
-
413
- Rename the command to `new-page`: rename the file `.claude/commands/init.md` to
414
- `.claude/commands/new-page.md`, AND change `frontmatter.name` to `new-page` and
415
- the H1 to `# new-page` (a command's H1 stays a plain title, never `# /new-page`).
416
- Then have the tester re-scan and re-check:
417
-
418
- ```bash
419
- sm scan
420
- sm check
421
- ```
422
-
423
- > `✓ No issues`. Notice what cleared the warning: changing the **name**, not
424
- > just the filename. The reserved check looks at the command's name (its
425
- > `frontmatter.name`), which is why the warning told you to rename "the file or
426
- > `frontmatter.name`". Now `new-page` is yours and the runtime will actually run
427
- > it.
343
+ > Watch the **Map** again: the warning clears and the node is now `new-page`,
344
+ > all live. Notice what cleared it: changing the **name** (`frontmatter.name`),
345
+ > not just the filename, the reserved check looks at the command's name, which
346
+ > is why the warning said to rename "the file or `frontmatter.name`". Now
347
+ > `new-page` is yours and the runtime will actually run it.
428
348
  >
429
349
  > Did the warning clear after the rename?
430
350
 
@@ -446,9 +366,8 @@ On `agent-skills` / Antigravity there is no `/publish` command: run the
446
366
  `check-links` skill directly over `public/`, then follow `docs/DEPLOYMENT.md` by
447
367
  hand. Everything else in this chapter is identical.
448
368
 
449
- **Preparation**: make sure the pages exist (`index`, `about`, `projects`,
450
- `posts` from the earlier chapters; lay any that are missing from the templates in
451
- `setup`). When the tester asks to publish, **execute the publish flow for real**
369
+ **Preparation**: make sure the pages exist (`index`, `about`, `projects` from the
370
+ earlier chapters; lay any that are missing from the templates in `setup`). When the tester asks to publish, **execute the publish flow for real**
452
371
  by following `.claude/commands/publish.md`: run the `check-links` logic over
453
372
  every `.html` under `public/` (does each internal `href` resolve to a file that
454
373
  exists?); if any link is broken, brief the `content-editor` to fix it and
@@ -479,49 +398,42 @@ conditional on the real result):
479
398
  >
480
399
  > Did the publish run report the link check clean?
481
400
 
482
- Wait for confirmation. Mark `publish`: done. Auto-advance to `sidecar`.
401
+ Wait for confirmation. Mark `publish`: done. Auto-advance to `stability`.
483
402
 
484
- ## Chapter `sidecar` - Annotate the handbook (.sm and consent) (~3 min)
403
+ ## Chapter `stability` - Set a node's stability (and the `.sm` sidecar) (~3 min)
485
404
 
486
- **Context**: skill-map keeps its own metadata in co-located `.sm` sidecars, right
487
- next to each file, leaving the vendor file untouched. Writing the first one needs
488
- your consent. Good moment now that the site shipped: leave a metadata note on the
489
- handbook.
405
+ **Context**: real maintenance includes marking how mature each piece is. skill-map
406
+ lets you tag a node's **stability** (`experimental` / `stable` / `deprecated`)
407
+ from the inspector. That is skill-map's own metadata, so it lands in a co-located
408
+ **`.sm` sidecar** next to the file (the vendor file stays untouched), and the
409
+ first `.sm` write asks for your consent. Good moment now that the site shipped:
410
+ mark the handbook as the stable core it is.
490
411
 
491
412
  **Preparation**: none for a first-time tester. (If re-entering a dir where the
492
413
  sidecar already exists, reset consent first with `rm -f AGENTS.sm
493
- .skill-map/settings.local.json` so the prompt shows again.)
414
+ .skill-map/settings.local.json` so the consent prompt shows again.)
494
415
 
495
416
  Tell the tester:
496
417
 
497
- ```bash
498
- sm sidecar annotate AGENTS.md
499
- ```
500
-
501
- > The first time you write a `.sm`, skill-map asks for consent: answer `y` at the
502
- > `[Y/n]` prompt. It then scaffolds `AGENTS.sm` next to `AGENTS.md`:
418
+ > Your harness shipped, so let's mark the handbook as the **stable** core it is.
419
+ > Open the Inspector for the `AGENTS` node (click it on the **Map**) and find the
420
+ > **stability** action (the action button in the inspector). Click it and pick
421
+ > `stable` from the list.
503
422
  >
504
- > ```
505
- > ✓ Created AGENTS.sm. Edit it, then run `sm bump AGENTS.md` to commit the version.
506
- > ```
423
+ > The first time skill-map writes its own metadata it asks for **consent**:
424
+ > confirm it in the dialog that pops up. Two things happen at once: a `stable`
425
+ > badge appears on the `AGENTS` node, and skill-map creates a **`.sm` sidecar**
426
+ > (`AGENTS.sm`) right next to the handbook to hold that metadata, your `AGENTS.md`
427
+ > itself is never touched. Your consent is remembered for the project, so it
428
+ > will not ask again.
507
429
  >
508
- > Look at the two new artifacts:
509
-
510
- ```bash
511
- cat AGENTS.sm
512
- cat .skill-map/settings.local.json
513
- ```
514
-
515
- > `AGENTS.sm` holds an `identity:` block (hashes that tie it to the live file)
516
- > and an empty `annotations: {}` ready for you to fill in. And
517
- > `.skill-map/settings.local.json` now records your consent,
518
- > `{ "allowEditSmFiles": true }`, so skill-map will not ask again in this
519
- > project. Open the Inspector for the `AGENTS` node: it now has a **Metadata**
520
- > section it did not have before.
430
+ > That sidecar is where skill-map keeps what it knows about a node that does not
431
+ > belong in the vendor file (stability, version, tags). You just wrote your first
432
+ > one, by clicking, no command needed.
521
433
  >
522
- > See `AGENTS.sm` and the consent flag?
434
+ > See the `stable` badge on the handbook?
523
435
 
524
- Wait for confirmation. Mark `sidecar`: done. Auto-advance to `golive`.
436
+ Wait for confirmation. Mark `stability`: done. Auto-advance to `golive`.
525
437
 
526
438
  ## Chapter `golive` - Your portfolio, live next to the graph (~3 min)
527
439
 
@@ -542,9 +454,8 @@ node server.js
542
454
  > Last step, the fun one. `npm install` confirms the one small library is there,
543
455
  > and `node server.js` starts the server (`Listening on http://localhost:3000`).
544
456
  >
545
- > Open `http://localhost:3000` and click through Home, About, Projects, and
546
- > Posts, the pages your harness produced and shipped through the publish flow you
547
- > just ran.
457
+ > Open `http://localhost:3000` and click through Home, About, and Projects, the
458
+ > pages your harness produced and shipped through the publish flow you just ran.
548
459
  >
549
460
  > Now take it in at once. On one side, your real running portfolio, named after
550
461
  > you, that you could deploy as-is. On the other, the skill-map graph of the
@@ -36,7 +36,7 @@ Wait for confirmation. Mark `init`: done.
36
36
 
37
37
  ## Chapter `kinds` - The other kinds appear (~1 min)
38
38
 
39
- Leave the browser open and the terminal with `sm` running. You create five more nodes **without any cross-fixture links** yet, pure standalone nodes, so the tester sees five new dots pop in. Three new **kinds** show up in this step (skill, command, markdown); the last two files are sibling `markdown` notes (`demo-guideline`, `demo-guideline2`) the hub in the `connectors` chapter reaches two ways, a bare mention that resolves to nothing (which lands as a broken reference, no arrow drawn) and the same handle plus `.md` that resolves to a real file (a solid arrow).
39
+ Leave the browser open and the terminal with `sm` running. You create five more nodes **without any cross-fixture links** yet, pure standalone nodes, so the tester sees five new nodes pop in. Three new **kinds** show up in this step (skill, command, markdown); the last two files are sibling `markdown` notes (`demo-guideline`, `demo-guideline2`) the hub in the `connectors` chapter reaches two ways, a bare mention that resolves to nothing (which lands as a broken reference, no arrow drawn) and the same handle plus `.md` that resolves to a real file (a solid arrow).
40
40
 
41
41
  Lay these five files in one go (their content + translation live in `fixtures-data/`). The script resolves `__PROVIDER__` and auto-skips kinds the provider does not claim (`agent-skills` / Antigravity: both `demo-agent` and `demo-command` fold away, only the skill + the three markdown notes remain), so read the actual node count from the summary's `nodeCount`. Backstage (silent):
42
42
 
@@ -51,13 +51,13 @@ Tell the tester:
51
51
  > Look at the browser. Five new nodes should have popped in:
52
52
  > `demo-skill`, `demo-command`, **Demo TODO list**, `demo-guideline`,
53
53
  > and `demo-guideline2`.
54
- > Six total now, **still unconnected**: they're floating dots.
54
+ > Six total now, **still unconnected**: they're floating nodes.
55
55
  > The viewport auto-fits whenever a node is added or removed, so
56
56
  > all six should be visible without panning.
57
57
  >
58
58
  > What I just did behind the scenes: I created five new files in
59
59
  > your project, and the watcher picked them up on its own, that's
60
- > why five new dots appeared without you running anything:
60
+ > why five new nodes appeared without you running anything:
61
61
  >
62
62
  > - `.claude/skills/demo-skill/SKILL.md` (kind: skill)
63
63
  > - `.claude/commands/demo-command.md` (kind: command)
@@ -117,11 +117,12 @@ node .claude/skills/sm-tutorial/scripts/fixtures.js edit todo-connectors --provi
117
117
 
118
118
  Tell the tester:
119
119
 
120
- > Look at the magic again. **Demo TODO list** is now the hub. You
121
- > wrote five linking bullets, and **four arrows** light up between it
122
- > and the other nodes, each coloured by the link kind it carries:
120
+ > Look at the magic again. **Demo TODO list** is now the hub. I added
121
+ > five linking bullets to it (open `notes/todo.md` in your editor to
122
+ > see them), and **four arrows** light up between it and the other
123
+ > nodes, each coloured by the link kind it carries:
123
124
  >
124
- > - `Demo TODO list → demo-agent` (kind: `mentions`, the bare `@` handle resolves to a real agent)
125
+ > - `Demo TODO list → demo-agent` (kind: `mentions`, the `@name` mention resolves to a real agent)
125
126
  > - `Demo TODO list → demo-command` (kind: `invokes`)
126
127
  > - `Demo TODO list → demo-skill` (kind: `invokes`)
127
128
  > - `Demo TODO list → demo-guideline2` (kind: `references`, the `@` handle with a `.md` extension)
@@ -132,17 +133,17 @@ Tell the tester:
132
133
  > extension turns the name drop into a file pointer.
133
134
  >
134
135
  > So why four arrows for five bullets? The fifth bullet,
135
- > `@demo-guideline`, is a bare `@`-mention, and a bare mention only
136
- > resolves to an *agent*. `demo-guideline` is a note, not an agent, so
137
- > the mention resolves to nothing: skill-map draws no arrow (there is
138
- > no node for it to land on) and instead flags the hub with a
136
+ > `@demo-guideline`, is a reference skill-map cannot resolve: an
137
+ > `@name` mention points at an *agent* with that name, and there is no
138
+ > agent called `demo-guideline` (it is a note), so the reference lands
139
+ > on nothing. skill-map draws no arrow and instead flags the hub with a
139
140
  > **broken reference**, a red error marker on the **Demo TODO list**
140
141
  > card. Compare it with the bullet right after: `@demo-guideline2.md`
141
- > adds the `.md`, so skill-map reads a file pointer, finds the real
142
- > `demo-guideline2.md` node, and draws a solid arrow to it. Same
143
- > handle, one `.md` apart, and one resolves while the other breaks.
144
- > (That is also why `@demo-agent` drew fine: a bare mention DOES
145
- > resolve when the target is a real agent.)
142
+ > adds the `.md`, which makes it point at the **file** instead, so
143
+ > skill-map finds the real `demo-guideline2.md` node and draws a solid
144
+ > arrow. Same name, one `.md` apart: one resolves, the other does not.
145
+ > (That is also why `@demo-agent` drew fine: an `@name` mention
146
+ > resolves when an agent by that name really exists.)
146
147
  >
147
148
  > One word on solidity: skill-map draws each connector's
148
149
  > **confidence** as opacity, and every arrow you see here is fully
@@ -157,7 +158,7 @@ Tell the tester:
157
158
  > marker on the hub. If an arrow is missing, refresh the browser and
158
159
  > let me know.
159
160
 
160
- Expected: four drawn arrows plus one `core/reference-broken` error on `notes/todo.md` for the unresolved `@demo-guideline` mention (the prologue carries this single deliberate error from here on; it is the broken-reference preview the campaign and CLI parts build on). If an arrow is missing, do not advance, the next chapter inspects the same hub edit. Mark `connectors`: done.
161
+ Expected: four drawn arrows plus one `core/reference-broken` error on `notes/todo.md` for the unresolved `@demo-guideline` mention (the broken-reference preview; the tester resolves it by hand in the `edit-link` chapter by adding `.md`, and the campaign and CLI parts re-seed their own pristine copy from `prologue-built`). If an arrow is missing, do not advance, the next chapter inspects the same hub edit. Mark `connectors`: done.
161
162
 
162
163
  ## Chapter `inspector` - The inspector and connections (~1 min)
163
164
 
@@ -170,8 +171,8 @@ The canvas only draws the resolved arrows; the full per-link breakdown, includin
170
171
  > first, otherwise it just re-arranges.
171
172
  >
172
173
  > 🆕 Open the Inspector for **Demo TODO list** (click the node on
173
- > the map). **Expand** the **Connections** section (it's collapsed
174
- > by default): it has two sections, **Outgoing** and **Incoming**.
174
+ > the map). Find the **Connections** section: it has two sections,
175
+ > **Outgoing** and **Incoming**.
175
176
  > Demo TODO list lists **5 links** under Outgoing (the canvas drew
176
177
  > four arrows, but the data keeps the broken `@demo-guideline` mention
177
178
  > as a fifth row) and 0 under Incoming. Each row shows the link kind
@@ -194,7 +195,7 @@ Mark `inspector`: done.
194
195
 
195
196
  ## Chapter `edit-link` - Edit a link, the topology changes (~3 min)
196
197
 
197
- **Context**: the `first-edit` chapter had the tester edit a scalar (`description`) and watch the inspector card refresh. This chapter raises the bar: edit a Markdown link and watch the MAP TOPOLOGY change (a connector disappears).
198
+ **Context**: the `first-edit` chapter had the tester edit a scalar (`description`) and watch the inspector card refresh. This chapter raises the bar: edit Markdown links and watch the MAP TOPOLOGY change both ways, a connector disappears when you remove a link, and a new one appears (clearing the broken-reference error) when you fix the unresolved one.
198
199
 
199
200
  The server has been live since the `init` chapter, leave it running; this chapter and the next two (the workspace tour, then `.skillmapignore`) reuse it.
200
201
 
@@ -205,8 +206,24 @@ The server has been live since the `init` chapter, leave it running; this chapte
205
206
  > Expected: the `Demo TODO list → demo-agent` connector (kind:
206
207
  > `mentions`) disappears in real time. The two nodes stay in the
207
208
  > **Map**; only the edge goes.
209
+ >
210
+ > Tell me when the connector is gone.
211
+
212
+ Once they confirm, the second edit fixes the broken reference. Tell the tester:
208
213
 
209
- You verify by reading `notes/todo.md` to confirm the change was applied. (On `agent-skills`, where the `@demo-agent` bullet was never created in the `connectors` chapter, ask the tester to remove the only bullet they did add and watch THAT connector vanish, the lesson is the same.) Once they confirm, leave the server running, the next chapter reuses it. Mark `edit-link`: done.
214
+ > Now the other direction, fix the broken link. Edit `notes/todo.md`
215
+ > again and add the `.md` extension to the `@demo-guideline` bullet so
216
+ > it reads `@demo-guideline.md`. Save.
217
+ >
218
+ > Expected: a NEW arrow appears, `Demo TODO list → demo-guideline`
219
+ > (kind: `references`), and the red broken-reference marker on the hub
220
+ > clears. The `.md` turned the unresolved mention into a file
221
+ > reference that lands on the real `demo-guideline.md`, the same fix
222
+ > you saw side by side in the connectors chapter, now done by hand.
223
+ >
224
+ > Confirm when the new arrow is in and the red marker is gone.
225
+
226
+ You verify by reading `notes/todo.md` to confirm both edits landed (the `@demo-agent` bullet gone, `@demo-guideline` now `@demo-guideline.md`); the prologue's broken reference is now resolved. (On `agent-skills`, where the `@demo-agent` bullet was never created in the `connectors` chapter, ask the tester to remove the only bullet they did add for the first edit; the `.md` fix on `@demo-guideline` is identical.) Once they confirm, leave the server running, the next chapter reuses it. Mark `edit-link`: done.
210
227
 
211
228
  ## Chapter `workspace` - Navigate the workspace (files, search, isolate) (~2 min)
212
229
 
@@ -214,7 +231,11 @@ You verify by reading `notes/todo.md` to confirm the change was applied. (On `ag
214
231
 
215
232
  Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer nodes (`demo-skill` plus the two `notes/` files), so swap the node names below for ones that exist in that set; the gestures are identical.
216
233
 
217
- **Beat 1, open the Files panel (tester does this).**
234
+ Walk the three tester actions below one at a time (open the Files
235
+ panel, then search, then isolate); each ends with its own
236
+ confirmation, so present one and wait for the tester before the next.
237
+ Do NOT prepend an intro line to a block, each already opens with the
238
+ action itself.
218
239
 
219
240
  > Open the **Files** panel. It sits collapsed against the left edge
220
241
  > by default: click the expand handle there (the `>` arrow, its
@@ -225,8 +246,6 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
225
246
  >
226
247
  > Tell me when the tree is open.
227
248
 
228
- **Beat 2, search (tester does this).**
229
-
230
249
  > At the top of that sidebar there's a search box (placeholder
231
250
  > `Search…`). Type `guideline`. Watch both halves at once: the tree
232
251
  > narrows down to the two guideline nodes (`demo-guideline` and
@@ -237,8 +256,6 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
237
256
  > Now clear the box. All six nodes come back, in both the tree and
238
257
  > the Map. Confirm you saw it filter and then restore.
239
258
 
240
- **Beat 3, isolate (tester does this).**
241
-
242
259
  > Last one. In the tree, find the **Demo TODO list** row: at its
243
260
  > right edge there's a small **sitemap** icon (its tooltip reads
244
261
  > "Isolate this node and its direct links on the map"). Click it.
@@ -35,9 +35,11 @@ marker for the `openai` lens) sitting next to the `.claude/` folder
35
35
  (the `claude` marker, where the tutorial skill itself lives). With two
36
36
  markers present, `sm init`'s first scan can NOT auto-pick a lens and
37
37
  asks the tester to choose (`⚠ Multiple provider markers detected`).
38
- The portfolio is a Claude project, so the answer is `claude`. The
39
- prompt is expected, blessed behaviour; the tester just needs to know
40
- which option to pick, so the message below previews it.
38
+ The portfolio is a Claude project, so the answer is always `claude`,
39
+ the other options the prompt lists (`openai`/Codex and friends) are
40
+ coming soon in the tutorial and we do not walk them. The prompt is
41
+ expected, blessed behaviour; the tester just needs to know which
42
+ option to pick, so the message below previews it.
41
43
 
42
44
  ```bash
43
45
  sm init
@@ -52,8 +54,8 @@ Tell the tester:
52
54
  > site). skill-map maps that harness.
53
55
  >
54
56
  > Run `sm init`. If it asks you to pick a lens (`⚠ Multiple provider
55
- > markers detected`), choose `claude`, this is a Claude project. Then
56
- > run `sm` to boot the live UI.
57
+ > markers detected`), choose `claude`, this is a Claude project (the
58
+ > other lenses are coming soon). Then run `sm` to boot the live UI.
57
59
  >
58
60
  > Open the URL `sm` printed. You'll see **one node**: `AGENTS.md`,
59
61
  > the project's handbook (the operating manual for the site).
@@ -65,13 +67,13 @@ Tell the tester:
65
67
 
66
68
  Wait for confirmation. Mark `kickoff`: done.
67
69
 
68
- ## Chapter `manual` - The handbook and CLAUDE.md (~2 min)
70
+ ## Chapter `manual` - The handbook (AGENTS.md) and CLAUDE.md (~2 min)
69
71
 
70
72
  **Context**: the dogfood beat. Real Claude Code projects can
71
73
  reference the generic `AGENTS.md` from their `CLAUDE.md` (this very
72
74
  repo does). That one-line pointer is a real `references` link (the
73
- `.md` extension makes `@AGENTS.md` a file pointer, not a bare
74
- mention), the tester's first connector on the real project.
75
+ `.md` extension makes `@AGENTS.md` a file pointer), the tester's first
76
+ connector on the real project.
75
77
 
76
78
  Tell the tester to create the file themselves (it is their project's
77
79
  file, Inviolable rule #2). Backstage, get the content:
@@ -89,7 +91,7 @@ then render it in the fenced block the tester copies:
89
91
  > `references` connector pointing at `AGENTS.md`, solid at 1.00.
90
92
  > Because `@AGENTS.md` carries the `.md` extension, skill-map reads it
91
93
  > as a file pointer (the same `@name.md` reference you met in the
92
- > prologue, not a bare mention), and since the handbook is right there
94
+ > prologue), and since the handbook is right there
93
95
  > the link resolves with full confidence. It tells anyone (and
94
96
  > skill-map) that `CLAUDE.md` defers to the handbook. This is exactly
95
97
  > how this tool's own repo is wired.
@@ -116,6 +118,11 @@ Tell the tester:
116
118
  > `agent` node appeared on the map. Right now it stands alone; in the
117
119
  > next part we wire it to the handbook and the style guide.
118
120
  >
121
+ > 💡 Tip: I create these harness files for you. If you'd like to see
122
+ > what's inside, open `<provider_dir>/agents/content-editor.md` in your
123
+ > editor, and feel free to peek at the files I add in the coming
124
+ > chapters too.
125
+ >
119
126
  > See the new agent node?
120
127
 
121
128
  Wait for confirmation. Mark `first-agent`: done.