@skill-map/cli 0.67.0 → 0.68.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/cli/tutorial/sm-tutorial/SKILL.md +30 -23
  2. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/agents-hub/providers/agent-skills/en/agents-hub.md +2 -0
  3. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/agents-hub/providers/agent-skills/es/agents-hub.md +2 -0
  4. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/content-editor-style/providers/agent-skills/en/content-editor-style.md +1 -0
  5. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/content-editor-style/providers/agent-skills/es/content-editor-style.md +1 -0
  6. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/agent-skills/en/todo-bullet-guideline.md +1 -0
  7. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/agent-skills/en/todo-bullet-guideline2.md +1 -0
  8. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/agent-skills/en/todo-bullet-skill.md +1 -0
  9. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/agent-skills/es/todo-bullet-guideline.md +1 -0
  10. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/agent-skills/es/todo-bullet-guideline2.md +1 -0
  11. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/agent-skills/es/todo-bullet-skill.md +1 -0
  12. package/dist/cli/tutorial/sm-tutorial/fixtures-data/manifest.json +9 -4
  13. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/providers/agent-skills/en/__PROVIDER__/skills/publish/SKILL.md +15 -0
  14. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/providers/agent-skills/es/__PROVIDER__/skills/publish/SKILL.md +16 -0
  15. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/providers/codex/en/__PROVIDER__/skills/publish/SKILL.md +15 -0
  16. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/providers/codex/es/__PROVIDER__/skills/publish/SKILL.md +16 -0
  17. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/providers/agent-skills/en/__PROVIDER__/skills/master-agent/SKILL.md +13 -0
  18. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/providers/agent-skills/es/__PROVIDER__/skills/master-agent/SKILL.md +14 -0
  19. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/providers/codex/en/.codex/agents/master-agent.toml +10 -0
  20. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/providers/codex/es/.codex/agents/master-agent.toml +10 -0
  21. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/agent-skills/en/AGENTS.md +7 -0
  22. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/agent-skills/en/__PROVIDER__/skills/content-editor/SKILL.md +20 -0
  23. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/agent-skills/es/AGENTS.md +7 -0
  24. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/agent-skills/es/__PROVIDER__/skills/content-editor/SKILL.md +20 -0
  25. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/agent-skills/shared/CLAUDE.md +1 -0
  26. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/codex/en/.codex/agents/content-editor.toml +19 -0
  27. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/codex/es/.codex/agents/content-editor.toml +19 -0
  28. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/providers/codex/en/.codex/agents/demo-agent.toml +13 -0
  29. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/providers/codex/en/__PROVIDER__/skills/demo-command/SKILL.md +11 -0
  30. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/providers/codex/es/.codex/agents/demo-agent.toml +13 -0
  31. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/providers/codex/es/__PROVIDER__/skills/demo-command/SKILL.md +12 -0
  32. package/dist/cli/tutorial/sm-tutorial/references/_core.md +102 -49
  33. package/dist/cli/tutorial/sm-tutorial/references/_manifest.json +168 -20
  34. package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +85 -19
  35. package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +6 -7
  36. package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +2 -2
  37. package/dist/cli/tutorial/sm-tutorial/references/part-basic-daily.md +241 -0
  38. package/dist/cli/tutorial/sm-tutorial/references/part-basic-fundamentals.md +351 -0
  39. package/dist/cli/tutorial/sm-tutorial/references/part-basic-kickoff.md +285 -0
  40. package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +1 -1
  41. package/dist/cli/tutorial/sm-tutorial/references/part-daily-loop.md +62 -99
  42. package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +35 -34
  43. package/dist/cli/tutorial/sm-tutorial/references/part-mcp.md +3 -6
  44. package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +1 -1
  45. package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +198 -26
  46. package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +19 -15
  47. package/dist/cli/tutorial/sm-tutorial/scripts/fixtures.js +85 -22
  48. package/dist/cli/tutorial/sm-tutorial/scripts/lib/paths.js +74 -4
  49. package/dist/cli/tutorial/sm-tutorial/scripts/state.js +22 -6
  50. package/dist/cli.js +409 -168
  51. package/dist/conformance/index.js +42 -2
  52. package/dist/index.js +43 -30
  53. package/dist/kernel/index.d.ts +28 -5
  54. package/dist/kernel/index.js +43 -30
  55. package/dist/ui/chunk-22EQLC23.js +1845 -0
  56. package/dist/ui/chunk-3ANNEMV4.js +499 -0
  57. package/dist/ui/{chunk-5BJGO7GH.js → chunk-3U4QZKU2.js} +4 -4
  58. package/dist/ui/chunk-3ZAHOYQ7.js +1 -0
  59. package/dist/ui/{chunk-56CBK7LB.js → chunk-6FGV5O5J.js} +1 -1
  60. package/dist/ui/chunk-7WMT2LX4.js +1 -0
  61. package/dist/ui/{chunk-276RLZR4.js → chunk-BSIR3ADF.js} +14 -14
  62. package/dist/ui/{chunk-FC22ZJQZ.js → chunk-CG25RHMO.js} +1 -1
  63. package/dist/ui/chunk-EFSC6SOL.js +3 -0
  64. package/dist/ui/chunk-EJVWTBMV.js +4 -0
  65. package/dist/ui/chunk-EZI3BXQN.js +1 -0
  66. package/dist/ui/{chunk-JZ2YF7EL.js → chunk-GUPPOK7U.js} +8 -8
  67. package/dist/ui/{chunk-CJURGJTN.js → chunk-HLALESGR.js} +1 -1
  68. package/dist/ui/chunk-I3I4KHR5.js +2 -0
  69. package/dist/ui/{chunk-BOVJVOLH.js → chunk-I6ED2OW7.js} +1 -1
  70. package/dist/ui/chunk-JKPG5PO7.js +375 -0
  71. package/dist/ui/chunk-K3ZRQNN5.js +2 -0
  72. package/dist/ui/chunk-KHDWXSGR.js +1 -0
  73. package/dist/ui/{chunk-HEK4PH5A.js → chunk-KMHXNOFZ.js} +1 -1
  74. package/dist/ui/chunk-KWT7E2RJ.js +16 -0
  75. package/dist/ui/{chunk-WHZVGOS3.js → chunk-MQSU6EFZ.js} +1 -1
  76. package/dist/ui/{chunk-43S72FTV.js → chunk-OGEE252A.js} +1 -1
  77. package/dist/ui/{chunk-J4J42HJ4.js → chunk-PU5OP5RN.js} +1 -1
  78. package/dist/ui/{chunk-UTRZTB6V.js → chunk-QVG7J2MP.js} +1 -1
  79. package/dist/ui/chunk-TLMV4LOQ.js +3 -0
  80. package/dist/ui/chunk-TQBXK5JN.js +1 -0
  81. package/dist/ui/chunk-Z7SOKILO.js +2 -0
  82. package/dist/ui/{chunk-WCABR6TI.js → chunk-ZRJ5ZCFR.js} +1 -1
  83. package/dist/ui/index.html +2 -2
  84. package/dist/ui/main-R7BIU4HU.js +4 -0
  85. package/dist/ui/styles-VEGETYWD.css +1 -0
  86. package/package.json +17 -18
  87. package/dist/cli/tutorial/sm-tutorial/references/part-connect-harness.md +0 -173
  88. package/dist/ui/chunk-34ZZDYNQ.js +0 -1
  89. package/dist/ui/chunk-444BFYGR.js +0 -3
  90. package/dist/ui/chunk-44VNNUSQ.js +0 -2
  91. package/dist/ui/chunk-4SG4352Z.js +0 -7
  92. package/dist/ui/chunk-5ITZXW3A.js +0 -1
  93. package/dist/ui/chunk-7ANZW2OI.js +0 -499
  94. package/dist/ui/chunk-BJ6X6WBO.js +0 -4
  95. package/dist/ui/chunk-CZSLV6YD.js +0 -1
  96. package/dist/ui/chunk-DLYJHLJX.js +0 -2
  97. package/dist/ui/chunk-LGFABCIA.js +0 -16
  98. package/dist/ui/chunk-LPDD2DHE.js +0 -369
  99. package/dist/ui/chunk-P3SNMV4X.js +0 -2
  100. package/dist/ui/chunk-S4S5ZMXJ.js +0 -3
  101. package/dist/ui/chunk-VHEFRMK3.js +0 -1
  102. package/dist/ui/chunk-X6TRIDBI.js +0 -1845
  103. package/dist/ui/main-V77F2KZX.js +0 -4
  104. package/dist/ui/styles-I4ULXD3V.css +0 -1
  105. /package/dist/ui/{chunk-Y2Z26SRI.js → chunk-5RNLC6V4.js} +0 -0
@@ -2,6 +2,13 @@
2
2
 
3
3
  The live-UI prologue: the tester runs `sm init`, opens the browser, and watches the map update in real time as files are written and edited. `pace: per-step` (one chapter per exchange; the chapter's own confirmation advances to the next, NO separate "¿seguimos?"), `preflight: taught-init` (the tester runs `sm init` as the first taught step, not pre-flight), and the chapters lay the basics fixture progressively, one node at a time. 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
+ **Codex deltas (rich track).** When `tutorial.provider == codex` the lay commands are unchanged (the `--only` ids match the Codex overlay), but the on-disk shapes differ; substitute in the tester-facing prose:
6
+
7
+ - `init`: the boot node `demo-agent` is a **TOML agent** at `.codex/agents/demo-agent.toml`.
8
+ - `kinds`: the node list reads `.codex/agents/demo-agent.toml` (agent), `.agents/skills/demo-command/SKILL.md` (Codex has no `command`, so this node is a **skill**), `.agents/skills/demo-skill/SKILL.md` (skill), and the `notes/*.md`. Name the kinds as agent + skill + markdown.
9
+ - `first-edit`: the description to edit lives in `.codex/agents/demo-agent.toml` (the `description = "…"` TOML field, not YAML frontmatter).
10
+ - `connectors` onward: identical, the `@`/`/` bullets resolve the same on Codex; only the `ignore` chapter's directory tree shows `.codex/agents/` + `.agents/skills/` instead of `.claude/`.
11
+
5
12
  ## Chapter `init` - Your first node (~2 min)
6
13
 
7
14
  Agent background (do NOT render this as a separate context paragraph; the tester-facing version is folded into the message below): `sm init` creates a hidden `.skill-map/` folder in the cwd holding the database where skill-map stores what it learns about the project, and runs an initial scan (mandatory first step). Typing `sm` alone (no arguments) in an initialised dir then starts the UI server with the watcher built in (it is just an alias of `sm serve` with all defaults; the moment you need any flag you write `sm serve --flag ...` explicitly). One process, one terminal: it boots the server, scans the `.md` files, detects changes, and pushes events over WebSocket to the live UI. The next chapters all run against this same `sm` session, you boot it here and keep it alive through the `ignore` chapter.
@@ -38,7 +45,7 @@ Wait for confirmation. Mark `init`: done.
38
45
 
39
46
  Leave the browser open and the terminal with `sm` running. You create five more nodes **without any cross-fixture links** yet, pure standalone nodes, so the tester sees five new nodes pop in. Three new **kinds** show up in this step (skill, command, markdown); the last two files are sibling `markdown` notes (`demo-guideline`, `demo-guideline2`) the hub in the `connectors` chapter reaches two ways, a bare mention that resolves to nothing (which lands as a broken reference, no arrow drawn) and the same handle plus `.md` that resolves to a real file (a solid arrow).
40
47
 
41
- Lay these five files in one go (their content + translation live in `fixtures-data/`). The script resolves `__PROVIDER__` and auto-skips kinds the provider does not claim (`agent-skills` / Antigravity: both `demo-agent` and `demo-command` fold away, only the skill + the three markdown notes remain), so read the actual node count from the summary's `nodeCount`. Backstage (silent):
48
+ Lay these five files in one go (their content + translation live in `fixtures-data/`). The script resolves `__PROVIDER__` to the claude layout (this is the rich track). Backstage (silent):
42
49
 
43
50
  ```
44
51
  node .claude/skills/sm-tutorial/scripts/fixtures.js lay prologue --only "__PROVIDER__/skills/demo-skill/SKILL.md,__PROVIDER__/commands/demo-command.md,notes/todo.md,notes/demo-guideline.md,notes/demo-guideline2.md" --provider <provider> --lang <lang>
@@ -109,7 +116,7 @@ You edit `notes/todo.md` so it becomes the **hub** that points to each of the ot
109
116
 
110
117
  Five bullets, three kinds: `invokes` and `mentions` each appear twice, `references` once. The last two bullets are the resolution lesson: a bare `@demo-guideline` mention (which resolves to no agent, so it lands as a broken reference and draws no arrow) next to `@demo-guideline2.md`, the same handle shape plus a `.md` extension that points at a real sibling file (so it resolves and draws a solid arrow). Two separate nodes, one broken and one resolved. Five bullets but only four arrows on the canvas.
111
118
 
112
- Apply the hub bullets (their content + translation live in `fixtures-data/`). The edit appends after the `# Pending` heading; the script drops any bullet whose target kind the provider does not claim (on `agent-skills` / Antigravity there is no agent and no command → the `@demo-agent` and `/demo-command` bullets fold away; the two guideline bullets stay, so the resolution contrast, broken mention 0.50 (no arrow drawn) vs resolved reference 1.00 (solid arrow), is intact on those providers too). Backstage (silent):
119
+ Apply the hub bullets (their content + translation live in `fixtures-data/`). The edit appends after the `# Pending` heading. Backstage (silent):
113
120
 
114
121
  ```
115
122
  node .claude/skills/sm-tutorial/scripts/fixtures.js edit todo-connectors --provider <provider> --lang <lang>
@@ -145,14 +152,10 @@ Tell the tester:
145
152
  > (That is also why `@demo-agent` drew fine: an `@name` mention
146
153
  > resolves when an agent by that name really exists.)
147
154
  >
148
- > One word on solidity: skill-map draws each connector's
149
- > **confidence** as opacity, and every arrow you see here is fully
150
- > solid (1.00) because each one lands on a real node. The faint,
151
- > partial case shows up later in the campaign; for now the rule is
152
- > simple, a reference
153
- > that resolves draws a solid arrow, a reference that points at
154
- > nothing is not drawn at all and gets flagged instead. The exact
155
- > per-link numbers live in the inspector, next chapter.
155
+ > 💡 Tip: if all these changes left the nodes crowded together, the
156
+ > map toolbar has a **Re-arrange layout** button: it tidies the
157
+ > layout so everything reads better. If you've moved nodes by hand it
158
+ > asks for confirmation first, otherwise it just re-arranges.
156
159
  >
157
160
  > Confirm when you see the four arrows plus the broken-reference
158
161
  > marker on the hub. If an arrow is missing, refresh the browser and
@@ -164,12 +167,6 @@ Expected: four drawn arrows plus one `core/reference-broken` error on `notes/tod
164
167
 
165
168
  The canvas only draws the resolved arrows; the full per-link breakdown, including the broken one that never drew, lives in the Inspector. Open it on the hub so the tester registers the surface before the `edit-link` chapter changes topology.
166
169
 
167
- > 💡 Tip: if all these changes left the nodes crowded together, the
168
- > map toolbar has a **Re-arrange layout** button (tooltip "Re-arrange
169
- > the visible nodes"): it tidies the layout so everything reads
170
- > better. If you've moved nodes by hand it asks for confirmation
171
- > first, otherwise it just re-arranges.
172
- >
173
170
  > 🆕 Open the Inspector for **Demo TODO list** (click the node on
174
171
  > the map). Find the **Connections** section: it has two sections,
175
172
  > **Outgoing** and **Incoming**.
@@ -180,7 +177,7 @@ The canvas only draws the resolved arrows; the full per-link breakdown, includin
180
177
  > confidence: the numeric value. Here you'll see the contrast, the
181
178
  > `references` to `demo-guideline2` reads `1.00` (resolved), while the
182
179
  > `mentions` to `demo-guideline` reads `0.50` and is marked broken,
183
- > that 0.5 is the broken-reference penalty, not a "halfway sure".
180
+ > that 0.5 is the broken-reference penalty, not "half sure".
184
181
  >
185
182
  > Now open the Inspector for a couple of the nodes to read their
186
183
  > Incoming count. The four resolved nodes (`demo-agent`,
@@ -189,6 +186,11 @@ The canvas only draws the resolved arrows; the full per-link breakdown, includin
189
186
  > mention never landed on it, so nothing points in. Five outgoing
190
187
  > links on the hub, but only four of them reach a node.
191
188
  >
189
+ > 💡 Tip: skill-map draws each connector's **confidence** as opacity.
190
+ > Every arrow here is solid (1.00) because it lands on a real node; a
191
+ > reference that points at nothing is flagged instead of drawn. The
192
+ > fainter, partial case shows up later in the campaign.
193
+ >
192
194
  > Let me know when you see it.
193
195
 
194
196
  Mark `inspector`: done.
@@ -223,14 +225,12 @@ Once they confirm, the second edit fixes the broken reference. Tell the tester:
223
225
  >
224
226
  > Confirm when the new arrow is in and the red marker is gone.
225
227
 
226
- You verify by reading `notes/todo.md` to confirm both edits landed (the `@demo-agent` bullet gone, `@demo-guideline` now `@demo-guideline.md`); the prologue's broken reference is now resolved. (On `agent-skills`, where the `@demo-agent` bullet was never created in the `connectors` chapter, ask the tester to remove the only bullet they did add for the first edit; the `.md` fix on `@demo-guideline` is identical.) Once they confirm, leave the server running, the next chapter reuses it. Mark `edit-link`: done.
228
+ You verify by reading `notes/todo.md` to confirm both edits landed (the `@demo-agent` bullet gone, `@demo-guideline` now `@demo-guideline.md`); the prologue's broken reference is now resolved. Once they confirm, leave the server running, the next chapter reuses it. Mark `edit-link`: done.
227
229
 
228
230
  ## Chapter `workspace` - Navigate the workspace (files, search, isolate) (~2 min)
229
231
 
230
232
  **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.
231
233
 
232
- Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer nodes (`demo-skill` plus the two `notes/` files), so swap the node names below for ones that exist in that set; the gestures are identical.
233
-
234
234
  Walk the three tester actions below one at a time (open the Files
235
235
  panel, then search, then isolate); each ends with its own
236
236
  confirmation, so present one and wait for the tester before the next.
@@ -247,18 +247,20 @@ action itself.
247
247
  > Tell me when the tree is open.
248
248
 
249
249
  > At the top of that sidebar there's a search box (placeholder
250
- > `Search…`). Type `guideline`. Watch both halves at once: the tree
251
- > narrows down to the two guideline nodes (`demo-guideline` and
252
- > `demo-guideline2`) and the **Map** drops every node except those
253
- > two. The search matches a node's name, path,
254
- > or description, and filters live as you type, no Enter needed.
250
+ > `Search…`). Type `guideline`. Watch the tree narrow down to the
251
+ > two guideline nodes (`demo-guideline` and `demo-guideline2`). The
252
+ > search matches a node's name, path, or description, and filters
253
+ > live as you type, no Enter needed. The **Map** stays put: by
254
+ > default the search filters only the files list, not the map (the
255
+ > tip below changes that).
255
256
  >
256
- > Now clear the box. All six nodes come back, in both the tree and
257
- > the Map. Confirm you saw it filter and then restore.
257
+ > Now clear the box. All six nodes come back in the tree. Confirm you
258
+ > saw it filter and then restore.
258
259
 
259
- > Last one. In the tree, find the **Demo TODO list** row: at its
260
- > right edge there's a small **sitemap** icon (its tooltip reads
261
- > "Isolate this node and its direct links on the map"). Click it.
260
+ > Last one. In the tree, find the `notes/todo` row (the **Demo TODO
261
+ > list** hub, the tree labels rows by file name): at its right edge
262
+ > there's a small **sitemap** icon (its tooltip reads "Isolate this
263
+ > node and its direct links on the map"). Click it.
262
264
  >
263
265
  > The Map collapses to **Demo TODO list** plus only the nodes it
264
266
  > draws an arrow to (`demo-command`, `demo-skill`,
@@ -271,10 +273,9 @@ action itself.
271
273
  >
272
274
  > 💡 Tip: remember the search box from a moment ago? The map-icon
273
275
  > button right next to it controls whether the search also filters
274
- > the **Map**. It's on by default, that's why the **Map** narrowed
275
- > along with the tree when you searched `guideline`. Click it to
276
- > switch to filtering only the files list, leaving the map's layout
277
- > in place.
276
+ > the **Map**. It's off by default, which is why the **Map** stayed
277
+ > put while only the tree narrowed when you searched `guideline`.
278
+ > Click it on if you want a search to filter the map too.
278
279
  >
279
280
  > Did the map isolate and then restore?
280
281
 
@@ -27,12 +27,9 @@ an external service, not a file on disk). If several harness members
27
27
  named the same server, skill-map would draw a single shared
28
28
  `mcp://images` node, not one per caller.
29
29
 
30
- **Preparation**: `Edit` `<provider_dir>/agents/content-editor.md`
31
- (substitute `<provider_dir>` per `_core.md`; on `agent-skills` /
32
- Antigravity the editor is a `skill` instead, edit that file's
33
- frontmatter the same way). Do NOT rewrite the file. Change only the
34
- `tools:` line in the frontmatter so the MCP tool joins the existing
35
- two:
30
+ **Preparation**: `Edit` `.claude/agents/content-editor.md`. Do NOT
31
+ rewrite the file. Change only the `tools:` line in the frontmatter so
32
+ the MCP tool joins the existing two:
36
33
 
37
34
  ```yaml
38
35
  tools: [Read, Write, mcp__images__search]
@@ -1,4 +1,4 @@
1
- # Part 4 (b): Extend skill-map - plugins (step library, `tour-*` ids)
1
+ # Part 3 (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,9 +5,13 @@ 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 (the daily loop, Part 3, runs and ships it).
9
- `pace: per-step`, `preflight: portfolio-init`. Shared
10
- conventions live in `_core.md`.
8
+ is plain HTML the harness produces (the daily loop, Part 2, runs and ships it).
9
+ This part runs end to end: it boots the project and grows its harness
10
+ members (the `kickoff` to `real-kinds` chapters), then wires them into a
11
+ connected graph, a link checker, a publish command, the handbook turned
12
+ hub, and a close-up on connector confidence (the `check-links` to
13
+ `confidence` chapters). `pace: per-step`, `preflight: portfolio-init`.
14
+ Shared conventions live in `_core.md`.
11
15
 
12
16
  The orchestrator's `portfolio-init` pre-flight (backstage, silent)
13
17
  has already laid the bare project skeleton before the tester runs
@@ -16,6 +20,27 @@ which are `.md`, so the scan ignores them), the portfolio
16
20
  `.skillmapignore`, and the handbook `AGENTS.md` (the one boot node).
17
21
  The chapters grow the harness from there.
18
22
 
23
+ **Codex deltas (rich track).** When `tutorial.provider == codex`:
24
+
25
+ - `kickoff` / `manual`: identical. A `.codex/` project resolves the `codex`
26
+ lens; `CLAUDE.md`'s `@AGENTS.md` reference resolves the same (Codex has the
27
+ `@`-directive). `AGENTS.md` is still the one boot node.
28
+ - `first-agent`: the `content-editor` is a **TOML agent** at
29
+ `.codex/agents/content-editor.toml`, not a `.claude/agents/*.md` file; point
30
+ the tester at the `.toml` if they want to peek. Its body references the style
31
+ guide from the start (baked into `developer_instructions`), so lay
32
+ `docs/STYLE.md` together with it (`fixtures.js lay portfolio --only
33
+ "__PROVIDER__/agents/content-editor.md,docs/STYLE.md" --provider codex …`,
34
+ the `--only` matches the TOML overlay by node id) so the
35
+ `content-editor -> docs/STYLE.md` arrow resolves immediately instead of
36
+ showing a transient broken-reference.
37
+ - `real-kinds`: Codex's kinds are `agent` (TOML) + `skill` + `markdown`, there is
38
+ no `command`. Lay only `docs/DEPLOY.md` here (STYLE landed in `first-agent`),
39
+ and name the kinds as agent + skill + markdown (the skill + the publish piece
40
+ arrive later in this part as skills).
41
+ - `publish`: Codex has no `command` kind, so the tester creates a **skill** at `.agents/skills/publish/SKILL.md` instead of `.claude/commands/publish.md`. The body is the Codex one (same `/check-links` + `@content-editor` + deploy reference); fetch it with `fixtures.js cat harness --file "__PROVIDER__/skills/publish/SKILL.md" --provider codex --lang <lang>`. Tell the tester they are creating a `skill` (one node, three connectors, same as the claude command). The fixture lays no `publish` for codex in this chapter (the tester authors it), so the `cat` is the source.
42
+ - `links`: the `content-editor-style` reference is baked into the Codex content-editor's TOML (`developer_instructions`) at lay time, so the `edit content-editor-style` step is a no-op on Codex, the `content-editor -> docs/STYLE.md` arrow is already drawn from earlier in this part. Run only `edit agents-hub` and narrate the two `AGENTS.md` arrows; mention the style-guide arrow as already present.
43
+
19
44
  ## Chapter `kickoff` - Start the portfolio (~2 min)
20
45
 
21
46
  **Context**: same `sm init` the tester learned in the prologue, but
@@ -28,14 +53,13 @@ disk. The orchestrator's `portfolio-init` already cleared it during
28
53
  pre-flight, so the tester sees only the portfolio. If anything demo
29
54
  lingers, mention it once and move on.
30
55
 
31
- **Context (agent, do not narrate the plumbing): the lens.** This
32
- project has a root `AGENTS.md` (the `codex`/Codex marker) sitting next
33
- to the `.claude/` folder (the `claude` marker, where the tutorial skill
34
- itself lives). `codex` is **experimental** (ships disabled), though, so auto-detect
35
- ignores its marker and `sm init` resolves the lens to `claude`
36
- silently, exactly like the prologue: only `claude` is selectable today,
37
- so there is no ambiguity and no prompt. Do not promise the tester a
38
- lens prompt here.
56
+ **Context (agent, do not narrate the plumbing): the lens.** The skill
57
+ was scaffolded under `.claude/` (the `claude` marker, where the tutorial
58
+ skill itself lives), so `sm init` auto-detects the `claude` lens with no
59
+ prompt. The root `AGENTS.md` is the vendor-neutral handbook, NOT a lens
60
+ marker, so it never forces an ambiguous prompt. (This is the rich track;
61
+ a Codex project resolves the `codex` lens the same way from its
62
+ `.codex/` marker.) Do not promise the tester a lens prompt here.
39
63
 
40
64
  ```bash
41
65
  sm init
@@ -49,9 +73,8 @@ Tell the tester:
49
73
  > `.claude/` folder is the **harness** (the helpers that maintain the
50
74
  > site). skill-map maps that harness.
51
75
  >
52
- > Run `sm init`, it auto-detects the `claude` lens (this is a Claude
53
- > project; the other lenses are experimental). Then run `sm` to boot the
54
- > live UI.
76
+ > Run `sm init`, it auto-detects the `claude` lens from the `.claude/`
77
+ > folder. Then run `sm` to boot the live UI.
55
78
  >
56
79
  > Open the URL `sm` printed. You'll see **one node**: `AGENTS.md`,
57
80
  > the project's handbook (the operating manual for the site).
@@ -89,8 +112,7 @@ then render it in the fenced block the tester copies:
89
112
  > as a file pointer (the same `@name.md` reference you met in the
90
113
  > prologue), and since the handbook is right there
91
114
  > the link resolves with full confidence. It tells anyone (and
92
- > skill-map) that `CLAUDE.md` defers to the handbook. This is exactly
93
- > how this tool's own repo is wired.
115
+ > skill-map) that `CLAUDE.md` defers to the handbook.
94
116
  >
95
117
  > Did the connector light up?
96
118
 
@@ -99,9 +121,7 @@ Wait for confirmation. Mark `manual`: done.
99
121
  ## Chapter `first-agent` - The first harness agent (~2 min)
100
122
 
101
123
  Lay the first harness agent (its content + translation live in
102
- `fixtures-data/`). The script resolves `__PROVIDER__`; on
103
- `agent-skills` / Antigravity, which has no `agent` kind, adjust the
104
- prose to the skill the set lays there. Backstage (silent):
124
+ `fixtures-data/`). Backstage (silent):
105
125
 
106
126
  ```
107
127
  node .claude/skills/sm-tutorial/scripts/fixtures.js lay portfolio --only "__PROVIDER__/agents/content-editor.md" --provider <provider> --lang <lang>
@@ -111,8 +131,8 @@ Tell the tester:
111
131
 
112
132
  > I added the first real member of your harness: an agent called
113
133
  > `content-editor` (its job is to write the site's pages). A new
114
- > `agent` node appeared on the map. Right now it stands alone; in the
115
- > next part we wire it to the handbook and the style guide.
134
+ > `agent` node appeared on the map. Right now it stands alone; later in
135
+ > this part we wire it to the handbook and the style guide.
116
136
  >
117
137
  > 💡 Tip: I create these harness files for you. If you'd like to see
118
138
  > what's inside, open `<provider_dir>/agents/content-editor.md` in your
@@ -147,14 +167,166 @@ Tell the tester:
147
167
  > - **agent**: `content-editor` (does work on your behalf).
148
168
  > - **markdown**: `AGENTS.md`, `CLAUDE.md`, the two docs (plain notes
149
169
  > and manuals).
150
- > - **skill** and **command**: you add these (the link checker and
151
- > the publish command) in a later part.
170
+ > - **skill** and **command**: you add these later in this part (the
171
+ > link checker and the publish command).
152
172
  >
153
173
  > Your handbook now has a real harness around it: a `content-editor`
154
174
  > agent plus its docs, all on the map.
155
175
  >
156
176
  > See the agent and the docs in the map?
157
177
 
158
- Wait for confirmation. Mark `real-kinds`: done. Last chapter of the
159
- part: apply §Closing a part (the close names the part by its title and
160
- routes back to the menu; do NOT lead into the next part from here).
178
+ Wait for confirmation. Mark `real-kinds`: done.
179
+
180
+ ## Chapter `check-links` - The link checker (~3 min)
181
+
182
+ **Context**: the harness needs a guard that runs before publishing, a skill that checks the site's internal links resolve before it ships. We only create the `skill` node here; the `publish` command in the next chapter is its caller.
183
+
184
+ Lay the `check-links` skill (its content + translation live in
185
+ `fixtures-data/`; this kind exists on every provider, so no skip).
186
+ Backstage (silent):
187
+
188
+ ```
189
+ node .claude/skills/sm-tutorial/scripts/fixtures.js lay harness --only "__PROVIDER__/skills/check-links/SKILL.md" --provider <provider> --lang <lang>
190
+ ```
191
+
192
+ Tell the tester:
193
+
194
+ > So I added that guard: a skill called `check-links`. A new `skill`
195
+ > node appeared on the **Map**, alone for now; the next chapter gives
196
+ > it a caller.
197
+ >
198
+ > See the new skill node?
199
+
200
+ Wait for confirmation. Mark `check-links`: done.
201
+
202
+ ## Chapter `publish` - The publish command (~4 min)
203
+
204
+ **Context**: this is the chapter where the graph comes alive. The `/publish` command ties three pieces together in one body: it invokes the link checker, mentions the content editor, and references the deploy runbook. Three connectors light up from a single new node, one per link syntax.
205
+
206
+ Tell the tester to create the file themselves (it is their project's file, Inviolable rule #2). Substitute `<provider_dir>` per `_core.md` in the path you give them. Backstage, get the content: `node .claude/skills/sm-tutorial/scripts/fixtures.js cat harness --file "__PROVIDER__/commands/publish.md" --provider <provider> --lang <lang>`, then render it as a **top-level fenced code block**: at column 0, NOT inside the `> ` blockquote and with NO leading indentation, so the tester's copy keeps every line flush left. The frontmatter fences (`---`) MUST land on column 0. If the block is rendered (or pasted) indented, the opening and closing `---` shift off column 0, the YAML never parses, and the `publish` node loads body-only without its `name` / `description` (`sm check` then warns `frontmatter-malformed`). Present the block below exactly as written.
207
+
208
+ > Create `.claude/commands/publish.md` with exactly this content (the first line is `---`, nothing before it):
209
+
210
+ ```markdown
211
+ ---
212
+ name: publish
213
+ description: |
214
+ Publishes the portfolio: runs the link check, hands off to the
215
+ content editor for any last fixes, then follows the deploy runbook.
216
+ ---
217
+
218
+ # publish
219
+
220
+ The one command you run when the site is ready to go out.
221
+
222
+ ## Steps
223
+ 1. Run /check-links on the pages in public/. If it reports broken links, stop and fix them first.
224
+ 2. If a page needs a content fix, brief @content-editor with the change.
225
+ 3. Follow the [deploy runbook](../../docs/DEPLOY.md): regenerate pages, run the link check, start the server.
226
+ ```
227
+
228
+ Continue the tester message:
229
+
230
+ > Save it. Watch the **Map**: **three** new arrows light up at once
231
+ > from the new `publish` node, and each one is a different colour
232
+ > because each one is a different kind of link:
233
+ >
234
+ > - `publish -> check-links` (kind: `invokes`), from the `/check-links`
235
+ > token in the body.
236
+ > - `publish -> content-editor` (kind: `mentions`), from the
237
+ > `@content-editor` token.
238
+ > - `publish -> docs/DEPLOY.md` (kind: `references`), from the
239
+ > `[deploy runbook](../../docs/DEPLOY.md)` markdown link.
240
+ >
241
+ > One node, three connectors, three link kinds. The harness is
242
+ > starting to look like a real graph.
243
+ >
244
+ > 💡 Tip: to tidy every node into a clean layout, click the
245
+ > **Re-arrange layout** button in the map toolbar. Handy whenever the
246
+ > graph starts to look crowded.
247
+ >
248
+ > Did the three arrows appear?
249
+
250
+ Wait for confirmation. You MAY use `Read` on the file afterwards to verify it landed, in particular that the opening and closing `---` are flush at column 0. If a later `sm check` flags `frontmatter-malformed` on `publish.md`, the fences got indented on paste: have the tester re-align every line flush left (strip the leading spaces so `---` is at column 0), then the next scan reads it clean. Mark `publish`: done.
251
+
252
+ ## Chapter `links` - The handbook becomes the hub (~4 min)
253
+
254
+ **Context**: the handbook (`AGENTS.md`) has been a lonely node since the start of this part. Here it becomes the hub: we add two bullets so it mentions the content editor and invokes the publish command. We also give the content editor a reference to the style guide it follows. Several connectors land, and we recap the three link kinds and which syntax produced each.
255
+
256
+ Apply both edits (their content + translation live in `fixtures-data/`).
257
+ The first appends the two hub bullets to `AGENTS.md`; the second adds
258
+ the style-guide reference line to the content-editor. Backstage (silent):
259
+
260
+ ```
261
+ node .claude/skills/sm-tutorial/scripts/fixtures.js edit agents-hub --provider <provider> --lang <lang>
262
+ node .claude/skills/sm-tutorial/scripts/fixtures.js edit content-editor-style --provider <provider> --lang <lang>
263
+ ```
264
+
265
+ Tell the tester:
266
+
267
+ > Two edits, and the **Map** fills in. Your handbook (`AGENTS.md`) is
268
+ > now the hub: it points at the content editor and at the publish
269
+ > command. And the content editor now reaches the style guide it
270
+ > follows. New arrows:
271
+ >
272
+ > - `AGENTS.md -> content-editor` (kind: `mentions`), from `@content-editor`.
273
+ > - `AGENTS.md -> /publish` (kind: `invokes`), from `/publish`.
274
+ > - `content-editor -> docs/STYLE.md` (kind: `references`), from the
275
+ > `[style guide](../../docs/STYLE.md)` markdown link.
276
+ >
277
+ > Here is the whole recap of the three link kinds, one per syntax:
278
+ >
279
+ > - an `@handle` token is always a **mention**.
280
+ > - a `/slash` token is always an **invoke**.
281
+ > - a `[text](path.md)` markdown link is always a **reference**.
282
+ >
283
+ > The kind comes purely from how you wrote it. Your harness is wired
284
+ > end to end now: the handbook reaches the work, the work reaches the
285
+ > docs, and `/publish` pulls the whole publish flow together.
286
+ >
287
+ > Did the new arrows light up?
288
+
289
+ Wait for confirmation. You MAY use `Read` on the two files afterwards to verify the edits landed before moving on. Mark `links`: done.
290
+
291
+ ## Chapter `confidence` - How sure is each link (~3 min)
292
+
293
+ No file edits in this chapter, pure observation on the graph the tester just built.
294
+
295
+ Tell the tester:
296
+
297
+ > Last beat of this part: how sure is skill-map about each connection?
298
+ > It records a **confidence** for every link and draws it as opacity:
299
+ > a link that resolves to a real node is solid (**1.00**), a link that
300
+ > does not lands fainter, so a glance at the **Map** separates the
301
+ > solid wiring from the problem links.
302
+ >
303
+ > Open the Inspector for the `publish` node (click it on the **Map**).
304
+ > Scroll down to the **Connections** panel and read the **Outgoing**
305
+ > rows. Each row shows the link kind and a confidence badge, and here
306
+ > every one reads **1.00**:
307
+ >
308
+ > - `publish -> docs/DEPLOY.md` (`references`) is a markdown link to a
309
+ > file that exists on disk, so skill-map is certain.
310
+ > - `publish -> content-editor` (`mentions`) resolves to the real
311
+ > content-editor agent, and `publish -> check-links` (`invokes`)
312
+ > resolves to the real check-links skill, so both are certain too.
313
+ >
314
+ > Your whole harness reads solid because every link lands on a real
315
+ > node, that is what a clean, fully wired graph looks like. So what
316
+ > does a link that does NOT resolve look like? You met one back in the
317
+ > prologue: `@demo-guideline` was a reference skill-map could not
318
+ > resolve, it had nothing to land on, so skill-map drew no arrow and
319
+ > flagged it as a **broken reference**, its confidence knocked down to
320
+ > **0.50** by the broken penalty. The fix was one character: adding
321
+ > `.md` (`@demo-guideline.md`) turned it into a file reference to the
322
+ > real `demo-guideline.md`, and it drew a solid arrow at **1.00**.
323
+ >
324
+ > **IMPORTANT:** why does confidence matter? It mirrors how the runtime itself
325
+ > resolves a reference: a deterministic name-and-path lookup, no guessing
326
+ > and no scanning the tree for a file under some other extension. That is
327
+ > cheaper and it does not fail, so the agent spends fewer tokens and less
328
+ > time, the same reason a clean, well-named harness is worth keeping.
329
+ >
330
+ > Do you see every badge reading 1.00 in the Inspector?
331
+
332
+ Wait for confirmation. Mark `confidence`: done. Last chapter of the part: apply §Closing a part (the close names the part by its title and routes back to the menu; do NOT lead into the next part from here).
@@ -1,6 +1,6 @@
1
- # Part 4 (a): Extend skill-map - settings (step library, `settings-*` ids)
1
+ # Part 3 (a): Extend skill-map - settings (step library, `settings-*` ids)
2
2
 
3
- Step bodies for the settings chapters of Part 4 (config layers, the
3
+ Step bodies for the settings chapters of Part 3 (config layers, the
4
4
  `sm config` verbs, the active provider lens). The SKILL.md
5
5
  orchestrator dispatches each `settings-*` chapter id here;
6
6
  `authoring-*` ids it dispatches to `part-authoring.md`.
@@ -125,16 +125,19 @@ Mark `settings-2-resolve: done`.
125
125
 
126
126
  **Context**: the single most consequential setting, the lens that
127
127
  decides which provider types the project's files. It auto-detects and
128
- never touches your `.md` files.
128
+ never touches your `.md` files. (Agent: substitute `<provider>` with
129
+ `tutorial.provider`, the lens this run was scaffolded for.)
129
130
 
130
131
  > One setting earns its own step: the **active provider lens**. A
131
132
  > skill-map project reads its files through exactly **one** provider
132
133
  > at a time, and that lens decides how each file is interpreted, so
133
134
  > the same files can read differently depending on which lens is active.
134
135
 
135
- > The lens auto-detects on the first scan from your project's layout
136
- > (a `.claude/` folder selects the `claude` lens). Scan once and check
137
- > where it landed:
136
+ > The lens auto-detects on the first scan from the project's layout. A
137
+ > marker folder selects its lens: `.claude/` `claude`, `.codex/`
138
+ > `codex`, `.agent/workflows/` → `antigravity`; a project with only
139
+ > `.agents/skills/` and no vendor marker falls back to the open-standard
140
+ > `agent-skills` lens. Scan once and check where it landed:
138
141
 
139
142
  ```bash
140
143
  sm scan
@@ -142,17 +145,18 @@ sm config get activeProvider
142
145
  ```
143
146
 
144
147
  Expected: the scan prints a line like `Auto-detected activeProvider
145
- = claude from filesystem markers; persisted to
146
- .skill-map/settings.json`, and `get` then reports `claude`. The lens
148
+ = <provider> from filesystem markers; persisted to
149
+ .skill-map/settings.json`, and `get` then reports `<provider>`. The lens
147
150
  is just a key in `settings.json`, persisted like any other setting.
148
151
 
149
- > Other lenses exist in the engine (`codex` for Codex,
150
- > `agent-skills`, `antigravity`), but they are **experimental** (ship
151
- > disabled by default): today we demo the `claude` lens only. The idea to keep is
152
- > the one above, one project reads through exactly one provider at a
153
- > time, chosen by `activeProvider`. The lens is cheap to change later
154
- > because the graph is always rebuilt from your files, never the
155
- > other way around.
152
+ > The other lenses are just as real: `claude` and the open-standard
153
+ > `agent-skills` are stable; `codex` (OpenAI) and `antigravity` (Google)
154
+ > are beta but ship enabled and auto-detect their own marker. The open
155
+ > `agent-skills` lens is the default a project falls back to when no
156
+ > vendor marker is present. The idea to keep: one project reads through
157
+ > exactly one lens at a time, chosen by `activeProvider`, and it is cheap
158
+ > to change later because the graph is always rebuilt from your files,
159
+ > never the other way around.
156
160
 
157
161
  Mark `settings-3-lens: done`.
158
162