@skill-map/cli 0.53.0 → 0.53.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.
- package/dist/cli/tutorial/sm-tutorial/SKILL.md +45 -34
- package/dist/cli/tutorial/sm-tutorial/references/_core.md +94 -46
- package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +85 -105
- package/dist/cli.js +12 -16
- package/dist/index.js +3 -3
- package/dist/kernel/index.js +3 -3
- package/dist/ui/{chunk-L4NIF75A.js → chunk-IUZM6XLN.js} +1 -1
- package/dist/ui/{chunk-YQFIXHKM.js → chunk-UHNBYD6J.js} +4 -4
- package/dist/ui/{chunk-TXTY24G4.js → chunk-UV5Q423S.js} +19 -19
- package/dist/ui/index.html +1 -1
- package/dist/ui/{main-OYITFJ7B.js → main-TXPLL7VU.js} +3 -3
- package/package.json +1 -1
|
@@ -148,25 +148,28 @@ Apply §Provider detection from `_core.md`. Persist the result into
|
|
|
148
148
|
> Got the second terminal open and anchored to the folder? Confirm
|
|
149
149
|
> before we move on.
|
|
150
150
|
|
|
151
|
-
### 5.
|
|
151
|
+
### 5. Write the universal files and show the menu
|
|
152
152
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
themselves. Write, substituting `<provider_dir>` per detection:
|
|
153
|
+
Pre-flight does NOT pre-lay any part's fixture and does NOT auto-enter
|
|
154
|
+
a part. It writes only the two files every part needs, then routes to
|
|
155
|
+
the menu:
|
|
157
156
|
|
|
158
|
-
- `<provider_dir>/agents/demo-agent.md` (the single boot node).
|
|
159
|
-
- `.skillmapignore` (block below). Write it NOW, before `sm init`,
|
|
160
|
-
so the first scan never sees the tutorial's own files. `sm init`
|
|
161
|
-
only writes `.skillmapignore` when absent, so this stays put.
|
|
162
157
|
- `findings.md` (block below).
|
|
163
|
-
- `tutorial-state.yml` (template below
|
|
158
|
+
- `tutorial-state.yml` (template below; it starts with `parts: {}`,
|
|
159
|
+
empty, a part's entry is added the first time the tester picks it).
|
|
164
160
|
|
|
165
|
-
Then **route** per §Routing in `_core.md`:
|
|
166
|
-
Part 0
|
|
167
|
-
|
|
161
|
+
Then **route** per §Routing + menu in `_core.md`: render the **start
|
|
162
|
+
menu** (numbered, Part 0 the prologue as option 1, the recommended
|
|
163
|
+
first pick). The tester picks a part by number; that part's own
|
|
164
|
+
`preflight` (see §Entering a part) lays its fixture when it begins.
|
|
165
|
+
Part 0's demo fixture (the `demo-agent` + the demo `.skillmapignore`,
|
|
166
|
+
blocks below) is laid by its `taught-init` entry, not here.
|
|
168
167
|
|
|
169
|
-
## Fixture
|
|
168
|
+
## Fixture and state templates
|
|
169
|
+
|
|
170
|
+
The `findings.md` and `tutorial-state.yml` here are universal (written
|
|
171
|
+
in pre-flight); the `demo-agent.md` + the demo `.skillmapignore` are
|
|
172
|
+
Part 0's fixture (laid by its `taught-init` entry).
|
|
170
173
|
|
|
171
174
|
`<provider_dir>/agents/demo-agent.md`:
|
|
172
175
|
```markdown
|
|
@@ -245,33 +248,39 @@ tutorial:
|
|
|
245
248
|
provider: "<claude | agent-skills | antigravity>"
|
|
246
249
|
tester:
|
|
247
250
|
level: 2
|
|
251
|
+
parts: {} # filled in as the tester picks parts from the menu
|
|
252
|
+
findings_file: "./findings.md"
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
When the tester picks a part from the menu, add its `parts.<id>`
|
|
256
|
+
entry the first time it starts, seeded from the manifest, e.g.:
|
|
257
|
+
|
|
258
|
+
```yaml
|
|
248
259
|
parts:
|
|
249
260
|
fundamentals:
|
|
250
|
-
status: "in_progress" # not_started | in_progress | done | declined
|
|
261
|
+
status: "in_progress" # not_started | in_progress | done | declined | skipped
|
|
251
262
|
chapters:
|
|
252
263
|
init: { status: "pending" } # pending | done | failed | skipped
|
|
253
264
|
kinds: { status: "pending" }
|
|
254
|
-
|
|
255
|
-
connectors: { status: "pending" }
|
|
256
|
-
inspector: { status: "pending" }
|
|
257
|
-
edit-link: { status: "pending" }
|
|
258
|
-
workspace: { status: "pending" }
|
|
259
|
-
ignore: { status: "pending" }
|
|
260
|
-
findings_file: "./findings.md"
|
|
265
|
+
# … one row per chapter in the part's manifest entry
|
|
261
266
|
```
|
|
262
267
|
|
|
263
|
-
|
|
264
|
-
`
|
|
265
|
-
|
|
266
|
-
until they have content.
|
|
268
|
+
Planned parts are not tracked until they have content. Parts the
|
|
269
|
+
`seed` mechanism fast-forwards past are recorded with `status:
|
|
270
|
+
"skipped"`.
|
|
267
271
|
|
|
268
272
|
## Entering a part
|
|
269
273
|
|
|
270
274
|
When a part begins, honour its `preflight` from the manifest:
|
|
271
275
|
|
|
272
|
-
- **`taught-init`** (Part 0): the
|
|
273
|
-
|
|
274
|
-
|
|
276
|
+
- **`taught-init`** (Part 0): silently, before the tester's `sm init`
|
|
277
|
+
in the `init` chapter, `Write` the demo fixture (the
|
|
278
|
+
`<provider_dir>/agents/demo-agent.md` boot node + the demo
|
|
279
|
+
`.skillmapignore`, both in the §Fixture blocks above), substituting
|
|
280
|
+
`<provider_dir>` per detection. Write `.skillmapignore` BEFORE the
|
|
281
|
+
tester runs `sm init` so the first scan never sees the tutorial's
|
|
282
|
+
own files (`sm init` only writes that file when absent). The tester
|
|
283
|
+
runs `sm init` themselves in the first chapter.
|
|
275
284
|
- **`portfolio-init`** (Part 1 `project-kickoff`): the campaign's
|
|
276
285
|
real project begins. Backstage, before the tester's `sm init` in
|
|
277
286
|
the `kickoff` chapter: (1) if the prologue ran first in this dir,
|
|
@@ -337,11 +346,13 @@ and the part's `pace`.
|
|
|
337
346
|
|
|
338
347
|
All three are specified in `_core.md`:
|
|
339
348
|
|
|
340
|
-
- **Routing + menu**: §Routing + menu. The
|
|
341
|
-
|
|
342
|
-
`_manifest.yml`,
|
|
343
|
-
|
|
344
|
-
|
|
349
|
+
- **Routing + menu**: §Routing + menu. The session always starts at
|
|
350
|
+
the **numbered start menu** (Part 0 is option 1, the recommended
|
|
351
|
+
first pick); the menu (the ToC from `_manifest.yml`, numbered,
|
|
352
|
+
completed parts ticked, `planned` parts hidden, `prereq` gating only
|
|
353
|
+
the parts that have no `seed`) is the entry point on the first
|
|
354
|
+
invocation and after every part closes / on resume. Render it with
|
|
355
|
+
the format in `_core.md` §Menu format.
|
|
345
356
|
- **Resume / restart**: §Resume / restart. On start-over, the exact
|
|
346
357
|
wipe list is whatever the tester's parts actually created:
|
|
347
358
|
`tutorial-state.yml`, `findings.md`, `.skillmapignore`,
|
|
@@ -38,8 +38,11 @@ loanwords embedded in Spanish prose:
|
|
|
38
38
|
- `connector` / `edge` → `conector` (**NEVER** `arista`, even
|
|
39
39
|
though it is the common graph translation; skill-map's house
|
|
40
40
|
word is `conector` everywhere).
|
|
41
|
-
- `watcher`
|
|
42
|
-
|
|
41
|
+
- `watcher` and `browser` stay **English**, do NOT translate them to
|
|
42
|
+
`observador` / `navegador`. They are words the tester reads in
|
|
43
|
+
skill-map's own UI and docs, keep them recognisable. If a bare
|
|
44
|
+
English noun reads oddly mid-sentence, rephrase ("skill-map sigue
|
|
45
|
+
tus cambios" instead of forcing "el watcher detecta...").
|
|
43
46
|
- `scan` (verb) → `escanear`; `scan` (noun) → `escaneo`.
|
|
44
47
|
- `node` → `nodo`; `link` → `enlace` or `vínculo`; `fixture` →
|
|
45
48
|
`set de prueba`; `pre-flight` → `preparación inicial`;
|
|
@@ -49,10 +52,9 @@ loanwords embedded in Spanish prose:
|
|
|
49
52
|
…), CLI verbs (`sm init`, `sm watch`), and code identifiers stay
|
|
50
53
|
English, that's the public surface, not jargon.
|
|
51
54
|
|
|
52
|
-
Anti-pattern (do NOT emit): "aparecen los otros tres kinds", "
|
|
53
|
-
|
|
54
|
-
"
|
|
55
|
-
"vamos a escanear ahora". These translations apply to **chapter
|
|
55
|
+
Anti-pattern (do NOT emit): "aparecen los otros tres kinds", "vamos a
|
|
56
|
+
hacer un scan ahora". Correct: "aparecen los otros tres tipos", "vamos
|
|
57
|
+
a escanear ahora" (and `watcher` / `browser` stay as-is in English). These translations apply to **chapter
|
|
56
58
|
titles** too: a `title` like `"First scan of the fixture"` is
|
|
57
59
|
announced as `"Primer escaneo del set de prueba"`. Never emit a
|
|
58
60
|
chapter title (or any tester-facing prose) in English while the
|
|
@@ -175,19 +177,24 @@ first kind quoted, the second kind never.
|
|
|
175
177
|
the output or replies "OK" / "done". Only then advance.
|
|
176
178
|
4. **Persist progress after every chapter.** Update the state file
|
|
177
179
|
(`parts.<id>.chapters.<id>.status` = `done` / `failed` /
|
|
178
|
-
`skipped` + a timestamp).
|
|
179
|
-
|
|
180
|
-
|
|
180
|
+
`skipped` + a timestamp). The state file is the ONLY progress
|
|
181
|
+
tracker. Do NOT create harness tasks (`TaskCreate` / `TaskUpdate`)
|
|
182
|
+
for tutorial progress, they clutter the tester's task list and add
|
|
183
|
+
nothing the state file does not already hold.
|
|
181
184
|
5. **If the tester reports anything weird**, offer to record it in
|
|
182
185
|
`findings.md` (in the cwd). Reactive, not proactive: only offer
|
|
183
186
|
the findings log when the tester flags something, asks "is that
|
|
184
187
|
normal?", or pastes an error. Never on a clean OK.
|
|
185
|
-
6. **
|
|
186
|
-
it `done`
|
|
187
|
-
Announcement
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
188
|
+
6. **The chapter's confirmation IS the go-ahead.** When the tester
|
|
189
|
+
confirms a chapter, mark it `done` and advance straight to the next
|
|
190
|
+
chapter's Announcement. NEVER ask a separate "¿seguimos?" / "shall
|
|
191
|
+
we continue?" between chapters, the per-chapter confirmation already
|
|
192
|
+
gates advancement and a second question is exactly the redundancy
|
|
193
|
+
testers complain about. The ONLY continue-prompt is at a **part
|
|
194
|
+
boundary**, where you route back to the ToC menu. (`pace` controls
|
|
195
|
+
batching only, see the per-step cycle: `per-step` walks one chapter
|
|
196
|
+
per exchange, `auto-advance` may chain chapters that need no tester
|
|
197
|
+
action; neither asks "¿seguimos?".)
|
|
191
198
|
7. **If the state file already exists** when invoked, do not
|
|
192
199
|
overwrite anything. Read it, show progress, offer to continue,
|
|
193
200
|
pick another part, or start over (the last requires explicit
|
|
@@ -242,46 +249,87 @@ today. The detection wiring is here so mirrored skills at
|
|
|
242
249
|
|
|
243
250
|
## Per-step cycle (inside a chapter)
|
|
244
251
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
252
|
+
A **chapter is the unit of confirmation**. Walk it as ONE beat:
|
|
253
|
+
announce it, do the preparation, hand the tester everything they need
|
|
254
|
+
to do, and ask for confirmation **exactly once, at the end**. Do NOT
|
|
255
|
+
pepper a chapter with several "tell me when…" / "¿viste X?" prompts,
|
|
256
|
+
bundle the actions into a single instruction ("hacé A, después B, y
|
|
257
|
+
avisame cuando el mapa muestre …"). Split a chapter's confirmation
|
|
258
|
+
ONLY when a later action genuinely cannot start until the tester
|
|
259
|
+
finished an earlier one (e.g. they must have the browser open before
|
|
260
|
+
they can watch a node change), and even then keep it to the minimum.
|
|
261
|
+
Never call `TaskCreate` / `TaskUpdate` (Inviolable rule #4).
|
|
248
262
|
|
|
249
|
-
For every
|
|
263
|
+
For every chapter:
|
|
250
264
|
|
|
251
265
|
1. **Announcement**: "Capítulo N: `<title>`. ~M min." then a blank
|
|
252
266
|
line, then (optionally) one sentence of context on its own
|
|
253
267
|
paragraph. `N` is the 1-based index of the chapter inside its
|
|
254
|
-
part; it resets per part. The context paragraph renders ONLY
|
|
255
|
-
|
|
256
|
-
|
|
268
|
+
part; it resets per part. The context paragraph renders ONLY when
|
|
269
|
+
the source has a `**Context**:` field; if omitted, announce the
|
|
270
|
+
title alone. The title comes from the chapter's `title` in
|
|
257
271
|
`_manifest.yml` (translated per §Tone), not the internal id.
|
|
258
|
-
2. **Preparation** (if applicable): create or modify
|
|
259
|
-
the
|
|
260
|
-
3. **
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
272
|
+
2. **Preparation** (if applicable): create or modify the fixture
|
|
273
|
+
files the chapter calls for (silently, per §Silence).
|
|
274
|
+
3. **The tester's part**: the command block(s) and instructions,
|
|
275
|
+
bundled into one flow, closed by the single confirmation.
|
|
276
|
+
4. **Verification**: read their reply. If something errored, suggest
|
|
277
|
+
a fix before advancing. If fine, mark `done` and move straight into
|
|
278
|
+
the next chapter's Announcement (the confirmation is the go-ahead,
|
|
279
|
+
Inviolable rule #6, NO "¿seguimos?"). `pace` only decides batching:
|
|
280
|
+
`per-step` presents one chapter per exchange, `auto-advance` may
|
|
281
|
+
chain chapters that need no tester action into one response.
|
|
266
282
|
|
|
267
283
|
## Routing + menu (orchestrator)
|
|
268
284
|
|
|
269
|
-
- **
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
-
|
|
274
|
-
|
|
275
|
-
completed
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
- **
|
|
283
|
-
|
|
284
|
-
|
|
285
|
+
- **Always start at the menu.** On the first invocation (no state)
|
|
286
|
+
AND after any part closes / on resume, render the **start menu**:
|
|
287
|
+
the book ToC, numbered, and let the tester pick a part by number.
|
|
288
|
+
Part 0 (the prologue) is option 1, the recommended starting point,
|
|
289
|
+
so a brand-new tester just types `1`. Do NOT auto-enter a part; the
|
|
290
|
+
menu is the entry point every time. On later renders, prefix any
|
|
291
|
+
completed part's title with `✓ `.
|
|
292
|
+
- **Which parts to list**: parts in `order`, `status: active` only
|
|
293
|
+
(`planned` parts are hidden). A part with a `seed` (the campaign
|
|
294
|
+
parts) is always shown, even out of order, its `preflight: seed`
|
|
295
|
+
fast-forwards the project into it (SKILL.md §Entering a part). A
|
|
296
|
+
part with a `prereq` but NO `seed` (Part 7 `cli`) is shown only once
|
|
297
|
+
its `prereq` is `done`.
|
|
298
|
+
- **After the tester picks**: walk that part; when it ends, return to
|
|
299
|
+
this menu.
|
|
300
|
+
- **Adding content** is data-only: a new chapter in a part (or a new
|
|
301
|
+
`part-<id>.md` + a manifest row). Keep chapter-id prefixes matching
|
|
302
|
+
the file name so dispatch stays mechanical.
|
|
303
|
+
|
|
304
|
+
### Menu format
|
|
305
|
+
|
|
306
|
+
Render the menu numbered and formatted (NOT a bare list), translated
|
|
307
|
+
to the tester's language. A one-line intro, then per part a **bold
|
|
308
|
+
numbered title line** (number + title + `(~M min)`) as plain prose,
|
|
309
|
+
immediately followed by a single-level `> ` blockquote one-line
|
|
310
|
+
description (what the part covers, derived from its title + chapters).
|
|
311
|
+
NO blank line between a title and its description; ONE blank line
|
|
312
|
+
between parts; NO outer blockquote around the whole menu. Close with a
|
|
313
|
+
short "¿Cuál?" / "Which one?" on its own line. Sample (Claude variant,
|
|
314
|
+
fill the parts and durations from `_manifest.yml`):
|
|
315
|
+
|
|
316
|
+
```
|
|
317
|
+
¿Por dónde querés arrancar? Podés volver al menú cuando termines cada parte.
|
|
318
|
+
|
|
319
|
+
**1. El mapa en vivo** (~12 min)
|
|
320
|
+
> El prólogo: corrés `sm`, abrís el browser y ves el mapa actualizarse en vivo mientras editás `.md`. Si es tu primera vez, empezá por acá.
|
|
321
|
+
|
|
322
|
+
**2. El proyecto desde cero** (~8 min)
|
|
323
|
+
> Arrancás un proyecto real (un portfolio) y su harness `.claude/`.
|
|
324
|
+
|
|
325
|
+
¿Cuál?
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
This menu is the ONE exception to the "wrap tester-facing prose in a
|
|
329
|
+
single blockquote" rule: the intro, the bold titles and the trailing
|
|
330
|
+
"¿Cuál?" are plain prose; only the description lines carry `> `. On
|
|
331
|
+
non-Claude hosts the `> ` collapses to plain prose, indent each
|
|
332
|
+
description two spaces so it stays subordinate to its title.
|
|
285
333
|
|
|
286
334
|
## Resume / restart
|
|
287
335
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Part 0: The live map (prologue) - step library
|
|
2
2
|
|
|
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` (
|
|
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
5
|
## Chapter `init` - Your first node (~2 min)
|
|
6
6
|
|
|
@@ -8,47 +8,25 @@ The live-UI prologue: the tester runs `sm init`, opens the browser, and watches
|
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
sm init
|
|
11
|
-
|
|
11
|
+
sm
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
Expected: `.skill-map/skill-map.db` appears (plus config files)
|
|
14
|
+
Expected: `.skill-map/skill-map.db` appears (plus config files), and the initial scan reports a small node / link count from the demo-agent fixture. `sm init` runs and exits; `sm` then starts the UI server and stays running. (Agent context, do not narrate: pre-flight's `.skillmapignore` keeps the tutorial's own files, `sm-tutorial.md` / `findings.md` / `tutorial-state.yml`, out of the scan; `sm init` leaves that file alone since it only writes when absent.)
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Give the tester the whole flow in one message with ONE confirmation, do NOT pause for the `sm init` output separately. Don't hardcode the URL, the verb logs the bound `http://host:port` after listen. Tell the tester:
|
|
17
17
|
|
|
18
|
-
>
|
|
19
|
-
>
|
|
20
|
-
|
|
21
|
-
> (or any split that lets you see both). The terminal running
|
|
22
|
-
> `sm` can stay off to the side; it just prints scan progress
|
|
23
|
-
> lines and you don't need to read them.
|
|
18
|
+
> First, **open your browser** and put it side by side with this
|
|
19
|
+
> chat (browser on one half, chat on the other, any split that lets
|
|
20
|
+
> you see both) so you can watch the **Map** update in real time.
|
|
24
21
|
>
|
|
25
|
-
>
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
>
|
|
30
|
-
> URL where the UI is listening, copy that link and open it in the
|
|
31
|
-
> browser you just arranged. Tell me when you see the page load.
|
|
32
|
-
|
|
33
|
-
Wait for confirmation that the page loaded. Then tell the tester:
|
|
34
|
-
|
|
35
|
-
> You'll see exactly **one node** in the **Map**: `demo-agent`
|
|
36
|
-
> (kind `agent`). That's our starting point.
|
|
22
|
+
> Then, in your second terminal, run the two commands above: `sm
|
|
23
|
+
> init` sets the project up (it creates `.skill-map/` and runs a
|
|
24
|
+
> first scan), and `sm` boots the live UI. After a couple of seconds
|
|
25
|
+
> `sm` prints a URL, copy it and open it in your browser. The
|
|
26
|
+
> terminal keeps printing scan lines, you don't need to read them.
|
|
37
27
|
>
|
|
38
|
-
>
|
|
39
|
-
>
|
|
40
|
-
> expand handle on the far left (the `>` arrow, its tooltip reads
|
|
41
|
-
> "Expand files panel") to open it.
|
|
42
|
-
>
|
|
43
|
-
> Now walk the two views before we go on:
|
|
44
|
-
> 1. **Map**: the single agent node on the canvas.
|
|
45
|
-
> 2. **Files**: one row, with path / kind / metadata.
|
|
46
|
-
>
|
|
47
|
-
> Then, back in **Map**, click the node: the **Inspector** panel
|
|
48
|
-
> slides out with its frontmatter (the YAML block at the top of
|
|
49
|
-
> every `.md`, between the two `---` lines) and its links.
|
|
50
|
-
>
|
|
51
|
-
> Did the node show up?
|
|
28
|
+
> You'll see one node in the **Map**: `demo-agent`. Tell me when the
|
|
29
|
+
> page is open showing it.
|
|
52
30
|
|
|
53
31
|
Wait for confirmation. Mark `init`: done.
|
|
54
32
|
|
|
@@ -149,7 +127,7 @@ Create these four files (with `Write`), exactly in this order. Per §Provider de
|
|
|
149
127
|
Tell the tester:
|
|
150
128
|
|
|
151
129
|
> Look at the browser. Four new nodes should have popped in:
|
|
152
|
-
> `demo-skill`, `demo-command`,
|
|
130
|
+
> `demo-skill`, `demo-command`, **Demo TODO list**, and `demo-guideline`.
|
|
153
131
|
> Five total now, **still unconnected**: they're floating dots.
|
|
154
132
|
> The viewport auto-fits whenever a node is added or removed, so
|
|
155
133
|
> all five should be visible without panning.
|
|
@@ -182,11 +160,6 @@ Tell the tester:
|
|
|
182
160
|
> the field you'll edit next, so leave the card open and the
|
|
183
161
|
> change will be obvious.
|
|
184
162
|
>
|
|
185
|
-
> ⚠ Heads-up: the inspector header shows a couple of action
|
|
186
|
-
> buttons (**Bump version**, **Refresh body**). **Don't click
|
|
187
|
-
> them yet**, they write files to your project and we cover that
|
|
188
|
-
> flow deliberately in the annotations chapter. For now, just look.
|
|
189
|
-
>
|
|
190
163
|
> Now open `.claude/agents/demo-agent.md` in your editor of
|
|
191
164
|
> choice. In the **frontmatter** at the top of the file, change
|
|
192
165
|
> the `description:` field to any text you want, the actual
|
|
@@ -210,9 +183,9 @@ You edit `notes/todo.md` so it becomes the **hub** that points to each of the ot
|
|
|
210
183
|
- a `/slash` token → kind `invokes`
|
|
211
184
|
- a markdown link `[text](path)` → kind `references`
|
|
212
185
|
|
|
213
|
-
|
|
186
|
+
Five bullets, three kinds: `invokes` and `mentions` each appear twice, `references` once. The last two bullets both point at the **same** node (`demo-guideline`), on purpose: a markdown link AND an `@`-mention of it, so the next beat can contrast their confidence (the file link is certain, the name drop is a softer guess).
|
|
214
187
|
|
|
215
|
-
Apply with `Edit` on `notes/todo.md` (do not rewrite the file). Per §Provider detection, **substitute `.claude/` with the detected `<provider_dir>` and drop any bullet whose target node was not created in the `kinds` chapter** (on `agent-skills` / Antigravity there is no agent and no command → skip the `@demo-agent` and `/demo-command` bullets
|
|
188
|
+
Apply with `Edit` on `notes/todo.md` (do not rewrite the file). Per §Provider detection, **substitute `.claude/` with the detected `<provider_dir>` and drop any bullet whose target node was not created in the `kinds` chapter** (on `agent-skills` / Antigravity there is no agent and no command → skip the `@demo-agent` and `/demo-command` bullets; the `@demo-guideline` mention stays and is the faint connector on those providers too).
|
|
216
189
|
|
|
217
190
|
**Edit `notes/todo.md`**: append these bullets after the `# Pending` heading:
|
|
218
191
|
|
|
@@ -222,32 +195,34 @@ Apply with `Edit` on `notes/todo.md` (do not rewrite the file). Per §Provider d
|
|
|
222
195
|
- [ ] Trigger /demo-skill when the input lands.
|
|
223
196
|
- [ ] Re-read the
|
|
224
197
|
[demo-guideline](./demo-guideline.md) before shipping.
|
|
198
|
+
- [ ] Ping @demo-guideline if the conventions change.
|
|
225
199
|
```
|
|
226
200
|
|
|
227
201
|
Tell the tester:
|
|
228
202
|
|
|
229
|
-
> Look at the magic again.
|
|
230
|
-
> arrows light up between it and the other nodes, and the UI
|
|
231
|
-
>
|
|
203
|
+
> Look at the magic again. **Demo TODO list** is now the hub: five
|
|
204
|
+
> arrows light up between it and the other nodes, and the UI palette
|
|
205
|
+
> colours each arrow by the link kind it carries:
|
|
232
206
|
>
|
|
233
|
-
> - `
|
|
234
|
-
> - `
|
|
235
|
-
> - `
|
|
236
|
-
> - `
|
|
207
|
+
> - `Demo TODO list → demo-agent` (kind: `mentions`)
|
|
208
|
+
> - `Demo TODO list → demo-command` (kind: `invokes`)
|
|
209
|
+
> - `Demo TODO list → demo-skill` (kind: `invokes`)
|
|
210
|
+
> - `Demo TODO list → demo-guideline` (kind: `references`, the markdown link)
|
|
211
|
+
> - `Demo TODO list → demo-guideline` (kind: `mentions`, the @ handle)
|
|
237
212
|
>
|
|
238
213
|
> The kind comes from the syntax in the bullet: an `@handle` is
|
|
239
|
-
> always a mention, a `/command` is always an invoke, a
|
|
240
|
-
> link is always a reference.
|
|
241
|
-
> colours on the canvas (the two `invokes` share a colour, as you
|
|
242
|
-
> would expect).
|
|
214
|
+
> always a mention, a `/skill` or `/command` is always an invoke, a
|
|
215
|
+
> markdown link is always a reference. Five arrows, three kinds.
|
|
243
216
|
>
|
|
244
|
-
>
|
|
245
|
-
> Skill-map
|
|
246
|
-
>
|
|
247
|
-
>
|
|
248
|
-
>
|
|
249
|
-
>
|
|
250
|
-
>
|
|
217
|
+
> Now look closely: the two arrows to **demo-guideline** are not
|
|
218
|
+
> equally solid. Skill-map draws each connector's **confidence** as
|
|
219
|
+
> opacity, how sure it is the link is real. The markdown link
|
|
220
|
+
> `[demo-guideline](./demo-guideline.md)` points at a real file, so
|
|
221
|
+
> it's certain (1.00) and looks solid; the `@demo-guideline` mention
|
|
222
|
+
> is a looser name drop, a softer guess (0.50), so it's drawn fainter.
|
|
223
|
+
> A glance at the map tells you which links are rock solid and which
|
|
224
|
+
> are skill-map's best guess; the exact number per link is in the
|
|
225
|
+
> inspector, next chapter.
|
|
251
226
|
>
|
|
252
227
|
> Confirm when you see it. If a connector is missing, refresh the
|
|
253
228
|
> browser and let me know.
|
|
@@ -258,25 +233,27 @@ If a connector is missing, do not advance, the next chapter inspects the same hu
|
|
|
258
233
|
|
|
259
234
|
The connector opacity tells the confidence story at a glance; the exact per-link breakdown lives in the Inspector. Open it on the hub so the tester registers the surface before the `edit-link` chapter changes topology.
|
|
260
235
|
|
|
261
|
-
> 🆕 Open the Inspector for
|
|
262
|
-
> map).
|
|
263
|
-
> sections, **Outgoing** and **Incoming**.
|
|
264
|
-
> links under Outgoing (
|
|
265
|
-
> under Incoming;
|
|
266
|
-
>
|
|
267
|
-
>
|
|
268
|
-
>
|
|
236
|
+
> 🆕 Open the Inspector for **Demo TODO list** (click the node on
|
|
237
|
+
> the map). **Expand** the **Connections** section (it's collapsed
|
|
238
|
+
> by default): it has two sections, **Outgoing** and **Incoming**.
|
|
239
|
+
> Demo TODO list lists **5 links** under Outgoing (the hub) and 0
|
|
240
|
+
> under Incoming; open the Inspector for a targeted node to see its
|
|
241
|
+
> Incoming count (demo-guideline shows **2**, the reference plus the
|
|
242
|
+
> mention; the others 1 each). Each row shows the link kind
|
|
243
|
+
> (`mentions`, `invokes`, `references`) and a badge with its
|
|
244
|
+
> confidence: the numeric value. Here you'll see the contrast in
|
|
245
|
+
> numbers, the `references` to demo-guideline reads `1.00`, the
|
|
246
|
+
> `mentions` of it reads `0.50`.
|
|
247
|
+
>
|
|
248
|
+
> 💡 Tip: if all these changes left the nodes crowded together, the
|
|
249
|
+
> map toolbar has a **Re-arrange layout** button (tooltip "Re-arrange
|
|
250
|
+
> the visible nodes"): it tidies the layout so everything reads
|
|
251
|
+
> better. If you've moved nodes by hand it asks for confirmation
|
|
252
|
+
> first, otherwise it just re-arranges.
|
|
269
253
|
>
|
|
270
254
|
> Let me know when you see it.
|
|
271
255
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
> 💡 Tip: if all these changes left the nodes crowded together,
|
|
275
|
-
> the map toolbar has a **Reset layout** button: it re-runs the
|
|
276
|
-
> auto-layout so everything reads better. It asks for confirmation
|
|
277
|
-
> because it discards any positions you moved by hand.
|
|
278
|
-
|
|
279
|
-
Wait for confirmation. Mark `inspector`: done.
|
|
256
|
+
Mark `inspector`: done.
|
|
280
257
|
|
|
281
258
|
## Chapter `edit-link` - Edit a link, the topology changes (~3 min)
|
|
282
259
|
|
|
@@ -288,7 +265,7 @@ The server has been live since the `init` chapter, leave it running; this chapte
|
|
|
288
265
|
> delete the bullet that contains `@demo-agent`. Save. Watch the
|
|
289
266
|
> UI.
|
|
290
267
|
>
|
|
291
|
-
> Expected: the `
|
|
268
|
+
> Expected: the `Demo TODO list → demo-agent` connector (kind:
|
|
292
269
|
> `mentions`) disappears in real time. The two nodes stay in the
|
|
293
270
|
> **Map**; only the edge goes.
|
|
294
271
|
|
|
@@ -296,19 +273,18 @@ You verify by reading `notes/todo.md` to confirm the change was applied. (On `ag
|
|
|
296
273
|
|
|
297
274
|
## Chapter `workspace` - Navigate the workspace (files, search, isolate) (~2 min)
|
|
298
275
|
|
|
299
|
-
**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
|
|
276
|
+
**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. No file edits here, pure navigation, and the same `sm` session you booted back in the `init` chapter is still running.
|
|
300
277
|
|
|
301
278
|
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.
|
|
302
279
|
|
|
303
280
|
**Beat 1, open the Files panel (tester does this).**
|
|
304
281
|
|
|
305
|
-
>
|
|
306
|
-
>
|
|
307
|
-
>
|
|
308
|
-
>
|
|
309
|
-
>
|
|
310
|
-
>
|
|
311
|
-
> kind and how many links go in and out.
|
|
282
|
+
> Open the **Files** panel. It sits collapsed against the left edge
|
|
283
|
+
> by default: click the expand handle there (the `>` arrow, its
|
|
284
|
+
> tooltip reads "Expand files panel"). The sidebar opens into a
|
|
285
|
+
> **folder tree** (a nested view of your folders and the nodes inside
|
|
286
|
+
> them): your five nodes grouped under `.claude/` and `notes/`, each
|
|
287
|
+
> row showing its kind and how many links go in and out.
|
|
312
288
|
>
|
|
313
289
|
> Tell me when the tree is open.
|
|
314
290
|
|
|
@@ -318,27 +294,26 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
|
|
|
318
294
|
> `Search…`). Type `guideline`. Watch both halves at once: the tree
|
|
319
295
|
> narrows down to `demo-guideline` and the **Map** drops every node
|
|
320
296
|
> except `demo-guideline`. The search matches a node's name, path,
|
|
321
|
-
>
|
|
322
|
-
> needed.
|
|
297
|
+
> or description, and filters live as you type, no Enter needed.
|
|
323
298
|
>
|
|
324
299
|
> Now clear the box. All five nodes come back, in both the tree and
|
|
325
300
|
> the Map. Confirm you saw it filter and then restore.
|
|
326
301
|
|
|
327
302
|
**Beat 3, isolate (tester does this).**
|
|
328
303
|
|
|
329
|
-
> Last one. In the tree, find the
|
|
330
|
-
> edge there's a small **sitemap** icon (its tooltip reads
|
|
331
|
-
> this node and its direct links on the map"). Click it.
|
|
304
|
+
> Last one. In the tree, find the **Demo TODO list** row: at its
|
|
305
|
+
> right edge there's a small **sitemap** icon (its tooltip reads
|
|
306
|
+
> "Isolate this node and its direct links on the map"). Click it.
|
|
332
307
|
>
|
|
333
|
-
> The Map collapses to
|
|
334
|
-
> (`demo-command`, `demo-skill`, `demo-guideline`).
|
|
335
|
-
> which lost its only connector back in the last step,
|
|
336
|
-
> view, and the Inspector opens on
|
|
308
|
+
> The Map collapses to **Demo TODO list** plus only the nodes it
|
|
309
|
+
> links to (`demo-command`, `demo-skill`, `demo-guideline`).
|
|
310
|
+
> `demo-agent`, which lost its only connector back in the last step,
|
|
311
|
+
> drops out of view, and the Inspector opens on **Demo TODO list**.
|
|
312
|
+
> That's how you
|
|
337
313
|
> focus on one node's neighborhood when a map gets busy.
|
|
338
314
|
>
|
|
339
315
|
> To bring the rest back, look at the toolbar along the bottom of
|
|
340
|
-
> the Map: there's a **Show all** button (an eye icon
|
|
341
|
-
> "Clear the map selection and show every node again"). Click it and
|
|
316
|
+
> the Map: there's a **Show all** button (an eye icon). Click it and
|
|
342
317
|
> all five nodes return.
|
|
343
318
|
>
|
|
344
319
|
> Did the map isolate and then restore?
|
|
@@ -369,7 +344,7 @@ description: |
|
|
|
369
344
|
API_TOKEN: example-not-real
|
|
370
345
|
```
|
|
371
346
|
|
|
372
|
-
Confirm the file appears in the map as a sixth node (`notes/private-credentials`). The watcher sees it like any other `.md`, that's the point of the demo.
|
|
347
|
+
Confirm the file appears in the map as a sixth node (`notes/private-credentials`). The watcher sees it like any other `.md`, that's the point of the demo. (If the tester doesn't see it, they may need to click **Show all** in the map toolbar to clear any leftover selection.)
|
|
373
348
|
|
|
374
349
|
**Beat 2, you show the project structure (the agent does this).**
|
|
375
350
|
|
|
@@ -403,14 +378,19 @@ Adjust the actual tree shown to whatever `ls -la` returns, the goal is "tester r
|
|
|
403
378
|
|
|
404
379
|
Per Inviolable rule #2, the agent does NOT touch `.skillmapignore` with your `Edit` tool. Tell the tester to do it from their editor:
|
|
405
380
|
|
|
406
|
-
> Last step. Open `.skillmapignore` (it's at the cwd root) in
|
|
407
|
-
>
|
|
408
|
-
>
|
|
409
|
-
|
|
381
|
+
> Last step. Open `.skillmapignore` (it's at the cwd root) in your
|
|
382
|
+
> editor of choice. At the end of the file, on a new line, append
|
|
383
|
+
> this pattern:
|
|
384
|
+
|
|
385
|
+
```
|
|
386
|
+
notes/private-*.md
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
> Save the file. It's a glob (same as `.gitignore`):
|
|
410
390
|
> `notes/private-*.md` matches `private-credentials.md` and any
|
|
411
391
|
> future sibling `private-*.md`. A literal path
|
|
412
|
-
> (`notes/private-credentials.md`) would also work, the glob
|
|
413
|
-
>
|
|
392
|
+
> (`notes/private-credentials.md`) would also work, the glob teaches
|
|
393
|
+
> the broader habit.
|
|
414
394
|
>
|
|
415
395
|
> Watch the browser when you save. The
|
|
416
396
|
> `notes/private-credentials` node should disappear from the
|