@skill-map/cli 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/tutorial/sm-master.md +241 -132
- package/dist/cli/tutorial/sm-tutorial.md +371 -317
- package/dist/cli.js +4219 -4259
- package/dist/cli.js.map +1 -1
- package/dist/conformance/index.js.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/kernel/index.d.ts +1 -10
- package/dist/kernel/index.js +4 -4
- package/dist/kernel/index.js.map +1 -1
- package/dist/migrations/001_initial.sql +7 -4
- package/dist/ui/chunk-LTSP2F6C.js +123 -0
- package/dist/ui/chunk-UAG2DUVV.js +1 -0
- package/dist/ui/index.html +1 -1
- package/dist/ui/{main-CYRAD3L6.js → main-LM44IIOO.js} +2 -2
- package/migrations/001_initial.sql +7 -4
- package/package.json +2 -2
- package/dist/ui/chunk-Q64EKSUB.js +0 -123
- package/dist/ui/chunk-UVILXZ5L.js +0 -1
|
@@ -3,9 +3,9 @@ name: sm-tutorial
|
|
|
3
3
|
description: |
|
|
4
4
|
Interactive tutorial for testing the skill-map CLI and UI. Aimed at
|
|
5
5
|
testers who are downloading the tool for the first time. The flow
|
|
6
|
-
starts with a quick demo (~10 min) that showcases the live UI
|
|
6
|
+
starts with a quick demo (~10 min) that showcases the live UI, the
|
|
7
7
|
tester runs `sm`, opens the browser, and watches the UI update as
|
|
8
|
-
the agent edits `.md` files
|
|
8
|
+
the agent edits `.md` files, and at the end offers an optional
|
|
9
9
|
deep-dive (~20-30 min) covering the rest of the CLI with flags and
|
|
10
10
|
advanced verbs. The skill is invoked from an empty directory and
|
|
11
11
|
lays the fixture and tutorial files there directly (no wrapper).
|
|
@@ -14,7 +14,7 @@ description: |
|
|
|
14
14
|
"test skill-map".
|
|
15
15
|
---
|
|
16
16
|
|
|
17
|
-
# sm-tutorial
|
|
17
|
+
# sm-tutorial: interactive walkthrough for skill-map
|
|
18
18
|
|
|
19
19
|
You are the official skill-map tutorial. Your job is to walk the tester
|
|
20
20
|
through the UI and the commands **without running `sm` commands for
|
|
@@ -39,7 +39,7 @@ optional second phase (~20-30 min) covering the rest of the CLI.
|
|
|
39
39
|
|
|
40
40
|
- Spanish (when the tester's language is Spanish): casual, neutral,
|
|
41
41
|
NOT rioplatense. Short sentences. No unnecessary jargon. Use
|
|
42
|
-
`tú` form, not `vos
|
|
42
|
+
`tú` form, not `vos`, `puedes`, `mira`, `prueba`, `crea`, NOT
|
|
43
43
|
`podés`, `mirá`, `probá`, `creá`. Avoid Argentine fillers
|
|
44
44
|
(`dale`, `bueno`, `che`, `re-`, `genial`). Also avoid overly
|
|
45
45
|
colloquial imperatives even when they're grammatical: prefer
|
|
@@ -60,17 +60,17 @@ optional second phase (~20-30 min) covering the rest of the CLI.
|
|
|
60
60
|
Spanish output the word is `tipo` / `tipos`, NOT "kinds").
|
|
61
61
|
- `connector` / `edge` → `conector` (**NEVER** `arista`, even
|
|
62
62
|
though it's the common Spanish translation for graph edge;
|
|
63
|
-
skill-map's house word is `conector` everywhere
|
|
63
|
+
skill-map's house word is `conector` everywhere, UI, docs,
|
|
64
64
|
CLI, conversation).
|
|
65
65
|
- `watcher` → `observador` (or rephrase: "skill-map sigue tus
|
|
66
66
|
cambios" instead of "el watcher detecta...").
|
|
67
67
|
- `scan` (verb) → `escanear`; `scan` (noun) → `escaneo`.
|
|
68
68
|
- `node` → `nodo`; `link` → `enlace` or `vínculo`; `frontmatter`
|
|
69
69
|
keep as-is (it's a technical term with no clean Spanish
|
|
70
|
-
equivalent
|
|
70
|
+
equivalent, explain in parens per the rule above).
|
|
71
71
|
- File paths, frontmatter keys (`name`, `description`, `event`,
|
|
72
72
|
etc.), CLI verbs (`sm init`, `sm watch`), and code identifiers
|
|
73
|
-
stay English
|
|
73
|
+
stay English, that's the public surface, not jargon.
|
|
74
74
|
Anti-pattern (do NOT emit): "aparecen los otros tres kinds",
|
|
75
75
|
"el watcher detectó el cambio", "vamos a hacer un scan ahora".
|
|
76
76
|
Correct: "aparecen los otros tres tipos", "skill-map detectó
|
|
@@ -84,7 +84,7 @@ optional second phase (~20-30 min) covering the rest of the CLI.
|
|
|
84
84
|
esperás, te cuento el estado", "Vamos a ir paso a paso", "OK, ya
|
|
85
85
|
preparé los archivos, ahora seguimos con...", and any other
|
|
86
86
|
meta-narration of your own plumbing. Pre-flight checks, file
|
|
87
|
-
reads, `Bash ls`, `Write` of fixtures, state-file updates
|
|
87
|
+
reads, `Bash ls`, `Write` of fixtures, state-file updates, all
|
|
88
88
|
silent. The tester only hears from you when (a) you need them to
|
|
89
89
|
do something, (b) a sub-step landed and you want a confirm, or
|
|
90
90
|
(c) something failed and they need to know. Between those
|
|
@@ -92,37 +92,53 @@ optional second phase (~20-30 min) covering the rest of the CLI.
|
|
|
92
92
|
### Glossing technical terms
|
|
93
93
|
|
|
94
94
|
- **Explain technical terms in parentheses the first time you
|
|
95
|
-
mention them in a tester-facing
|
|
95
|
+
mention them in a tester-facing message.** Assume the tester
|
|
96
96
|
is non-technical; many will not know what `frontmatter`,
|
|
97
97
|
`findings`, `glob`, `watcher`, `connector`, `extractor`, or
|
|
98
98
|
`kind` mean. Examples:
|
|
99
99
|
- `frontmatter (the YAML block at the top of every .md, between the two --- lines)`
|
|
100
|
-
- `findings (any bugs or rough edges you spot
|
|
100
|
+
- `findings (any bugs or rough edges you spot, I'll log them for the team)`
|
|
101
101
|
- `glob (a pattern with wildcards, same shape as .gitignore)`
|
|
102
102
|
Internal narration in this SKILL.md does not need the gloss;
|
|
103
103
|
this rule is purely about what the agent says to the tester.
|
|
104
104
|
After the first mention in a session, the bare term is fine.
|
|
105
|
-
### Tester-facing
|
|
106
|
-
|
|
107
|
-
- **
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
105
|
+
### Tester-facing rendering (host-dependent)
|
|
106
|
+
|
|
107
|
+
- **The `> ` blockquote prefix on tester messages is conditional**,
|
|
108
|
+
applied only when the host renders Markdown blockquotes as a
|
|
109
|
+
styled element. Use the runtime detected in §Provider detection
|
|
110
|
+
to decide:
|
|
111
|
+
- `provider == claude` (Claude Code host, blockquotes render as
|
|
112
|
+
a styled left bar): emit tester-facing messages with `> `
|
|
113
|
+
prefix on every line, including blank lines inside a
|
|
114
|
+
multi-paragraph block (the standard Markdown blockquote shape).
|
|
115
|
+
- `provider != claude` (Gemini CLI, agent-skills, any other
|
|
116
|
+
host: most non-Claude renderers show `>` as a literal
|
|
117
|
+
character and the visual styling is lost): emit **plain
|
|
118
|
+
prose**, NO `> ` prefix anywhere.
|
|
119
|
+
- The sample messages shown throughout this SKILL are written in
|
|
120
|
+
the **Claude variant** (with `> `). When the host is non-Claude,
|
|
121
|
+
strip the leading `> ` from each line (and the bare `>` on blank
|
|
122
|
+
lines) before emitting, the wording itself is unchanged. The
|
|
123
|
+
blockquote is purely a visual marker, not part of the message
|
|
124
|
+
content, so the tester reads the same instruction either way.
|
|
125
|
+
- **Code / terminal blocks always stay at the top level** in the
|
|
126
|
+
source, never indented under `> ` even in the Claude variant.
|
|
127
|
+
`bash` fences are commands the tester will copy and run; they
|
|
128
|
+
must be plain code blocks so copy-paste is clean. If a step has
|
|
129
|
+
both narrative and a command, write the narrative immediately
|
|
130
|
+
above the bare code block (or inline the command with backticks
|
|
131
|
+
for short one-liners).
|
|
116
132
|
### Language mirroring + fixture content
|
|
117
133
|
|
|
118
134
|
- **Mirror the tester's language**: if the first message they wrote
|
|
119
135
|
was in Spanish, run the conversation in neutral Spanish (per
|
|
120
|
-
the Tone bullets above
|
|
136
|
+
the Tone bullets above, `tú` form, no rioplatense); if in
|
|
121
137
|
English, run it in plain English. Internal narration in this
|
|
122
138
|
SKILL.md stays in English regardless.
|
|
123
|
-
- **Never emit bilingual user-facing copy**. The
|
|
124
|
-
|
|
125
|
-
|
|
139
|
+
- **Never emit bilingual user-facing copy**. The sample messages
|
|
140
|
+
throughout this SKILL are written in English as the base;
|
|
141
|
+
translate the entire block to Spanish when the tester
|
|
126
142
|
speaks Spanish. Do NOT show "Spanish / English" pairs inline,
|
|
127
143
|
do NOT keep one sentence in English while another is in Spanish,
|
|
128
144
|
do NOT sprinkle isolated Spanish words inside English paragraphs
|
|
@@ -136,7 +152,7 @@ optional second phase (~20-30 min) covering the rest of the CLI.
|
|
|
136
152
|
`event`, etc.), node identifiers (`demo-agent`, `demo-skill`),
|
|
137
153
|
link target paths inside `[...]( ... )`, code snippets, fenced
|
|
138
154
|
blocks, and anything the kernel parses structurally. Only the
|
|
139
|
-
natural-language portions get translated
|
|
155
|
+
natural-language portions get translated, schema and identifiers
|
|
140
156
|
stay stable so the watcher and link extractors keep working.
|
|
141
157
|
|
|
142
158
|
## Inviolable rules
|
|
@@ -153,18 +169,18 @@ optional second phase (~20-30 min) covering the rest of the CLI.
|
|
|
153
169
|
- **Backstage setup (you DO edit)**: right after `sm init` in
|
|
154
170
|
Step 1, you append the tutorial's internal entries
|
|
155
171
|
(`sm-tutorial.md`, `findings.md`, `tutorial-state.yml`,
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
172
|
+
etc.) to the freshly created `.skillmapignore` with `Edit`.
|
|
173
|
+
That is plumbing, the tester does not need to learn that
|
|
174
|
+
the tutorial hides its own scaffolding from the scan. Do it
|
|
175
|
+
silently and move on.
|
|
160
176
|
- **Teach moment (you DO NOT edit)**: any time the SKILL
|
|
161
177
|
calls for a change to `.skillmapignore`,
|
|
162
178
|
`.skill-map/settings.json`,
|
|
163
179
|
`.skill-map/settings.local.json`, or `.gitignore` AS PART
|
|
164
180
|
OF A LESSON (e.g. Step 6 hides a private node by appending
|
|
165
|
-
a pattern), you describe the edit in a
|
|
166
|
-
tester applies it in their own editor. The pedagogical point
|
|
167
|
-
is that those files belong to the user
|
|
181
|
+
a pattern), you describe the edit in a tester-facing
|
|
182
|
+
message and the tester applies it in their own editor. The pedagogical point
|
|
183
|
+
is that those files belong to the user, they need to
|
|
168
184
|
internalise where they live and how to change them. Doing it
|
|
169
185
|
for them in a teach moment defeats the lesson.
|
|
170
186
|
3. **After every command block, stop and wait.** The tester pastes
|
|
@@ -209,8 +225,10 @@ own on-disk convention:
|
|
|
209
225
|
skill}`.
|
|
210
226
|
3. Else if a Gemini-flavoured var is present → `provider = gemini`,
|
|
211
227
|
`<provider_dir> = .gemini`, supported kinds = `{agent, skill}`.
|
|
212
|
-
4. Else → **fallback to claude** AND surface one short
|
|
213
|
-
to the tester so they can correct course
|
|
228
|
+
4. Else → **fallback to claude** AND surface one short message
|
|
229
|
+
to the tester so they can correct course (render with `> ` if
|
|
230
|
+
the fallback turns out to actually be Claude, plain prose if
|
|
231
|
+
they correct you to Gemini or agent-skills):
|
|
214
232
|
|
|
215
233
|
> Heads up: I couldn't detect which agent runtime is hosting
|
|
216
234
|
> me, so I'll demo skill-map's Claude provider (`.claude/`).
|
|
@@ -233,9 +251,10 @@ the fixture, when showing the tester commands, when computing the
|
|
|
233
251
|
expected node count, and when listing files for the start-over
|
|
234
252
|
wipe.** Also: **skip any sub-step whose kind is not in the
|
|
235
253
|
provider's supported set** (e.g. on `gemini`, skip the
|
|
236
|
-
`demo-command` file in Step 3 and the `
|
|
254
|
+
`demo-command` file in Step 3 and the `notes/todo → demo-command`
|
|
237
255
|
connector in Step 5; on `agent-skills`, skip both `demo-agent`
|
|
238
|
-
and `demo-command` and demo only the skill + the markdown
|
|
256
|
+
and `demo-command` and demo only the skill + the two markdown
|
|
257
|
+
notes plus the connectors that target them).
|
|
239
258
|
|
|
240
259
|
Persist `provider` into `tutorial-state.yml` (top-level
|
|
241
260
|
`provider: <id>` field) so a resumed session does not have to
|
|
@@ -258,25 +277,41 @@ ls -A
|
|
|
258
277
|
```
|
|
259
278
|
|
|
260
279
|
**Items you ignore** when evaluating "empty" (they don't count as
|
|
261
|
-
user content
|
|
280
|
+
user content, they're internal infrastructure of the skill itself):
|
|
262
281
|
|
|
263
|
-
- `.claude
|
|
264
|
-
- `.tmp
|
|
282
|
+
- `.claude`: skills/agents infrastructure.
|
|
283
|
+
- `.tmp`, Claude Code scratch directory; created automatically
|
|
265
284
|
when the harness starts, has nothing to do with the tester.
|
|
266
285
|
Ignore whether it exists or not.
|
|
267
|
-
- `SKILL.md
|
|
268
|
-
- `sm-tutorial.md
|
|
269
|
-
- `tutorial-state.yml
|
|
286
|
+
- `SKILL.md`: a loose copy of the skill.
|
|
287
|
+
- `sm-tutorial.md`: the skill copy materialised by `sm tutorial`.
|
|
288
|
+
- `tutorial-state.yml`: resume mode (see §Resume / restart).
|
|
270
289
|
|
|
271
|
-
The whitelist is **internal
|
|
272
|
-
If everything is OK, tell them in one short
|
|
273
|
-
parentheticals or explanations of which items you ignored
|
|
290
|
+
The whitelist is **internal**: do NOT enumerate it to the tester.
|
|
291
|
+
If everything is OK, tell them in one short message with no
|
|
292
|
+
parentheticals or explanations of which items you ignored
|
|
293
|
+
(blockquote if Claude, plain prose if not):
|
|
274
294
|
|
|
275
295
|
> Looks clean. Let's go.
|
|
276
296
|
|
|
277
297
|
(or, in Spanish: "Listo, el dir está limpio. Sigamos.")
|
|
278
298
|
|
|
279
|
-
|
|
299
|
+
That short line is the **only** thing you say about the check.
|
|
300
|
+
Forbidden additions (these leak internal logic and break the
|
|
301
|
+
"stay silent during backstage work" rule, examples verbatim of
|
|
302
|
+
what NOT to emit):
|
|
303
|
+
|
|
304
|
+
- "Directorio limpio tras filtrar los items internos (.tmp y
|
|
305
|
+
sm-tutorial.md)."
|
|
306
|
+
- "No hay tutorial-state.yml, así que arrancamos desde cero."
|
|
307
|
+
- "Ignoré .claude/, .tmp/ y SKILL.md porque son infra del skill."
|
|
308
|
+
- "Después de aplicar el whitelist, no queda contenido del usuario."
|
|
309
|
+
|
|
310
|
+
The tester does not know the whitelist exists and should not
|
|
311
|
+
learn about it. Same for the state-file probe: never mention
|
|
312
|
+
`tutorial-state.yml` unless you are actually in resume mode.
|
|
313
|
+
|
|
314
|
+
**Order of checks** (apply in this order, do not skip steps):
|
|
280
315
|
|
|
281
316
|
1. Look at the **raw** `ls -A` output, before filtering. If
|
|
282
317
|
`tutorial-state.yml` is present → **resume mode**. Skip the
|
|
@@ -289,18 +324,18 @@ parentheticals or explanations of which items you ignored:
|
|
|
289
324
|
tell** the tester:
|
|
290
325
|
|
|
291
326
|
> I detected files in here:
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
327
|
+
|
|
328
|
+
```
|
|
329
|
+
<paste the ls -A output, excluding the ignored items>
|
|
330
|
+
```
|
|
331
|
+
|
|
297
332
|
> The tutorial needs an **empty, freshly-created directory** so we
|
|
298
333
|
> don't mix with your stuff. Do this:
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
mkdir ~/sm-tutorial && cd ~/sm-tutorial
|
|
337
|
+
```
|
|
338
|
+
|
|
304
339
|
> Then re-invoke me from there. (Any path works; the point is that
|
|
305
340
|
> it's a fresh directory.)
|
|
306
341
|
|
|
@@ -310,18 +345,13 @@ Do not advance until the tester confirms they're in an empty dir.
|
|
|
310
345
|
|
|
311
346
|
> ⚠️ Heads up: throughout the tutorial you'll be using **two terminals**.
|
|
312
347
|
>
|
|
313
|
-
> 1. **This terminal
|
|
348
|
+
> 1. **This terminal**: the one you're using right now to talk to
|
|
314
349
|
> me (Claude Code). I show you the commands, you paste me the
|
|
315
350
|
> output, and I verify.
|
|
316
|
-
> 2. **A second terminal
|
|
317
|
-
> OS terminal). In that second terminal run
|
|
318
|
-
>
|
|
319
|
-
>
|
|
320
|
-
> cd <cwd>
|
|
321
|
-
> ```
|
|
322
|
-
>
|
|
323
|
-
> so it's anchored **exactly to this folder**. That's where you
|
|
324
|
-
> copy and paste every `sm` command from the tutorial.
|
|
351
|
+
> 2. **A second terminal**: open it now (new window or tab in your
|
|
352
|
+
> OS terminal). In that second terminal run `cd <cwd>` so it's
|
|
353
|
+
> anchored **exactly to this folder**. That's where you copy
|
|
354
|
+
> and paste every `sm` command from the tutorial.
|
|
325
355
|
>
|
|
326
356
|
> **Flow at every step**:
|
|
327
357
|
> 1. I show you a command here.
|
|
@@ -351,13 +381,9 @@ information. Only break the silence if something actually fails.
|
|
|
351
381
|
|
|
352
382
|
If `sm` isn't installed, tell the tester:
|
|
353
383
|
|
|
354
|
-
> You don't have `sm` yet. You'll need Node 20+ and then
|
|
355
|
-
>
|
|
356
|
-
>
|
|
357
|
-
> npm install -g @skill-map/cli
|
|
358
|
-
> ```
|
|
359
|
-
>
|
|
360
|
-
> Tell me "ready" when it finishes.
|
|
384
|
+
> You don't have `sm` yet. You'll need Node 20+ and then run
|
|
385
|
+
> `npm install -g @skill-map/cli`. Tell me "ready" when it
|
|
386
|
+
> finishes.
|
|
361
387
|
|
|
362
388
|
If `sm version` errors, it's almost certainly an old Node or an npm
|
|
363
389
|
permissions issue. Suggest `node --version` and walk them through it.
|
|
@@ -365,22 +391,22 @@ permissions issue. Suggest `node --version` and walk them through it.
|
|
|
365
391
|
### 3. Create the initial fixture (one node only)
|
|
366
392
|
|
|
367
393
|
Before you lay anything down, give the tester a one-shot heads-up.
|
|
368
|
-
**This is not interactive
|
|
394
|
+
**This is not interactive**: do NOT wait for a confirmation, do
|
|
369
395
|
NOT ask permission per file, do NOT enumerate the files. The
|
|
370
396
|
tester just needs to know scaffolding is starting so they're not
|
|
371
397
|
surprised when files appear; details (file list, cleanup) come
|
|
372
398
|
later when they're relevant. Keep it to a single short sentence:
|
|
373
399
|
|
|
374
400
|
> Quick heads-up before we start: I'm about to set up the
|
|
375
|
-
> tutorial scenario in this directory
|
|
401
|
+
> tutorial scenario in this directory, that means creating a
|
|
376
402
|
> handful of files. Please wait a moment while I finish.
|
|
377
403
|
|
|
378
|
-
Then proceed straight to the writes below
|
|
404
|
+
Then proceed straight to the writes below, no pause, no "ready?"
|
|
379
405
|
prompt.
|
|
380
406
|
|
|
381
407
|
The tutorial builds the graph **progressively** across Steps 2-6
|
|
382
408
|
(the live UI block). Right now, in pre-flight, you only create
|
|
383
|
-
**one file
|
|
409
|
+
**one file**: a single agent, so the tester's first look at the
|
|
384
410
|
UI shows exactly one node. The other three nodes (skill, command,
|
|
385
411
|
note) and the connectors between all four are added later, one
|
|
386
412
|
step at a time.
|
|
@@ -389,12 +415,12 @@ step at a time.
|
|
|
389
415
|
<cwd>/
|
|
390
416
|
├── .claude/
|
|
391
417
|
│ └── agents/
|
|
392
|
-
│ └── demo-agent.md # kind: agent
|
|
418
|
+
│ └── demo-agent.md # kind: agent, the only node at boot
|
|
393
419
|
├── tutorial-state.yml
|
|
394
420
|
└── findings.md
|
|
395
421
|
```
|
|
396
422
|
|
|
397
|
-
`.claude/agents/demo-agent.md` (no cross-fixture links yet
|
|
423
|
+
`.claude/agents/demo-agent.md` (no cross-fixture links yet, those
|
|
398
424
|
arrive in Step 5):
|
|
399
425
|
```markdown
|
|
400
426
|
---
|
|
@@ -419,7 +445,7 @@ Rules:
|
|
|
419
445
|
|
|
420
446
|
`findings.md`:
|
|
421
447
|
```markdown
|
|
422
|
-
# Findings
|
|
448
|
+
# Findings: sm-tutorial
|
|
423
449
|
|
|
424
450
|
If you spot anything weird during the tutorial, log it here.
|
|
425
451
|
|
|
@@ -508,15 +534,41 @@ findings_file: "./findings.md"
|
|
|
508
534
|
Before Step 1's announcement, call `TaskCreate` once with one task
|
|
509
535
|
per entry in `tutorial-state.yml` (`short_steps`, plus `long_steps`
|
|
510
536
|
if the deep-dive is accepted later). Update each task to
|
|
511
|
-
`in_progress` when its block begins and `completed` when it ends
|
|
537
|
+
`in_progress` when its block begins and `completed` when it ends,
|
|
512
538
|
the harness task list gives the tester a live "where am I" view
|
|
513
539
|
during the session, while `tutorial-state.yml` remains the
|
|
514
540
|
cross-session source of truth for pause/resume.
|
|
515
541
|
|
|
516
542
|
For every step in the tutorial:
|
|
517
543
|
|
|
518
|
-
1. **Announcement**: "Step N: `<title>`. ~M minutes."
|
|
519
|
-
of context
|
|
544
|
+
1. **Announcement**: "Step N: `<title>`. ~M minutes." followed by
|
|
545
|
+
a blank line, then one sentence of context on a separate
|
|
546
|
+
paragraph. Always render the heading and the context as two
|
|
547
|
+
distinct paragraphs so the tester reads the step name on its
|
|
548
|
+
own line before the body.
|
|
549
|
+
|
|
550
|
+
**Rendering**: every line of tester-facing prose in a step
|
|
551
|
+
(announcement, context, preparation explanation, intro line
|
|
552
|
+
before the commands, pause line, bug-check line) follows the
|
|
553
|
+
host-dependent rule from §Provider detection: on `claude`
|
|
554
|
+
every line is prefixed with `> ` so it renders as a single
|
|
555
|
+
styled blockquote; on non-Claude hosts it is plain prose. The
|
|
556
|
+
` ```bash ` command block ALWAYS stays at the top level (no
|
|
557
|
+
`> ` prefix) so the tester can copy-paste cleanly, even when
|
|
558
|
+
it sits between two quoted paragraphs. Sample in Claude
|
|
559
|
+
variant:
|
|
560
|
+
```
|
|
561
|
+
> Step 5: sm plugins doctor. ~2 min.
|
|
562
|
+
>
|
|
563
|
+
> The diagnostic verb reports every plugin and extension status
|
|
564
|
+
> in one go. Run it in your second terminal:
|
|
565
|
+
|
|
566
|
+
```bash
|
|
567
|
+
sm plugins doctor
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
> Paste the output (or say OK).
|
|
571
|
+
```
|
|
520
572
|
2. **Preparation** (if applicable): create or modify files, show the
|
|
521
573
|
path and a short preview.
|
|
522
574
|
3. **Commands to run**: a ` ```bash ` block with the commands.
|
|
@@ -527,7 +579,7 @@ For every step in the tutorial:
|
|
|
527
579
|
6. **Bug check**: "Anything weird? If you want, we can log it in
|
|
528
580
|
findings."
|
|
529
581
|
|
|
530
|
-
If the tester says "pause" / "later"
|
|
582
|
+
If the tester says "pause" / "later", save state and tell them how
|
|
531
583
|
to resume (re-invoke the skill from the same dir).
|
|
532
584
|
|
|
533
585
|
---
|
|
@@ -536,7 +588,7 @@ to resume (re-invoke the skill from the same dir).
|
|
|
536
588
|
|
|
537
589
|
Always runs. The pedagogical hook is the live UI.
|
|
538
590
|
|
|
539
|
-
### Step 1
|
|
591
|
+
### Step 1: `sm init` (1 min)
|
|
540
592
|
|
|
541
593
|
**Context**: `sm init` creates a hidden `.skill-map/` folder in the
|
|
542
594
|
cwd holding the database where skill-map stores what it learns about
|
|
@@ -553,7 +605,7 @@ a `.skillmapignore` shows up at the root.
|
|
|
553
605
|
|
|
554
606
|
**After init**, you append the tutorial's entries to the
|
|
555
607
|
`.skillmapignore` that `sm init` just created (do not create a new
|
|
556
|
-
file
|
|
608
|
+
file, append to the existing one with `Edit`). This prevents
|
|
557
609
|
`sm scan` from picking up the tutorial's internal files as graph nodes:
|
|
558
610
|
|
|
559
611
|
```
|
|
@@ -561,7 +613,6 @@ file — append to the existing one with `Edit`). This prevents
|
|
|
561
613
|
sm-tutorial.md
|
|
562
614
|
findings.md
|
|
563
615
|
tutorial-state.yml
|
|
564
|
-
sm-tutorial-report.md
|
|
565
616
|
# tutorial outputs that may land at the root if a step forgets to clean up
|
|
566
617
|
export.*
|
|
567
618
|
dump.sql
|
|
@@ -569,13 +620,15 @@ dump.sql
|
|
|
569
620
|
|
|
570
621
|
Mark `1-init: done`.
|
|
571
622
|
|
|
572
|
-
### Step 2
|
|
623
|
+
### Step 2: ⭐ Live UI: the lone agent (~1 min)
|
|
573
624
|
|
|
574
625
|
**Context**: typing `sm` alone (no arguments) in an initialised dir
|
|
575
|
-
starts the UI server with the watcher built in
|
|
626
|
+
starts the UI server with the watcher built in (it is just an alias
|
|
627
|
+
of `sm serve` with all defaults; the moment you need any flag
|
|
628
|
+
you write `sm serve --flag ...` explicitly). One process, one
|
|
576
629
|
terminal: it boots the server, scans the `.md` files, detects
|
|
577
630
|
changes, and pushes events over WebSocket to the live UI. The next
|
|
578
|
-
five steps (2-6) all run against the same `sm` session
|
|
631
|
+
five steps (2-6) all run against the same `sm` session, you boot
|
|
579
632
|
it here and keep it alive through Step 6.
|
|
580
633
|
|
|
581
634
|
**Command** (one terminal):
|
|
@@ -590,7 +643,7 @@ Tell the tester:
|
|
|
590
643
|
|
|
591
644
|
> Now arrange your screen so the **browser** (where the graph will
|
|
592
645
|
> update in real time) and **this chat** are both visible at once
|
|
593
|
-
|
|
646
|
+
>, typical layout is browser on the left half, chat on the right
|
|
594
647
|
> (or any split that lets you see both). The terminal running
|
|
595
648
|
> `sm` can stay off to the side; it just prints scan progress
|
|
596
649
|
> lines and you don't need to read them.
|
|
@@ -598,13 +651,13 @@ Tell the tester:
|
|
|
598
651
|
> Tell me when you're set up and we start.
|
|
599
652
|
|
|
600
653
|
Wait for confirmation before moving on. Once they're ready, prompt
|
|
601
|
-
them to launch the server and open the link it prints
|
|
654
|
+
them to launch the server and open the link it prints, without
|
|
602
655
|
hardcoding the URL here, since the verb itself is the source of
|
|
603
656
|
truth (it logs the bound `http://host:port` after listen):
|
|
604
657
|
|
|
605
658
|
> In the terminal you opened for `sm`, run the command above. After
|
|
606
659
|
> a couple of seconds it will print a line with the URL where the
|
|
607
|
-
> UI is listening
|
|
660
|
+
> UI is listening, copy that link and open it in the browser you
|
|
608
661
|
> just arranged. Tell me when you see the page load.
|
|
609
662
|
|
|
610
663
|
Wait for confirmation that the page loaded. Then tell the tester:
|
|
@@ -613,9 +666,9 @@ Wait for confirmation that the page loaded. Then tell the tester:
|
|
|
613
666
|
> `agent`). That's our starting point.
|
|
614
667
|
>
|
|
615
668
|
> Walk the 3 views before we go on:
|
|
616
|
-
> 1. **Graph
|
|
617
|
-
> 2. **List
|
|
618
|
-
> 3. **Inspector
|
|
669
|
+
> 1. **Graph**: the single agent node.
|
|
670
|
+
> 2. **List**: one row, with path / kind / metadata.
|
|
671
|
+
> 3. **Inspector**: click the node to see its frontmatter (the
|
|
619
672
|
> YAML block at the top of every `.md`, between the two `---`
|
|
620
673
|
> lines) and links.
|
|
621
674
|
>
|
|
@@ -623,20 +676,23 @@ Wait for confirmation that the page loaded. Then tell the tester:
|
|
|
623
676
|
|
|
624
677
|
Wait for confirmation. Mark `2-live-boot: done`.
|
|
625
678
|
|
|
626
|
-
### Step 3
|
|
679
|
+
### Step 3: Live UI: the other three kinds appear (~1 min)
|
|
627
680
|
|
|
628
681
|
Leave the browser open and the terminal with `sm` running. You
|
|
629
|
-
create
|
|
630
|
-
yet
|
|
631
|
-
in.
|
|
682
|
+
create four more nodes **without any cross-fixture links**
|
|
683
|
+
yet, pure standalone nodes, so the tester sees four new dots pop
|
|
684
|
+
in. Three new **kinds** show up in this step (skill, command,
|
|
685
|
+
markdown), the fourth file is a second `markdown` node that the
|
|
686
|
+
hub in Step 5 will point at via a real `references` link.
|
|
632
687
|
|
|
633
|
-
Create these
|
|
688
|
+
Create these four files (with `Write`), exactly in this order.
|
|
634
689
|
Per §Provider detection, **substitute `.claude/` with the
|
|
635
690
|
detected `<provider_dir>` and skip files whose kind is not in the
|
|
636
|
-
provider's supported set** (`gemini`: skip `demo-command
|
|
637
|
-
`agent-skills`: skip both `demo-agent` and
|
|
638
|
-
the skill + the markdown
|
|
639
|
-
the "
|
|
691
|
+
provider's supported set** (`gemini`: skip `demo-command`, three
|
|
692
|
+
new nodes land; `agent-skills`: skip both `demo-agent` and
|
|
693
|
+
`demo-command`, only the skill + the two markdown notes remain).
|
|
694
|
+
Adjust the node count, the "four new nodes" message, and the file
|
|
695
|
+
list shown to the tester in the sample below accordingly:
|
|
640
696
|
|
|
641
697
|
1. `.claude/skills/demo-skill/SKILL.md` (kind: skill):
|
|
642
698
|
```markdown
|
|
@@ -688,7 +744,7 @@ the "three new nodes" message in the blockquote below accordingly:
|
|
|
688
744
|
target file. Connectors land in the next sub-step.
|
|
689
745
|
```
|
|
690
746
|
|
|
691
|
-
3. `notes/todo.md
|
|
747
|
+
3. `notes/todo.md`, classified as `kind: markdown` today
|
|
692
748
|
(the catch-all for `.md` files outside the
|
|
693
749
|
skill / agent / command folders):
|
|
694
750
|
```markdown
|
|
@@ -696,26 +752,60 @@ the "three new nodes" message in the blockquote below accordingly:
|
|
|
696
752
|
name: Demo TODO list
|
|
697
753
|
description: |
|
|
698
754
|
Live list of things to review in the demo. Will become the
|
|
699
|
-
hub
|
|
755
|
+
hub that points to the rest of the fixture in the next
|
|
756
|
+
sub-step.
|
|
700
757
|
tags: [notes, demo]
|
|
701
758
|
---
|
|
702
759
|
|
|
703
760
|
# Pending
|
|
704
761
|
```
|
|
705
762
|
|
|
763
|
+
4. `notes/demo-guideline.md`, second `kind: markdown` node, the
|
|
764
|
+
one the hub will reach via a real markdown link in Step 5:
|
|
765
|
+
```markdown
|
|
766
|
+
---
|
|
767
|
+
name: demo-guideline
|
|
768
|
+
description: |
|
|
769
|
+
Static reference notes that the rest of the demo points at.
|
|
770
|
+
Showcases a second markdown node so the demo can exercise
|
|
771
|
+
the `references` link kind without ambiguity.
|
|
772
|
+
tags: [notes, demo]
|
|
773
|
+
---
|
|
774
|
+
|
|
775
|
+
# Demo Guideline
|
|
776
|
+
|
|
777
|
+
Conventions the demo fixture follows:
|
|
778
|
+
|
|
779
|
+
- Names match the file basename.
|
|
780
|
+
- Frontmatter `description` is short and human-readable.
|
|
781
|
+
- Body stays minimal, only what's needed to teach the kind.
|
|
782
|
+
```
|
|
783
|
+
|
|
706
784
|
Tell the tester:
|
|
707
785
|
|
|
708
|
-
> Look at the browser.
|
|
709
|
-
> `demo-skill`, `demo-command`,
|
|
710
|
-
> **still unconnected
|
|
711
|
-
> auto-fits whenever a node is added or removed, so
|
|
712
|
-
> should be visible without panning.
|
|
786
|
+
> Look at the browser. Four new nodes should have popped in:
|
|
787
|
+
> `demo-skill`, `demo-command`, `notes/todo`, and `demo-guideline`.
|
|
788
|
+
> Five total now, **still unconnected**: they're floating dots.
|
|
789
|
+
> The viewport auto-fits whenever a node is added or removed, so
|
|
790
|
+
> all five should be visible without panning.
|
|
713
791
|
>
|
|
714
|
-
>
|
|
792
|
+
> What I just did behind the scenes: I created four new files in
|
|
793
|
+
> your project, and the watcher picked them up on its own, that's
|
|
794
|
+
> why four new dots appeared without you running anything:
|
|
795
|
+
>
|
|
796
|
+
> - `.claude/skills/demo-skill/SKILL.md` (kind: skill)
|
|
797
|
+
> - `.claude/commands/demo-command.md` (kind: command)
|
|
798
|
+
> - `notes/todo.md` (kind: markdown)
|
|
799
|
+
> - `notes/demo-guideline.md` (kind: markdown)
|
|
800
|
+
>
|
|
801
|
+
> Same loop you'll use yourself in the next step, only this time
|
|
802
|
+
> the writes came from me.
|
|
803
|
+
>
|
|
804
|
+
> Did the four appear? Confirm so we can wire them up.
|
|
715
805
|
|
|
716
806
|
Wait for confirmation. Mark `3-live-kinds: done`.
|
|
717
807
|
|
|
718
|
-
### Step 4
|
|
808
|
+
### Step 4: Live UI: your first edit (~1 min)
|
|
719
809
|
|
|
720
810
|
Up to here you've been watching the agent write files. Now hand
|
|
721
811
|
the keyboard over: the lesson is that the watcher reacts to
|
|
@@ -728,95 +818,103 @@ Tell the tester:
|
|
|
728
818
|
|
|
729
819
|
> Your turn. First, in the browser, **expand the `demo-agent`
|
|
730
820
|
> card** (click the chevron / arrow on the card to open it). That
|
|
731
|
-
> reveals the description currently showing for the node
|
|
821
|
+
> reveals the description currently showing for the node, that's
|
|
732
822
|
> the field you'll edit next, so leave the card open and the
|
|
733
823
|
> change will be obvious.
|
|
734
824
|
>
|
|
735
825
|
> Now open `.claude/agents/demo-agent.md` in your editor of
|
|
736
826
|
> choice. In the **frontmatter** at the top of the file, change
|
|
737
|
-
> the `description:` field to any text you want
|
|
827
|
+
> the `description:` field to any text you want, the actual
|
|
738
828
|
> content does not matter, just make it different from what's
|
|
739
829
|
> there now. Save the file.
|
|
740
830
|
>
|
|
741
831
|
> Watch the browser. The `demo-agent` card should refresh its
|
|
742
|
-
> description in real time, no reload, no Ctrl+C
|
|
743
|
-
> that picked up the
|
|
832
|
+
> description in real time, no reload, no Ctrl+C, same watcher
|
|
833
|
+
> that picked up the four new nodes a moment ago, this time
|
|
744
834
|
> reacting to YOUR edit.
|
|
745
835
|
>
|
|
746
|
-
> Confirm so we wire the
|
|
836
|
+
> Confirm so we wire the five up.
|
|
747
837
|
|
|
748
838
|
Wait for confirmation. You MAY use `Read` on the file afterwards
|
|
749
839
|
to verify the change landed (read-only, allowed under Inviolable
|
|
750
840
|
rule #1) before moving on. Mark `4-live-edit: done`.
|
|
751
841
|
|
|
752
|
-
### Step 5
|
|
842
|
+
### Step 5: Live UI: the connectors light up (~1 min)
|
|
753
843
|
|
|
754
|
-
Now you edit
|
|
755
|
-
each
|
|
756
|
-
|
|
757
|
-
for the detected `<provider_dir>` and skip any sub-step whose
|
|
758
|
-
target node was not created in Step 3** (no `demo-command` on
|
|
759
|
-
gemini → skip sub-step #2 and the `demo-command → demo-skill`
|
|
760
|
-
connector; on agent-skills there is no agent and no command →
|
|
761
|
-
keep only `notes/todo → demo-skill`):
|
|
844
|
+
Now you edit `notes/todo.md` so it becomes the **hub** that points
|
|
845
|
+
to each of the other four nodes. Each bullet uses a syntax that
|
|
846
|
+
maps to a specific **link kind**:
|
|
762
847
|
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
848
|
+
- an `@handle` token → kind `mentions`
|
|
849
|
+
- a `/slash` token → kind `invokes`
|
|
850
|
+
- a markdown link `[text](path)` → kind `references`
|
|
851
|
+
|
|
852
|
+
Four bullets, three kinds (the `invokes` kind shows up twice
|
|
853
|
+
because both the command and the skill are addressed by slash).
|
|
854
|
+
|
|
855
|
+
Apply with `Edit` on `notes/todo.md` (do not rewrite the file).
|
|
856
|
+
Per §Provider detection, **substitute `.claude/` with the detected
|
|
857
|
+
`<provider_dir>` and drop any bullet whose target node was not
|
|
858
|
+
created in Step 3** (on `gemini` there is no command → skip the
|
|
859
|
+
`/demo-command` bullet, three connectors land; on `agent-skills`
|
|
860
|
+
there is no agent and no command → skip the `@demo-agent` and
|
|
861
|
+
`/demo-command` bullets, two connectors land).
|
|
862
|
+
|
|
863
|
+
**Edit `notes/todo.md`**: append these bullets after the
|
|
864
|
+
`# Pending` heading:
|
|
865
|
+
|
|
866
|
+
```markdown
|
|
867
|
+
- [ ] Brief @demo-agent on the rough edges.
|
|
868
|
+
- [ ] Run /demo-command before publishing.
|
|
869
|
+
- [ ] Trigger /demo-skill when the input lands.
|
|
870
|
+
- [ ] Re-read the
|
|
871
|
+
[demo-guideline](./demo-guideline.md) before shipping.
|
|
872
|
+
```
|
|
782
873
|
|
|
783
874
|
Tell the tester:
|
|
784
875
|
|
|
785
|
-
> Look at the magic again.
|
|
786
|
-
>
|
|
787
|
-
>
|
|
876
|
+
> Look at the magic again. `notes/todo` is now the hub: four
|
|
877
|
+
> arrows light up between it and the other nodes, and the UI
|
|
878
|
+
> palette colours each arrow by the link kind it carries:
|
|
879
|
+
>
|
|
880
|
+
> - `notes/todo → demo-agent` (kind: `mentions`)
|
|
881
|
+
> - `notes/todo → demo-command` (kind: `invokes`)
|
|
882
|
+
> - `notes/todo → demo-skill` (kind: `invokes`)
|
|
883
|
+
> - `notes/todo → demo-guideline` (kind: `references`)
|
|
788
884
|
>
|
|
789
|
-
>
|
|
790
|
-
>
|
|
791
|
-
>
|
|
885
|
+
> The kind comes from the syntax in the bullet: an `@handle` is
|
|
886
|
+
> always a mention, a `/command` is always an invoke, a markdown
|
|
887
|
+
> link is always a reference. Four arrows, three kinds, three
|
|
888
|
+
> colours on the canvas (the two `invokes` share a colour, as you
|
|
889
|
+
> would expect).
|
|
792
890
|
>
|
|
793
891
|
> Confirm. If a connector is missing, refresh the browser and tell
|
|
794
892
|
> me.
|
|
795
893
|
|
|
796
894
|
Wait for confirmation. **Do NOT move on to Step 6** until the
|
|
797
|
-
connectors are confirmed visible
|
|
895
|
+
connectors are confirmed visible, Step 6 reuses the same live UI
|
|
798
896
|
session. Mark `5-live-connectors: done`.
|
|
799
897
|
|
|
800
|
-
### Step 6
|
|
898
|
+
### Step 6: Live UI: silence a private file via `.skillmapignore` (~2 min)
|
|
801
899
|
|
|
802
900
|
Steps 2-5 showed the watcher picking up new files and edits (yours
|
|
803
901
|
and theirs). Step 6 flips the direction: a file the tester DOES NOT
|
|
804
902
|
want in the graph (a draft, a scratch file, a secret) gets hidden by
|
|
805
|
-
a single line in `.skillmapignore`. Same live mechanism
|
|
903
|
+
a single line in `.skillmapignore`. Same live mechanism, no restart.
|
|
806
904
|
|
|
807
905
|
`sm init` already wrote a starter `.skillmapignore` at the scope
|
|
808
906
|
root. The flow has three beats:
|
|
809
907
|
|
|
810
|
-
**Beat 1
|
|
908
|
+
**Beat 1, you create one new fixture file (the agent does this).**
|
|
811
909
|
|
|
812
|
-
`Write` `notes/private-credentials.md
|
|
910
|
+
`Write` `notes/private-credentials.md`, kind `note`, simulates a
|
|
813
911
|
file the tester would never want surfacing publicly:
|
|
814
912
|
|
|
815
913
|
```markdown
|
|
816
914
|
---
|
|
817
915
|
name: private-credentials
|
|
818
916
|
description: |
|
|
819
|
-
Personal API tokens
|
|
917
|
+
Personal API tokens, exists in the repo but should not show
|
|
820
918
|
up in the skill-map graph. Demonstrates the .skillmapignore
|
|
821
919
|
flow.
|
|
822
920
|
---
|
|
@@ -828,81 +926,78 @@ API_TOKEN: example-not-real
|
|
|
828
926
|
|
|
829
927
|
Confirm the file appears in the graph as a sixth node
|
|
830
928
|
(`notes/private-credentials`). The watcher sees it like any
|
|
831
|
-
other `.md
|
|
929
|
+
other `.md`, that's the point of the demo.
|
|
832
930
|
|
|
833
|
-
**Beat 2
|
|
931
|
+
**Beat 2, you show the project structure (the agent does this).**
|
|
834
932
|
|
|
835
933
|
Before asking the tester to touch `.skillmapignore`, give them a
|
|
836
934
|
mental map of the folder so they know where the file lives and
|
|
837
935
|
what's around it. Use `Bash` (`ls -la` and `ls -la notes/` if a
|
|
838
|
-
deeper view helps) and present the listing
|
|
839
|
-
the
|
|
936
|
+
deeper view helps) and present the listing as a tester-facing
|
|
937
|
+
message (apply the host-dependent rendering rule) so the tester
|
|
938
|
+
sees what their cwd holds:
|
|
840
939
|
|
|
841
940
|
> One last step. Here's what your directory looks like right now:
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
941
|
+
|
|
942
|
+
```
|
|
943
|
+
. ← your cwd
|
|
944
|
+
├── .claude/
|
|
945
|
+
│ ├── agents/demo-agent.md
|
|
946
|
+
│ ├── commands/demo-command.md
|
|
947
|
+
│ └── skills/demo-skill/SKILL.md
|
|
948
|
+
├── .skill-map/ ← project DB + settings (managed)
|
|
949
|
+
├── .skillmapignore ← the file we're about to edit
|
|
950
|
+
├── notes/
|
|
951
|
+
│ ├── todo.md
|
|
952
|
+
│ ├── demo-guideline.md
|
|
953
|
+
│ └── private-credentials.md ← what we want to hide
|
|
954
|
+
└── sm-tutorial.md ← the tutorial file you loaded
|
|
955
|
+
```
|
|
956
|
+
|
|
857
957
|
> The `.skillmapignore` at the root is the file we'll touch
|
|
858
958
|
> next. Same syntax as `.gitignore`. Anything matching a pattern
|
|
859
959
|
> there is invisible to skill-map's scan.
|
|
860
960
|
|
|
861
|
-
Adjust the actual tree shown to whatever `ls -la` returns
|
|
961
|
+
Adjust the actual tree shown to whatever `ls -la` returns, the
|
|
862
962
|
goal is "tester recognises their own filesystem", not a copy of
|
|
863
963
|
the snippet above.
|
|
864
964
|
|
|
865
|
-
**Beat 3
|
|
965
|
+
**Beat 3, the tester edits `.skillmapignore` (NOT the agent).**
|
|
866
966
|
|
|
867
967
|
Per Inviolable rule #2, the agent does NOT touch `.skillmapignore` with
|
|
868
968
|
your `Edit` tool. Tell the tester to do it from their editor:
|
|
869
969
|
|
|
870
970
|
> Last step. Open `.skillmapignore` (it's at the cwd root) in
|
|
871
971
|
> your editor of choice. At the end of the file, on a new line,
|
|
872
|
-
> append
|
|
873
|
-
>
|
|
874
|
-
> ```
|
|
875
|
-
> notes/private-*.md
|
|
876
|
-
> ```
|
|
877
|
-
>
|
|
878
|
-
> Save the file. The pattern uses a glob (same as `.gitignore`):
|
|
972
|
+
> append the literal pattern `notes/private-*.md`. Save the
|
|
973
|
+
> file. The pattern uses a glob (same as `.gitignore`):
|
|
879
974
|
> `notes/private-*.md` matches `private-credentials.md` and any
|
|
880
975
|
> future sibling `private-*.md`. A literal path
|
|
881
|
-
> (`notes/private-credentials.md`) would also work
|
|
976
|
+
> (`notes/private-credentials.md`) would also work, the glob
|
|
882
977
|
> teaches the broader habit.
|
|
883
978
|
>
|
|
884
979
|
> Watch the browser when you save. The
|
|
885
980
|
> `notes/private-credentials` node should disappear from the
|
|
886
|
-
> graph in real time, without restarting anything.
|
|
887
|
-
> back to
|
|
981
|
+
> graph in real time, without restarting anything. Six nodes
|
|
982
|
+
> back to five.
|
|
888
983
|
>
|
|
889
984
|
> Did the node vanish?
|
|
890
985
|
|
|
891
986
|
After they confirm, you MAY use `Read` on `.skillmapignore` to
|
|
892
987
|
verify the appended pattern landed correctly (in case
|
|
893
|
-
`sm check` later reports something odd)
|
|
988
|
+
`sm check` later reports something odd), that is read-only and
|
|
894
989
|
allowed. Once confirmed, ask them to stop the server with
|
|
895
990
|
**Ctrl+C** in the terminal before continuing.
|
|
896
991
|
|
|
897
992
|
Mark `6-live-ignore: done`.
|
|
898
993
|
|
|
899
|
-
### Step 7
|
|
994
|
+
### Step 7: Wrap-up of the demo and offer to keep going (30 s)
|
|
900
995
|
|
|
901
996
|
> All set! That's the heart of skill-map: you edit a `.md` and the
|
|
902
997
|
> UI sees it instantly. In **~10 minutes** you've already seen the
|
|
903
998
|
> full flow.
|
|
904
999
|
>
|
|
905
|
-
> ⚠️ **`.sm` files (heads-up for later)
|
|
1000
|
+
> ⚠️ **`.sm` files (heads-up for later)**: every `.md` skill-map
|
|
906
1001
|
> tracks has a sibling `.sm` file (e.g. `demo-agent.sm` next to
|
|
907
1002
|
> `demo-agent.md`) that carries **all of the tool's metadata
|
|
908
1003
|
> about that markdown, so your `.md` stays clean and uncluttered**.
|
|
@@ -913,7 +1008,7 @@ Mark `6-live-ignore: done`.
|
|
|
913
1008
|
> refreshes one, so you'll see them often as you use skill-map
|
|
914
1009
|
> day to day. Commit them to git like any other source file.
|
|
915
1010
|
>
|
|
916
|
-
> 🔀 **Multi-provider
|
|
1011
|
+
> 🔀 **Multi-provider**: this demo ran with the
|
|
917
1012
|
> `<provider>` provider (base dir `<provider_dir>`). Skill-map
|
|
918
1013
|
> walks two other built-in conventions with identical mechanics:
|
|
919
1014
|
> Gemini lives under `.gemini/` (kinds: agent + skill), and the
|
|
@@ -927,7 +1022,7 @@ Mark `6-live-ignore: done`.
|
|
|
927
1022
|
> whenever.
|
|
928
1023
|
>
|
|
929
1024
|
> 1. **Yes, let's continue**
|
|
930
|
-
> 2. **No, we wrap here
|
|
1025
|
+
> 2. **No, we wrap here**: give me the summary and tell me how to
|
|
931
1026
|
> delete the dir
|
|
932
1027
|
|
|
933
1028
|
If they say **2**:
|
|
@@ -936,23 +1031,23 @@ If they say **2**:
|
|
|
936
1031
|
|
|
937
1032
|
If they say **1**:
|
|
938
1033
|
- Mark `route.short.status: done`, `route.long.status: in_progress`.
|
|
939
|
-
- Move on to the next phase (without announcing it
|
|
1034
|
+
- Move on to the next phase (without announcing it, just say
|
|
940
1035
|
"Cool, keep going" and start with the level question of the next
|
|
941
1036
|
block).
|
|
942
1037
|
|
|
943
1038
|
---
|
|
944
1039
|
|
|
945
|
-
## DEEP-DIVE (~20-30 min)
|
|
1040
|
+
## DEEP-DIVE (~20-30 min): opt-in
|
|
946
1041
|
|
|
947
1042
|
Strictly new steps. Does not re-expand demo steps.
|
|
948
1043
|
|
|
949
1044
|
### Level question (one time only, on entry)
|
|
950
1045
|
|
|
951
|
-
> Before we keep going
|
|
1046
|
+
> Before we keep going, how comfortable are you with the terminal?
|
|
952
1047
|
>
|
|
953
|
-
> 1. **Zero
|
|
954
|
-
> 2. **Some
|
|
955
|
-
> 3. **A lot
|
|
1048
|
+
> 1. **Zero**: first time opening a console today
|
|
1049
|
+
> 2. **Some**: I use `git`, I can edit files, I get by
|
|
1050
|
+
> 3. **A lot**: I'm a dev, hand me the flags
|
|
956
1051
|
|
|
957
1052
|
Save into `tester.level` and modulate:
|
|
958
1053
|
|
|
@@ -964,7 +1059,7 @@ Save into `tester.level` and modulate:
|
|
|
964
1059
|
- **Level 3**: dense blocks, flags included, no explanations of
|
|
965
1060
|
basic concepts.
|
|
966
1061
|
|
|
967
|
-
### Step 8
|
|
1062
|
+
### Step 8: Tester edits live (~3 min)
|
|
968
1063
|
|
|
969
1064
|
**Context**: Step 4 had the tester edit a scalar (`description`)
|
|
970
1065
|
and watch the inspector card refresh. Step 8 raises the bar: edit
|
|
@@ -974,23 +1069,26 @@ disappears). Same watcher, different surface.
|
|
|
974
1069
|
This step needs the server running. **Check first** before asking
|
|
975
1070
|
them to launch it: many testers leave it running from Step 2 and
|
|
976
1071
|
the demo wraps without an explicit Ctrl+C. Word the prompt as a
|
|
977
|
-
conditional, e.g. "If the server from Step 2 is still up, leave it
|
|
978
|
-
|
|
979
|
-
browser." Do not just say "start it again"
|
|
1072
|
+
conditional, e.g. "If the server from Step 2 is still up, leave it,
|
|
1073
|
+
if not, run `sm` again from the tutorial cwd and reopen the
|
|
1074
|
+
browser." Do not just say "start it again", that risks a second
|
|
980
1075
|
process trying to bind the same port and confusing the tester.
|
|
981
1076
|
|
|
982
|
-
> Your turn. Edit
|
|
983
|
-
>
|
|
984
|
-
>
|
|
1077
|
+
> Your turn. Edit `notes/todo.md` with your editor of choice and
|
|
1078
|
+
> delete the bullet that contains `@demo-agent`. Save. Watch the
|
|
1079
|
+
> UI.
|
|
985
1080
|
>
|
|
986
|
-
> Expected: the `
|
|
987
|
-
> real time. The two nodes stay in the
|
|
1081
|
+
> Expected: the `notes/todo → demo-agent` connector (kind:
|
|
1082
|
+
> `mentions`) disappears in real time. The two nodes stay in the
|
|
1083
|
+
> graph; only the edge goes.
|
|
988
1084
|
|
|
989
|
-
You verify by reading
|
|
990
|
-
|
|
991
|
-
the
|
|
1085
|
+
You verify by reading `notes/todo.md` to confirm the change was
|
|
1086
|
+
applied. (On `agent-skills`, where the `@demo-agent` bullet was
|
|
1087
|
+
never created in Step 5, ask the tester to remove the only bullet
|
|
1088
|
+
they did add and watch THAT connector vanish, the lesson is the
|
|
1089
|
+
same.) Once they confirm, ask them to **Ctrl+C** the server.
|
|
992
1090
|
|
|
993
|
-
### Step 9
|
|
1091
|
+
### Step 9: Browse CLI: list / show / check (~3 min)
|
|
994
1092
|
|
|
995
1093
|
```bash
|
|
996
1094
|
sm list
|
|
@@ -1001,16 +1099,17 @@ sm show .claude/skills/demo-skill/SKILL.md
|
|
|
1001
1099
|
sm check
|
|
1002
1100
|
```
|
|
1003
1101
|
|
|
1004
|
-
Expected: you see the
|
|
1102
|
+
Expected: you see the 5 fixture nodes listed with their kind:
|
|
1005
1103
|
`demo-skill` (skill), `demo-agent` (agent), `demo-command`
|
|
1006
|
-
(command),
|
|
1007
|
-
Step 3)
|
|
1008
|
-
|
|
1104
|
+
(command), `notes/todo` (`markdown`, the catch-all per
|
|
1105
|
+
Step 3), and `notes/demo-guideline` (`markdown` as well, the
|
|
1106
|
+
target of the hub's `references` link). `check` reads the persisted
|
|
1107
|
+
`scan_issues` table, it does NOT re-walk the filesystem. The
|
|
1009
1108
|
fixture is clean (Steps 2-6 captured the latest state before
|
|
1010
1109
|
Ctrl+C), so the verb prints `✓ No issues`. We will plant one in
|
|
1011
1110
|
Step 11 and watch the rule catch it after a fresh `sm scan`.
|
|
1012
1111
|
|
|
1013
|
-
### Step 10
|
|
1112
|
+
### Step 10: ASCII: graph + export (~3 min)
|
|
1014
1113
|
|
|
1015
1114
|
```bash
|
|
1016
1115
|
sm graph
|
|
@@ -1021,17 +1120,17 @@ ls -la export*
|
|
|
1021
1120
|
```
|
|
1022
1121
|
|
|
1023
1122
|
`graph` draws an ASCII tree of the whole persisted scan (no
|
|
1024
|
-
`--root` flag
|
|
1123
|
+
`--root` flag, graph is whole-graph today). `export` takes a
|
|
1025
1124
|
positional query (`kind=…`, `path=…`, `has=issues`, comma-OR
|
|
1026
1125
|
within a key, AND across keys) and a `--format` of `md` or
|
|
1027
1126
|
`json`. The `path=` glob uses POSIX semantics (`*` is one
|
|
1028
1127
|
segment, `**` spans segments) so `path=notes/**` cleanly
|
|
1029
1128
|
captures the notes folder regardless of the catch-all kind.
|
|
1030
1129
|
|
|
1031
|
-
### Step 11
|
|
1130
|
+
### Step 11: Issues: broken refs (~3 min)
|
|
1032
1131
|
|
|
1033
1132
|
`broken-ref` is one of the deterministic rules `sm check` runs.
|
|
1034
|
-
We'll plant one and watch it surface
|
|
1133
|
+
We'll plant one and watch it surface, that's the easiest way to
|
|
1035
1134
|
internalise that it is an **issue** on a node, NOT a graph
|
|
1036
1135
|
connector and NOT the same thing as an "orphan".
|
|
1037
1136
|
|
|
@@ -1056,38 +1155,46 @@ Expected: the warning surfaces the dangling link from
|
|
|
1056
1155
|
`notes/todo.md` to the non-existent `missing-page.md`. The
|
|
1057
1156
|
`--analyzers` filter lets you focus on a single issue type; `--json`
|
|
1058
1157
|
emits the structured payload (useful for CI / scripting). When
|
|
1059
|
-
done, the tester can leave the bullet in place or delete it
|
|
1158
|
+
done, the tester can leave the bullet in place or delete it, the
|
|
1060
1159
|
rest of the deep-dive doesn't depend on it.
|
|
1061
1160
|
|
|
1062
1161
|
If the tester asks about `sm orphans` vs `sm check`, see
|
|
1063
1162
|
§Scope clarifications.
|
|
1064
1163
|
|
|
1065
|
-
### Step 12
|
|
1164
|
+
### Step 12: Plugins (~3 min)
|
|
1066
1165
|
|
|
1067
|
-
**Context
|
|
1166
|
+
**Context, present plugins to the tester before any command runs.**
|
|
1068
1167
|
This is the official welcome to the plugin world; many testers will
|
|
1069
1168
|
not have considered that skill-map is extensible at all. Frame it
|
|
1070
|
-
like this
|
|
1071
|
-
the
|
|
1169
|
+
like this as a tester-facing message (apply the host-dependent
|
|
1170
|
+
rendering rule, translate to the tester's language per the
|
|
1171
|
+
standard rules):
|
|
1072
1172
|
|
|
1073
1173
|
> Plugins are how skill-map gets extended. The kernel ships with a
|
|
1074
1174
|
> small set of built-in plugins out of the box, but anyone can
|
|
1075
|
-
> write their own and drop them into the project
|
|
1175
|
+
> write their own and drop them into the project, `sm plugins
|
|
1076
1176
|
> create` scaffolds a manifest and the stubs, so there is no
|
|
1077
1177
|
> handwritten boilerplate to start from.
|
|
1078
1178
|
>
|
|
1079
1179
|
> The kernel exposes **six** plugin types you can implement:
|
|
1080
1180
|
>
|
|
1081
|
-
> - **extractors
|
|
1082
|
-
> - **analyzers
|
|
1083
|
-
> - **actions
|
|
1084
|
-
> - **hooks
|
|
1181
|
+
> - **extractors**: find links and references inside markdown.
|
|
1182
|
+
> - **analyzers**: rules that surface issues on a node.
|
|
1183
|
+
> - **actions**: verbs the user can run on a node (e.g. `bump`).
|
|
1184
|
+
> - **hooks**: fire on lifecycle events (scan started, finished,
|
|
1085
1185
|
> …).
|
|
1086
|
-
> - **formatters
|
|
1186
|
+
> - **formatters**: render outputs in different shapes (text,
|
|
1087
1187
|
> JSON, custom).
|
|
1088
|
-
> - **providers
|
|
1188
|
+
> - **providers**: declare new node kinds and where to look for
|
|
1089
1189
|
> them.
|
|
1090
1190
|
>
|
|
1191
|
+
> Heads up: the same plugin management is in the UI too. From any
|
|
1192
|
+
> `sm serve` session, open the **gear icon → Plugins** tab to
|
|
1193
|
+
> browse and toggle plugins, CLI and UI hit the same store so a
|
|
1194
|
+
> change in one is reflected in the other. We'll use the CLI here
|
|
1195
|
+
> because it shows the full surface in a few lines, but knowing
|
|
1196
|
+
> the UI panel exists is useful for day-to-day work.
|
|
1197
|
+
>
|
|
1091
1198
|
> Let's look at what's installed right now.
|
|
1092
1199
|
|
|
1093
1200
|
Then run the commands:
|
|
@@ -1108,7 +1215,7 @@ behavior, or which id format `disable` / `enable` accept, see
|
|
|
1108
1215
|
If `plugins list` shows zero entries (depends on the build), tell
|
|
1109
1216
|
the tester no plugins are installed yet and offer to skip.
|
|
1110
1217
|
|
|
1111
|
-
### Step 13
|
|
1218
|
+
### Step 13: Annotations and the `.sm` consent prompt (~3 min)
|
|
1112
1219
|
|
|
1113
1220
|
**Context**: every `.md` skill-map tracks gets a sibling
|
|
1114
1221
|
**companion file** with extension `.sm` that carries **all of
|
|
@@ -1122,7 +1229,7 @@ and you'll encounter them often once you start working with
|
|
|
1122
1229
|
the project.
|
|
1123
1230
|
|
|
1124
1231
|
The first time skill-map wants to write one in a new project it
|
|
1125
|
-
asks for your consent
|
|
1232
|
+
asks for your consent, it never touches your filesystem without
|
|
1126
1233
|
permission. After you say yes, the choice persists per-checkout
|
|
1127
1234
|
(gitignored) and the prompt never appears again.
|
|
1128
1235
|
|
|
@@ -1134,7 +1241,7 @@ sm sidecar annotate notes/todo.md
|
|
|
1134
1241
|
```
|
|
1135
1242
|
|
|
1136
1243
|
Expected: a short explanation paragraph appears in the terminal,
|
|
1137
|
-
followed by a `[Y/n]` prompt (capital Y = default Yes
|
|
1244
|
+
followed by a `[Y/n]` prompt (capital Y = default Yes, you can just
|
|
1138
1245
|
hit Enter). After accepting, `notes/todo.sm` appears next to
|
|
1139
1246
|
`notes/todo.md` carrying an `identity:` block plus an empty
|
|
1140
1247
|
`annotations: {}` block, and `.skill-map/settings.local.json` now
|
|
@@ -1145,7 +1252,7 @@ cat notes/todo.sm
|
|
|
1145
1252
|
cat .skill-map/settings.local.json
|
|
1146
1253
|
```
|
|
1147
1254
|
|
|
1148
|
-
**Why the prompt?** The choice is **per-user, per-project
|
|
1255
|
+
**Why the prompt?** The choice is **per-user, per-project**: stored
|
|
1149
1256
|
in the gitignored `settings.local.json` so each contributor consents
|
|
1150
1257
|
independently and nothing about the choice travels via the repo.
|
|
1151
1258
|
Once accepted, the flag stays set and skill-map will never ask
|
|
@@ -1161,7 +1268,7 @@ If the tester asks about `sm bump` vs `sm sidecar annotate` vs
|
|
|
1161
1268
|
## Scope clarifications (on demand)
|
|
1162
1269
|
|
|
1163
1270
|
Reference material for the "mention only if the tester asks"
|
|
1164
|
-
beats in Steps 7, 8 and 9. Do NOT volunteer these unprompted
|
|
1271
|
+
beats in Steps 7, 8 and 9. Do NOT volunteer these unprompted,
|
|
1165
1272
|
they exist so the agent has a precise answer ready when the
|
|
1166
1273
|
tester pulls on the thread.
|
|
1167
1274
|
|
|
@@ -1173,20 +1280,11 @@ tester pulls on the thread.
|
|
|
1173
1280
|
detection (a node whose file disappeared, or a candidate rename
|
|
1174
1281
|
the kernel is still unsure about). Our fixture doesn't produce
|
|
1175
1282
|
orphans of that kind, so `sm orphans` will print "No orphan /
|
|
1176
|
-
auto-rename issues"
|
|
1177
|
-
|
|
1178
|
-
### `plugins doctor` warnings on a clean fixture
|
|
1179
|
-
|
|
1180
|
-
`doctor` may emit 1-2 informational warnings about `explorationDir`
|
|
1181
|
-
not existing for `gemini/gemini` (`~/.gemini`) or
|
|
1182
|
-
`agent-skills/agent-skills` (`.agents`). These are normal on a
|
|
1183
|
-
machine that has not installed those tools — the providers declare
|
|
1184
|
-
optional discovery paths and warn when the path is absent. Nothing
|
|
1185
|
-
is broken; the providers just have nothing to scan.
|
|
1283
|
+
auto-rename issues", that's expected, not a bug.
|
|
1186
1284
|
|
|
1187
1285
|
### `sm plugins show <qualified-id>`
|
|
1188
1286
|
|
|
1189
|
-
The verb is informational
|
|
1287
|
+
The verb is informational, passing `core/external-url-counter`
|
|
1190
1288
|
validates the extension exists and then renders the **parent
|
|
1191
1289
|
bundle's** detail (i.e. the full `core` listing). The extension
|
|
1192
1290
|
you named lives in that list. This is deliberate: forcing the user
|
|
@@ -1202,7 +1300,7 @@ toggles every Claude extension at once) or a **qualified extension
|
|
|
1202
1300
|
id** `<bundle>/<ext-id>` (e.g. `core/external-url-counter`). The
|
|
1203
1301
|
display format you see in `plugins list`
|
|
1204
1302
|
(`extractor:core/external-url-counter@1.0.0`) includes the kind
|
|
1205
|
-
prefix and the version for readability
|
|
1303
|
+
prefix and the version for readability, strip both when passing
|
|
1206
1304
|
the id to `disable` / `enable`. Per-extension toggles only work on
|
|
1207
1305
|
extension-granularity bundles like `core`; the `claude` bundle is
|
|
1208
1306
|
bundle-granularity and only accepts the bundle id.
|
|
@@ -1212,7 +1310,7 @@ bundle-granularity and only accepts the bundle id.
|
|
|
1212
1310
|
- `sm sidecar annotate` is the scaffold verb (creates a fresh
|
|
1213
1311
|
`.sm`).
|
|
1214
1312
|
- `sm bump <node>` is the day-to-day verb that increments the
|
|
1215
|
-
sidecar's version and refreshes its hashes
|
|
1313
|
+
sidecar's version and refreshes its hashes, same consent gate.
|
|
1216
1314
|
- `sm sidecar refresh <node>` is the hash-only update (no version
|
|
1217
1315
|
bump).
|
|
1218
1316
|
|
|
@@ -1220,71 +1318,27 @@ bundle-granularity and only accepts the bundle id.
|
|
|
1220
1318
|
|
|
1221
1319
|
## Final wrap-up
|
|
1222
1320
|
|
|
1223
|
-
When everything is done (demo only, or demo + deep-dive),
|
|
1224
|
-
|
|
1321
|
+
When everything is done (demo only, or demo + deep-dive), show the
|
|
1322
|
+
closing block (open with a "thanks, that's a wrap" line, then the
|
|
1323
|
+
sm-master pointer + cleanup):
|
|
1225
1324
|
|
|
1226
|
-
> Thanks! That's a wrap.
|
|
1325
|
+
> Thanks! That's a wrap.
|
|
1227
1326
|
>
|
|
1228
|
-
>
|
|
1229
|
-
>
|
|
1230
|
-
>
|
|
1231
|
-
>
|
|
1327
|
+
> One more thing before you go: there's a companion skill called
|
|
1328
|
+
> **sm-master** that picks up where this tutorial leaves off. It's
|
|
1329
|
+
> a modular deep-dive, you choose which areas to explore from a
|
|
1330
|
+
> menu, and it covers a guided tour of the built-in plugins
|
|
1331
|
+
> (extractors, analyzers, actions, hooks, formatters, providers).
|
|
1232
1332
|
>
|
|
1233
|
-
>
|
|
1234
|
-
> 2. **No, I'm good**
|
|
1235
|
-
|
|
1236
|
-
If they say **1**, write `<cwd>/sm-tutorial-report.md` with this
|
|
1237
|
-
template:
|
|
1333
|
+
> When you're ready, open a fresh empty directory and run:
|
|
1238
1334
|
|
|
1239
|
-
```
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
- **Date**: <ISO-8601>
|
|
1243
|
-
- **Depth reached**: <basic | full>
|
|
1244
|
-
- **Tester**: level <N> (if applicable)
|
|
1245
|
-
- **Tutorial directory**: <cwd>
|
|
1246
|
-
- **Steps completed**: N / 7 demo + X / 6 deep-dive (if applicable)
|
|
1247
|
-
- **Steps skipped**: Y (if applicable)
|
|
1248
|
-
- **Total time**: ~<computed from timestamps>
|
|
1249
|
-
|
|
1250
|
-
## Environment
|
|
1251
|
-
- `sm version`: <version>
|
|
1252
|
-
- Node: <version>
|
|
1253
|
-
- OS: <platform>
|
|
1254
|
-
|
|
1255
|
-
## Findings logged
|
|
1256
|
-
<dump the relevant content of findings.md, without the generic header>
|
|
1257
|
-
|
|
1258
|
-
## Additional tester notes
|
|
1259
|
-
<if they left free-form comments>
|
|
1335
|
+
```bash
|
|
1336
|
+
sm tutorial master
|
|
1260
1337
|
```
|
|
1261
1338
|
|
|
1262
|
-
Then
|
|
1263
|
-
|
|
1264
|
-
>
|
|
1265
|
-
>
|
|
1266
|
-
> <cwd>/sm-tutorial-report.md
|
|
1267
|
-
>
|
|
1268
|
-
> Send it to Pusher whenever you're ready (over the agreed channel).
|
|
1269
|
-
|
|
1270
|
-
If they say **2**, skip the report path and go straight to the
|
|
1271
|
-
closing block below.
|
|
1272
|
-
|
|
1273
|
-
**Always show this closing block** (regardless of the report
|
|
1274
|
-
choice — both branches converge here):
|
|
1275
|
-
|
|
1276
|
-
> One more thing before you go: there's a companion skill called
|
|
1277
|
-
> **sm-master** that picks up where this tutorial leaves off. It's
|
|
1278
|
-
> a modular deep-dive — you choose which areas to explore from a
|
|
1279
|
-
> menu — and it covers a guided tour of the built-in plugins
|
|
1280
|
-
> (extractors, analyzers, actions, hooks, formatters, providers),
|
|
1281
|
-
> plugin authoring via `sm plugins create` / `sm plugins upgrade`,
|
|
1282
|
-
> and settings + view-slots at depth. Same external-tester
|
|
1283
|
-
> audience, same pause/resume style, but a lot more ground covered.
|
|
1284
|
-
>
|
|
1285
|
-
> When you're ready, **invoke it from a fresh empty directory**
|
|
1286
|
-
> (same setup as this tutorial), and just say `sm-master` or
|
|
1287
|
-
> `advanced tutorial` to start.
|
|
1339
|
+
> That drops `sm-master.md` in the cwd. Then load it from your
|
|
1340
|
+
> agent (e.g. `ejecutá @sm-master.md` in Claude Code, or the
|
|
1341
|
+
> equivalent `@`-mention in Gemini CLI) and the deep-dive starts.
|
|
1288
1342
|
>
|
|
1289
1343
|
> To delete everything THIS tutorial left behind, if the cwd was a
|
|
1290
1344
|
> dedicated dir:
|
|
@@ -1305,7 +1359,7 @@ the cwd, start like this (do NOT repeat pre-flight from scratch):
|
|
|
1305
1359
|
> 8-13)", depending on the yaml state).
|
|
1306
1360
|
>
|
|
1307
1361
|
> 1. **Continue** from where you left off
|
|
1308
|
-
> 2. **Start over
|
|
1362
|
+
> 2. **Start over**: wipes all the tutorial content in this dir
|
|
1309
1363
|
> (asks for confirmation)
|
|
1310
1364
|
> 3. **Exit** without touching anything
|
|
1311
1365
|
|
|
@@ -1317,7 +1371,7 @@ anything**:
|
|
|
1317
1371
|
|
|
1318
1372
|
> This `tutorial-state.yml` was generated for a different
|
|
1319
1373
|
> directory (`<saved cwd>`). The current dir is `<pwd>`. I'm
|
|
1320
|
-
> refusing to wipe
|
|
1374
|
+
> refusing to wipe, your `.claude/`, `notes/`, etc. here are
|
|
1321
1375
|
> probably yours, not the tutorial's. Move to `<saved cwd>` and
|
|
1322
1376
|
> re-invoke me from there, or delete `tutorial-state.yml` by
|
|
1323
1377
|
> hand if you really want to start fresh here.
|
|
@@ -1339,8 +1393,8 @@ anything**:
|
|
|
1339
1393
|
> <provider_dir>/commands/demo-command.md (claude only)
|
|
1340
1394
|
> <provider_dir>/skills/demo-skill/ (all three)
|
|
1341
1395
|
> notes/todo.md
|
|
1396
|
+
> notes/demo-guideline.md
|
|
1342
1397
|
> notes/private-credentials.md
|
|
1343
|
-
> sm-tutorial-report.md (if present)
|
|
1344
1398
|
> export.* (if present)
|
|
1345
1399
|
> dump.sql (if present)
|
|
1346
1400
|
> ```
|
|
@@ -1354,7 +1408,7 @@ anything**:
|
|
|
1354
1408
|
|
|
1355
1409
|
3. Only on the literal `yes, wipe` reply, delete those exact paths.
|
|
1356
1410
|
Do NOT recursively `rm -rf` `<provider_dir>/` or `notes/` as
|
|
1357
|
-
directories
|
|
1411
|
+
directories, only the specific tutorial-owned files inside, in
|
|
1358
1412
|
case the tester has unrelated files there. After deletion, also
|
|
1359
1413
|
`rmdir` the per-provider subdirs that actually exist
|
|
1360
1414
|
(`<provider_dir>/agents`, `<provider_dir>/commands`,
|
|
@@ -1370,7 +1424,7 @@ anything**:
|
|
|
1370
1424
|
shorthand for `sm serve` with defaults). Tell the tester to
|
|
1371
1425
|
switch verbs: stop the failed `sm`, then run
|
|
1372
1426
|
`sm serve --port 4243`. The browser link printed by the server
|
|
1373
|
-
changes accordingly
|
|
1427
|
+
changes accordingly, they should open the new URL, not the
|
|
1374
1428
|
default 4242.
|
|
1375
1429
|
- **`sm` doesn't pick up changes on WSL** → known on WSL2 with
|
|
1376
1430
|
files under `/mnt/c/`. Suggest exiting, running `mkdir
|