@skill-map/cli 0.61.0 → 0.61.2

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.
@@ -161,11 +161,19 @@ cd <cwd>
161
161
  > Got the second terminal open and anchored to the folder? Confirm
162
162
  > before we move on.
163
163
 
164
+ **HARD STOP here.** This message ends at the confirmation question
165
+ above, that is its own beat. Do NOT run step 5, do NOT render the
166
+ menu, do NOT add a "meanwhile / mientras tanto" bridge in the same
167
+ message. Wait for the tester to confirm the second terminal is open
168
+ and anchored; only then continue to step 5.
169
+
164
170
  ### 5. Initialise state, lay the universal files, show the menu
165
171
 
166
- Pre-flight does NOT pre-lay any part's fixture and does NOT auto-enter
167
- a part. It initialises state, lays the universal files every part
168
- needs, then routes to the menu. All silent (backstage):
172
+ **Run this only after the tester has confirmed step 4.** Pre-flight
173
+ does NOT pre-lay any part's fixture and does NOT auto-enter a part. It
174
+ initialises state, lays the universal files every part needs, then
175
+ routes to the menu. The init + lay are silent (backstage); the menu is
176
+ the first thing the tester sees in this post-confirmation message:
169
177
 
170
178
  - Create the state file (carries the detected provider, the running
171
179
  `sm version`, the cwd, and the tester's language):
@@ -280,8 +288,12 @@ the `__PROVIDER__` token and skip kinds the provider does not claim.
280
288
  `fixtures.js clear portfolio --provider <provider>`, `rm -rf .skill-map`.
281
289
  2. `fixtures.js seed prologue-built --provider <provider> --lang <lang>`
282
290
  (lays the six demo nodes, wires the hub, drops `private-credentials`).
291
+ Run this ALWAYS, even if a demo fixture from a prior prologue run is
292
+ on disk, so the deliberate broken reference is the pristine
293
+ `prologue-built` state, not whatever the tester edited in the
294
+ prologue (they resolve it by hand in `edit-link`).
283
295
  3. `sm init` (single `.claude/` marker, no lens prompt), then `sm scan`.
284
- If the demo was already on disk and `.skill-map/` exists, just `sm scan`.
296
+ If `.skill-map/` already exists, skip the init and just `sm scan`.
285
297
 
286
298
  - **`seed`** (campaign parts `connect-harness`, `daily-loop`): builds
287
299
  on the accumulating portfolio, but the tester may have jumped here.
@@ -23,12 +23,10 @@
23
23
  "public/index.html",
24
24
  "public/about.html",
25
25
  "public/projects.html",
26
- "public/posts.html",
27
26
  "public/style.css",
28
27
  "docs/STYLE.md",
29
28
  "docs/DEPLOY.md",
30
29
  "docs/DEPLOYMENT.md",
31
- "docs/draft.md",
32
30
  "__PROVIDER__/agents/content-editor.md",
33
31
  "__PROVIDER__/skills/check-links",
34
32
  "__PROVIDER__/commands/publish.md",
@@ -4,8 +4,6 @@ description: |
4
4
  Example agent that handles read and shell tasks. Solo node at
5
5
  boot; gets connected to the rest of the demo fixture during the
6
6
  Live UI step.
7
- tools: [Read, Bash]
8
- model: sonnet
9
7
  ---
10
8
 
11
9
  # demo-agent
@@ -4,8 +4,6 @@ description: |
4
4
  Agente de ejemplo que maneja tareas de lectura y de shell. Nodo
5
5
  suelto al arranque; se conecta con el resto del set de prueba
6
6
  durante el paso de la UI en vivo.
7
- tools: [Read, Bash]
8
- model: sonnet
9
7
  ---
10
8
 
11
9
  # demo-agent
@@ -131,14 +131,16 @@ element. Decide with §Provider detection:
131
131
 
132
132
  - `provider == claude` (Claude Code, blockquotes render as a styled
133
133
  left bar): emit tester-facing messages with `> ` on every line,
134
- including blank lines inside a multi-paragraph block.
135
- - `provider != claude` (Antigravity CLI, agent-skills, any other
136
- host: most non-Claude renderers show `>` as a literal character):
137
- emit **plain prose**, NO `> ` prefix anywhere.
134
+ including blank lines inside a multi-paragraph block. This is the
135
+ only active path today.
136
+ - `provider != claude` (coming soon: Antigravity CLI, agent-skills,
137
+ any other host where most non-Claude renderers show `>` as a
138
+ literal character): emit **plain prose**, NO `> ` prefix anywhere.
139
+ Kept as the wiring for the coming-soon providers; not exercised
140
+ while the tutorial demos `claude` only.
138
141
 
139
142
  Sample messages throughout the part files are written in the Claude
140
- variant (with `> `); strip the prefix when the host is non-Claude,
141
- the wording is unchanged.
143
+ variant (with `> `).
142
144
 
143
145
  **The rule, in one line**: every tester-facing line of prose carries
144
146
  the `> ` bar in the Claude variant, context sentences, intros, tips,
@@ -257,41 +259,41 @@ on-disk convention:
257
259
  | Provider | Base dir | Kinds it claims | Detect via env var(s) |
258
260
  |----------------|-------------------|-----------------------------|--------------------------------------------------------|
259
261
  | `claude` | `.claude/` | `agent`, `command`, `skill` | `CLAUDECODE=1` OR `AI_AGENT` starts with `claude-code` |
260
- | `agent-skills` | `.agents/skills/` | `skill` only (vendor-neutral; also the on-disk home for Google's Antigravity CLI, which replaced the Gemini CLI on 2026-05-19 and adopted this open standard) | no formal env yet; opt-in if the tester says so |
261
- | `openai` | `.codex/` | `agent` (`.codex/agents/*.toml`) | no formal env yet; informational today |
262
-
263
- **Decision logic, applied silently during pre-flight**:
264
-
265
- 1. Inspect the agent's environment (`process.env`).
266
- 2. Claude-flavoured var present `provider = claude`,
267
- `<provider_dir> = .claude`, kinds = `{agent, command, skill}`.
268
- 3. Else if the tester says Antigravity / agent-skills (opt-in) →
269
- `provider = agent-skills`, `<provider_dir> = .agents`, kinds =
270
- `{skill}`.
271
- 4. Else **fallback to claude** AND surface one short message so
272
- they can correct course (render `> ` if it turns out to be
273
- Claude, plain prose if they correct you):
274
-
275
- > Heads up: I couldn't detect which agent runtime is hosting me,
276
- > so I'll demo skill-map's Claude provider (`.claude/`). If you
277
- > actually use Antigravity or agent-skills, tell me and I swap
278
- > the fixture to `.agents/skills/`.
262
+ | `agent-skills` | `.agents/skills/` | `skill` only (vendor-neutral; also the on-disk home for Google's Antigravity CLI, which replaced the Gemini CLI on 2026-05-19 and adopted this open standard) | coming soon (not selectable in the tutorial yet) |
263
+ | `openai` | `.codex/` | `agent` (`.codex/agents/*.toml`) | coming soon (not selectable in the tutorial yet) |
264
+
265
+ **Decision logic, applied silently during pre-flight**: the tutorial
266
+ demonstrates the `claude` provider only. `agent-skills` and `openai`
267
+ are **coming soon** and are not selectable here, so there is no
268
+ runtime to detect or opt into.
269
+
270
+ 1. `provider = claude`, `<provider_dir> = .claude`, kinds =
271
+ `{agent, command, skill}`. Always.
272
+ 2. Do NOT offer Antigravity / agent-skills / openai as an alternative,
273
+ and do NOT ask the tester which runtime hosts them. If a tester
274
+ says they use another runtime, acknowledge it briefly and explain
275
+ that those providers are coming soon, the tutorial demos `claude`
276
+ (`.claude/`) today:
277
+
278
+ > Heads up: skill-map also reads Antigravity, agent-skills and
279
+ > Codex projects, but those providers are coming soon in this
280
+ > tutorial. We'll demo skill-map's Claude provider (`.claude/`)
281
+ > today.
279
282
 
280
283
  Persist `provider` into the state file (`tutorial.provider`) so a
281
- resumed session does not re-detect.
284
+ resumed session does not re-detect. (It is always `claude` for now.)
282
285
 
283
286
  **Global substitution rule**: the fixture scripts do the file-level
284
287
  work. You pass `--provider <p>` (the value persisted in
285
288
  `tutorial.provider`) and `--lang <l>`, and they resolve the
286
289
  `__PROVIDER__` path token, skip files whose kind the provider does
287
290
  not claim, and report the adjusted `nodeCount` plus the `skipped`
288
- list in their summary. Your job is the **narration**: wherever a part
289
- file's tester-facing prose says `.claude/`, swap it for the detected
290
- `<provider_dir>`, and narrate the node count from the script summary
291
- (on `agent-skills` / Antigravity only the skill + markdown notes
292
- exist, so the count is lower and the agent / command beats fold
293
- away). The campaign cross-link chapters target `claude` today (see
294
- the reality check below).
291
+ list in their summary. Today `provider` is always `claude`, so the
292
+ narration uses `.claude/` throughout; the `--provider` plumbing stays
293
+ wired so the coming-soon providers (`agent-skills` / Antigravity,
294
+ `openai`) drop in later without a narrative rewrite. The campaign
295
+ cross-link chapters target `claude` today (see the reality check
296
+ below).
295
297
 
296
298
  **Reality check (don't mention to the tester)**: this skill ships
297
299
  at `.claude/skills/sm-tutorial/`, so Claude Code is the only host
@@ -338,6 +340,11 @@ For every chapter:
338
340
  Inviolable rule #6, NO "¿seguimos?"). `pace` only decides batching:
339
341
  `per-step` presents one chapter per exchange, `auto-advance` may
340
342
  chain chapters that need no tester action into one response.
343
+ **Either pace still emits every chapter's `Capítulo S.N` Announcement
344
+ (step 1).** `auto-advance` drops only the inter-chapter "¿seguimos?"
345
+ pause, never the per-chapter announcement, so any chapter with a
346
+ tester-facing beat always opens with its number, even when it
347
+ follows straight on from the previous one.
341
348
 
342
349
  ## Routing + menu (orchestrator)
343
350
 
@@ -69,7 +69,7 @@
69
69
  },
70
70
  {
71
71
  "id": "manual",
72
- "title": "The handbook and CLAUDE.md (@AGENTS.md)",
72
+ "title": "The handbook (AGENTS.md) and CLAUDE.md",
73
73
  "est_min": 2
74
74
  },
75
75
  {
@@ -132,19 +132,14 @@
132
132
  "est_min": 3
133
133
  },
134
134
  {
135
- "id": "add-page",
136
- "title": "Add a page with your agent",
137
- "est_min": 4
138
- },
139
- {
140
- "id": "orphan-draft",
141
- "title": "A page nobody links to yet",
135
+ "id": "preview",
136
+ "title": "Bring it up and see your site",
142
137
  "est_min": 2
143
138
  },
144
139
  {
145
- "id": "wire-and-improve",
146
- "title": "Wire the draft in",
147
- "est_min": 3
140
+ "id": "add-page",
141
+ "title": "Add a page with your agent",
142
+ "est_min": 4
148
143
  },
149
144
  {
150
145
  "id": "broken-ref",
@@ -162,8 +157,8 @@
162
157
  "est_min": 4
163
158
  },
164
159
  {
165
- "id": "sidecar",
166
- "title": "Annotate the handbook (.sm and consent)",
160
+ "id": "stability",
161
+ "title": "Set a node's stability (and the `.sm` sidecar)",
167
162
  "est_min": 3
168
163
  },
169
164
  {
@@ -113,7 +113,7 @@ parts:
113
113
  status: active
114
114
  chapters:
115
115
  - id: kickoff ; title: "Start the portfolio (sm init on the real skeleton)" ; est_min: 2
116
- - id: manual ; title: "The handbook and CLAUDE.md (@AGENTS.md)" ; est_min: 2
116
+ - id: manual ; title: "The handbook (AGENTS.md) and CLAUDE.md" ; est_min: 2
117
117
  - id: first-agent ; title: "The first harness agent (content-editor)" ; est_min: 2
118
118
  - id: real-kinds ; title: "The real kinds in context" ; est_min: 2
119
119
 
@@ -144,13 +144,12 @@ parts:
144
144
  status: active
145
145
  chapters:
146
146
  - id: setup ; title: "Make it yours, make it presentable" ; est_min: 3
147
+ - id: preview ; title: "Bring it up and see your site" ; est_min: 2
147
148
  - id: add-page ; title: "Add a page with your agent" ; est_min: 4
148
- - id: orphan-draft ; title: "A page nobody links to yet" ; est_min: 2
149
- - id: wire-and-improve ; title: "Wire the draft in" ; est_min: 3
150
149
  - id: broken-ref ; title: "A rename breaks a link" ; est_min: 4
151
150
  - id: reserved ; title: "A reserved name collides" ; est_min: 2
152
151
  - id: publish ; title: "Ship it: run /publish for real" ; est_min: 4
153
- - id: sidecar ; title: "Annotate the handbook (.sm and consent)" ; est_min: 3
152
+ - id: stability ; title: "Set a node's stability (and the `.sm` sidecar)" ; est_min: 3
154
153
  - id: golive ; title: "Your portfolio, live next to the graph" ; est_min: 3
155
154
 
156
155
  # ----- parked: MCP returns later as its own iteration (body kept in part-mcp.md) -----
@@ -70,9 +70,8 @@ entered out of order.
70
70
 
71
71
  `manifest.json#footprints` lists the full on-disk reach of each
72
72
  fixture, INCLUDING files a part's later chapters add (the daily loop's
73
- `docs/draft.md`, `public/style.css` + generated pages, the renamed
74
- `new-page` command, `AGENTS.sm`; the portfolio's `DEPLOYMENT.md`
75
- rename). `fixtures.js clear <footprint>` (part-entry resets) and
73
+ `public/style.css` + generated pages, the renamed `new-page` command,
74
+ `AGENTS.sm`; the portfolio's `DEPLOYMENT.md` rename). `fixtures.js clear <footprint>` (part-entry resets) and
76
75
  `state.js wipe` (start-over) both read it, so the per-fixture path list
77
76
  lives in ONE place. Add or drop a harness file there.
78
77
 
@@ -32,7 +32,7 @@ Wait for confirmation. Mark `check-links`: done.
32
32
 
33
33
  On `agent-skills` / Antigravity there is no `command` kind, so skip this whole chapter and fold its purpose into the prose of the next one.
34
34
 
35
- 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 in the fenced block the tester copies. The frontmatter fence (`---`) MUST sit on column 0 with no leading spaces: present the block below exactly as written, and if the tester pastes it indented, have them strip the leading whitespace. An indented `---` does not parse as YAML, so the `publish` node would land without its `name` or `description`.
35
+ 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.
36
36
 
37
37
  > Create `.claude/commands/publish.md` with exactly this content (the first line is `---`, nothing before it):
38
38
 
@@ -78,7 +78,7 @@ Continue the tester message:
78
78
  >
79
79
  > Did the three arrows appear?
80
80
 
81
- Wait for confirmation. You MAY use `Read` on the file afterwards to verify it landed. Mark `publish`: done.
81
+ 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.
82
82
 
83
83
  ## Chapter `links` - The handbook becomes the hub (~4 min)
84
84
 
@@ -122,7 +122,7 @@ Wait for confirmation. You MAY use `Read` on the two files afterwards to verify
122
122
 
123
123
  ## Chapter `confidence` - How sure is each link (~3 min)
124
124
 
125
- **Context**: skill-map records how sure it is of every connection and shows that as opacity. In this harness every link resolves to a real node, so they all read solid (1.00); the broken-reference case is the one the tester met in the prologue (the bare `@demo-guideline` mention that resolved to no agent, drawn as no arrow and flagged `reference-broken` at 0.50). Here we open the Inspector on a real harness node, read the all-solid numbers, and point back to that prologue contrast. Mirrors the prologue's connectors beat on the portfolio.
125
+ **Context**: skill-map records how sure it is of every connection and shows that as opacity. In this harness every link resolves to a real node, so they all read solid (1.00); the broken-reference case is the one the tester met in the prologue (the `@demo-guideline` reference skill-map could not resolve, drawn as no arrow and flagged `reference-broken` at 0.50, then resolved by hand with `.md`). Here we open the Inspector on a real harness node, read the all-solid numbers, and point back to that prologue contrast. Mirrors the prologue's connectors beat on the portfolio.
126
126
 
127
127
  No file edits in this chapter, pure observation on the graph the tester just built.
128
128
 
@@ -147,14 +147,13 @@ Tell the tester:
147
147
  >
148
148
  > Your whole harness reads solid because every link lands on a real
149
149
  > node, that is what a clean, fully wired graph looks like. So what
150
- > does a link that does NOT resolve look like? You saw one back in the
151
- > prologue: `@demo-guideline` was a bare `@`-mention, and a bare
152
- > `@handle` only resolves to an agent. `demo-guideline` is a note, so
153
- > it had nothing to land on: skill-map drew no arrow and flagged it as
154
- > a **broken reference**, its confidence knocked down to **0.50** by
155
- > the broken penalty. The fix there was one character:
156
- > `@demo-guideline2.md`, the same handle plus a `.md`, resolved to the
157
- > real file and drew a solid arrow at **1.00**.
150
+ > does a link that does NOT resolve look like? You met one back in the
151
+ > prologue: `@demo-guideline` was a reference skill-map could not
152
+ > resolve, it had nothing to land on, so skill-map drew no arrow and
153
+ > flagged it as a **broken reference**, its confidence knocked down to
154
+ > **0.50** by the broken penalty. The fix was one character: adding
155
+ > `.md` (`@demo-guideline.md`) turned it into a file reference to the
156
+ > real `demo-guideline.md`, and it drew a solid arrow at **1.00**.
158
157
  >
159
158
  > So confidence here is really about resolution: **1.00** for a link
160
159
  > that lands on a real node, **0.50** for one flagged broken. There is