@skill-map/cli 0.60.4 → 0.61.1

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 (87) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/tutorial/sm-tutorial/SKILL.md +161 -266
  3. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/agents-hub/en/agents-hub.md +2 -0
  4. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/agents-hub/es/agents-hub.md +2 -0
  5. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/content-editor-style/en/content-editor-style.md +1 -0
  6. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/content-editor-style/es/content-editor-style.md +1 -0
  7. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/en/todo-bullet-agent.md +1 -0
  8. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/en/todo-bullet-command.md +1 -0
  9. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/en/todo-bullet-guideline.md +1 -0
  10. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/en/todo-bullet-guideline2.md +1 -0
  11. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/en/todo-bullet-skill.md +1 -0
  12. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/es/todo-bullet-agent.md +1 -0
  13. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/es/todo-bullet-command.md +1 -0
  14. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/es/todo-bullet-guideline.md +1 -0
  15. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/es/todo-bullet-guideline2.md +1 -0
  16. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/es/todo-bullet-skill.md +1 -0
  17. package/dist/cli/tutorial/sm-tutorial/fixtures-data/manifest.json +85 -0
  18. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/cli-external/en/link-validation/hijoA/note-with-external-link.md +10 -0
  19. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/cli-external/en/link-validation/hijoB/spec.md +11 -0
  20. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/cli-external/es/link-validation/hijoA/note-with-external-link.md +10 -0
  21. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/cli-external/es/link-validation/hijoB/spec.md +11 -0
  22. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/en/__PROVIDER__/commands/publish.md +15 -0
  23. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/en/__PROVIDER__/skills/check-links/SKILL.md +16 -0
  24. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/es/__PROVIDER__/commands/publish.md +16 -0
  25. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/es/__PROVIDER__/skills/check-links/SKILL.md +17 -0
  26. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/en/__PROVIDER__/agents/master-agent.md +14 -0
  27. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/en/__PROVIDER__/skills/master-skill/SKILL.md +18 -0
  28. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/en/notes/ideas.md +11 -0
  29. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/es/__PROVIDER__/agents/master-agent.md +15 -0
  30. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/es/__PROVIDER__/skills/master-skill/SKILL.md +18 -0
  31. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/es/notes/ideas.md +11 -0
  32. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/en/AGENTS.md +6 -0
  33. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/en/__PROVIDER__/agents/content-editor.md +21 -0
  34. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/en/docs/DEPLOY.md +11 -0
  35. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/en/docs/STYLE.md +20 -0
  36. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/en/public/index.html +5 -0
  37. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/es/AGENTS.md +7 -0
  38. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/es/__PROVIDER__/agents/content-editor.md +21 -0
  39. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/es/docs/DEPLOY.md +12 -0
  40. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/es/docs/STYLE.md +21 -0
  41. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/es/public/index.html +5 -0
  42. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/shared/CLAUDE.md +1 -0
  43. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/shared/package.json +6 -0
  44. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/shared/server.js +11 -0
  45. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/en/__PROVIDER__/agents/demo-agent.md +16 -0
  46. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/en/__PROVIDER__/commands/demo-command.md +11 -0
  47. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/en/__PROVIDER__/skills/demo-skill/SKILL.md +16 -0
  48. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/en/notes/demo-guideline.md +16 -0
  49. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/en/notes/demo-guideline2.md +12 -0
  50. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/en/notes/private-credentials.md +11 -0
  51. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/en/notes/todo.md +9 -0
  52. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/es/__PROVIDER__/agents/demo-agent.md +16 -0
  53. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/es/__PROVIDER__/commands/demo-command.md +11 -0
  54. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/es/__PROVIDER__/skills/demo-skill/SKILL.md +16 -0
  55. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/es/notes/demo-guideline.md +16 -0
  56. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/es/notes/demo-guideline2.md +13 -0
  57. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/es/notes/private-credentials.md +11 -0
  58. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/es/notes/todo.md +9 -0
  59. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/universal/en/findings.md +10 -0
  60. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/universal/es/findings.md +10 -0
  61. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/universal/shared/.skillmapignore +28 -0
  62. package/dist/cli/tutorial/sm-tutorial/references/_core.md +60 -40
  63. package/dist/cli/tutorial/sm-tutorial/references/_manifest.json +304 -0
  64. package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +4 -5
  65. package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +93 -271
  66. package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +1 -2
  67. package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +7 -30
  68. package/dist/cli/tutorial/sm-tutorial/references/part-connect-harness.md +21 -40
  69. package/dist/cli/tutorial/sm-tutorial/references/part-daily-loop.md +107 -194
  70. package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +58 -143
  71. package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +2 -3
  72. package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +22 -69
  73. package/dist/cli/tutorial/sm-tutorial/scripts/fixtures.js +238 -0
  74. package/dist/cli/tutorial/sm-tutorial/scripts/lib/args.js +29 -0
  75. package/dist/cli/tutorial/sm-tutorial/scripts/lib/fixtures-manifest.js +32 -0
  76. package/dist/cli/tutorial/sm-tutorial/scripts/lib/io.js +37 -0
  77. package/dist/cli/tutorial/sm-tutorial/scripts/lib/manifest.js +24 -0
  78. package/dist/cli/tutorial/sm-tutorial/scripts/lib/paths.js +68 -0
  79. package/dist/cli/tutorial/sm-tutorial/scripts/state.js +262 -0
  80. package/dist/cli.js +7 -8
  81. package/dist/index.js +6 -4
  82. package/dist/kernel/index.js +6 -4
  83. package/dist/ui/chunk-DG3EAGXB.js +3 -0
  84. package/dist/ui/index.html +1 -1
  85. package/dist/ui/{main-VJJVD754.js → main-32BO6UKY.js} +1 -1
  86. package/package.json +5 -3
  87. package/dist/ui/chunk-DDDCORVR.js +0 -3
@@ -6,7 +6,7 @@ The live-UI prologue: the tester runs `sm init`, opens the browser, and watches
6
6
 
7
7
  Agent background (do NOT render this as a separate context paragraph; the tester-facing version is folded into the message below): `sm init` creates a hidden `.skill-map/` folder in the cwd holding the database where skill-map stores what it learns about the project, and runs an initial scan (mandatory first step). Typing `sm` alone (no arguments) in an initialised dir then starts the UI server with the watcher built in (it is just an alias of `sm serve` with all defaults; the moment you need any flag you write `sm serve --flag ...` explicitly). One process, one terminal: it boots the server, scans the `.md` files, detects changes, and pushes events over WebSocket to the live UI. The next chapters all run against this same `sm` session, you boot it here and keep it alive through the `ignore` chapter.
8
8
 
9
- Expected: `.skill-map/skill-map.db` appears (plus config files), and the initial scan reports a small node / link count from the demo-agent fixture. `sm init` runs and exits; `sm` then starts the UI server and stays running. (Agent context, do not narrate: pre-flight's `.skillmapignore` keeps the tutorial's own files, `sm-tutorial.md` / `findings.md` / `tutorial-state.yml`, out of the scan; `sm init` leaves that file alone since it only writes when absent.)
9
+ Expected: `.skill-map/skill-map.db` appears (plus config files), and the initial scan reports a small node / link count from the demo-agent fixture. `sm init` runs and exits; `sm` then starts the UI server and stays running. (Agent context, do not narrate: pre-flight's `.skillmapignore` keeps the tutorial's own files, `sm-tutorial.md` / `findings.md` / `tutorial-state.json`, out of the scan; `sm init` leaves that file alone since it only writes when absent.)
10
10
 
11
11
  Give the tester the whole flow in ONE message with ONE confirmation, do NOT pause for the `sm init` output separately. Order matters: **lead with the browser setup**, then explain what the two commands do as you hand them over, then the command block, then the URL. Do NOT print the command block or an explanation paragraph before the browser instruction. Don't hardcode the URL, the verb logs the bound `http://host:port` after listen. Tell the tester:
12
12
 
@@ -36,114 +36,28 @@ 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).
40
-
41
- Create these five files (with `Write`), exactly in this order. Per §Provider detection, **substitute `.claude/` with the detected `<provider_dir>` and skip files whose kind is not in the provider's supported set** (`agent-skills` / Antigravity: skip both `demo-agent` and `demo-command`, only the skill + the three markdown notes remain). Adjust the node count, the "five new nodes" message, and the file list shown to the tester in the sample below accordingly:
42
-
43
- 1. `.claude/skills/demo-skill/SKILL.md` (kind: skill):
44
- ```markdown
45
- ---
46
- name: demo-skill
47
- description: |
48
- Example skill that walks a file and returns a Markdown report.
49
- Showcases the `skill` kind in the demo map.
50
- ---
51
-
52
- # demo-skill
53
-
54
- This skill walks a file and returns a report. Will be wired up
55
- to the rest of the demo fixture in the next sub-step.
56
-
57
- ## Steps
58
- 1. Read the `target`.
59
- 2. Validate the frontmatter against the schemas.
60
- 3. Generate the report.
61
- ```
62
-
63
- 2. `.claude/commands/demo-command.md` (kind: command):
64
- ```markdown
65
- ---
66
- name: demo-command
67
- description: |
68
- Example slash command that wraps the demo-skill. Showcases the
69
- `command` kind.
70
- ---
71
-
72
- # demo-command
73
-
74
- Quick entry point for running the demo flow on a target file.
75
- Connectors land in the next sub-step.
76
- ```
77
-
78
- 3. `notes/todo.md`, classified as `kind: markdown` today
79
- (the catch-all for `.md` files outside the
80
- skill / agent / command folders):
81
- ```markdown
82
- ---
83
- name: Demo TODO list
84
- description: |
85
- Live list of things to review in the demo. Will become the
86
- hub that points to the rest of the fixture in the next
87
- sub-step.
88
- ---
89
-
90
- # Pending
91
- ```
92
-
93
- 4. `notes/demo-guideline.md`, second `kind: markdown` node, reached
94
- in the `connectors` chapter by a bare `@`-mention that resolves to
95
- no agent, so it surfaces as a broken reference instead of a drawn
96
- connector:
97
- ```markdown
98
- ---
99
- name: demo-guideline
100
- description: |
101
- Static reference notes the rest of the demo points at. The hub
102
- reaches it with a bare `@`-mention, which resolves to no agent,
103
- so skill-map flags it as a broken reference (0.50) instead of
104
- drawing an arrow.
105
- ---
106
-
107
- # Demo Guideline
108
-
109
- Conventions the demo fixture follows:
110
-
111
- - Names match the file basename.
112
- - Frontmatter `description` is short and human-readable.
113
- - Body stays minimal, only what's needed to teach the kind.
114
- ```
115
-
116
- 5. `notes/demo-guideline2.md`, a sibling `markdown` node identical
117
- to `demo-guideline`, reached by the same handle plus a `.md`
118
- extension (`@demo-guideline2.md`), which makes it a file reference
119
- that resolves to this node and lands at full confidence:
120
- ```markdown
121
- ---
122
- name: demo-guideline2
123
- description: |
124
- Sibling of demo-guideline. The hub reaches it with an
125
- `@`-mention that carries the `.md` extension, so the link
126
- resolves to this file and lands certain (1.00).
127
- ---
128
-
129
- # Demo Guideline 2
130
-
131
- Same conventions as demo-guideline; it exists so the hub can
132
- reach it with a resolved reference instead of a bare mention.
133
- ```
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
+
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
+
43
+ ```
44
+ node .claude/skills/sm-tutorial/scripts/fixtures.js lay prologue --only "__PROVIDER__/skills/demo-skill/SKILL.md,__PROVIDER__/commands/demo-command.md,notes/todo.md,notes/demo-guideline.md,notes/demo-guideline2.md" --provider <provider> --lang <lang>
45
+ ```
46
+
47
+ Adjust the node count, the "five new nodes" message, and the file list shown to the tester in the sample below to match the laid set.
134
48
 
135
49
  Tell the tester:
136
50
 
137
51
  > Look at the browser. Five new nodes should have popped in:
138
52
  > `demo-skill`, `demo-command`, **Demo TODO list**, `demo-guideline`,
139
53
  > and `demo-guideline2`.
140
- > Six total now, **still unconnected**: they're floating dots.
54
+ > Six total now, **still unconnected**: they're floating nodes.
141
55
  > The viewport auto-fits whenever a node is added or removed, so
142
56
  > all six should be visible without panning.
143
57
  >
144
58
  > What I just did behind the scenes: I created five new files in
145
59
  > your project, and the watcher picked them up on its own, that's
146
- > why five new dots appeared without you running anything:
60
+ > why five new nodes appeared without you running anything:
147
61
  >
148
62
  > - `.claude/skills/demo-skill/SKILL.md` (kind: skill)
149
63
  > - `.claude/commands/demo-command.md` (kind: command)
@@ -195,25 +109,20 @@ You edit `notes/todo.md` so it becomes the **hub** that points to each of the ot
195
109
 
196
110
  Five bullets, three kinds: `invokes` and `mentions` each appear twice, `references` once. The last two bullets are the resolution lesson: a bare `@demo-guideline` mention (which resolves to no agent, so it lands as a broken reference and draws no arrow) next to `@demo-guideline2.md`, the same handle shape plus a `.md` extension that points at a real sibling file (so it resolves and draws a solid arrow). Two separate nodes, one broken and one resolved. Five bullets but only four arrows on the canvas.
197
111
 
198
- Apply with `Edit` on `notes/todo.md` (do not rewrite the file). Per §Provider detection, **substitute `.claude/` with the detected `<provider_dir>` and drop any bullet whose target node was not created in the `kinds` chapter** (on `agent-skills` / Antigravity there is no agent and no command → skip the `@demo-agent` and `/demo-command` bullets; the two guideline bullets stay, so the resolution contrast, broken mention 0.50 (no arrow drawn) vs resolved reference 1.00 (solid arrow), is intact on those providers too).
112
+ Apply the hub bullets (their content + translation live in `fixtures-data/`). The edit appends after the `# Pending` heading; the script drops any bullet whose target kind the provider does not claim (on `agent-skills` / Antigravity there is no agent and no command → the `@demo-agent` and `/demo-command` bullets fold away; the two guideline bullets stay, so the resolution contrast, broken mention 0.50 (no arrow drawn) vs resolved reference 1.00 (solid arrow), is intact on those providers too). Backstage (silent):
199
113
 
200
- **Edit `notes/todo.md`**: append these bullets after the `# Pending` heading:
201
-
202
- ```markdown
203
- - [ ] Brief @demo-agent on the rough edges.
204
- - [ ] Run /demo-command before publishing.
205
- - [ ] Trigger /demo-skill when the input lands.
206
- - [ ] Ping @demo-guideline if the conventions change.
207
- - [ ] Ping @demo-guideline2.md if the conventions change.
114
+ ```
115
+ node .claude/skills/sm-tutorial/scripts/fixtures.js edit todo-connectors --provider <provider> --lang <lang>
208
116
  ```
209
117
 
210
118
  Tell the tester:
211
119
 
212
- > Look at the magic again. **Demo TODO list** is now the hub. You
213
- > wrote five linking bullets, and **four arrows** light up between it
214
- > 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:
215
124
  >
216
- > - `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)
217
126
  > - `Demo TODO list → demo-command` (kind: `invokes`)
218
127
  > - `Demo TODO list → demo-skill` (kind: `invokes`)
219
128
  > - `Demo TODO list → demo-guideline2` (kind: `references`, the `@` handle with a `.md` extension)
@@ -224,17 +133,17 @@ Tell the tester:
224
133
  > extension turns the name drop into a file pointer.
225
134
  >
226
135
  > So why four arrows for five bullets? The fifth bullet,
227
- > `@demo-guideline`, is a bare `@`-mention, and a bare mention only
228
- > resolves to an *agent*. `demo-guideline` is a note, not an agent, so
229
- > the mention resolves to nothing: skill-map draws no arrow (there is
230
- > 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
231
140
  > **broken reference**, a red error marker on the **Demo TODO list**
232
141
  > card. Compare it with the bullet right after: `@demo-guideline2.md`
233
- > adds the `.md`, so skill-map reads a file pointer, finds the real
234
- > `demo-guideline2.md` node, and draws a solid arrow to it. Same
235
- > handle, one `.md` apart, and one resolves while the other breaks.
236
- > (That is also why `@demo-agent` drew fine: a bare mention DOES
237
- > 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.)
238
147
  >
239
148
  > One word on solidity: skill-map draws each connector's
240
149
  > **confidence** as opacity, and every arrow you see here is fully
@@ -249,7 +158,7 @@ Tell the tester:
249
158
  > marker on the hub. If an arrow is missing, refresh the browser and
250
159
  > let me know.
251
160
 
252
- 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.
253
162
 
254
163
  ## Chapter `inspector` - The inspector and connections (~1 min)
255
164
 
@@ -262,8 +171,8 @@ The canvas only draws the resolved arrows; the full per-link breakdown, includin
262
171
  > first, otherwise it just re-arranges.
263
172
  >
264
173
  > 🆕 Open the Inspector for **Demo TODO list** (click the node on
265
- > the map). **Expand** the **Connections** section (it's collapsed
266
- > by default): it has two sections, **Outgoing** and **Incoming**.
174
+ > the map). Find the **Connections** section: it has two sections,
175
+ > **Outgoing** and **Incoming**.
267
176
  > Demo TODO list lists **5 links** under Outgoing (the canvas drew
268
177
  > four arrows, but the data keeps the broken `@demo-guideline` mention
269
178
  > as a fifth row) and 0 under Incoming. Each row shows the link kind
@@ -286,7 +195,7 @@ Mark `inspector`: done.
286
195
 
287
196
  ## Chapter `edit-link` - Edit a link, the topology changes (~3 min)
288
197
 
289
- **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.
290
199
 
291
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.
292
201
 
@@ -297,8 +206,24 @@ The server has been live since the `init` chapter, leave it running; this chapte
297
206
  > Expected: the `Demo TODO list → demo-agent` connector (kind:
298
207
  > `mentions`) disappears in real time. The two nodes stay in the
299
208
  > **Map**; only the edge goes.
209
+ >
210
+ > Tell me when the connector is gone.
300
211
 
301
- 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.
212
+ Once they confirm, the second edit fixes the broken reference. Tell the tester:
213
+
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.
302
227
 
303
228
  ## Chapter `workspace` - Navigate the workspace (files, search, isolate) (~2 min)
304
229
 
@@ -306,7 +231,11 @@ You verify by reading `notes/todo.md` to confirm the change was applied. (On `ag
306
231
 
307
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.
308
233
 
309
- **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.
310
239
 
311
240
  > Open the **Files** panel. It sits collapsed against the left edge
312
241
  > by default: click the expand handle there (the `>` arrow, its
@@ -317,8 +246,6 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
317
246
  >
318
247
  > Tell me when the tree is open.
319
248
 
320
- **Beat 2, search (tester does this).**
321
-
322
249
  > At the top of that sidebar there's a search box (placeholder
323
250
  > `Search…`). Type `guideline`. Watch both halves at once: the tree
324
251
  > narrows down to the two guideline nodes (`demo-guideline` and
@@ -329,8 +256,6 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
329
256
  > Now clear the box. All six nodes come back, in both the tree and
330
257
  > the Map. Confirm you saw it filter and then restore.
331
258
 
332
- **Beat 3, isolate (tester does this).**
333
-
334
259
  > Last one. In the tree, find the **Demo TODO list** row: at its
335
260
  > right edge there's a small **sitemap** icon (its tooltip reads
336
261
  > "Isolate this node and its direct links on the map"). Click it.
@@ -363,20 +288,10 @@ Earlier chapters showed the watcher picking up new files and edits (yours and th
363
288
 
364
289
  **The agent seeds the file (no tester action, no separate pause).**
365
290
 
366
- `Write` `notes/private-credentials.md`, kind `markdown`, simulates a file the tester would never want surfacing publicly:
367
-
368
- ```markdown
369
- ---
370
- name: private-credentials
371
- description: |
372
- Personal API tokens, exists in the repo but should not show
373
- up in skill-map's map. Demonstrates the .skillmapignore
374
- flow.
375
- ---
291
+ Lay `notes/private-credentials.md`, kind `markdown`, which simulates a file the tester would never want surfacing publicly (its content + translation live in `fixtures-data/`). Backstage (silent):
376
292
 
377
- # Private
378
-
379
- API_TOKEN: example-not-real
293
+ ```
294
+ node .claude/skills/sm-tutorial/scripts/fixtures.js lay prologue --only "notes/private-credentials.md" --provider <provider> --lang <lang>
380
295
  ```
381
296
 
382
297
  It lands in the map as a seventh node (`notes/private-credentials`); the watcher sees it like any other `.md`. Do NOT pause to confirm the appearance, it folds into the single vanish confirmation at the end of this step.
@@ -17,7 +17,7 @@ Before announcing the first step, verify the fixture is initialised
17
17
  `backstage-init` preflight ran `sm init --no-scan` to provision it;
18
18
  the universal `.skillmapignore` from pre-flight keeps the tutorial's
19
19
  own files out of the scan. If any of that is missing, surface the
20
- bootstrap mismatch ("tutorial-state.yml says we are running, but
20
+ bootstrap mismatch ("tutorial-state.json says we are running, but
21
21
  the bootstrap is missing. Re-run the tutorial from an empty dir or
22
22
  restore the files.") and stop.
23
23
 
@@ -189,8 +189,7 @@ Mark `tour-3-explore: done`.
189
189
  >
190
190
  > Anything weird worth logging? If not, back to the menu.
191
191
 
192
- Mark the plugins chapters done in `tutorial-state.yml`, update the
193
- matching harness task, return to the menu in `SKILL.md`.
192
+ Mark the chapters done (rule #4) and return to the menu in `SKILL.md`.
194
193
 
195
194
  ## Reference: how `sm` decides what to load
196
195
 
@@ -65,16 +65,18 @@ Tell the tester:
65
65
 
66
66
  Wait for confirmation. Mark `kickoff`: done.
67
67
 
68
- ## Chapter `manual` - The handbook and CLAUDE.md (~2 min)
68
+ ## Chapter `manual` - The handbook (AGENTS.md) and CLAUDE.md (~2 min)
69
69
 
70
70
  **Context**: the dogfood beat. Real Claude Code projects can
71
71
  reference the generic `AGENTS.md` from their `CLAUDE.md` (this very
72
72
  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.
73
+ `.md` extension makes `@AGENTS.md` a file pointer), the tester's first
74
+ connector on the real project.
75
75
 
76
76
  Tell the tester to create the file themselves (it is their project's
77
- file, Inviolable rule #2):
77
+ file, Inviolable rule #2). Backstage, get the content:
78
+ `node .claude/skills/sm-tutorial/scripts/fixtures.js cat portfolio --file "CLAUDE.md" --provider <provider> --lang <lang>`,
79
+ then render it in the fenced block the tester copies:
78
80
 
79
81
  > Create a file called `CLAUDE.md` at the project root with exactly
80
82
  > this content:
@@ -87,7 +89,7 @@ file, Inviolable rule #2):
87
89
  > `references` connector pointing at `AGENTS.md`, solid at 1.00.
88
90
  > Because `@AGENTS.md` carries the `.md` extension, skill-map reads it
89
91
  > as a file pointer (the same `@name.md` reference you met in the
90
- > prologue, not a bare mention), and since the handbook is right there
92
+ > prologue), and since the handbook is right there
91
93
  > the link resolves with full confidence. It tells anyone (and
92
94
  > skill-map) that `CLAUDE.md` defers to the handbook. This is exactly
93
95
  > how this tool's own repo is wired.
@@ -98,33 +100,13 @@ Wait for confirmation. Mark `manual`: done.
98
100
 
99
101
  ## Chapter `first-agent` - The first harness agent (~2 min)
100
102
 
101
- `Write` `.claude/agents/content-editor.md` (substitute
102
- `<provider_dir>` per `_core.md`; on `agent-skills` / Antigravity,
103
- which has no `agent` kind, create a `skill` instead and adjust the
104
- prose):
105
-
106
- ```markdown
107
- ---
108
- name: content-editor
109
- description: |
110
- Writes and edits the portfolio's pages. Reads a brief, follows the
111
- style guide, and emits the HTML into public/.
112
- tools: [Read, Write]
113
- model: sonnet
114
- ---
115
-
116
- # content-editor
117
-
118
- Turns a short brief into a finished portfolio page.
119
-
120
- ## How to write a page
121
- 1. Read the style guide and the shared stylesheet in public/.
122
- 2. Write one HTML file under public/, named after the page (a projects page becomes `public/projects.html`).
123
- 3. Start from `<!doctype html>`, link the stylesheet with `<link rel="stylesheet" href="/style.css">`, and set a `<title>`.
124
- 4. Use one `<h1>`, group sections under `<h2>`, and reuse the shared header, nav, and footer so every page matches.
125
- 5. Add a link back to Home, and link the new page from the home nav.
126
-
127
- Rules: plain static HTML, no framework, no client JS, one page per file.
103
+ Lay the first harness agent (its content + translation live in
104
+ `fixtures-data/`). The script resolves `__PROVIDER__`; on
105
+ `agent-skills` / Antigravity, which has no `agent` kind, adjust the
106
+ prose to the skill the set lays there. Backstage (silent):
107
+
108
+ ```
109
+ node .claude/skills/sm-tutorial/scripts/fixtures.js lay portfolio --only "__PROVIDER__/agents/content-editor.md" --provider <provider> --lang <lang>
128
110
  ```
129
111
 
130
112
  Tell the tester:
@@ -134,6 +116,11 @@ Tell the tester:
134
116
  > `agent` node appeared on the map. Right now it stands alone; in the
135
117
  > next part we wire it to the handbook and the style guide.
136
118
  >
119
+ > 💡 Tip: I create these harness files for you. If you'd like to see
120
+ > what's inside, open `<provider_dir>/agents/content-editor.md` in your
121
+ > editor, and feel free to peek at the files I add in the coming
122
+ > chapters too.
123
+ >
137
124
  > See the new agent node?
138
125
 
139
126
  Wait for confirmation. Mark `first-agent`: done.
@@ -145,45 +132,11 @@ nodes. Now name them on the real project, and add the two markdown
145
132
  docs the harness references later (the style guide and the deploy
146
133
  runbook), so the Daily Loop's maintenance beats have something to point at.
147
134
 
148
- `Write` two docs (markdown kind):
149
-
150
- `docs/STYLE.md`:
151
- ```markdown
152
- ---
153
- name: style-guide
154
- description: |
155
- Writing and markup conventions every portfolio page follows.
156
- ---
157
-
158
- # Style guide
135
+ Lay the two markdown docs the harness references later (their content
136
+ + translation live in `fixtures-data/`). Backstage (silent):
159
137
 
160
- ## Voice
161
- - Short, plain sentences. No marketing fluff.
162
-
163
- ## Structure
164
- - One H1 per page; sections under H2.
165
- - Every page shares the same header, nav, and footer.
166
- - Every page links back to Home.
167
-
168
- ## Markup
169
- - Plain static HTML: no framework, no client JS.
170
- - Link the shared stylesheet `/style.css` in every page head.
171
- - Use semantic tags: header, nav, main, footer.
172
138
  ```
173
-
174
- `docs/DEPLOY.md`:
175
- ```markdown
176
- ---
177
- name: deploy-runbook
178
- description: |
179
- How the portfolio gets published once the pages are written.
180
- ---
181
-
182
- # Deploy runbook
183
-
184
- 1. Generate or update the pages in public/.
185
- 2. Run the link check and fix anything it reports.
186
- 3. Start the server with `node server.js`, then open the site in your browser.
139
+ node .claude/skills/sm-tutorial/scripts/fixtures.js lay portfolio --only "docs/STYLE.md,docs/DEPLOY.md" --provider <provider> --lang <lang>
187
140
  ```
188
141
 
189
142
  Tell the tester: