@skill-map/cli 0.70.0 → 0.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/cli/tutorial/sm-tutorial/SKILL.md +2 -2
  2. package/dist/cli/tutorial/sm-tutorial/fixtures-data/manifest.json +1 -0
  3. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/codex/shared/CLAUDE.md +1 -0
  4. package/dist/cli/tutorial/sm-tutorial/references/_core.md +27 -20
  5. package/dist/cli/tutorial/sm-tutorial/references/_manifest.json +1 -1
  6. package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +3 -3
  7. package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +4 -1
  8. package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +0 -7
  9. package/dist/cli/tutorial/sm-tutorial/references/part-basic-daily.md +45 -22
  10. package/dist/cli/tutorial/sm-tutorial/references/part-basic-fundamentals.md +6 -13
  11. package/dist/cli/tutorial/sm-tutorial/references/part-basic-kickoff.md +19 -38
  12. package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +0 -4
  13. package/dist/cli/tutorial/sm-tutorial/references/part-daily-loop.md +0 -17
  14. package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +0 -4
  15. package/dist/cli/tutorial/sm-tutorial/references/part-mcp.md +4 -14
  16. package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +0 -8
  17. package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +5 -25
  18. package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +2 -10
  19. package/dist/cli/tutorial/sm-tutorial/scripts/fixtures.js +6 -3
  20. package/dist/cli.js +471 -241
  21. package/dist/index.js +109 -14
  22. package/dist/kernel/index.js +109 -14
  23. package/dist/ui/chunk-GKN3HN4R.js +3 -0
  24. package/dist/ui/index.html +1 -1
  25. package/dist/ui/{main-K4O6LCIJ.js → main-Z2OYMXNS.js} +1 -1
  26. package/package.json +2 -2
  27. package/dist/ui/chunk-RJUHQQOF.js +0 -3
  28. /package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/agent-skills/shared/{CLAUDE.md → README.md} +0 -0
  29. /package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/{shared → providers/claude/shared}/CLAUDE.md +0 -0
@@ -276,8 +276,8 @@ the `__PROVIDER__` token and skip kinds the provider does not claim.
276
276
  `rm -rf .skill-map`.
277
277
  2. Lay the portfolio boot (Express skeleton + handbook):
278
278
  `fixtures.js lay portfolio --only "AGENTS.md,server.js,package.json,public/index.html" --provider <provider> --lang <lang>`.
279
- The harness members (`CLAUDE.md`, `content-editor`, the docs) are
280
- laid by their own chapters.
279
+ The harness members (the entry pointer, `content-editor`, the docs)
280
+ are laid by their own chapters.
281
281
 
282
282
  The tester runs `sm init` in the first chapter. (Later campaign
283
283
  parts use `preflight: seed`; `portfolio-init` is Part 1's flavour,
@@ -19,6 +19,7 @@
19
19
  "portfolio": [
20
20
  "AGENTS.md",
21
21
  "CLAUDE.md",
22
+ "README.md",
22
23
  "server.js",
23
24
  "package.json",
24
25
  "AGENTS.sm",
@@ -21,9 +21,8 @@ Two numbering systems coexist; keep them apart:
21
21
  - **Internal (authoring only)**: the `order` field in `_manifest.yml`
22
22
  and the `# Part N` file headers, 0-based (Part 0 the prologue …
23
23
  Part 3 the CLI deep-dive, Part 4 the Extend dev section; `mcp` at Part 5 is parked / hidden). Use it
24
- in `**Context**:` blocks and author
25
- notes; NEVER say it to the tester, it is off by one from what they
26
- see.
24
+ in author notes; NEVER say it to the tester, it is off by one from
25
+ what they see.
27
26
  - **Tester-facing (`S.N`)**: every part is a **section** numbered by
28
27
  its 1-based position in the menu (section `1` is the prologue), and
29
28
  every chapter inside it carries a `section.chapter` number like a
@@ -160,9 +159,9 @@ documented exceptions to "all prose is quoted" are the plain
160
159
  with `> `, keep that prefix verbatim (Claude mode). Do NOT strip
161
160
  `> ` on short intro lines, do NOT merge adjacent blockquote
162
161
  paragraphs into plain prose. The source already encodes which lines
163
- are tester-facing (`> `-prefixed) vs agent-only (plain prose in
164
- `**Context**:` blocks, `Expected:` lines, `Mark <chapter-id>: done`
165
- markers, "Walk the tester through …" meta instructions). Render the
162
+ are tester-facing (`> `-prefixed) vs agent-only (plain prose,
163
+ `Expected:` lines, `Mark <chapter-id>: done` markers, "Walk the
164
+ tester through …" meta instructions). Render the
166
165
  first kind quoted, the second kind never.
167
166
 
168
167
  ### Language mirroring + fixture content
@@ -178,6 +177,15 @@ first kind quoted, the second kind never.
178
177
  English regardless**: file paths and filenames, frontmatter keys,
179
178
  node identifiers, link target paths inside `[...]( ... )`, code
180
179
  snippets, fenced blocks, anything the kernel parses structurally.
180
+ - **Copyable blocks are byte-exact**: when you render a fenced block
181
+ the tester copies verbatim (a `SKILL.md` / command body, a config
182
+ snippet), reproduce it line for line, preserving every line break,
183
+ indentation level, and tab. NEVER soft-wrap a long line, and in
184
+ particular NEVER let a newline fall inside a markdown link: the
185
+ `[text](path)` token, above all the `(path)` half, must stay on one
186
+ physical line. A break inside the path (`(../content-` then a newline
187
+ then `editor/SKILL.md)`) splits it, the link stops resolving, and no
188
+ arrow is drawn.
181
189
  - **No em dashes** in tester-facing prose: prefer a comma or
182
190
  parentheses (project-wide style).
183
191
 
@@ -260,7 +268,7 @@ A skill-map project reads its files through exactly ONE active lens
260
268
  |----------------|-------------------------------------------|--------------------------------|--------------------------------|--------------------|------------------|---------|
261
269
  | `claude` | `.claude/` (agents, commands, skills) | agent, command, skill, markdown| `/` invokes, `@` mentions, refs| `.claude/` | stable | rich |
262
270
  | `codex` | `.codex/agents/*.toml` + `.agents/skills/`| agent (TOML), skill, markdown | `$` invokes, `@` file-refs, refs| `.codex/` | beta | rich |
263
- | `antigravity` | `.agents/skills/` | skill, markdown | `/` invokes, refs | `.agent/workflows/`| beta | basic |
271
+ | `antigravity` | `.agents/skills/` + `.agent/workflows/` | skill, workflow, markdown | `/` invokes, `@` file-refs, refs | `.agent/workflows/`| beta | basic |
264
272
  | `agent-skills` | `.agents/skills/` | skill, markdown | refs only | `.agents/` | stable (default) | basic |
265
273
 
266
274
  `core/markdown` classifies every orphan `.md` under whatever lens is
@@ -275,11 +283,17 @@ active; it is the universal base, never a selectable lens.
275
283
  mention an agent by name, and `/` is a Codex built-in command, not a skill
276
284
  invocation). Both also use markdown references.
277
285
  - **basic** (`agent-skills`, `antigravity`): the open-standard family,
278
- `skill` + `markdown` only, wired with **markdown references**
286
+ built on `skill` + `markdown` and wired with **markdown references**
279
287
  (`[text](path)`), the one connection the Agent Skills standard
280
- documents. No `@`. `/` invocation is an Antigravity-only bonus, it is
281
- NOT part of the neutral standard, so under the `agent-skills` lens only
282
- references form.
288
+ documents. They diverge on what Antigravity bolts on top of the
289
+ standard: `agent-skills` is the pure subset (skill + markdown,
290
+ references only, no `@`), while `antigravity` adds its OWN `workflow`
291
+ kind (`.agent/workflows/*.md`), `/`-invocation (the slash resolves to
292
+ both skills and workflows), and `@`-file references (a file-shaped
293
+ `@path` token, the same file-picker grammar Codex uses, distinct from
294
+ Claude's `@`-agent-mention). That slash, the `workflow` kind, and the
295
+ `@`-file refs are Antigravity-only, NOT part of the neutral standard,
296
+ so under the `agent-skills` lens only markdown references form.
283
297
 
284
298
  Why references and not slash on the open standard: the Agent Skills
285
299
  spec (agentskills.io) activates a skill by its `description` and
@@ -398,15 +412,8 @@ For every chapter:
398
412
  the chapter inside that part, resetting per part (§Numbering), so
399
413
  section 5's third chapter announces as `Capítulo 5.3`. The title
400
414
  comes from the chapter's `title` in `_manifest.yml` (translated per
401
- §Tone), not the internal id. When the source has a `**Context**:`
402
- field, follow the announcement with one tester-facing sentence of
403
- context, and render it **under the `> ` bar as the opening line of
404
- the SAME blockquote as the chapter's instructions** (Claude variant:
405
- put `>` on the blank line between the context and the instructions
406
- so they read as one continuous separator bar, never two stacked
407
- blocks; the context line is tester-facing, so it is never plain
408
- prose). When the source has no `**Context**:` field, announce the
409
- title alone.
415
+ §Tone), not the internal id. Announce the title alone, then go
416
+ straight into the chapter's instructions.
410
417
  2. **Preparation** (if applicable): create or modify the fixture
411
418
  files the chapter calls for (silently, per §Silence).
412
419
  3. **The tester's part**: the command block(s) and instructions,
@@ -289,7 +289,7 @@
289
289
  {
290
290
  "id": "reserved",
291
291
  "title": "A reserved name collides",
292
- "est_min": 2
292
+ "est_min": 4
293
293
  },
294
294
  {
295
295
  "id": "publish",
@@ -170,10 +170,10 @@ parts:
170
170
  - id: stability ; title: "Set a node's stability (and the `.sm` sidecar)" ; est_min: 3
171
171
  - id: golive ; title: "Your website, live next to the graph" ; est_min: 3
172
172
 
173
- # ----- the basic-track campaign (open-standard family: agent-skills / antigravity) -----
173
+ # ----- the basic-track campaign (the Agent Skills open standard; vendors like Antigravity build on it) -----
174
174
  # Mirrors the rich campaign arc with skill + markdown only, connected by
175
175
  # markdown references. Same fixtures (portfolio / harness) laid under the
176
- # basic provider, which renders the agent/command nodes as skills.
176
+ # `agent-skills` lens, which renders the agent/command nodes as skills.
177
177
 
178
178
  - id: basic-kickoff
179
179
  order: 1
@@ -209,7 +209,7 @@ parts:
209
209
  - id: setup ; title: "Make it yours and bring it up" ; est_min: 4
210
210
  - id: add-page ; title: "Add a page with your skill" ; est_min: 3
211
211
  - id: broken-ref ; title: "A rename breaks a link" ; est_min: 3
212
- - id: reserved ; title: "A reserved name collides" ; est_min: 2
212
+ - id: reserved ; title: "A reserved name collides" ; est_min: 4
213
213
  - id: publish ; title: "Ship it: run the publish skill for real" ; est_min: 3
214
214
  - id: stability ; title: "Set a node's stability (and the `.sm` sidecar)" ; est_min: 3
215
215
  - id: golive ; title: "Your website, live next to the graph" ; est_min: 3
@@ -12,8 +12,11 @@ model; the per-chapter invocations live in each `part-*.md`.
12
12
  fixtures-data/
13
13
  manifest.json sets, footprints, edits, seeds, providerToken, langs
14
14
  sets/<set>/
15
- shared/ lang-invariant files (code: server.js, package.json, CLAUDE.md)
15
+ shared/ lang-invariant files (code: server.js, package.json)
16
16
  en/ es/ one tree per language (files with translatable prose)
17
+ providers/<provider>/ per-lens overlay (shared/ + en/ es/); e.g. the root
18
+ entry pointer is CLAUDE.md on claude/codex,
19
+ README.md on agent-skills/antigravity
17
20
  edits/<edit-id>/
18
21
  en/ es/ append fragments (one file per fragment)
19
22
  ```
@@ -21,13 +21,6 @@ gone, re-invoke the tutorial from an empty dir") and stop.
21
21
 
22
22
  ## Step `authoring-1-scaffold` - `sm plugins create extractor demo-highlight` (~2 min)
23
23
 
24
- **Context**: We're building `demo-highlight`: a tiny extractor
25
- that scans each node's body for the keywords `TODO` and `FIXME`
26
- and shows the count as a chip on the node card. The scaffolder
27
- emits a working version of it; over the next steps we'll tweak
28
- its setting, move the chip to a different slot, and break the
29
- manifest on purpose to see the diagnostic catch it.
30
-
31
24
  > Let's scaffold it with `sm plugins create`:
32
25
 
33
26
  ```bash
@@ -34,11 +34,6 @@ has NO `sm scan` / `sm check` steps: the watcher re-scans on every save.
34
34
 
35
35
  ## Chapter `setup` - Make it yours and bring it up (~5 min)
36
36
 
37
- **Context**: the harness is wired. Now put it to work on a real day. First make
38
- the site yours, about whatever you like, then serve it. The HTML and
39
- CSS are Layer 2 (the harness's output); skill-map maps the harness (Layer 1, the
40
- `.md` files), so the site landing on disk does NOT move the graph.
41
-
42
37
  **Preparation**:
43
38
  1. Ask the tester the two questions straight, with no "before we build, let's
44
39
  make it yours" lead-in: what the site should be called and one line about what
@@ -114,10 +109,6 @@ Wait for confirmation. Mark `add-page`: done. Auto-advance to `broken-ref`.
114
109
 
115
110
  ## Chapter `broken-ref` - A rename breaks a link (~4 min)
116
111
 
117
- **Context**: the daily safety net, and where skill-map earns its keep: rename and
118
- move things freely, and skill-map shows you exactly what you forgot to update
119
- before it ships broken.
120
-
121
112
  **Preparation**: none (the tester drives). Everything is watched live.
122
113
 
123
114
  Tell the tester to free the third terminal, then rename the deploy runbook
@@ -147,7 +138,7 @@ mv docs/DEPLOY.md docs/DEPLOYMENT.md
147
138
  Wait for confirmation. The harness MUST be clean again before Act C. Mark
148
139
  `broken-ref`: done. Auto-advance to `reserved`.
149
140
 
150
- ## Chapter `reserved` - A reserved name collides (~2 min)
141
+ ## Chapter `reserved` - A reserved name collides (~4 min)
151
142
 
152
143
  **Preparation**: `Write` `<provider_dir>/model/SKILL.md`:
153
144
  ```markdown
@@ -178,15 +169,51 @@ The watcher picks up the new skill. Tell the tester:
178
169
  >
179
170
  > See the `model` node land clean, with no warning?
180
171
 
181
- Wait for confirmation. Mark `reserved`: done. Auto-advance to `publish`.
172
+ Wait for confirmation.
173
+
174
+ **Beat 2, prove the vendor exception by switching the lens (hands-on).** First
175
+ `Write` `<provider_dir>/goal/SKILL.md` (a skill named after the Antigravity
176
+ built-in verb `goal`):
177
+
178
+ ```markdown
179
+ ---
180
+ name: goal
181
+ description: |
182
+ Captures a goal for the site and tracks it to done.
183
+ ---
184
+
185
+ # goal
182
186
 
183
- **Antigravity delta** (`tutorial.provider == antigravity`): skills ARE
184
- `/`-invoked here, so a built-in verb DOES collide. Name the skill `goal` (an
185
- Antigravity built-in) instead of `model`, narrate the `name-reserved`
186
- **warning** that appears, and have the tester clear it by renaming the folder +
187
- `frontmatter.name` to `new-page` (the warning clears live). That collision-and-
188
- fix beat is the Antigravity version; `agent-skills` gets the "names are free"
189
- lesson above.
187
+ Notes a goal and checks it off when shipped.
188
+ ```
189
+
190
+ The watcher adds it clean (on your open-standard lens `goal` is just a name). The
191
+ agent does NOT touch settings (Inviolable rule #2); the tester drives the
192
+ Settings UI. Tell the tester:
193
+
194
+ > Now let's make that warning real by switching the lens. I added one more skill,
195
+ > `goal`, an Antigravity built-in verb. On your open standard it landed clean,
196
+ > same as `model`.
197
+ >
198
+ > Open **Settings** (the sliders icon, top right) and the **Project** tab. Find
199
+ > **Active provider** and switch it from the open standard to **Google's
200
+ > Antigravity**, then confirm. skill-map clears the old lens's scan, so the Map
201
+ > goes quiet; click the **refresh** button (the sync icon in the topbar) to
202
+ > re-scan under the new lens.
203
+ >
204
+ > Watch the Map: `goal` now wears a **`name-reserved`** warning (under Antigravity
205
+ > `/goal` is a built-in command, so your skill would be shadowed), while `model`
206
+ > stays clean (it is not one of Antigravity's verbs). Same files, different lens:
207
+ > the lens decides what is reserved.
208
+ >
209
+ > Now switch **Active provider** back to the open standard, confirm, and click
210
+ > refresh once more. The warning on `goal` clears, you are back on the neutral
211
+ > standard that reserves nothing.
212
+ >
213
+ > Did the warning appear under Antigravity and clear when you switched back?
214
+
215
+ Wait for confirmation. The lens MUST be back on the open standard before
216
+ continuing. Mark `reserved`: done. Auto-advance to `publish`.
190
217
 
191
218
  ---
192
219
 
@@ -194,10 +221,6 @@ lesson above.
194
221
 
195
222
  ## Chapter `publish` - Ship it: run the publish skill for real (~4 min)
196
223
 
197
- **Context**: the publish flow only earns its keep when something is actually
198
- wrong, so first you plant a real bug in the site, then watch the publish skill
199
- catch and fix it for real.
200
-
201
224
  **Preparation**: make sure the pages exist (`index`, `about`, `projects`).
202
225
 
203
226
  This chapter has two beats: the tester breaks a link in the HTML first, then runs
@@ -1,7 +1,9 @@
1
1
  # Part 0 (basic track): The live map (prologue) - step library
2
2
 
3
- The live-UI prologue for the **basic track** (the open-standard family:
4
- `agent-skills`, `antigravity`). Same arc as the rich prologue, the tester runs
3
+ The live-UI prologue for the **basic track**: the **Agent Skills open
4
+ standard** (the `agent-skills` lens; vendors like Antigravity build on it and
5
+ add their own extras, which this book does not teach). Same arc as the rich
6
+ prologue, the tester runs
5
7
  `sm init`, opens the browser, and watches the map update in real time, but this
6
8
  lens authors only **skills** and **markdown notes**, and assets connect by
7
9
  **markdown references** (`[text](path)`), the one link the Agent Skills standard
@@ -126,8 +128,8 @@ You edit `notes/todo.md` so it becomes the **hub** that points to the other
126
128
  nodes. On this lens there is exactly one connector: the **markdown reference**.
127
129
  A bullet links to another file with `[label](relative/path)`; skill-map reads
128
130
  that as a `references` link and draws an arrow when the target resolves to a
129
- real file. (The rich track also has `/`-invokes and `@`-mentions; the open
130
- standard connects by file links only, and that is all this lens emits.)
131
+ real file. (Wiring everything with file links keeps the harness portable: a
132
+ reference resolves the same way on any runtime that speaks the open standard.)
131
133
 
132
134
  Apply the hub bullets (content lives in `fixtures-data/`). The edit appends
133
135
  three bullets after the `# Pending` heading. Backstage (silent):
@@ -196,11 +198,6 @@ Mark `inspector`: done.
196
198
 
197
199
  ## Chapter `edit-link` - Edit a link, the topology changes (~3 min)
198
200
 
199
- **Context**: `first-edit` changed a scalar and watched a card refresh. This
200
- chapter edits the markdown links and watches the MAP TOPOLOGY change both ways,
201
- a connector disappears when you remove a link, and a new one appears (clearing
202
- the broken-reference error) when you fix the unresolved one.
203
-
204
201
  The server has been live since `init`, leave it running; this chapter and the
205
202
  next two reuse it.
206
203
 
@@ -232,10 +229,6 @@ You verify by reading `notes/todo.md` (the `demo-skill` bullet gone, the
232
229
 
233
230
  ## Chapter `workspace` - Navigate the workspace (files, search, isolate) (~2 min)
234
231
 
235
- **Context**: you've built the graph and understood it; this beat is about
236
- *moving around* it. The workspace has two halves: the **Map**, and a **Files**
237
- panel (a folder tree of every node). The same `sm` session is still running.
238
-
239
232
  Walk the three actions one at a time (open the Files panel, search, isolate);
240
233
  each ends with its own confirmation. Do NOT prepend an intro line to a block.
241
234
 
@@ -1,7 +1,8 @@
1
1
  # Part 1 (basic track): The harness from zero (step library, `kickoff-*` ids)
2
2
 
3
- The campaign turns real here for the **basic track** (the open-standard family:
4
- `agent-skills`, `antigravity`). After the abstract prologue, the tester starts an
3
+ The campaign turns real here for the **basic track**: the **Agent Skills open
4
+ standard** (the `agent-skills` lens; vendors like Antigravity build on it).
5
+ After the abstract prologue, the tester starts an
5
6
  actual project: a tiny personal **portfolio website**, fully static, served by a
6
7
  ~15-line Express server, plus the `.agents/skills/` **harness** that maintains
7
8
  it. skill-map maps the harness (the `.md` assets and how they reference each
@@ -22,9 +23,6 @@ The chapters grow the harness from there.
22
23
 
23
24
  ## Chapter `kickoff` - Start the portfolio (~2 min)
24
25
 
25
- **Context**: same `sm init` from the prologue, now on a real project. The map
26
- shows the project's harness, not throwaway demo nodes.
27
-
28
26
  If the prologue (`basic-fundamentals`) ran first here, `portfolio-init` already
29
27
  cleared the demo fixture during pre-flight, so the tester sees only the
30
28
  portfolio. If anything demo lingers, mention it once and move on.
@@ -59,21 +57,16 @@ Wait for confirmation. Mark `kickoff`: done.
59
57
 
60
58
  ## Chapter `manual` - The handbook and an entry pointer (~2 min)
61
59
 
62
- **Context**: the first connector on the real project. A project often keeps a
63
- short entry file that points readers (and tools) at the handbook. On this lens
64
- that pointer is a plain **markdown link**, the only connector the open standard
65
- defines, and it is the tester's first real reference here.
66
-
67
60
  Tell the tester to create the file themselves (their project's file, Inviolable
68
61
  rule #2):
69
62
 
70
- > Create a file called `CLAUDE.md` at the project root with exactly this content:
63
+ > Create a file called `README.md` at the project root with exactly this content:
71
64
  >
72
65
  > ```markdown
73
66
  > See the [handbook](AGENTS.md).
74
67
  > ```
75
68
  >
76
- > Save it. Watch the map: a new `CLAUDE.md` node appears with a `references`
69
+ > Save it. Watch the map: a new `README.md` node appears with a `references`
77
70
  > connector pointing at `AGENTS.md`, solid at 1.00. The markdown link
78
71
  > `[handbook](AGENTS.md)` is a file pointer (the same kind of reference you met
79
72
  > in the prologue), and since the handbook is right there the link resolves with
@@ -110,11 +103,6 @@ Wait for confirmation. Mark `first-skill`: done.
110
103
 
111
104
  ## Chapter `real-kinds` - The kinds in context (~2 min)
112
105
 
113
- **Context**: the prologue showed this lens's two kinds on abstract demo nodes.
114
- Now name them on the real project, and add the two markdown docs the harness
115
- references later (the style guide and the deploy runbook), so the daily loop's
116
- maintenance beats have something to point at.
117
-
118
106
  Lay the two docs (content lives in `fixtures-data/`). Backstage (silent):
119
107
 
120
108
  ```
@@ -129,7 +117,7 @@ Tell the tester:
129
117
  > front of you:
130
118
  >
131
119
  > - **skill**: `content-editor` (does work on your behalf).
132
- > - **markdown**: `AGENTS.md`, `CLAUDE.md`, the two docs (plain notes and
120
+ > - **markdown**: `AGENTS.md`, `README.md`, the two docs (plain notes and
133
121
  > manuals).
134
122
  >
135
123
  > Your lens authors exactly these two; Claude and Codex projects add `agent` and
@@ -142,10 +130,6 @@ Wait for confirmation. Mark `real-kinds`: done.
142
130
 
143
131
  ## Chapter `check-links` - The link checker (~3 min)
144
132
 
145
- **Context**: the harness needs a guard that runs before publishing, a skill that
146
- checks the site's internal links resolve before it ships. We only create the
147
- `skill` node here; the `publish` skill in the next chapter is what calls it.
148
-
149
133
  Lay the `check-links` skill (content lives in `fixtures-data/`). Backstage
150
134
  (silent):
151
135
 
@@ -164,15 +148,14 @@ Wait for confirmation. Mark `check-links`: done.
164
148
 
165
149
  ## Chapter `publish` - The publish skill (~4 min)
166
150
 
167
- **Context**: the chapter where the graph comes alive. The `publish` skill ties
168
- three pieces together in one body: it points at the link checker, at the content
169
- editor, and at the deploy runbook. On this lens all three are **markdown
170
- references**, so three reference arrows light up from a single new node.
171
-
172
151
  Tell the tester to create the file themselves (Inviolable rule #2). Render the
173
152
  block as a **top-level fenced code block** at column 0, NOT inside the `> `
174
153
  blockquote, so the frontmatter fences (`---`) land on column 0 (indented fences
175
- never parse, and `sm check` then warns `frontmatter-malformed`).
154
+ never parse, and `sm check` then warns `frontmatter-malformed`). Emit every line
155
+ verbatim: never soft-wrap, and never let a newline fall inside a `[text](path)`
156
+ link, a break inside the `(path)` splits it (`(../content-editor/SKILL.md)` must
157
+ stay on one line) and the link stops resolving (see `_core.md` §Language
158
+ mirroring + fixture content).
176
159
 
177
160
  > Create `<provider_dir>/publish/SKILL.md` with exactly this content (the first
178
161
  > line is `---`, nothing before it):
@@ -205,10 +188,10 @@ Continue the tester message:
205
188
  > - `publish -> content-editor` (the `[content-editor](../content-editor/SKILL.md)` link)
206
189
  > - `publish -> docs/DEPLOY.md` (the `[deploy runbook](../../../docs/DEPLOY.md)` link)
207
190
  >
208
- > One node, three connectors, all references. On a vendor lens (claude/codex) the
209
- > first two would be a `/`-invoke and an `@`-mention; the open standard wires
210
- > everything with file links, and that is all this lens emits. The harness is
211
- > starting to look like a real graph.
191
+ > One node, three connectors, all references. Wiring the whole harness with
192
+ > markdown file links keeps it portable: each reference resolves the same way on
193
+ > any runtime that speaks the open standard. The harness is starting to look
194
+ > like a real graph.
212
195
  >
213
196
  > 💡 Tip: to tidy the layout, click **Re-arrange layout** in the map toolbar.
214
197
  >
@@ -220,10 +203,6 @@ indented on paste, re-align every line flush left). Mark `publish`: done.
220
203
 
221
204
  ## Chapter `links` - The handbook becomes the hub (~4 min)
222
205
 
223
- **Context**: the handbook (`AGENTS.md`) has been a lonely node since the start of
224
- this part. Here it becomes the hub: two bullets point it at the content editor
225
- and the publish skill. We also give the content editor a reference to the style guide it follows.
226
-
227
206
  Apply both edits (content lives in `fixtures-data/`). The first appends two hub
228
207
  bullets (markdown links) to `AGENTS.md`; the second adds the style-guide
229
208
  reference to the content-editor skill. Backstage (silent):
@@ -275,8 +254,10 @@ Tell the tester:
275
254
  > file, and it drew a solid arrow at **1.00**.
276
255
  >
277
256
  > **IMPORTANT:** why does confidence matter? It mirrors how an agent resolves a
278
- > reference, a deterministic name-and-path lookup, no guessing. That is cheaper
279
- > and does not fail, the same reason a clean, well-named harness is worth keeping.
257
+ > reference, a deterministic name-and-path lookup, no guessing. A link that does
258
+ > not resolve sends the agent guessing and retrying, which burns time and tokens;
259
+ > a deterministic one is cheaper and does not fail, the same reason a clean,
260
+ > well-named harness is worth keeping.
280
261
  >
281
262
  > Do you see every badge reading 1.00 in the Inspector?
282
263
 
@@ -67,8 +67,6 @@ Mark `issues`: done.
67
67
 
68
68
  ## Chapter `annotations` - Annotations and the .sm consent prompt (~3 min)
69
69
 
70
- **Context**: skill-map keeps each tracked `.md`'s metadata (version, history, tags, annotations) in a sibling **`.sm` companion file** so the `.md` stays clean, and the first time it writes one in a project it asks for consent (remembered in the gitignored `settings.local.json`). The Maintain part walks that consent flow in full; this chapter does not re-teach it. The CLI focus here is what Maintain does not cover: the **three sidecar verbs** and the `--yes` non-interactive switch. A tester who jumped straight here gets a one-line refresher in the demo below.
71
-
72
70
  Create a scaffold for `notes/todo.md` so there is a `.sm` on disk to talk about. **Reset any prior consent state first** so the prompt appears (an earlier step may have flipped the flag, in which case the verb skips straight past it):
73
71
 
74
72
  ```bash
@@ -90,8 +88,6 @@ Mark `annotations`: done.
90
88
 
91
89
  ## Chapter `reference-paths` - Validate links to folders outside the scan scope (~4 min)
92
90
 
93
- **Context**: until now the map saw only files inside the cwd. In real projects a repo often links to files in a sibling repo (a specs project, a sibling package in a monorepo). Skill-map only scans from its cwd downwards, so a link to `../sibling/file.md` shows up as broken. The fix is to declare the external folders in `scan.referencePaths`, which lets the `reference-broken` analyzer validate path-style links against those extra roots **without indexing their files as nodes**. The folders are checked, not walked as part of the map.
94
-
95
91
  **Setup (you, silent)**: lay the fixture under the tutorial cwd so both sub-projects are siblings of each other but children of the tutorial root (its content + translation live in `fixtures-data/`). No confirmation beat needed, the tester learns about the files in the next message. Backstage (silent):
96
92
 
97
93
  ```
@@ -125,15 +125,6 @@ broken-reference markers, and confidence live.
125
125
 
126
126
  ## Chapter `setup` - Make it yours and bring it up (~5 min)
127
127
 
128
- **Context**: the harness is wired (you built it in the earlier parts). Now you
129
- put it to work on a real day. First, make the site yours, about whatever you
130
- like, then serve it and open it in the browser, the early payoff before the
131
- daily loop fills it with pages. The honest beat: the HTML
132
- and CSS are Layer 2 (the harness's output); skill-map maps the harness (Layer 1,
133
- the `.md` files), so the site landing on disk does NOT move the graph, and that
134
- is correct, not a bug. The tester runs the serve commands themselves (one of the
135
- few non-`sm` beats); guide them, do not run them.
136
-
137
128
  **Preparation**:
138
129
 
139
130
  1. Ask the tester the two questions straight, with no "before we build, let's
@@ -326,10 +317,6 @@ Wait for confirmation. Mark `add-page`: done. Auto-advance to `broken-ref`.
326
317
 
327
318
  ## Chapter `broken-ref` - A rename breaks a link (~4 min)
328
319
 
329
- **Context**: the daily safety net, and where skill-map earns its keep: rename and
330
- move things freely, and skill-map shows you exactly what you forgot to update
331
- before it ships broken.
332
-
333
320
  **Preparation**: none (the tester drives). Everything here is watched live on
334
321
  the Map; no `sm` commands.
335
322
 
@@ -405,10 +392,6 @@ Wait for confirmation. Mark `reserved`: done. Auto-advance to `publish`.
405
392
 
406
393
  ## Chapter `publish` - Ship it: run /publish for real (~4 min)
407
394
 
408
- **Context**: the publish flow only earns its keep when something is actually
409
- wrong, so first you plant a real bug in the site, then watch `/publish` catch and
410
- fix it for real.
411
-
412
395
  **Preparation**: make sure the pages exist (`index`, `about`, `projects` from the
413
396
  earlier chapters; lay any that are missing from the templates in `setup`).
414
397
 
@@ -200,8 +200,6 @@ Mark `inspector`: done.
200
200
 
201
201
  ## Chapter `edit-link` - Edit a link, the topology changes (~3 min)
202
202
 
203
- **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.
204
-
205
203
  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.
206
204
 
207
205
  > Your turn. Edit `notes/todo.md` with your editor of choice and
@@ -232,8 +230,6 @@ You verify by reading `notes/todo.md` to confirm both edits landed (the `@demo-a
232
230
 
233
231
  ## Chapter `workspace` - Navigate the workspace (files, search, isolate) (~2 min)
234
232
 
235
- **Context**: you've built the graph and understood it; this beat is about *moving around* it. The workspace has two halves: the **Map** you've been working in, and a **Files** panel, a folder tree of every node. You'll open that tree and filter it with the search box. The same `sm` session you booted back in the `init` chapter is still running.
236
-
237
233
  Walk the three tester actions below one at a time (open the Files
238
234
  panel, then search, then isolate); each ends with its own
239
235
  confirmation, so present one and wait for the tester before the next.
@@ -12,20 +12,10 @@ only. Shared conventions live in `_core.md`.
12
12
 
13
13
  ## Chapter `mcp-node` - The agent reaches for an MCP tool (~3 min)
14
14
 
15
- **Context**: until now every node on the map has been a file you can
16
- open. This chapter introduces a node that is NOT a file: an MCP
17
- server the `content-editor` agent calls. MCP (Model Context
18
- Protocol) is the standard way an agent reaches an external tool, and
19
- Claude names those tools `mcp__<server>__<tool>` in an agent's
20
- frontmatter. When the agent declares it uses `mcp__images__search`
21
- (an image-search tool, so it can find art for the pages), skill-map's
22
- `core/mcp-tools` extractor reads that declaration and draws a
23
- virtual `mcp://images` node plus a `references` link from
24
- content-editor to it. The link confidence is around 0.85 (high, but
25
- not the 1.00 of a markdown link to a real file, because the target is
26
- an external service, not a file on disk). If several harness members
27
- named the same server, skill-map would draw a single shared
28
- `mcp://images` node, not one per caller.
15
+ Agent note (not narrated, the demo only adds one tool so it never
16
+ manifests here): if several harness members named the same MCP
17
+ server, skill-map draws ONE shared `mcp://images` node, not one per
18
+ caller.
29
19
 
30
20
  **Preparation**: `Edit` `.claude/agents/content-editor.md`. Do NOT
31
21
  rewrite the file. Change only the `tools:` line in the frontmatter so
@@ -23,10 +23,6 @@ restore the files.") and stop.
23
23
 
24
24
  ## Step `tour-1-intro` - how plugins work (~4 min)
25
25
 
26
- **Context**: A short tour of what a plugin is, how it groups
27
- extensions, and a peek at the five plugins that ship
28
- pre-installed.
29
-
30
26
  > Plugins are how skill-map gets extended. A **plugin** is the
31
27
  > deployable unit: one directory with a `plugin.json` manifest and
32
28
  > the extension code. It groups one or more **extensions**, the
@@ -130,10 +126,6 @@ Mark `tour-2-kinds: done`.
130
126
 
131
127
  ## Step `tour-3-explore` - explore one extension up close (~4 min)
132
128
 
133
- **Context**: Drill into a single extension to see its detail,
134
- run the diagnostic, then toggle one off and back on so you see
135
- the change persists.
136
-
137
129
  > Pick one extension and look at its details. We'll use
138
130
  > `core/external-url-counter`, an extractor that counts how many
139
131
  > external URLs each node body contains: