@skill-map/cli 0.16.0 → 0.16.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.md +318 -132
- package/dist/cli.js +22 -10
- package/dist/cli.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/kernel/index.js +1 -1
- package/dist/kernel/index.js.map +1 -1
- package/dist/ui/{chunk-UTJNQ3I2.js → chunk-3NHGIRPN.js} +3 -3
- package/dist/ui/index.html +1 -1
- package/dist/ui/{main-Z2AVUR5B.js → main-ZNVY5M44.js} +1 -1
- package/package.json +1 -1
|
@@ -35,10 +35,58 @@ optional second phase (~30-40 min) covering the rest of the CLI.
|
|
|
35
35
|
|
|
36
36
|
## Tone
|
|
37
37
|
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
- Spanish (when the tester's language is Spanish): casual, neutral,
|
|
39
|
+
NOT rioplatense. Short sentences. No unnecessary jargon. Use
|
|
40
|
+
`tú` form, not `vos` — `puedes`, `mira`, `prueba`, `crea`, NOT
|
|
41
|
+
`podés`, `mirá`, `probá`, `creá`. Avoid Argentine fillers
|
|
42
|
+
(`dale`, `bueno`, `che`, `re-`, `genial`).
|
|
43
|
+
- Address the tester by name if they introduced themselves; if not,
|
|
44
|
+
the implicit second person from the verb is enough. No need to
|
|
45
|
+
invent a stand-in pronoun.
|
|
46
|
+
- Don't be condescending. If they ask for something that will
|
|
47
|
+
break, say so directly.
|
|
48
|
+
- **Translate product vocabulary into Spanish, do NOT leave English
|
|
49
|
+
loanwords embedded in Spanish prose.** When rendering tester-facing
|
|
50
|
+
copy in Spanish, use these equivalences:
|
|
51
|
+
- `kind` → `tipo` (skill-map talks about node "kinds"; in
|
|
52
|
+
Spanish output the word is `tipo` / `tipos`, NOT "kinds").
|
|
53
|
+
- `connector` → `conector`.
|
|
54
|
+
- `watcher` → `observador` (or rephrase: "skill-map sigue tus
|
|
55
|
+
cambios" instead of "el watcher detecta...").
|
|
56
|
+
- `scan` (verb) → `escanear`; `scan` (noun) → `escaneo`.
|
|
57
|
+
- `node` → `nodo`; `link` → `enlace` or `vínculo`; `frontmatter`
|
|
58
|
+
keep as-is (it's a technical term with no clean Spanish
|
|
59
|
+
equivalent — explain in parens per the rule above).
|
|
60
|
+
- File paths, frontmatter keys (`name`, `description`, `event`,
|
|
61
|
+
etc.), CLI verbs (`sm init`, `sm watch`), and code identifiers
|
|
62
|
+
stay English — that's the public surface, not jargon.
|
|
63
|
+
Anti-pattern (do NOT emit): "aparecen los otros cuatro kinds",
|
|
64
|
+
"el watcher detectó el cambio", "vamos a hacer un scan ahora".
|
|
65
|
+
Correct: "aparecen los otros cuatro tipos", "skill-map detectó
|
|
66
|
+
el cambio", "vamos a escanear ahora".
|
|
67
|
+
- **Stay silent during backstage work.** Do NOT narrate operational
|
|
68
|
+
steps you're about to take or internal checks. Forbidden patterns
|
|
69
|
+
include "Voy a verificar primero que el directorio esté listo",
|
|
70
|
+
"Let me run `sm version` to confirm the binary works", "Mientras
|
|
71
|
+
esperás, te cuento el estado", "Vamos a ir paso a paso", "OK, ya
|
|
72
|
+
preparé los archivos, ahora seguimos con...", and any other
|
|
73
|
+
meta-narration of your own plumbing. Pre-flight checks, file
|
|
74
|
+
reads, `Bash ls`, `Write` of fixtures, state-file updates — all
|
|
75
|
+
silent. The tester only hears from you when (a) you need them to
|
|
76
|
+
do something, (b) a reveal landed and you want a confirm, or
|
|
77
|
+
(c) something failed and they need to know. Between those
|
|
78
|
+
moments, work without commentary.
|
|
79
|
+
- **Explain technical terms in parentheses the first time you
|
|
80
|
+
mention them in a tester-facing blockquote.** Assume the tester
|
|
81
|
+
is non-technical; many will not know what `frontmatter`,
|
|
82
|
+
`findings`, `glob`, `watcher`, `connector`, `extractor`, or
|
|
83
|
+
`kind` mean. Examples:
|
|
84
|
+
- `frontmatter (the YAML block at the top of every .md, between the two --- lines)`
|
|
85
|
+
- `findings (any bugs or rough edges you spot — I'll log them for the team)`
|
|
86
|
+
- `glob (a pattern with wildcards, same shape as .gitignore)`
|
|
87
|
+
Internal narration in this SKILL.md does not need the gloss;
|
|
88
|
+
this rule is purely about what the agent says to the tester.
|
|
89
|
+
After the first mention in a session, the bare term is fine.
|
|
42
90
|
- **Messages addressed to the tester are rendered as Markdown
|
|
43
91
|
blockquotes** (lines prefixed with `> `): instructions, narrative
|
|
44
92
|
context, numbered choice menus, prompts, confirmations. The
|
|
@@ -49,20 +97,58 @@ optional second phase (~30-40 min) covering the rest of the CLI.
|
|
|
49
97
|
narrative and a command, write the narrative in a blockquote
|
|
50
98
|
*above* the bare code block (not inside it).
|
|
51
99
|
- **Mirror the tester's language**: if the first message they wrote
|
|
52
|
-
was in Spanish, run the conversation in
|
|
53
|
-
the Tone bullets above,
|
|
54
|
-
plain English. Internal narration in this
|
|
55
|
-
English regardless.
|
|
100
|
+
was in Spanish, run the conversation in neutral Spanish (per
|
|
101
|
+
the Tone bullets above — `tú` form, no rioplatense); if in
|
|
102
|
+
English, run it in plain English. Internal narration in this
|
|
103
|
+
SKILL.md stays in English regardless.
|
|
104
|
+
- **Never emit bilingual user-facing copy**. The samples in the
|
|
105
|
+
blockquotes throughout this SKILL are written in English as the
|
|
106
|
+
base; translate the entire block to Spanish when the tester
|
|
107
|
+
speaks Spanish. Do NOT show "Spanish / English" pairs inline,
|
|
108
|
+
do NOT keep one sentence in English while another is in Spanish,
|
|
109
|
+
do NOT sprinkle isolated Spanish words inside English paragraphs
|
|
110
|
+
(or vice versa). Pick one language and commit.
|
|
111
|
+
- **Fixture content also follows the tester's language**. When you
|
|
112
|
+
`Write` the demo `.md` files (frontmatter `description`, body
|
|
113
|
+
prose, link anchor text, list items), translate the human text
|
|
114
|
+
to the tester's language. **Keep these English regardless**:
|
|
115
|
+
file paths and filenames (`.claude/agents/demo-agent.md`),
|
|
116
|
+
frontmatter keys (`name`, `description`, `metadata`, `tools`,
|
|
117
|
+
`event`, etc.), node identifiers (`demo-agent`, `demo-skill`),
|
|
118
|
+
link target paths inside `[...]( ... )`, code snippets, fenced
|
|
119
|
+
blocks, and anything the kernel parses structurally. Only the
|
|
120
|
+
natural-language portions get translated — schema and identifiers
|
|
121
|
+
stay stable so the watcher and link extractors keep working.
|
|
56
122
|
|
|
57
123
|
## Inviolable rules
|
|
58
124
|
|
|
59
125
|
1. **You DO NOT run `sm` verbs for the tester** except `sm version`
|
|
60
126
|
ONCE during pre-flight to verify the install. Your responsibilities:
|
|
61
127
|
- Write fixture files and `tutorial-state.yml` directly in the cwd.
|
|
62
|
-
- Edit `.md` files when a step calls for it (the live-UI
|
|
63
|
-
needs this so the watcher has something to react to).
|
|
128
|
+
- Edit `.md` fixture files when a step calls for it (the live-UI
|
|
129
|
+
demo needs this so the watcher has something to react to).
|
|
64
130
|
- Read files to verify what the tester modified.
|
|
65
131
|
- Everything else is run by the tester.
|
|
132
|
+
- **Configuration files have two-mode access**: backstage setup
|
|
133
|
+
vs teach moment.
|
|
134
|
+
- **Backstage setup (you DO edit)**: right after `sm init` in
|
|
135
|
+
Step 1, you append the tutorial's internal entries
|
|
136
|
+
(`sm-tutorial.md`, `findings.md`, `tutorial-state.yml`,
|
|
137
|
+
`sm-tutorial-report.md`, etc.) to the freshly created
|
|
138
|
+
`.skillmapignore` with `Edit`. That is plumbing — the
|
|
139
|
+
tester does not need to learn that the tutorial hides its
|
|
140
|
+
own scaffolding from the scan. Do it silently and move on.
|
|
141
|
+
- **Teach moment (you DO NOT edit)**: any time the SKILL
|
|
142
|
+
calls for a change to `.skillmapignore`,
|
|
143
|
+
`.skill-map/settings.json`,
|
|
144
|
+
`.skill-map/settings.local.json`, or `.gitignore` AS PART
|
|
145
|
+
OF A REVEAL OR LESSON (e.g. Reveal 5 in Step 2 hides a
|
|
146
|
+
private node by appending a pattern), you describe the
|
|
147
|
+
edit in a blockquote and the tester applies it in their
|
|
148
|
+
own editor. The pedagogical point is that those files
|
|
149
|
+
belong to the user — they need to internalise where they
|
|
150
|
+
live and how to change them. Doing it for them in a
|
|
151
|
+
teach moment defeats the lesson.
|
|
66
152
|
2. **After every command block, stop and wait.** The tester pastes
|
|
67
153
|
the output or replies "OK" / "done". Only then do you advance.
|
|
68
154
|
3. **Persist progress after every step / stage.** Update
|
|
@@ -183,6 +269,12 @@ which sm
|
|
|
183
269
|
sm version
|
|
184
270
|
```
|
|
185
271
|
|
|
272
|
+
This check is **silent on success**. Do NOT narrate the result to
|
|
273
|
+
the tester ("`sm` v X.Y.Z responded, all good"). Save the version
|
|
274
|
+
internally and move on. The tester does not need a status report
|
|
275
|
+
for a backstage health check; speaking up here adds noise without
|
|
276
|
+
information. Only break the silence if something actually fails.
|
|
277
|
+
|
|
186
278
|
If `sm` isn't installed, tell the tester:
|
|
187
279
|
|
|
188
280
|
> You don't have `sm` yet. You'll need Node 20+ and then:
|
|
@@ -198,8 +290,8 @@ permissions issue. Suggest `node --version` and walk them through it.
|
|
|
198
290
|
|
|
199
291
|
### 3. Create the initial fixture (one node only)
|
|
200
292
|
|
|
201
|
-
The tutorial builds the graph **progressively** in
|
|
202
|
-
Step
|
|
293
|
+
The tutorial builds the graph **progressively** in five reveals during
|
|
294
|
+
Step 2 (Live UI). Right now, in pre-flight, you only create **one
|
|
203
295
|
file** — a single agent — so the tester's first look at the UI
|
|
204
296
|
shows exactly one node. The other four kinds (skill, command, hook,
|
|
205
297
|
note) and the connectors between all five are added later, one
|
|
@@ -273,16 +365,13 @@ route:
|
|
|
273
365
|
status: "not_started" # not_started | in_progress | done | declined
|
|
274
366
|
estimated_min: 35
|
|
275
367
|
short_steps:
|
|
276
|
-
- id: "1-
|
|
277
|
-
title: "sm version"
|
|
278
|
-
status: "pending"
|
|
279
|
-
- id: "2-init"
|
|
368
|
+
- id: "1-init"
|
|
280
369
|
title: "sm init"
|
|
281
370
|
status: "pending"
|
|
282
|
-
- id: "
|
|
371
|
+
- id: "2-ui-live"
|
|
283
372
|
title: "⭐ Live UI: bare sm + live edits by the agent"
|
|
284
373
|
status: "pending"
|
|
285
|
-
- id: "
|
|
374
|
+
- id: "3-handoff"
|
|
286
375
|
title: "Wrap-up of the demo and offer to keep going"
|
|
287
376
|
status: "pending"
|
|
288
377
|
long_stages:
|
|
@@ -336,16 +425,7 @@ to resume (re-invoke the skill from the same dir).
|
|
|
336
425
|
|
|
337
426
|
Always runs. The pedagogical hook is the live UI.
|
|
338
427
|
|
|
339
|
-
### Step 1 — `sm
|
|
340
|
-
|
|
341
|
-
Already done in pre-flight. Confirm to the tester in one short
|
|
342
|
-
blockquote, translated to their language:
|
|
343
|
-
|
|
344
|
-
> OK, `sm` v X.Y.Z responded. Let's go.
|
|
345
|
-
|
|
346
|
-
Mark `1-version: done`.
|
|
347
|
-
|
|
348
|
-
### Step 2 — `sm init` (1 min)
|
|
428
|
+
### Step 1 — `sm init` (1 min)
|
|
349
429
|
|
|
350
430
|
**Context**: `sm init` creates a hidden `.skill-map/` folder in the
|
|
351
431
|
cwd holding the database where skill-map stores what it learns about
|
|
@@ -376,27 +456,34 @@ export.*
|
|
|
376
456
|
dump.sql
|
|
377
457
|
```
|
|
378
458
|
|
|
379
|
-
Mark `
|
|
459
|
+
Mark `1-init: done`.
|
|
380
460
|
|
|
381
|
-
### Step
|
|
461
|
+
### Step 2 — ⭐ Live UI (4-5 min)
|
|
382
462
|
|
|
383
463
|
**Context**: typing `sm` alone (no arguments) in an initialised dir
|
|
384
464
|
starts the UI server with the watcher built in. One process, one
|
|
385
465
|
terminal: it boots the server, scans the `.md` files, detects
|
|
386
466
|
changes, and pushes events over WebSocket to the live UI.
|
|
387
467
|
|
|
388
|
-
This step has **
|
|
389
|
-
files while the server stays up
|
|
468
|
+
This step has **five reveals**, each one driven by you editing
|
|
469
|
+
files while the server stays up — except Reveal 3, where the
|
|
470
|
+
tester takes the keyboard for the first time.
|
|
390
471
|
|
|
391
472
|
1. **Reveal 1 (boot)** — one node alone (the agent).
|
|
392
473
|
2. **Reveal 2 (kinds)** — the four other kinds appear as new nodes,
|
|
393
474
|
still unconnected.
|
|
394
|
-
3. **Reveal 3 (
|
|
475
|
+
3. **Reveal 3 (your first edit)** — the **tester** edits the
|
|
476
|
+
`description` of the agent's `.md` and watches the card
|
|
477
|
+
refresh in the graph.
|
|
478
|
+
4. **Reveal 4 (connectors)** — the connectors light up between all
|
|
395
479
|
five nodes.
|
|
480
|
+
5. **Reveal 5 (ignore)** — a private file appears, then disappears
|
|
481
|
+
the moment a pattern is added to `.skillmapignore`.
|
|
396
482
|
|
|
397
|
-
The pedagogical arc: a single dot → a constellation of dots →
|
|
398
|
-
|
|
399
|
-
|
|
483
|
+
The pedagogical arc: a single dot → a constellation of dots →
|
|
484
|
+
your own edit lands → graph → a graph that respects the user's
|
|
485
|
+
ignore list. Each reveal stops at a confirm prompt before you do
|
|
486
|
+
the next.
|
|
400
487
|
|
|
401
488
|
**Command** (one terminal):
|
|
402
489
|
|
|
@@ -404,20 +491,52 @@ next.
|
|
|
404
491
|
sm
|
|
405
492
|
```
|
|
406
493
|
|
|
494
|
+
Before Reveal 1, ask the tester to set up a **side-by-side view** so
|
|
495
|
+
they can watch the magic happen without alt-tabbing every reveal.
|
|
496
|
+
Tell the tester:
|
|
497
|
+
|
|
498
|
+
> Arrange your screen so two windows are visible at the same time:
|
|
499
|
+
>
|
|
500
|
+
> 1. **The browser** — where the graph will update in real time.
|
|
501
|
+
> Leave it ready to navigate to a URL; we'll get the link in a
|
|
502
|
+
> moment.
|
|
503
|
+
> 2. **This terminal** — the one where you're talking to me. You'll
|
|
504
|
+
> see me announce each reveal here, then confirm what you see
|
|
505
|
+
> in the browser.
|
|
506
|
+
>
|
|
507
|
+
> The third window — the terminal running `sm` — you can leave
|
|
508
|
+
> minimized or off to the side; it will just print scan progress
|
|
509
|
+
> lines and you don't need to read them.
|
|
510
|
+
>
|
|
511
|
+
> A typical layout: browser on the left half, this chat on the
|
|
512
|
+
> right half. Or any split that lets you see both at once. Tell
|
|
513
|
+
> me when you're set up and we start.
|
|
514
|
+
|
|
515
|
+
Wait for confirmation before moving on. Once they're ready, prompt
|
|
516
|
+
them to launch the server and open the link it prints — without
|
|
517
|
+
hardcoding the URL here, since the verb itself is the source of
|
|
518
|
+
truth (it logs the bound `http://host:port` after listen):
|
|
519
|
+
|
|
520
|
+
> In the terminal you opened for `sm`, run the command above. After
|
|
521
|
+
> a couple of seconds it will print a line with the URL where the
|
|
522
|
+
> UI is listening — copy that link and open it in the browser you
|
|
523
|
+
> just arranged. Tell me when you see the page load.
|
|
524
|
+
|
|
525
|
+
Wait for confirmation that the page loaded.
|
|
526
|
+
|
|
407
527
|
#### Reveal 1 — the lone agent
|
|
408
528
|
|
|
409
529
|
Tell the tester:
|
|
410
530
|
|
|
411
|
-
> The server is running. Open the URL it printed (typically
|
|
412
|
-
> **http://127.0.0.1:4242**).
|
|
413
|
-
>
|
|
414
531
|
> You'll see exactly **one node** in the graph: `demo-agent` (kind
|
|
415
532
|
> `agent`). That's our starting point.
|
|
416
533
|
>
|
|
417
534
|
> Walk the 3 views before we go on:
|
|
418
535
|
> 1. **Graph** — the single agent node.
|
|
419
536
|
> 2. **List** — one row, with path / kind / metadata.
|
|
420
|
-
> 3. **Inspector** — click the node to see frontmatter
|
|
537
|
+
> 3. **Inspector** — click the node to see its frontmatter (the
|
|
538
|
+
> YAML block at the top of every `.md`, between the two `---`
|
|
539
|
+
> lines) and links.
|
|
421
540
|
>
|
|
422
541
|
> Did the node show up?
|
|
423
542
|
|
|
@@ -507,42 +626,70 @@ Create these four files (with `Write`), exactly in this order:
|
|
|
507
626
|
wired into the rest of the fixture next.
|
|
508
627
|
```
|
|
509
628
|
|
|
510
|
-
4. `notes/todo.md` (kind: note
|
|
511
|
-
that we exploit later in stage L4):
|
|
629
|
+
4. `notes/todo.md` (kind: note):
|
|
512
630
|
```markdown
|
|
513
631
|
---
|
|
514
632
|
name: Demo TODO list
|
|
515
633
|
description: |
|
|
516
634
|
Live list of things to review in the demo. Will become the
|
|
517
635
|
hub between skill / agent / command / hook in the next
|
|
518
|
-
reveal.
|
|
519
|
-
stage later on.
|
|
636
|
+
reveal.
|
|
520
637
|
tags: [notes, demo]
|
|
521
638
|
metadata:
|
|
522
639
|
version: "1.0.0"
|
|
523
640
|
---
|
|
524
641
|
|
|
525
642
|
# Pending
|
|
526
|
-
|
|
527
|
-
- [ ] Document the [flow diagram](./missing-page.md) — broken
|
|
528
|
-
link on purpose, leave it.
|
|
529
643
|
```
|
|
530
644
|
|
|
531
645
|
Tell the tester:
|
|
532
646
|
|
|
533
|
-
>
|
|
534
|
-
>
|
|
647
|
+
> Look at the browser. Four new nodes should have popped in:
|
|
648
|
+
> `demo-skill`, `demo-command`, `demo-hook`, and
|
|
535
649
|
> `notes/todo`. Five total now, **still unconnected** — they're
|
|
536
|
-
> floating dots.
|
|
537
|
-
>
|
|
538
|
-
> If you don't see them, zoom out with the mouse wheel or the UI
|
|
539
|
-
> zoom control — new nodes sometimes land off-screen.
|
|
650
|
+
> floating dots. The viewport auto-fits whenever a node is added or
|
|
651
|
+
> removed, so all five should be visible without panning.
|
|
540
652
|
>
|
|
541
653
|
> Did the four appear? Confirm so we can wire them up.
|
|
542
654
|
|
|
543
655
|
Wait for confirmation.
|
|
544
656
|
|
|
545
|
-
#### Reveal 3 —
|
|
657
|
+
#### Reveal 3 — your first edit
|
|
658
|
+
|
|
659
|
+
Up to here you've been watching the agent write files. Now hand
|
|
660
|
+
the keyboard over: the lesson is that the watcher reacts to
|
|
661
|
+
**any** `.md` edit under the cwd, not just to files the agent
|
|
662
|
+
authors. After this beat, the tester has the muscle memory for
|
|
663
|
+
"save → graph updates", which Reveal 5 (`.skillmapignore`) reuses
|
|
664
|
+
verbatim.
|
|
665
|
+
|
|
666
|
+
Tell the tester:
|
|
667
|
+
|
|
668
|
+
> Your turn. First, in the browser, **expand the `demo-agent`
|
|
669
|
+
> card** (click the chevron / arrow on the card to open it). That
|
|
670
|
+
> reveals the description currently showing for the node — that's
|
|
671
|
+
> the field you'll edit next, so leave the card open and the
|
|
672
|
+
> change will be obvious.
|
|
673
|
+
>
|
|
674
|
+
> Now open `.claude/agents/demo-agent.md` in your editor of
|
|
675
|
+
> choice. In the **frontmatter** (the YAML block at the top of
|
|
676
|
+
> the file, between the two `---` lines), change the
|
|
677
|
+
> `description:` field to any text you want — the actual content
|
|
678
|
+
> does not matter, just make it different from what's there now.
|
|
679
|
+
> Save the file.
|
|
680
|
+
>
|
|
681
|
+
> Watch the browser. The `demo-agent` card should refresh its
|
|
682
|
+
> description in real time, no reload, no Ctrl+C — same watcher
|
|
683
|
+
> that picked up the four new nodes a moment ago, this time
|
|
684
|
+
> reacting to YOUR edit.
|
|
685
|
+
>
|
|
686
|
+
> Confirm so we wire the five up.
|
|
687
|
+
|
|
688
|
+
Wait for confirmation. You MAY use `Read` on the file afterwards
|
|
689
|
+
to verify the change landed (read-only, allowed under Inviolable
|
|
690
|
+
rule #1) before moving on.
|
|
691
|
+
|
|
692
|
+
#### Reveal 4 — the connectors light up
|
|
546
693
|
|
|
547
694
|
Now you edit the existing files to add the cross-fixture links —
|
|
548
695
|
each one becomes a connector in the graph. Apply with `Edit` (do
|
|
@@ -571,11 +718,9 @@ not rewrite the files):
|
|
|
571
718
|
See [pending items](../../notes/todo.md) for operational
|
|
572
719
|
context.
|
|
573
720
|
```
|
|
574
|
-
5. **Edit `notes/todo.md`** —
|
|
575
|
-
|
|
721
|
+
5. **Edit `notes/todo.md`** — append these two bullets after the
|
|
722
|
+
`# Pending` heading:
|
|
576
723
|
```markdown
|
|
577
|
-
- [ ] Document the [flow diagram](./missing-page.md) — broken
|
|
578
|
-
link on purpose, leave it.
|
|
579
724
|
- [ ] Polish the
|
|
580
725
|
[demo-skill](../.claude/skills/demo-skill/SKILL.md)
|
|
581
726
|
prompt.
|
|
@@ -585,8 +730,8 @@ not rewrite the files):
|
|
|
585
730
|
|
|
586
731
|
Tell the tester:
|
|
587
732
|
|
|
588
|
-
>
|
|
589
|
-
>
|
|
733
|
+
> Look at the magic again. The five floating nodes should now be
|
|
734
|
+
> wired together — connectors light
|
|
590
735
|
> up between them as the watcher picks up each edit:
|
|
591
736
|
>
|
|
592
737
|
> - `demo-skill → demo-agent`
|
|
@@ -595,90 +740,118 @@ Tell the tester:
|
|
|
595
740
|
> - `demo-hook → notes/todo`
|
|
596
741
|
> - `notes/todo → demo-skill`, `notes/todo → demo-hook`
|
|
597
742
|
>
|
|
598
|
-
>
|
|
599
|
-
>
|
|
600
|
-
> connector in the graph — it surfaces as a `broken-ref` **issue**
|
|
601
|
-
> on the `notes/todo` node (look for a warning marker on the node
|
|
602
|
-
> or open it in the inspector). We'll explore that issue properly
|
|
603
|
-
> in stage L4 if you continue with the deeper part.
|
|
604
|
-
>
|
|
605
|
-
> Confirmá / confirm. If a connector is missing, refresh the
|
|
606
|
-
> browser and tell me.
|
|
743
|
+
> Confirm. If a connector is missing, refresh the browser and tell
|
|
744
|
+
> me.
|
|
607
745
|
|
|
608
|
-
Wait for confirmation. **Do NOT move on to Reveal
|
|
609
|
-
connectors are confirmed visible — Reveal
|
|
746
|
+
Wait for confirmation. **Do NOT move on to Reveal 5** until the
|
|
747
|
+
connectors are confirmed visible — Reveal 5 reuses the same live UI
|
|
610
748
|
session.
|
|
611
749
|
|
|
612
|
-
#### Reveal
|
|
750
|
+
#### Reveal 5 — silence a private file via `.skillmapignore`
|
|
613
751
|
|
|
614
|
-
The first
|
|
615
|
-
edits. Reveal
|
|
752
|
+
The first four reveals showed the watcher picking up new files and
|
|
753
|
+
edits (yours and theirs). Reveal 5 flips the direction: a file the
|
|
754
|
+
tester DOES NOT want
|
|
616
755
|
in the graph (a draft, a scratch file, a secret) gets hidden by a
|
|
617
756
|
single line in `.skillmapignore`. Same live mechanism — no restart.
|
|
618
757
|
|
|
619
758
|
`sm init` already wrote a starter `.skillmapignore` at the scope
|
|
620
|
-
root. The
|
|
759
|
+
root. The flow has three beats:
|
|
621
760
|
|
|
622
|
-
|
|
623
|
-
simulates a file the tester would never want surfacing publicly:
|
|
624
|
-
```markdown
|
|
625
|
-
---
|
|
626
|
-
name: private-credentials
|
|
627
|
-
description: |
|
|
628
|
-
Personal API tokens — exists in the repo but should not show
|
|
629
|
-
up in the skill-map graph. Demonstrates the .skillmapignore
|
|
630
|
-
flow.
|
|
631
|
-
metadata:
|
|
632
|
-
version: "0.0.1"
|
|
633
|
-
---
|
|
761
|
+
**Beat A — you create one new fixture file (the agent does this).**
|
|
634
762
|
|
|
635
|
-
|
|
763
|
+
`Write` `notes/private-credentials.md` — kind `note`, simulates a
|
|
764
|
+
file the tester would never want surfacing publicly:
|
|
636
765
|
|
|
637
|
-
|
|
638
|
-
|
|
766
|
+
```markdown
|
|
767
|
+
---
|
|
768
|
+
name: private-credentials
|
|
769
|
+
description: |
|
|
770
|
+
Personal API tokens — exists in the repo but should not show
|
|
771
|
+
up in the skill-map graph. Demonstrates the .skillmapignore
|
|
772
|
+
flow.
|
|
773
|
+
metadata:
|
|
774
|
+
version: "0.0.1"
|
|
775
|
+
---
|
|
639
776
|
|
|
640
|
-
|
|
641
|
-
(`notes/private-credentials`). The watcher sees it like any
|
|
642
|
-
other `.md` — that's the point of the demo.
|
|
777
|
+
# Private
|
|
643
778
|
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
```
|
|
647
|
-
notes/private-*.md
|
|
648
|
-
```
|
|
649
|
-
(Pattern syntax mirrors `.gitignore` — kaelzhang's `ignore`
|
|
650
|
-
under the hood. A literal path like `notes/private-credentials.md`
|
|
651
|
-
would also work; the glob teaches the broader habit.)
|
|
779
|
+
API_TOKEN: example-not-real
|
|
780
|
+
```
|
|
652
781
|
|
|
653
|
-
|
|
654
|
-
|
|
782
|
+
Confirm the file appears in the graph as a sixth node
|
|
783
|
+
(`notes/private-credentials`). The watcher sees it like any
|
|
784
|
+
other `.md` — that's the point of the demo.
|
|
655
785
|
|
|
656
|
-
|
|
786
|
+
**Beat B — you show the project structure (the agent does this).**
|
|
787
|
+
|
|
788
|
+
Before asking the tester to touch `.skillmapignore`, give them a
|
|
789
|
+
mental map of the folder so they know where the file lives and
|
|
790
|
+
what's around it. Use `Bash` (`ls -la` and `ls -la notes/` if a
|
|
791
|
+
deeper view helps) and present the listing inside a blockquote so
|
|
792
|
+
the tester sees what their cwd holds:
|
|
657
793
|
|
|
658
|
-
>
|
|
659
|
-
>
|
|
660
|
-
> needed — same watcher, opposite direction.
|
|
794
|
+
> Antes del último paso, esto es lo que tenés en el directorio
|
|
795
|
+
> ahora mismo:
|
|
661
796
|
>
|
|
662
|
-
>
|
|
797
|
+
> ```
|
|
798
|
+
> . ← your cwd
|
|
799
|
+
> ├── .claude/
|
|
800
|
+
> │ ├── agents/demo-agent.md
|
|
801
|
+
> │ ├── commands/demo-command.md
|
|
802
|
+
> │ ├── hooks/demo-hook.md
|
|
803
|
+
> │ └── skills/demo-skill/SKILL.md
|
|
804
|
+
> ├── .skill-map/ ← project DB + settings (managed)
|
|
805
|
+
> ├── .skillmapignore ← the file we're about to edit
|
|
806
|
+
> ├── notes/
|
|
807
|
+
> │ ├── todo.md
|
|
808
|
+
> │ └── private-credentials.md ← what we want to hide
|
|
809
|
+
> └── sm-tutorial.md ← the tutorial file you loaded
|
|
810
|
+
> ```
|
|
811
|
+
>
|
|
812
|
+
> The `.skillmapignore` at the root is the file we'll touch
|
|
813
|
+
> next. Same syntax as `.gitignore`. Anything matching a pattern
|
|
814
|
+
> there is invisible to skill-map's scan.
|
|
815
|
+
|
|
816
|
+
Adjust the actual tree shown to whatever `ls -la` returns — the
|
|
817
|
+
goal is "tester recognises their own filesystem", not a copy of
|
|
818
|
+
the snippet above.
|
|
819
|
+
|
|
820
|
+
**Beat C — the tester edits `.skillmapignore` (NOT the agent).**
|
|
821
|
+
|
|
822
|
+
Per Inviolable rule #1, you DO NOT touch `.skillmapignore` with
|
|
823
|
+
your `Edit` tool. Tell the tester to do it from their editor:
|
|
824
|
+
|
|
825
|
+
> Last step. Open `.skillmapignore` (it's at the cwd root) in
|
|
826
|
+
> your editor of choice. At the end of the file, on a new line,
|
|
827
|
+
> append:
|
|
828
|
+
>
|
|
829
|
+
> ```
|
|
830
|
+
> notes/private-*.md
|
|
831
|
+
> ```
|
|
663
832
|
>
|
|
664
|
-
>
|
|
665
|
-
>
|
|
666
|
-
>
|
|
667
|
-
>
|
|
668
|
-
>
|
|
833
|
+
> Save the file. The pattern uses a glob (same as `.gitignore`):
|
|
834
|
+
> `notes/private-*.md` matches `private-credentials.md` and any
|
|
835
|
+
> future sibling `private-*.md`. A literal path
|
|
836
|
+
> (`notes/private-credentials.md`) would also work — the glob
|
|
837
|
+
> teaches the broader habit.
|
|
669
838
|
>
|
|
670
|
-
>
|
|
671
|
-
>
|
|
672
|
-
>
|
|
839
|
+
> Watch the browser when you save. The
|
|
840
|
+
> `notes/private-credentials` node should disappear from the
|
|
841
|
+
> graph in real time, without restarting anything. Six nodes
|
|
842
|
+
> back to five.
|
|
673
843
|
>
|
|
674
844
|
> Did the node vanish?
|
|
675
845
|
|
|
676
|
-
|
|
677
|
-
|
|
846
|
+
After they confirm, you MAY use `Read` on `.skillmapignore` to
|
|
847
|
+
verify the appended pattern landed correctly (in case
|
|
848
|
+
`sm check` later reports something odd) — that is read-only and
|
|
849
|
+
allowed. Once confirmed, ask them to stop the server with
|
|
850
|
+
**Ctrl+C** in the terminal before continuing.
|
|
678
851
|
|
|
679
|
-
Mark `
|
|
852
|
+
Mark `2-ui-live: done`.
|
|
680
853
|
|
|
681
|
-
### Step
|
|
854
|
+
### Step 3 — Wrap-up of the demo and offer to keep going (30 s)
|
|
682
855
|
|
|
683
856
|
> All set! That's the heart of skill-map: you edit a `.md` and the
|
|
684
857
|
> UI sees it instantly. In **~7 minutes** you've already seen the
|
|
@@ -733,9 +906,9 @@ Save into `tester.level` and modulate:
|
|
|
733
906
|
they can do it from their editor.
|
|
734
907
|
|
|
735
908
|
This stage needs the server running. **Check first** before asking
|
|
736
|
-
them to launch it: many testers leave it running from Step
|
|
909
|
+
them to launch it: many testers leave it running from Step 2 and
|
|
737
910
|
the demo wraps without an explicit Ctrl+C. Word the prompt as a
|
|
738
|
-
conditional, e.g. "If the server from Step
|
|
911
|
+
conditional, e.g. "If the server from Step 2 is still up, leave it
|
|
739
912
|
— if not, run `sm` again from the tutorial cwd and reopen the
|
|
740
913
|
browser." Do not just say "start it again" — that risks a second
|
|
741
914
|
process trying to bind the same port and confusing the tester.
|
|
@@ -746,7 +919,8 @@ process trying to bind the same port and confusing the tester.
|
|
|
746
919
|
>
|
|
747
920
|
> Expected: the `demo-skill → demo-agent` connector disappears. If
|
|
748
921
|
> `demo-agent.md` ends up with no one linking to it, it shows up as
|
|
749
|
-
> an orphan (we'll
|
|
922
|
+
> an orphan (we'll create a similar dangling situation in stage L4
|
|
923
|
+
> to see how `sm check` flags it).
|
|
750
924
|
|
|
751
925
|
You verify by reading `.claude/skills/demo-skill/SKILL.md` to confirm
|
|
752
926
|
the change was applied. Once they confirm, ask them to **Ctrl+C**
|
|
@@ -763,8 +937,9 @@ sm check
|
|
|
763
937
|
```
|
|
764
938
|
|
|
765
939
|
Expected: you see the 5 fixture nodes listed with their kind;
|
|
766
|
-
`check`
|
|
767
|
-
at
|
|
940
|
+
`check` runs the deterministic rules and reports a clean fixture
|
|
941
|
+
(no issues at this point — we will plant one in stage L4 and watch
|
|
942
|
+
the rule catch it).
|
|
768
943
|
|
|
769
944
|
### Stage L3 — ASCII: graph + export (~3 min)
|
|
770
945
|
|
|
@@ -781,10 +956,18 @@ or json.
|
|
|
781
956
|
|
|
782
957
|
### Stage L4 — Issues: broken refs (~3 min)
|
|
783
958
|
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
959
|
+
`broken-ref` is one of the deterministic rules `sm check` runs.
|
|
960
|
+
We'll plant one and watch it surface — that's the easiest way to
|
|
961
|
+
internalise that it is an **issue** on a node, NOT a graph
|
|
962
|
+
connector and NOT the same thing as an "orphan".
|
|
963
|
+
|
|
964
|
+
Ask the tester to **append one bullet** to `notes/todo.md`:
|
|
965
|
+
|
|
966
|
+
```markdown
|
|
967
|
+
- [ ] Document the [flow diagram](./missing-page.md).
|
|
968
|
+
```
|
|
969
|
+
|
|
970
|
+
`./missing-page.md` deliberately doesn't exist. Save the file.
|
|
788
971
|
|
|
789
972
|
```bash
|
|
790
973
|
sm check
|
|
@@ -795,7 +978,9 @@ sm check --json
|
|
|
795
978
|
Expected: the warning surfaces the dangling link from
|
|
796
979
|
`notes/todo.md` to the non-existent `missing-page.md`. The
|
|
797
980
|
`--rules` filter lets you focus on a single issue type; `--json`
|
|
798
|
-
emits the structured payload (useful for CI / scripting).
|
|
981
|
+
emits the structured payload (useful for CI / scripting). When
|
|
982
|
+
done, the tester can leave the bullet in place or delete it — the
|
|
983
|
+
rest of the deep-dive doesn't depend on it.
|
|
799
984
|
|
|
800
985
|
> **Heads up about scope** (mention only if the tester asks):
|
|
801
986
|
>
|
|
@@ -846,8 +1031,9 @@ generate a report file to send to Pusher**:
|
|
|
846
1031
|
|
|
847
1032
|
> Thanks! That's a wrap. Before closing:
|
|
848
1033
|
>
|
|
849
|
-
> Want me to generate a consolidated **report file** (recap of
|
|
850
|
-
> walkthrough + findings
|
|
1034
|
+
> Want me to generate a consolidated **report file** (a recap of
|
|
1035
|
+
> the walkthrough + findings — the bugs or rough edges you spotted
|
|
1036
|
+
> along the way — + environment info) ready to send to **Pusher**?
|
|
851
1037
|
> I'll save it as `<cwd>/sm-tutorial-report.md`.
|
|
852
1038
|
>
|
|
853
1039
|
> 1. **Yes, generate it**
|