@skill-map/cli 0.53.4 → 0.53.6

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,9 +32,9 @@ Wait for confirmation. Mark `init`: done.
32
32
 
33
33
  ## Chapter `kinds` - The other kinds appear (~1 min)
34
34
 
35
- Leave the browser open and the terminal with `sm` running. You create four more nodes **without any cross-fixture links** yet, pure standalone nodes, so the tester sees four new dots pop in. Three new **kinds** show up in this step (skill, command, markdown), the fourth file is a second `markdown` node that the hub in the `connectors` chapter will point at via a real `references` link.
35
+ 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 faint mention that can't resolve and the same handle plus `.md` that resolves to a real file.
36
36
 
37
- Create these four 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 two markdown notes remain). Adjust the node count, the "four new nodes" message, and the file list shown to the tester in the sample below accordingly:
37
+ 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:
38
38
 
39
39
  1. `.claude/skills/demo-skill/SKILL.md` (kind: skill):
40
40
  ```markdown
@@ -43,15 +43,6 @@ Create these four files (with `Write`), exactly in this order. Per §Provider de
43
43
  description: |
44
44
  Example skill that walks a file and returns a Markdown report.
45
45
  Showcases the `skill` kind in the demo map.
46
- inputs:
47
- - name: target
48
- type: path
49
- description: File to process.
50
- required: true
51
- outputs:
52
- - name: report
53
- type: string
54
- description: Markdown summary.
55
46
  ---
56
47
 
57
48
  # demo-skill
@@ -70,20 +61,14 @@ Create these four files (with `Write`), exactly in this order. Per §Provider de
70
61
  ---
71
62
  name: demo-command
72
63
  description: |
73
- Example slash-style command that wraps the demo-skill behind
74
- a keyboard shortcut. Showcases the `command` kind.
75
- shortcut: "ctrl+alt+d"
76
- args:
77
- - name: target
78
- type: path
79
- description: File the command will hand off to the skill.
80
- required: true
64
+ Example slash command that wraps the demo-skill. Showcases the
65
+ `command` kind.
81
66
  ---
82
67
 
83
68
  # demo-command
84
69
 
85
- Quick keyboard entry point for running the demo flow on a
86
- target file. Connectors land in the next sub-step.
70
+ Quick entry point for running the demo flow on a target file.
71
+ Connectors land in the next sub-step.
87
72
  ```
88
73
 
89
74
  3. `notes/todo.md`, classified as `kind: markdown` today
@@ -96,23 +81,21 @@ Create these four files (with `Write`), exactly in this order. Per §Provider de
96
81
  Live list of things to review in the demo. Will become the
97
82
  hub that points to the rest of the fixture in the next
98
83
  sub-step.
99
- tags: [notes, demo]
100
84
  ---
101
85
 
102
86
  # Pending
103
87
  ```
104
88
 
105
- 4. `notes/demo-guideline.md`, second `kind: markdown` node, the
106
- one the hub will reach via a real markdown link in the
107
- `connectors` chapter:
89
+ 4. `notes/demo-guideline.md`, second `kind: markdown` node, reached
90
+ in the `connectors` chapter by a bare `@`-mention that can't
91
+ resolve, so it stays skill-map's faintest connector:
108
92
  ```markdown
109
93
  ---
110
94
  name: demo-guideline
111
95
  description: |
112
- Static reference notes that the rest of the demo points at.
113
- Showcases a second markdown node so the demo can exercise
114
- the `references` link kind without ambiguity.
115
- tags: [notes, demo]
96
+ Static reference notes the rest of the demo points at. The hub
97
+ reaches it with a bare `@`-mention, which stays a faint guess
98
+ (0.50) because it can't resolve to a known entity.
116
99
  ---
117
100
 
118
101
  # Demo Guideline
@@ -124,27 +107,48 @@ Create these four files (with `Write`), exactly in this order. Per §Provider de
124
107
  - Body stays minimal, only what's needed to teach the kind.
125
108
  ```
126
109
 
110
+ 5. `notes/demo-guideline2.md`, a sibling `markdown` node identical
111
+ to `demo-guideline`, reached by the same handle plus a `.md`
112
+ extension (`@demo-guideline2.md`), which makes it a file reference
113
+ that resolves to this node and lands at full confidence:
114
+ ```markdown
115
+ ---
116
+ name: demo-guideline2
117
+ description: |
118
+ Sibling of demo-guideline. The hub reaches it with an
119
+ `@`-mention that carries the `.md` extension, so the link
120
+ resolves to this file and lands certain (1.00).
121
+ ---
122
+
123
+ # Demo Guideline 2
124
+
125
+ Same conventions as demo-guideline; it exists so the hub can
126
+ reach it with a resolved reference instead of a bare mention.
127
+ ```
128
+
127
129
  Tell the tester:
128
130
 
129
- > Look at the browser. Four new nodes should have popped in:
130
- > `demo-skill`, `demo-command`, **Demo TODO list**, and `demo-guideline`.
131
- > Five total now, **still unconnected**: they're floating dots.
131
+ > Look at the browser. Five new nodes should have popped in:
132
+ > `demo-skill`, `demo-command`, **Demo TODO list**, `demo-guideline`,
133
+ > and `demo-guideline2`.
134
+ > Six total now, **still unconnected**: they're floating dots.
132
135
  > The viewport auto-fits whenever a node is added or removed, so
133
- > all five should be visible without panning.
136
+ > all six should be visible without panning.
134
137
  >
135
- > What I just did behind the scenes: I created four new files in
138
+ > What I just did behind the scenes: I created five new files in
136
139
  > your project, and the watcher picked them up on its own, that's
137
- > why four new dots appeared without you running anything:
140
+ > why five new dots appeared without you running anything:
138
141
  >
139
142
  > - `.claude/skills/demo-skill/SKILL.md` (kind: skill)
140
143
  > - `.claude/commands/demo-command.md` (kind: command)
141
144
  > - `notes/todo.md` (kind: markdown)
142
145
  > - `notes/demo-guideline.md` (kind: markdown)
146
+ > - `notes/demo-guideline2.md` (kind: markdown)
143
147
  >
144
148
  > Same loop you'll use yourself in the next step, only this time
145
149
  > the writes came from me.
146
150
  >
147
- > Did the four appear? Confirm so we can wire them up.
151
+ > Did the five appear? Confirm so we can wire them up.
148
152
 
149
153
  Wait for confirmation. Mark `kinds`: done.
150
154
 
@@ -168,24 +172,24 @@ Tell the tester:
168
172
  >
169
173
  > Watch the browser. The `demo-agent` card should refresh its
170
174
  > description in real time, no reload, no Ctrl+C, same watcher
171
- > that picked up the four new nodes a moment ago, this time
175
+ > that picked up the five new nodes a moment ago, this time
172
176
  > reacting to YOUR edit.
173
177
  >
174
- > Confirm so we wire the five up.
178
+ > Confirm so we wire the six up.
175
179
 
176
180
  Wait for confirmation. You MAY use `Read` on the file afterwards to verify the change landed (read-only, allowed under Inviolable rule #1) before moving on. Mark `first-edit`: done.
177
181
 
178
182
  ## Chapter `connectors` - The connectors light up (~2 min)
179
183
 
180
- You edit `notes/todo.md` so it becomes the **hub** that points to each of the other four nodes. Each bullet uses a syntax that maps to a specific **link kind**:
184
+ You edit `notes/todo.md` so it becomes the **hub** that points to each of the other five nodes. Each bullet uses a syntax that maps to a specific **link kind**:
181
185
 
182
186
  - an `@handle` token → kind `mentions`
187
+ - an `@handle.md` token (a `@` handle that ends in a file extension) → kind `references`
183
188
  - a `/slash` token → kind `invokes`
184
- - a markdown link `[text](path)` → kind `references`
185
189
 
186
- Five bullets, three kinds: `invokes` and `mentions` each appear twice, `references` once. The last two bullets both point at the **same** node (`demo-guideline`), on purpose: a markdown link AND an `@`-mention of it, so the next beat can contrast their confidence (the file link is certain, the name drop is a softer guess).
190
+ Five bullets, three kinds: `invokes` and `mentions` each appear twice, `references` once. The last two bullets are the confidence lesson: a bare `@demo-guideline` mention (which can't resolve, so it stays a faint guess) next to `@demo-guideline2.md`, the same handle shape plus a `.md` extension that points at a real sibling file (so it resolves and lands certain). Two separate nodes, two clearly different confidences.
187
191
 
188
- 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 `@demo-guideline` mention stays and is the faint connector on those providers too).
192
+ 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 confidence contrast, faint mention 0.50 vs resolved reference 1.00, is intact on those providers too).
189
193
 
190
194
  **Edit `notes/todo.md`**: append these bullets after the `# Pending` heading:
191
195
 
@@ -193,9 +197,8 @@ Apply with `Edit` on `notes/todo.md` (do not rewrite the file). Per §Provider d
193
197
  - [ ] Brief @demo-agent on the rough edges.
194
198
  - [ ] Run /demo-command before publishing.
195
199
  - [ ] Trigger /demo-skill when the input lands.
196
- - [ ] Re-read the
197
- [demo-guideline](./demo-guideline.md) before shipping.
198
200
  - [ ] Ping @demo-guideline if the conventions change.
201
+ - [ ] Ping @demo-guideline2.md if the conventions change.
199
202
  ```
200
203
 
201
204
  Tell the tester:
@@ -207,22 +210,32 @@ Tell the tester:
207
210
  > - `Demo TODO list → demo-agent` (kind: `mentions`)
208
211
  > - `Demo TODO list → demo-command` (kind: `invokes`)
209
212
  > - `Demo TODO list → demo-skill` (kind: `invokes`)
210
- > - `Demo TODO list → demo-guideline` (kind: `references`, the markdown link)
211
- > - `Demo TODO list → demo-guideline` (kind: `mentions`, the @ handle)
213
+ > - `Demo TODO list → demo-guideline` (kind: `mentions`, the bare `@` handle)
214
+ > - `Demo TODO list → demo-guideline2` (kind: `references`, the `@` handle with a `.md` extension)
215
+ >
216
+ > The kind comes from the syntax in the bullet: an `@handle` is a
217
+ > mention, a `/skill` or `/command` is an invoke, and an `@handle`
218
+ > that ends in a file extension (`@name.md`) is a reference, the
219
+ > extension turns the name drop into a file pointer. Five arrows,
220
+ > three kinds.
221
+ >
222
+ > Now look closely: the two guideline arrows are not equally solid.
223
+ > Skill-map draws each connector's **confidence** as opacity, how
224
+ > sure it is the link resolves to something real:
212
225
  >
213
- > The kind comes from the syntax in the bullet: an `@handle` is
214
- > always a mention, a `/skill` or `/command` is always an invoke, a
215
- > markdown link is always a reference. Five arrows, three kinds.
226
+ > - `@demo-guideline` is a bare `@`-mention. A bare mention only
227
+ > firmly resolves to an *agent*, and `demo-guideline` is a note,
228
+ > not an agent, so skill-map keeps it a soft guess (0.50), drawn
229
+ > faint. (That's also why `@demo-agent` above is solid: it does
230
+ > resolve to a real agent.)
231
+ > - `@demo-guideline2.md` adds the `.md`, so skill-map reads a file
232
+ > pointer, finds the real `demo-guideline2.md` node, and is certain
233
+ > (1.00), drawn solid.
216
234
  >
217
- > Now look closely: the two arrows to **demo-guideline** are not
218
- > equally solid. Skill-map draws each connector's **confidence** as
219
- > opacity, how sure it is the link is real. The markdown link
220
- > `[demo-guideline](./demo-guideline.md)` points at a real file, so
221
- > it's certain (1.00) and looks solid; the `@demo-guideline` mention
222
- > is a looser name drop, a softer guess (0.50), so it's drawn fainter.
223
- > A glance at the map tells you which links are rock solid and which
224
- > are skill-map's best guess; the exact number per link is in the
225
- > inspector, next chapter.
235
+ > Same handle, one `.md` apart, and the confidence jumps from a guess
236
+ > to a certainty. A glance at the map tells you which links are rock
237
+ > solid and which are skill-map's best guess; the exact number per
238
+ > link is in the inspector, next chapter.
226
239
  >
227
240
  > Confirm when you see it. If a connector is missing, refresh the
228
241
  > browser and let me know.
@@ -238,12 +251,11 @@ The connector opacity tells the confidence story at a glance; the exact per-link
238
251
  > by default): it has two sections, **Outgoing** and **Incoming**.
239
252
  > Demo TODO list lists **5 links** under Outgoing (the hub) and 0
240
253
  > under Incoming; open the Inspector for a targeted node to see its
241
- > Incoming count (demo-guideline shows **2**, the reference plus the
242
- > mention; the others 1 each). Each row shows the link kind
243
- > (`mentions`, `invokes`, `references`) and a badge with its
244
- > confidence: the numeric value. Here you'll see the contrast in
245
- > numbers, the `references` to demo-guideline reads `1.00`, the
246
- > `mentions` of it reads `0.50`.
254
+ > Incoming count (each node the hub points at shows **1**). Each row
255
+ > shows the link kind (`mentions`, `invokes`, `references`) and a
256
+ > badge with its confidence: the numeric value. Here you'll see the
257
+ > contrast in numbers, the `mentions` to `demo-guideline` reads
258
+ > `0.50`, while the `references` to `demo-guideline2` reads `1.00`.
247
259
  >
248
260
  > 💡 Tip: if all these changes left the nodes crowded together, the
249
261
  > map toolbar has a **Re-arrange layout** button (tooltip "Re-arrange
@@ -283,7 +295,7 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
283
295
  > by default: click the expand handle there (the `>` arrow, its
284
296
  > tooltip reads "Expand files panel"). The sidebar opens into a
285
297
  > **folder tree** (a nested view of your folders and the nodes inside
286
- > them): your five nodes grouped under `.claude/` and `notes/`, each
298
+ > them): your six nodes grouped under `.claude/` and `notes/`, each
287
299
  > row showing its kind and how many links go in and out.
288
300
  >
289
301
  > Tell me when the tree is open.
@@ -292,11 +304,12 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
292
304
 
293
305
  > At the top of that sidebar there's a search box (placeholder
294
306
  > `Search…`). Type `guideline`. Watch both halves at once: the tree
295
- > narrows down to `demo-guideline` and the **Map** drops every node
296
- > except `demo-guideline`. The search matches a node's name, path,
307
+ > narrows down to the two guideline nodes (`demo-guideline` and
308
+ > `demo-guideline2`) and the **Map** drops every node except those
309
+ > two. The search matches a node's name, path,
297
310
  > or description, and filters live as you type, no Enter needed.
298
311
  >
299
- > Now clear the box. All five nodes come back, in both the tree and
312
+ > Now clear the box. All six nodes come back, in both the tree and
300
313
  > the Map. Confirm you saw it filter and then restore.
301
314
 
302
315
  **Beat 3, isolate (tester does this).**
@@ -306,7 +319,8 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
306
319
  > "Isolate this node and its direct links on the map"). Click it.
307
320
  >
308
321
  > The Map collapses to **Demo TODO list** plus only the nodes it
309
- > links to (`demo-command`, `demo-skill`, `demo-guideline`).
322
+ > links to (`demo-command`, `demo-skill`, `demo-guideline`,
323
+ > `demo-guideline2`).
310
324
  > `demo-agent`, which lost its only connector back in the last step,
311
325
  > drops out of view, and the Inspector opens on **Demo TODO list**.
312
326
  > That's how you
@@ -314,7 +328,7 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
314
328
  >
315
329
  > To bring the rest back, look at the toolbar along the bottom of
316
330
  > the Map: there's a **Show all** button (an eye icon). Click it and
317
- > all five nodes return.
331
+ > all six nodes return.
318
332
  >
319
333
  > Did the map isolate and then restore?
320
334
 
@@ -344,14 +358,14 @@ description: |
344
358
  API_TOKEN: example-not-real
345
359
  ```
346
360
 
347
- It lands in the map as a sixth 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.
361
+ 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.
348
362
 
349
363
  **The tester hides it (single tester-facing message, one confirmation).**
350
364
 
351
365
  Give the tester a mental map of the folder so they know where the file lives, then the glob that hides it, all in ONE message. Use `Bash` (`ls -la`, plus `ls -la notes/` if a deeper view helps) for the real listing and apply the host-dependent rendering rule. Per Inviolable rule #2, the agent does NOT touch `.skillmapignore` with its `Edit` tool, the tester edits it from their own editor:
352
366
 
353
367
  > One last step. Your `private-credentials` note just popped into
354
- > the map as a sixth node, that's the watcher again. Now let's hide
368
+ > the map as a seventh node, that's the watcher again. Now let's hide
355
369
  > it. Here's what your directory looks like right now:
356
370
 
357
371
  ```
@@ -367,6 +381,7 @@ Give the tester a mental map of the folder so they know where the file lives, th
367
381
  └── notes/
368
382
  ├── todo.md
369
383
  ├── demo-guideline.md
384
+ ├── demo-guideline2.md
370
385
  └── private-credentials.md ← what we want to hide
371
386
  ```
372
387
 
@@ -387,8 +402,8 @@ notes/private-*.md
387
402
  >
388
403
  > Watch the browser when you save. The
389
404
  > `notes/private-credentials` node should disappear from the
390
- > **Map** in real time, without restarting anything. Six nodes
391
- > back to five.
405
+ > **Map** in real time, without restarting anything. Seven nodes
406
+ > back to six.
392
407
  >
393
408
  > Did the node vanish?
394
409
 
@@ -1,4 +1,4 @@
1
- # Part 6: Ship the site (the full publish pipeline) (step library, finale, `pipeline` + `golive`)
1
+ # Part 5: Ship the site (the full publish pipeline) (step library, finale, `pipeline` + `golive`)
2
2
 
3
3
  The finale, the climax of the whole campaign. In Part 3 you ran the
4
4
  harness once, the simple way (generate two pages, serve them). Here you
@@ -80,8 +80,8 @@ Tell the tester:
80
80
  >
81
81
  > **Step 2, brief the editor** (`@content-editor`). The check found
82
82
  > nothing to fix, so there is no brief to hand off this time, that is
83
- > the happy path. (Part 4 is where a link actually breaks and this
84
- > step earns its keep.)
83
+ > the happy path. (Maintaining the harness is where a link actually
84
+ > breaks, and that is where this step earns its keep.)
85
85
  >
86
86
  > **Step 3, follow the deploy runbook** (`docs/DEPLOY.md`). It lists:
87
87
  > generate the pages (done), run the link check (done), start the
@@ -122,7 +122,7 @@ Tell the tester:
122
122
  > Last step, the fun one. In your terminal, run these two commands:
123
123
  >
124
124
  > `npm install` downloads the one small library the server needs
125
- > (Express). If you already ran it in Part 3 it just confirms it is
125
+ > (Express). If you already ran it earlier it just confirms it is
126
126
  > there. Then `node server.js` starts the server; it prints a line
127
127
  > like `Listening on http://localhost:3000`.
128
128
  >
@@ -134,7 +134,7 @@ Tell the tester:
134
134
  > Now take it all in at once. On one side, the real running site you
135
135
  > can click through. On the other, the skill-map graph of the harness
136
136
  > that built it: the handbook, the content editor, the style guide,
137
- > the publish command, the link checker, the MCP tool, all wired
137
+ > the publish command, the link checker, all wired
138
138
  > together. You started in an empty folder with nothing, and you have
139
139
  > ended with a real, running site and a living map of how it all fits.
140
140
  >
@@ -1,4 +1,4 @@
1
- # Part 4: Maintain the site (step library, `maintain`)
1
+ # Part 4: Maintain the harness (step library, `maintain`)
2
2
 
3
3
  This is the upkeep part. The harness from Part 2 is wired and clean; real projects drift, links break, drafts pile up, names collide. Here the tester breaks something on purpose and fixes it, meets the analyzer catalogue that catches those problems, finds an orphan nobody links to, clears a reserved-name warning, and learns the `.sm` companion files that carry the tool's bookkeeping. `pace: auto-advance` (walk straight into the next chapter once one is marked done), `preflight: seed` (it builds on the portfolio harness from Parts 1 and 2, reusing the accumulated state when its predecessors are done, no fresh fixture of its own). Shared conventions (tone, provider detection / substitution, the `> ` rendering rule, the per-step cycle) live in `_core.md`; do not restate them here.
4
4
 
@@ -113,7 +113,7 @@ Wait for confirmation. Mark `analyzers`: done.
113
113
 
114
114
  ## Chapter `orphans` - A page nobody links to (~3 min)
115
115
 
116
- **Context**: a different kind of loose end. A node can be perfectly valid and still be an orphan: nothing in the harness links to it. We create a draft page that no one references, and `sm orphans` finds it. The point is to separate three ideas the tester now has names for: orphan (nothing points at it) vs broken-ref (a link with no target) vs issue (a rule violation).
116
+ **Context**: a different kind of loose end. A node can be perfectly valid and still be an orphan: nothing in the harness links to it. We create a draft page that no one references; it lands on the **Map** as a floating dot, and `sm show` confirms it has no incoming links. The point is to separate three ideas the tester now has names for: orphan (nothing points at it) vs broken-ref (a link with no target) vs issue (a rule violation). Note: orphan-ness is a property of the graph (visible on the Map / inspector), there is no `sm check` analyzer for it. The separate `sm orphans` verb is unrelated (it surfaces history stranded by a rename, not unlinked pages), so do NOT run it or bring it up with the tester here.
117
117
 
118
118
  `Write` `docs/draft.md` (markdown kind), a half-finished page nobody has wired up yet:
119
119
 
@@ -123,7 +123,6 @@ name: draft
123
123
  description: |
124
124
  Half-finished page nobody links to yet. Here to show what an
125
125
  orphan looks like: a valid node with no incoming connectors.
126
- tags: [docs, portfolio, draft]
127
126
  ---
128
127
 
129
128
  # Draft page
@@ -138,28 +137,40 @@ Tell the tester:
138
137
  > I dropped a new note into your project, `docs/draft.md`, a
139
138
  > half-finished page. Look at the **Map**: it shows up as a floating
140
139
  > dot with no arrows touching it. Nothing in your harness links to it,
141
- > which makes it an **orphan**.
140
+ > which makes it an **orphan**. Click the dot, the inspector shows no
141
+ > connections in or out.
142
+ >
143
+ > You can confirm the same thing from the CLI:
142
144
  >
143
145
  > ```bash
144
- > sm orphans
146
+ > sm show docs/draft.md
145
147
  > ```
146
148
  >
147
- > `sm orphans` lists exactly that: nodes nothing points at. It is
148
- > worth keeping three ideas apart, because they are easy to confuse:
149
+ > It prints the node's details, and there is **no "Links in"
150
+ > section**, nothing references it. That absence is exactly what
151
+ > "orphan" means here.
152
+ >
153
+ > It is worth keeping three ideas apart, because they are easy to
154
+ > confuse:
149
155
  >
150
156
  > - **orphan**: a real, valid node that simply has no incoming link
151
- > (your `docs/draft`). Not an error, just unreferenced.
157
+ > (your `docs/draft`). Not an error, just unreferenced, and visible
158
+ > on the Map as a floating dot.
152
159
  > - **broken-ref**: a link whose target file does not exist (the one
153
- > you triggered by renaming the runbook). That is a real issue.
160
+ > you triggered by renaming the runbook). That is a real issue
161
+ > `sm check` reports.
154
162
  > - **issue**: any rule violation `sm check` reports (broken-ref is
155
163
  > one family; name-reserved, self-loop and the rest are others).
156
164
  >
157
- > An orphan is not automatically a problem (a draft you have not wired
158
- > up yet is fine), it is just skill-map pointing out the page is not
159
- > reachable from anywhere. When you link to it later, it stops being
160
- > an orphan.
165
+ > An orphan is not automatically a problem. Sometimes it is a draft you
166
+ > have not wired up yet; sometimes it is a node you deliberately keep on
167
+ > its own, isolated on purpose, and that is just as valid. skill-map is
168
+ > only pointing out that the page is not reachable from anywhere, not
169
+ > telling you to fix it: if you link to it later it stops being an
170
+ > orphan, and if you never do, that was your call, not an error.
161
171
  >
162
- > Did `sm orphans` list `docs/draft`?
172
+ > Did `docs/draft` land as a floating dot, with `sm show` confirming
173
+ > no links in?
163
174
 
164
175
  Wait for confirmation. Mark `orphans`: done.
165
176
 
@@ -175,11 +186,6 @@ name: init
175
186
  description: |
176
187
  Bootstraps a fresh portfolio scaffold. Named init on purpose, to
177
188
  collide with the runtime built-in and trigger name-reserved.
178
- args:
179
- - name: target
180
- type: path
181
- description: Folder to scaffold into.
182
- required: true
183
189
  ---
184
190
 
185
191
  # init
@@ -264,38 +270,15 @@ sm sidecar annotate AGENTS.md
264
270
  > layer (gitignored), so each contributor consents on their own
265
271
  > checkout and the choice never travels through git.
266
272
  >
267
- > Did the prompt appear, and does `AGENTS.sm` exist now?
268
-
269
- Wait for confirmation. You MAY use `Read` on `AGENTS.sm` to verify it landed. Mark `sidecar`: done.
270
-
271
- ## Chapter `versions` - Bump a version, read its history (~3 min)
272
-
273
- **Context**: now that the consent is granted, the day-to-day versioning verbs go through silently. `sm bump` increments a node's frontmatter version and appends a record to its `.sm` companion; `sm history` reads that trail back. We bump the content editor and read its history. Same consent gate as the previous chapter, already satisfied.
274
-
275
- This is a CLI beat, the tester runs everything (substitute `<provider_dir>` in the path per `_core.md`):
276
-
277
- ```bash
278
- sm bump content-editor
279
- sm history content-editor
280
- ```
281
-
282
- > `sm bump <node>` is the everyday versioning verb: it nudges the
283
- > `version` field in the node's frontmatter up by one and appends an
284
- > entry to that node's `.sm` companion file, recording that the bump
285
- > happened. Because you already granted consent in the last chapter,
286
- > it runs without prompting (the `.sm` write is pre-authorized for
287
- > this checkout).
288
- >
289
- > `sm history <node>` reads that trail back: it prints the version
290
- > entries skill-map has recorded for the content editor, so you can
291
- > see how it has changed over time. Right after one bump you will see
292
- > the single entry the bump just wrote.
293
- >
294
- > The two verbs are a pair: `sm bump` writes a version checkpoint into
295
- > the companion file, `sm history` reads the checkpoints back out.
296
- > Your `.md` body never gets cluttered with this, it all lives in the
297
- > `.sm` alongside it.
273
+ > **Tip:** that `.sm` is also where the inspector gets a node's
274
+ > **Metadata**. With the live `sm` still running, click the `AGENTS`
275
+ > node on the **Map**: the inspector now shows a **Metadata** section
276
+ > that was not there before you created the companion file. It reads
277
+ > straight from `AGENTS.sm`, so a node with no `.sm` has no Metadata
278
+ > section at all. For now it reads **never bumped**, because you only
279
+ > scaffolded the file; once you start running `sm bump AGENTS.md` that
280
+ > panel fills in **Created** and **Last bumped**.
298
281
  >
299
- > Does `sm history` show the bump you just made?
282
+ > Did the prompt appear, and does `AGENTS.sm` exist now?
300
283
 
301
- Wait for confirmation. Mark `versions`: done. Last chapter of the part: apply §Closing a part (the close names the part by its title and routes back to the menu).
284
+ Wait for confirmation. You MAY use `Read` on `AGENTS.sm` to verify it landed. Mark `sidecar`: done. Last chapter of the part: apply §Closing a part (the close names the part by its title and routes back to the menu).
@@ -1,10 +1,10 @@
1
- # Part 5: MCP (step library, `mcp-*` ids)
1
+ # Part 8: MCP (step library, `mcp-*` ids)
2
2
 
3
- This is a chapter apart, the one just before the finale. Pace
4
- `auto-advance`, preflight `reuse` (it builds straight on the
5
- connected portfolio harness from the earlier parts, same cwd, same
6
- live `sm` session). One chapter only. Shared conventions live in
7
- `_core.md`.
3
+ This is a chapter apart, a standalone appendix that comes last in the
4
+ book. Pace `auto-advance`, preflight `seed` (`harness-connected`, so it
5
+ fast-forwards onto the connected portfolio harness whether the campaign
6
+ was just run in this directory or you jumped straight here). One chapter
7
+ only. Shared conventions live in `_core.md`.
8
8
 
9
9
  ## Chapter `mcp-node` - The agent reaches for an MCP tool (~3 min)
10
10
 
@@ -1,4 +1,4 @@
1
- # Part 7 (b): Extend skill-map - plugins (step library, `tour-*` ids)
1
+ # Part 6 (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
@@ -5,7 +5,7 @@ starts an actual project: a tiny personal **portfolio website**,
5
5
  fully static, served by a ~15-line Express server, plus the
6
6
  `.claude/` **harness** that maintains it. skill-map maps the harness
7
7
  (the `.md` assets and how they reference each other); the site itself
8
- is plain HTML the harness produces (Part 3 runs it, Part 6 ships it).
8
+ is plain HTML the harness produces (Part 3 runs it, Part 5 ships it).
9
9
  `pace: per-step`, `preflight: portfolio-init`. Shared
10
10
  conventions live in `_core.md`.
11
11
 
@@ -54,8 +54,9 @@ Wait for confirmation. Mark `kickoff`: done.
54
54
 
55
55
  **Context**: the dogfood beat. Real Claude Code projects keep a
56
56
  `CLAUDE.md` that just points at `AGENTS.md` (this very repo does).
57
- That one-line pointer is a real `mentions` link, the tester's first
58
- connector on the real project.
57
+ That one-line pointer is a real `references` link (the `.md` extension
58
+ makes `@AGENTS.md` a file pointer, not a bare mention), the tester's
59
+ first connector on the real project.
59
60
 
60
61
  Tell the tester to create the file themselves (it is their project's
61
62
  file, Inviolable rule #2):
@@ -68,10 +69,13 @@ file, Inviolable rule #2):
68
69
  > ```
69
70
  >
70
71
  > Save it. Watch the map: a new `CLAUDE.md` node appears, with a
71
- > `mentions` connector pointing at `AGENTS.md`. The `@name` token is
72
- > the same mention syntax from the prologue, now doing real work: it
73
- > tells anyone (and skill-map) that `CLAUDE.md` defers to the
74
- > handbook. This is exactly how this tool's own repo is wired.
72
+ > `references` connector pointing at `AGENTS.md`, solid at 1.00.
73
+ > Because `@AGENTS.md` carries the `.md` extension, skill-map reads it
74
+ > as a file pointer (the same `@name.md` reference you met in the
75
+ > prologue, not a bare mention), and since the handbook is right there
76
+ > the link resolves with full confidence. It tells anyone (and
77
+ > skill-map) that `CLAUDE.md` defers to the handbook. This is exactly
78
+ > how this tool's own repo is wired.
75
79
  >
76
80
  > Did the connector light up?
77
81
 
@@ -135,7 +139,6 @@ runbook), so Part 4's maintenance beats have something to point at.
135
139
  name: style-guide
136
140
  description: |
137
141
  Writing and markup conventions every portfolio page follows.
138
- tags: [docs, portfolio]
139
142
  ---
140
143
 
141
144
  # Style guide
@@ -151,7 +154,6 @@ tags: [docs, portfolio]
151
154
  name: deploy-runbook
152
155
  description: |
153
156
  How the portfolio gets published once the pages are written.
154
- tags: [docs, portfolio]
155
157
  ---
156
158
 
157
159
  # Deploy runbook
@@ -1,11 +1,12 @@
1
- # Part 3: Run the harness (your site, live) (step library, `generate` + `serve`)
1
+ # Part 3: Run the harness (your site, live) (step library, `generate` + `serve` + `editor-live`)
2
2
 
3
3
  The first payoff: the harness you built and wired in the earlier parts
4
4
  finally does its job and you see a real site running, without waiting
5
5
  for the finale. Pace `auto-advance`, preflight `seed` (`harness-connected`,
6
- so a tester can jump straight here). Two chapters, in order:
7
- `generate` (the agent writes the HTML pages) then `serve` (the tester
8
- runs the site and sees it next to the graph). This is a deliberately
6
+ so a tester can jump straight here). Three chapters: `generate` (the
7
+ agent writes the HTML pages), `serve` (the tester runs the site next to
8
+ the graph), then an optional `editor-live` (the tester lets the real
9
+ `content-editor` agent write a posts page). This is a deliberately
9
10
  simple, working pass: maintenance, MCP and the full publish pipeline
10
11
  come in the parts after it. Shared conventions live in `_core.md`.
11
12
 
@@ -149,7 +150,32 @@ stop the server with Ctrl+C and the edge case for ports applies the
149
150
  same as elsewhere. Remind them they can leave the server running or
150
151
  stop it with Ctrl+C; either way the next parts do not need it.
151
152
 
152
- Mark `serve`: done. Last chapter of the part: apply §Closing a part
153
- (the close names the part by its title and routes back to the menu;
154
- this is a mid-campaign payoff, NOT the campaign finale, so do not
155
- sign the campaign off here).
153
+ Mark `serve`: done. Auto-advance to the optional `editor-live` chapter.
154
+
155
+ ## Chapter `editor-live` - Let the content-editor agent write a posts page for real (optional) (~3 min)
156
+
157
+ **Context**: optional payoff, and the first time the tester runs a harness member for real instead of playing it. In `generate` the tester (as the agent) wrote the HTML by hand; here the actual `content-editor` agent does the job. The tester asks for a new **posts** page, the tutorial invokes the agent, and a real `public/posts.html` lands, proof that the nodes on the map are runnable, not just a diagram. The Layer-1 / Layer-2 split still holds: the new HTML does NOT move the graph (HTML is not `.md`). Fully skippable; run it or skip it, the part closes either way.
158
+
159
+ On `agent-skills` / Antigravity the `content-editor` member is a **skill**, not an `agent`; invoke it as a skill and keep everything else identical.
160
+
161
+ This chapter is OPTIONAL and the tester opts in. Offer it; if they skip, go straight to the part close below.
162
+
163
+ Tell the tester:
164
+
165
+ > Optional last beat, and the fun one: so far you have *played* the
166
+ > `content-editor` yourself. Want to see it run for real? Ask me to add
167
+ > a **posts** page with your agent, for example: "use the
168
+ > content-editor agent to add a posts page". I'll invoke the real
169
+ > `content-editor` in your project; it reads its own rules and the
170
+ > style guide, then writes a new static page into `public/`.
171
+ >
172
+ > Watch two things: the new page lands in `public/` (and shows on the
173
+ > live site when you open it), and the **Map does NOT move**, same
174
+ > Layer-1 / Layer-2 split as before, the agent's HTML output is not
175
+ > part of the harness graph.
176
+ >
177
+ > Or just tell me to skip it and we'll wrap up this part.
178
+
179
+ If the tester opts in: invoke the project's `content-editor` (the `<provider_dir>/agents/content-editor.md` agent, or the skill on `agent-skills`) via the Task tool to write ONE new static page `public/posts.html`, following the agent's own rules and `docs/STYLE.md` (plain HTML, no framework, no client JS, one page per file, a nav link back to Home), holding two or three short sample posts (a heading plus a sentence or two each). Do NOT edit `public/index.html` or any `.md` harness file, and do NOT edit the agent definition. If the subagent is not invocable in the tester's setup, act as the `content-editor` yourself following the same rules so the beat still lands. Then tell the tester to open `http://localhost:3000/posts.html` (refresh and navigate there), confirm the posts page is live and links back home, and confirm the **Map stayed still**.
180
+
181
+ Wait for confirmation (ran it or skipped). Mark `editor-live`: done. Last chapter of the part: apply §Closing a part (the close names the part by its title and routes back to the menu; this is a mid-campaign payoff, NOT the campaign finale, so do not sign the campaign off here).