@skill-map/cli 0.53.3 → 0.53.5
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.
- package/dist/cli/tutorial/sm-tutorial/SKILL.md +108 -48
- package/dist/cli/tutorial/sm-tutorial/references/_core.md +13 -11
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +18 -16
- package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +43 -17
- package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +7 -7
- package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +3 -3
- package/dist/cli/tutorial/sm-tutorial/references/part-connect-harness.md +32 -17
- package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +86 -53
- package/dist/cli/tutorial/sm-tutorial/references/part-live-site.md +2 -2
- package/dist/cli/tutorial/sm-tutorial/references/part-maintain.md +42 -43
- package/dist/cli/tutorial/sm-tutorial/references/part-mcp.md +6 -6
- package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +5 -4
- package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +11 -7
- package/dist/cli/tutorial/sm-tutorial/references/part-run-harness.md +34 -8
- package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +6 -5
- package/dist/cli.js +3 -3
- package/dist/index.js +3 -3
- package/dist/kernel/index.js +3 -3
- package/dist/ui/{chunk-ISIHN6HU.js → chunk-7OJPO3XD.js} +6 -6
- package/dist/ui/{chunk-22XUPND3.js → chunk-MWDBZ2BE.js} +1 -1
- package/dist/ui/index.html +1 -1
- package/dist/ui/{main-Z4RJNI4X.js → main-QLIHFXBC.js} +2 -2
- package/package.json +1 -1
|
@@ -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
|
|
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
|
|
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
|
|
@@ -102,16 +102,16 @@ Create these four files (with `Write`), exactly in this order. Per §Provider de
|
|
|
102
102
|
# Pending
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
4. `notes/demo-guideline.md`, second `kind: markdown` node,
|
|
106
|
-
|
|
107
|
-
|
|
105
|
+
4. `notes/demo-guideline.md`, second `kind: markdown` node, reached
|
|
106
|
+
in the `connectors` chapter by a bare `@`-mention that can't
|
|
107
|
+
resolve, so it stays skill-map's faintest connector:
|
|
108
108
|
```markdown
|
|
109
109
|
---
|
|
110
110
|
name: demo-guideline
|
|
111
111
|
description: |
|
|
112
|
-
Static reference notes
|
|
113
|
-
|
|
114
|
-
|
|
112
|
+
Static reference notes the rest of the demo points at. The hub
|
|
113
|
+
reaches it with a bare `@`-mention, which stays a faint guess
|
|
114
|
+
(0.50) because it can't resolve to a known entity.
|
|
115
115
|
tags: [notes, demo]
|
|
116
116
|
---
|
|
117
117
|
|
|
@@ -124,27 +124,49 @@ Create these four files (with `Write`), exactly in this order. Per §Provider de
|
|
|
124
124
|
- Body stays minimal, only what's needed to teach the kind.
|
|
125
125
|
```
|
|
126
126
|
|
|
127
|
+
5. `notes/demo-guideline2.md`, a sibling `markdown` node identical
|
|
128
|
+
to `demo-guideline`, reached by the same handle plus a `.md`
|
|
129
|
+
extension (`@demo-guideline2.md`), which makes it a file reference
|
|
130
|
+
that resolves to this node and lands at full confidence:
|
|
131
|
+
```markdown
|
|
132
|
+
---
|
|
133
|
+
name: demo-guideline2
|
|
134
|
+
description: |
|
|
135
|
+
Sibling of demo-guideline. The hub reaches it with an
|
|
136
|
+
`@`-mention that carries the `.md` extension, so the link
|
|
137
|
+
resolves to this file and lands certain (1.00).
|
|
138
|
+
tags: [notes, demo]
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
# Demo Guideline 2
|
|
142
|
+
|
|
143
|
+
Same conventions as demo-guideline; it exists so the hub can
|
|
144
|
+
reach it with a resolved reference instead of a bare mention.
|
|
145
|
+
```
|
|
146
|
+
|
|
127
147
|
Tell the tester:
|
|
128
148
|
|
|
129
|
-
> Look at the browser.
|
|
130
|
-
> `demo-skill`, `demo-command`, **Demo TODO list**,
|
|
131
|
-
>
|
|
149
|
+
> Look at the browser. Five new nodes should have popped in:
|
|
150
|
+
> `demo-skill`, `demo-command`, **Demo TODO list**, `demo-guideline`,
|
|
151
|
+
> and `demo-guideline2`.
|
|
152
|
+
> Six total now, **still unconnected**: they're floating dots.
|
|
132
153
|
> The viewport auto-fits whenever a node is added or removed, so
|
|
133
|
-
> all
|
|
154
|
+
> all six should be visible without panning.
|
|
134
155
|
>
|
|
135
|
-
> What I just did behind the scenes: I created
|
|
156
|
+
> What I just did behind the scenes: I created five new files in
|
|
136
157
|
> your project, and the watcher picked them up on its own, that's
|
|
137
|
-
> why
|
|
158
|
+
> why five new dots appeared without you running anything:
|
|
138
159
|
>
|
|
139
160
|
> - `.claude/skills/demo-skill/SKILL.md` (kind: skill)
|
|
140
161
|
> - `.claude/commands/demo-command.md` (kind: command)
|
|
141
162
|
> - `notes/todo.md` (kind: markdown)
|
|
142
163
|
> - `notes/demo-guideline.md` (kind: markdown)
|
|
164
|
+
> - `notes/demo-guideline2.md` (kind: markdown)
|
|
143
165
|
>
|
|
144
166
|
> Same loop you'll use yourself in the next step, only this time
|
|
145
167
|
> the writes came from me.
|
|
146
168
|
>
|
|
147
|
-
> Did the
|
|
169
|
+
> Did the five appear? Confirm so we can wire them up.
|
|
148
170
|
|
|
149
171
|
Wait for confirmation. Mark `kinds`: done.
|
|
150
172
|
|
|
@@ -168,24 +190,24 @@ Tell the tester:
|
|
|
168
190
|
>
|
|
169
191
|
> Watch the browser. The `demo-agent` card should refresh its
|
|
170
192
|
> description in real time, no reload, no Ctrl+C, same watcher
|
|
171
|
-
> that picked up the
|
|
193
|
+
> that picked up the five new nodes a moment ago, this time
|
|
172
194
|
> reacting to YOUR edit.
|
|
173
195
|
>
|
|
174
|
-
> Confirm so we wire the
|
|
196
|
+
> Confirm so we wire the six up.
|
|
175
197
|
|
|
176
198
|
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
199
|
|
|
178
200
|
## Chapter `connectors` - The connectors light up (~2 min)
|
|
179
201
|
|
|
180
|
-
You edit `notes/todo.md` so it becomes the **hub** that points to each of the other
|
|
202
|
+
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
203
|
|
|
182
204
|
- an `@handle` token → kind `mentions`
|
|
205
|
+
- an `@handle.md` token (a `@` handle that ends in a file extension) → kind `references`
|
|
183
206
|
- a `/slash` token → kind `invokes`
|
|
184
|
-
- a markdown link `[text](path)` → kind `references`
|
|
185
207
|
|
|
186
|
-
Five bullets, three kinds: `invokes` and `mentions` each appear twice, `references` once. The last two bullets
|
|
208
|
+
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
209
|
|
|
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
|
|
210
|
+
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
211
|
|
|
190
212
|
**Edit `notes/todo.md`**: append these bullets after the `# Pending` heading:
|
|
191
213
|
|
|
@@ -193,9 +215,8 @@ Apply with `Edit` on `notes/todo.md` (do not rewrite the file). Per §Provider d
|
|
|
193
215
|
- [ ] Brief @demo-agent on the rough edges.
|
|
194
216
|
- [ ] Run /demo-command before publishing.
|
|
195
217
|
- [ ] Trigger /demo-skill when the input lands.
|
|
196
|
-
- [ ] Re-read the
|
|
197
|
-
[demo-guideline](./demo-guideline.md) before shipping.
|
|
198
218
|
- [ ] Ping @demo-guideline if the conventions change.
|
|
219
|
+
- [ ] Ping @demo-guideline2.md if the conventions change.
|
|
199
220
|
```
|
|
200
221
|
|
|
201
222
|
Tell the tester:
|
|
@@ -207,22 +228,32 @@ Tell the tester:
|
|
|
207
228
|
> - `Demo TODO list → demo-agent` (kind: `mentions`)
|
|
208
229
|
> - `Demo TODO list → demo-command` (kind: `invokes`)
|
|
209
230
|
> - `Demo TODO list → demo-skill` (kind: `invokes`)
|
|
210
|
-
> - `Demo TODO list → demo-guideline` (kind: `
|
|
211
|
-
> - `Demo TODO list → demo-
|
|
231
|
+
> - `Demo TODO list → demo-guideline` (kind: `mentions`, the bare `@` handle)
|
|
232
|
+
> - `Demo TODO list → demo-guideline2` (kind: `references`, the `@` handle with a `.md` extension)
|
|
233
|
+
>
|
|
234
|
+
> The kind comes from the syntax in the bullet: an `@handle` is a
|
|
235
|
+
> mention, a `/skill` or `/command` is an invoke, and an `@handle`
|
|
236
|
+
> that ends in a file extension (`@name.md`) is a reference, the
|
|
237
|
+
> extension turns the name drop into a file pointer. Five arrows,
|
|
238
|
+
> three kinds.
|
|
239
|
+
>
|
|
240
|
+
> Now look closely: the two guideline arrows are not equally solid.
|
|
241
|
+
> Skill-map draws each connector's **confidence** as opacity, how
|
|
242
|
+
> sure it is the link resolves to something real:
|
|
212
243
|
>
|
|
213
|
-
>
|
|
214
|
-
>
|
|
215
|
-
>
|
|
244
|
+
> - `@demo-guideline` is a bare `@`-mention. A bare mention only
|
|
245
|
+
> firmly resolves to an *agent*, and `demo-guideline` is a note,
|
|
246
|
+
> not an agent, so skill-map keeps it a soft guess (0.50), drawn
|
|
247
|
+
> faint. (That's also why `@demo-agent` above is solid: it does
|
|
248
|
+
> resolve to a real agent.)
|
|
249
|
+
> - `@demo-guideline2.md` adds the `.md`, so skill-map reads a file
|
|
250
|
+
> pointer, finds the real `demo-guideline2.md` node, and is certain
|
|
251
|
+
> (1.00), drawn solid.
|
|
216
252
|
>
|
|
217
|
-
>
|
|
218
|
-
>
|
|
219
|
-
>
|
|
220
|
-
>
|
|
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.
|
|
253
|
+
> Same handle, one `.md` apart, and the confidence jumps from a guess
|
|
254
|
+
> to a certainty. A glance at the map tells you which links are rock
|
|
255
|
+
> solid and which are skill-map's best guess; the exact number per
|
|
256
|
+
> link is in the inspector, next chapter.
|
|
226
257
|
>
|
|
227
258
|
> Confirm when you see it. If a connector is missing, refresh the
|
|
228
259
|
> browser and let me know.
|
|
@@ -238,12 +269,11 @@ The connector opacity tells the confidence story at a glance; the exact per-link
|
|
|
238
269
|
> by default): it has two sections, **Outgoing** and **Incoming**.
|
|
239
270
|
> Demo TODO list lists **5 links** under Outgoing (the hub) and 0
|
|
240
271
|
> under Incoming; open the Inspector for a targeted node to see its
|
|
241
|
-
> Incoming count (
|
|
242
|
-
>
|
|
243
|
-
>
|
|
244
|
-
>
|
|
245
|
-
>
|
|
246
|
-
> `mentions` of it reads `0.50`.
|
|
272
|
+
> Incoming count (each node the hub points at shows **1**). Each row
|
|
273
|
+
> shows the link kind (`mentions`, `invokes`, `references`) and a
|
|
274
|
+
> badge with its confidence: the numeric value. Here you'll see the
|
|
275
|
+
> contrast in numbers, the `mentions` to `demo-guideline` reads
|
|
276
|
+
> `0.50`, while the `references` to `demo-guideline2` reads `1.00`.
|
|
247
277
|
>
|
|
248
278
|
> 💡 Tip: if all these changes left the nodes crowded together, the
|
|
249
279
|
> map toolbar has a **Re-arrange layout** button (tooltip "Re-arrange
|
|
@@ -283,7 +313,7 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
|
|
|
283
313
|
> by default: click the expand handle there (the `>` arrow, its
|
|
284
314
|
> tooltip reads "Expand files panel"). The sidebar opens into a
|
|
285
315
|
> **folder tree** (a nested view of your folders and the nodes inside
|
|
286
|
-
> them): your
|
|
316
|
+
> them): your six nodes grouped under `.claude/` and `notes/`, each
|
|
287
317
|
> row showing its kind and how many links go in and out.
|
|
288
318
|
>
|
|
289
319
|
> Tell me when the tree is open.
|
|
@@ -292,11 +322,12 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
|
|
|
292
322
|
|
|
293
323
|
> At the top of that sidebar there's a search box (placeholder
|
|
294
324
|
> `Search…`). Type `guideline`. Watch both halves at once: the tree
|
|
295
|
-
> narrows down to `demo-guideline` and
|
|
296
|
-
>
|
|
325
|
+
> narrows down to the two guideline nodes (`demo-guideline` and
|
|
326
|
+
> `demo-guideline2`) and the **Map** drops every node except those
|
|
327
|
+
> two. The search matches a node's name, path,
|
|
297
328
|
> or description, and filters live as you type, no Enter needed.
|
|
298
329
|
>
|
|
299
|
-
> Now clear the box. All
|
|
330
|
+
> Now clear the box. All six nodes come back, in both the tree and
|
|
300
331
|
> the Map. Confirm you saw it filter and then restore.
|
|
301
332
|
|
|
302
333
|
**Beat 3, isolate (tester does this).**
|
|
@@ -306,7 +337,8 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
|
|
|
306
337
|
> "Isolate this node and its direct links on the map"). Click it.
|
|
307
338
|
>
|
|
308
339
|
> The Map collapses to **Demo TODO list** plus only the nodes it
|
|
309
|
-
> links to (`demo-command`, `demo-skill`, `demo-guideline
|
|
340
|
+
> links to (`demo-command`, `demo-skill`, `demo-guideline`,
|
|
341
|
+
> `demo-guideline2`).
|
|
310
342
|
> `demo-agent`, which lost its only connector back in the last step,
|
|
311
343
|
> drops out of view, and the Inspector opens on **Demo TODO list**.
|
|
312
344
|
> That's how you
|
|
@@ -314,7 +346,7 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
|
|
|
314
346
|
>
|
|
315
347
|
> To bring the rest back, look at the toolbar along the bottom of
|
|
316
348
|
> the Map: there's a **Show all** button (an eye icon). Click it and
|
|
317
|
-
> all
|
|
349
|
+
> all six nodes return.
|
|
318
350
|
>
|
|
319
351
|
> Did the map isolate and then restore?
|
|
320
352
|
|
|
@@ -344,14 +376,14 @@ description: |
|
|
|
344
376
|
API_TOKEN: example-not-real
|
|
345
377
|
```
|
|
346
378
|
|
|
347
|
-
It lands in the map as a
|
|
379
|
+
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
380
|
|
|
349
381
|
**The tester hides it (single tester-facing message, one confirmation).**
|
|
350
382
|
|
|
351
383
|
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
384
|
|
|
353
385
|
> One last step. Your `private-credentials` note just popped into
|
|
354
|
-
> the map as a
|
|
386
|
+
> the map as a seventh node, that's the watcher again. Now let's hide
|
|
355
387
|
> it. Here's what your directory looks like right now:
|
|
356
388
|
|
|
357
389
|
```
|
|
@@ -367,6 +399,7 @@ Give the tester a mental map of the folder so they know where the file lives, th
|
|
|
367
399
|
└── notes/
|
|
368
400
|
├── todo.md
|
|
369
401
|
├── demo-guideline.md
|
|
402
|
+
├── demo-guideline2.md
|
|
370
403
|
└── private-credentials.md ← what we want to hide
|
|
371
404
|
```
|
|
372
405
|
|
|
@@ -387,8 +420,8 @@ notes/private-*.md
|
|
|
387
420
|
>
|
|
388
421
|
> Watch the browser when you save. The
|
|
389
422
|
> `notes/private-credentials` node should disappear from the
|
|
390
|
-
> **Map** in real time, without restarting anything.
|
|
391
|
-
> back to
|
|
423
|
+
> **Map** in real time, without restarting anything. Seven nodes
|
|
424
|
+
> back to six.
|
|
392
425
|
>
|
|
393
426
|
> Did the node vanish?
|
|
394
427
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Part
|
|
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
|
|
@@ -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,
|
|
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,6 +1,6 @@
|
|
|
1
1
|
# Part 4: Maintain the site (step library, `maintain`)
|
|
2
2
|
|
|
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:
|
|
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
|
|
|
5
5
|
## Chapter `broken-ref` - A link breaks (~3 min)
|
|
6
6
|
|
|
@@ -12,6 +12,21 @@ This chapter is the tester's hands the whole way (renaming and editing their own
|
|
|
12
12
|
sm
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
+
This part is the first time the live server and one-off `sm` commands run side by side, so give the tester the third-terminal heads-up below (substitute `<cwd>` with the tester's actual cwd, same substitution as every other `<cwd>` mention):
|
|
16
|
+
|
|
17
|
+
> ⚠️ Heads up: from here you run one-off commands (`sm scan`, `sm
|
|
18
|
+
> check`, the `mv` below) **while the `sm` server keeps running**. The
|
|
19
|
+
> server holds its terminal until you Ctrl+C it, so open a **third
|
|
20
|
+
> terminal** and anchor it to this same folder, that is where every
|
|
21
|
+
> one-off command from here on goes:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
cd <cwd>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
> Three terminals now: this chat, the one running the live `sm` server
|
|
28
|
+
> (leave it alone), and this new one for the one-off commands.
|
|
29
|
+
|
|
15
30
|
> Open the URL `sm` prints, same as before. Now break something on
|
|
16
31
|
> purpose. Rename your deploy runbook from `docs/DEPLOY.md` to
|
|
17
32
|
> `docs/DEPLOYMENT.md` (just change the filename, leave the contents
|
|
@@ -98,7 +113,7 @@ Wait for confirmation. Mark `analyzers`: done.
|
|
|
98
113
|
|
|
99
114
|
## Chapter `orphans` - A page nobody links to (~3 min)
|
|
100
115
|
|
|
101
|
-
**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
|
|
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 use it here.
|
|
102
117
|
|
|
103
118
|
`Write` `docs/draft.md` (markdown kind), a half-finished page nobody has wired up yet:
|
|
104
119
|
|
|
@@ -123,19 +138,28 @@ Tell the tester:
|
|
|
123
138
|
> I dropped a new note into your project, `docs/draft.md`, a
|
|
124
139
|
> half-finished page. Look at the **Map**: it shows up as a floating
|
|
125
140
|
> dot with no arrows touching it. Nothing in your harness links to it,
|
|
126
|
-
> which makes it an **orphan**.
|
|
141
|
+
> which makes it an **orphan**. Click the dot, the inspector shows no
|
|
142
|
+
> connections in or out.
|
|
143
|
+
>
|
|
144
|
+
> You can confirm the same thing from the CLI:
|
|
127
145
|
>
|
|
128
146
|
> ```bash
|
|
129
|
-
> sm
|
|
147
|
+
> sm show docs/draft.md
|
|
130
148
|
> ```
|
|
131
149
|
>
|
|
132
|
-
>
|
|
133
|
-
>
|
|
150
|
+
> It prints the node's details, and there is **no "Links in"
|
|
151
|
+
> section**, nothing references it. That absence is exactly what
|
|
152
|
+
> "orphan" means here.
|
|
153
|
+
>
|
|
154
|
+
> It is worth keeping three ideas apart, because they are easy to
|
|
155
|
+
> confuse:
|
|
134
156
|
>
|
|
135
157
|
> - **orphan**: a real, valid node that simply has no incoming link
|
|
136
|
-
> (your `docs/draft`). Not an error, just unreferenced
|
|
158
|
+
> (your `docs/draft`). Not an error, just unreferenced, and visible
|
|
159
|
+
> on the Map as a floating dot.
|
|
137
160
|
> - **broken-ref**: a link whose target file does not exist (the one
|
|
138
|
-
> you triggered by renaming the runbook). That is a real issue
|
|
161
|
+
> you triggered by renaming the runbook). That is a real issue
|
|
162
|
+
> `sm check` reports.
|
|
139
163
|
> - **issue**: any rule violation `sm check` reports (broken-ref is
|
|
140
164
|
> one family; name-reserved, self-loop and the rest are others).
|
|
141
165
|
>
|
|
@@ -144,7 +168,14 @@ Tell the tester:
|
|
|
144
168
|
> reachable from anywhere. When you link to it later, it stops being
|
|
145
169
|
> an orphan.
|
|
146
170
|
>
|
|
147
|
-
>
|
|
171
|
+
> (Heads up: there is also an `sm orphans` command, but it is a
|
|
172
|
+
> different tool. It tracks history left stranded when you rename a
|
|
173
|
+
> file that had tracked state, not pages with no links, so it will
|
|
174
|
+
> not list `docs/draft`. Running it here prints "no orphan issues",
|
|
175
|
+
> which is correct.)
|
|
176
|
+
>
|
|
177
|
+
> Did `docs/draft` land as a floating dot, with `sm show` confirming
|
|
178
|
+
> no links in?
|
|
148
179
|
|
|
149
180
|
Wait for confirmation. Mark `orphans`: done.
|
|
150
181
|
|
|
@@ -167,7 +198,7 @@ args:
|
|
|
167
198
|
required: true
|
|
168
199
|
---
|
|
169
200
|
|
|
170
|
-
#
|
|
201
|
+
# init
|
|
171
202
|
|
|
172
203
|
Sets up the empty folders a new portfolio needs.
|
|
173
204
|
```
|
|
@@ -251,36 +282,4 @@ sm sidecar annotate AGENTS.md
|
|
|
251
282
|
>
|
|
252
283
|
> Did the prompt appear, and does `AGENTS.sm` exist now?
|
|
253
284
|
|
|
254
|
-
Wait for confirmation. You MAY use `Read` on `AGENTS.sm` to verify it landed. Mark `sidecar`: done.
|
|
255
|
-
|
|
256
|
-
## Chapter `versions` - Bump a version, read its history (~3 min)
|
|
257
|
-
|
|
258
|
-
**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.
|
|
259
|
-
|
|
260
|
-
This is a CLI beat, the tester runs everything (substitute `<provider_dir>` in the path per `_core.md`):
|
|
261
|
-
|
|
262
|
-
```bash
|
|
263
|
-
sm bump content-editor
|
|
264
|
-
sm history content-editor
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
> `sm bump <node>` is the everyday versioning verb: it nudges the
|
|
268
|
-
> `version` field in the node's frontmatter up by one and appends an
|
|
269
|
-
> entry to that node's `.sm` companion file, recording that the bump
|
|
270
|
-
> happened. Because you already granted consent in the last chapter,
|
|
271
|
-
> it runs without prompting (the `.sm` write is pre-authorized for
|
|
272
|
-
> this checkout).
|
|
273
|
-
>
|
|
274
|
-
> `sm history <node>` reads that trail back: it prints the version
|
|
275
|
-
> entries skill-map has recorded for the content editor, so you can
|
|
276
|
-
> see how it has changed over time. Right after one bump you will see
|
|
277
|
-
> the single entry the bump just wrote.
|
|
278
|
-
>
|
|
279
|
-
> The two verbs are a pair: `sm bump` writes a version checkpoint into
|
|
280
|
-
> the companion file, `sm history` reads the checkpoints back out.
|
|
281
|
-
> Your `.md` body never gets cluttered with this, it all lives in the
|
|
282
|
-
> `.sm` alongside it.
|
|
283
|
-
>
|
|
284
|
-
> Does `sm history` show the bump you just made?
|
|
285
|
-
|
|
286
|
-
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).
|
|
285
|
+
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
|
|
1
|
+
# Part 8: MCP (step library, `mcp-*` ids)
|
|
2
2
|
|
|
3
|
-
This is a chapter apart,
|
|
4
|
-
`auto-advance`, preflight `
|
|
5
|
-
connected portfolio harness
|
|
6
|
-
|
|
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
|
|
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
|
|
@@ -13,9 +13,10 @@ which verbs reach which surface.
|
|
|
13
13
|
Before announcing the first step, verify the fixture is initialised
|
|
14
14
|
(the cwd has `.claude/agents/master-agent.md`,
|
|
15
15
|
`.claude/skills/master-skill/SKILL.md`, AND `.skill-map/` with
|
|
16
|
-
`settings.json` and `skill-map.db`).
|
|
17
|
-
`sm init --no-scan`
|
|
18
|
-
`.skillmapignore
|
|
16
|
+
`settings.json` and `skill-map.db`). The `extend` part's
|
|
17
|
+
`backstage-init` preflight ran `sm init --no-scan` to provision it;
|
|
18
|
+
the universal `.skillmapignore` from pre-flight keeps the tutorial's
|
|
19
|
+
own files out of the scan. If any of that is missing, surface the
|
|
19
20
|
bootstrap mismatch ("tutorial-state.yml says we are running, but
|
|
20
21
|
the bootstrap is missing. Re-run the tutorial from an empty dir or
|
|
21
22
|
restore the files.") and stop.
|
|
@@ -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
|
|
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 `
|
|
58
|
-
|
|
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
|
-
> `
|
|
72
|
-
>
|
|
73
|
-
>
|
|
74
|
-
>
|
|
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
|
|
|
@@ -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).
|
|
7
|
-
|
|
8
|
-
|
|
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.
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Part
|
|
1
|
+
# Part 6 (a): Extend skill-map - settings (step library, `settings-*` ids)
|
|
2
2
|
|
|
3
|
-
Step bodies for the settings chapters of Part
|
|
3
|
+
Step bodies for the settings chapters of Part 6 (config layers, the
|
|
4
4
|
`sm config` verbs, the active provider lens), plus the shared step
|
|
5
5
|
`settings-6-contributions` that the plugin-authoring chapters reuse.
|
|
6
6
|
The SKILL.md orchestrator dispatches each `settings-*` chapter id
|
|
@@ -14,9 +14,10 @@ system and the `sm config` verbs.
|
|
|
14
14
|
## Precondition check
|
|
15
15
|
|
|
16
16
|
Same as the authoring chapters: `.skill-map/` must exist in the
|
|
17
|
-
cwd (the
|
|
18
|
-
--no-scan`
|
|
19
|
-
|
|
17
|
+
cwd (the `extend` part's `backstage-init` preflight ran `sm init
|
|
18
|
+
--no-scan` to provision it; the universal `.skillmapignore` from
|
|
19
|
+
pre-flight keeps the tutorial's own files out of the scan, so this
|
|
20
|
+
is the expected state). If
|
|
20
21
|
`.skill-map/` is missing, surface the bootstrap mismatch and
|
|
21
22
|
stop, do not try to re-init mid-chapter.
|
|
22
23
|
|
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// cli/entry.ts
|
|
2
2
|
|
|
3
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
3
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ab2725f4-cc31-54b9-b0c4-0d9778b2143e")}catch(e){}}();
|
|
4
4
|
import { existsSync as existsSync33 } from "fs";
|
|
5
5
|
import { Builtins, Cli as Cli2 } from "clipanion";
|
|
6
6
|
|
|
@@ -246,7 +246,7 @@ function bucketByKind(kind, instance, bag) {
|
|
|
246
246
|
// package.json
|
|
247
247
|
var package_default = {
|
|
248
248
|
name: "@skill-map/cli",
|
|
249
|
-
version: "0.53.
|
|
249
|
+
version: "0.53.5",
|
|
250
250
|
description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
|
|
251
251
|
license: "MIT",
|
|
252
252
|
type: "module",
|
|
@@ -30251,4 +30251,4 @@ function resolveBareDefault() {
|
|
|
30251
30251
|
process.exit(ExitCode.Error);
|
|
30252
30252
|
}
|
|
30253
30253
|
//# sourceMappingURL=cli.js.map
|
|
30254
|
-
//# debugId=
|
|
30254
|
+
//# debugId=ab2725f4-cc31-54b9-b0c4-0d9778b2143e
|