@skill-map/cli 0.69.0 → 0.71.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-tutorial/SKILL.md +8 -3
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/agents-hub/providers/codex/en/agents-hub.md +2 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/agents-hub/providers/codex/es/agents-hub.md +2 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/codex/en/todo-bullet-agent.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/codex/en/todo-bullet-command.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/codex/en/todo-bullet-skill.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/codex/es/todo-bullet-agent.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/codex/es/todo-bullet-command.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/codex/es/todo-bullet-skill.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/providers/codex/en/__PROVIDER__/skills/publish/SKILL.md +2 -2
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/providers/codex/es/__PROVIDER__/skills/publish/SKILL.md +2 -2
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/providers/codex/en/.codex/agents/master-agent.toml +1 -1
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/providers/codex/es/.codex/agents/master-agent.toml +1 -1
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/codex/en/.codex/agents/content-editor.toml +1 -1
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/codex/es/.codex/agents/content-editor.toml +1 -1
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/providers/codex/en/.codex/agents/demo-agent.toml +1 -1
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/providers/codex/es/.codex/agents/demo-agent.toml +1 -1
- package/dist/cli/tutorial/sm-tutorial/references/_core.md +73 -47
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +2 -2
- package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +0 -7
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-daily.md +10 -26
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-fundamentals.md +10 -18
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-kickoff.md +12 -31
- package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +0 -4
- package/dist/cli/tutorial/sm-tutorial/references/part-daily-loop.md +97 -43
- package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +11 -14
- package/dist/cli/tutorial/sm-tutorial/references/part-mcp.md +4 -14
- package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +0 -8
- package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +18 -36
- package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +2 -10
- package/dist/cli/tutorial/sm-tutorial/scripts/lib/paths.js +6 -5
- package/dist/cli.js +441 -269
- package/dist/index.js +115 -18
- package/dist/kernel/index.d.ts +27 -0
- package/dist/kernel/index.js +115 -18
- package/dist/ui/chunk-CK4C2IIP.js +3 -0
- package/dist/ui/{chunk-RRRXQNG6.js → chunk-EVNCL7FV.js} +21 -21
- package/dist/ui/{chunk-E7GLGHVY.js → chunk-GUGB4JY5.js} +1 -1
- package/dist/ui/{chunk-SXSNTF26.js → chunk-RSPEJBPT.js} +1 -1
- package/dist/ui/chunk-SQCXHF3J.js +2 -0
- package/dist/ui/index.html +1 -1
- package/dist/ui/{main-23NGLEUB.js → main-GY4PAVQW.js} +3 -3
- package/package.json +2 -2
- package/dist/ui/chunk-RLRSNHYG.js +0 -3
- package/dist/ui/chunk-SI4MGFOW.js +0 -2
|
@@ -23,20 +23,84 @@ what the tester names their portfolio. Persist the answer with
|
|
|
23
23
|
antigravity) walks its own `basic-daily` part. **Codex deltas** (when
|
|
24
24
|
`tutorial.provider == codex`): the `content-editor` is a TOML agent at
|
|
25
25
|
`.codex/agents/content-editor.toml`, and Codex has no `command` kind, so
|
|
26
|
-
`publish` is a **skill** at `.agents/skills/publish/SKILL.md`. The
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
`publish` is a **skill** at `.agents/skills/publish/SKILL.md`. The CONNECTOR
|
|
27
|
+
GRAMMAR differs: Codex invokes a skill with `$` (not `/`, a Codex built-in
|
|
28
|
+
command) and `@` is a file picker (not an agent mention), so `$publish` /
|
|
29
|
+
`$check-links` invoke and the `content-editor` agent is referenced by a
|
|
30
|
+
markdown link to its `.toml`. Per chapter:
|
|
31
|
+
|
|
32
|
+
- `add-page` (Codex: the tester runs the agent for real in a fresh Codex).
|
|
33
|
+
Codex loads its agents only at startup and has no live reload (`/agent`
|
|
34
|
+
just switches existing threads), and the `content-editor` was created
|
|
35
|
+
mid-tutorial, so it is not invocable in any running session. Do NOT invoke
|
|
36
|
+
it via the Task tool and do NOT tell the tester to "reload". Instead hand
|
|
37
|
+
the run to the tester in a fresh Codex so they watch their own agent work,
|
|
38
|
+
reusing the **third terminal** (the one running `node server.js`); `sm`
|
|
39
|
+
stays up in the second terminal so the "Map unchanged" beat still lands.
|
|
40
|
+
Skip the claude `add-page` body and run this flow. First ask what page
|
|
41
|
+
they want:
|
|
42
|
+
|
|
43
|
+
> Your turn to delegate, for real, and the page is yours: tell me what to
|
|
44
|
+
> add, about anything you like, your projects, your talks, a reading list,
|
|
45
|
+
> whatever fits your site.
|
|
46
|
+
|
|
47
|
+
When they answer, guide them, dropping the topic they chose into the
|
|
48
|
+
`<your topic>` placeholder below:
|
|
49
|
+
|
|
50
|
+
> Your `content-editor` is a real Codex agent
|
|
51
|
+
> (`.codex/agents/content-editor.toml`). Heads up, this is a Codex
|
|
52
|
+
> limitation: Codex reads its agents only when it boots and has no way to
|
|
53
|
+
> reload them mid-session, so an agent you just created is not available
|
|
54
|
+
> until you start Codex again. That is why we run it in a fresh Codex now,
|
|
55
|
+
> and you get to watch it work. In your **third terminal** (the one running
|
|
56
|
+
> `node server.js`), stop the site with `Ctrl+C`, then start Codex in the
|
|
57
|
+
> same folder:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
codex
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
> Once it is up, ask it for the page you chose, in your own words, for
|
|
64
|
+
> example:
|
|
65
|
+
|
|
66
|
+
```text
|
|
67
|
+
Use the content-editor agent to add a page about <your topic>.
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
> Watch it run: it writes your new page under `public/` for real, the way
|
|
71
|
+
> it would on a normal day. When it finishes, exit Codex (`Ctrl+D`), bring the
|
|
72
|
+
> site back up with `node server.js`, and refresh
|
|
73
|
+
> `http://localhost:3000`. Your new page is there, in the same style.
|
|
74
|
+
>
|
|
75
|
+
> Now glance at the **Map** (still running in your second terminal): same
|
|
76
|
+
> nodes as before, nothing new. The page is Layer 2 output; the harness on
|
|
77
|
+
> the canvas is Layer 1. Your nodes are not a diagram, they are runnable,
|
|
78
|
+
> and you just ran one.
|
|
79
|
+
>
|
|
80
|
+
> See the new page on the site, and the Map unchanged?
|
|
81
|
+
|
|
82
|
+
Wait for confirmation, then mark `add-page` done. If the tester's Codex
|
|
83
|
+
goes off-script (writes a `.md`, touches the harness, or the page lands
|
|
84
|
+
wrong), help them steer it, or as a last resort act as the `content-editor`
|
|
85
|
+
yourself following its rules + `docs/STYLE.md` so the beat still lands.
|
|
31
86
|
- `broken-ref`: the deploy link that breaks lives in the `publish` SKILL; fix it
|
|
32
87
|
in `.agents/skills/publish/SKILL.md` (not a `.claude/commands/` file).
|
|
33
|
-
- `reserved
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
88
|
+
- `reserved` (Codex: SKIP this chapter, it cannot be reproduced). The reserved-
|
|
89
|
+
name collision is a claude `/`-command beat: a user `/model` COMMAND shadows
|
|
90
|
+
Codex's own built-in `/model`. On Codex skills are `$`-invoked, a namespace
|
|
91
|
+
disjoint from the `/` built-in commands, so a skill named like a built-in
|
|
92
|
+
(`model`) never collides and skill-map flags nothing, there is no beat to
|
|
93
|
+
show. Do NOT write a `model` skill, do NOT narrate a (non-)warning, do NOT
|
|
94
|
+
make a beat of it. Silently `state.js mark daily-loop reserved skipped` and go
|
|
95
|
+
from `broken-ref` straight to `publish`. Keep the numbering it already has:
|
|
96
|
+
it is position-based, so `publish` stays 3.5, `stability` 3.6, `golive` 3.7
|
|
97
|
+
(do NOT renumber); the tester simply never sees a 3.4 on Codex.
|
|
98
|
+
- `publish`: run the `publish` SKILL's steps for real (`$check-links` invokes
|
|
99
|
+
the link checker, the `content-editor` markdown-link reference, the deploy
|
|
100
|
+
runbook).
|
|
101
|
+
- `golive`: when you name the harness pieces on the graph, say the **publish
|
|
102
|
+
skill**, not "the publish command" (Codex has no command kind); everything
|
|
103
|
+
else is identical.
|
|
40
104
|
|
|
41
105
|
**Real-execution contract (read once).** When invoking the `content-editor` via
|
|
42
106
|
the Task tool, instruct it explicitly to write ONLY `.html` files under
|
|
@@ -61,15 +125,6 @@ broken-reference markers, and confidence live.
|
|
|
61
125
|
|
|
62
126
|
## Chapter `setup` - Make it yours and bring it up (~5 min)
|
|
63
127
|
|
|
64
|
-
**Context**: the harness is wired (you built it in the earlier parts). Now you
|
|
65
|
-
put it to work on a real day. First, make the site yours, about whatever you
|
|
66
|
-
like, then serve it and open it in the browser, the early payoff before the
|
|
67
|
-
daily loop fills it with pages. The honest beat: the HTML
|
|
68
|
-
and CSS are Layer 2 (the harness's output); skill-map maps the harness (Layer 1,
|
|
69
|
-
the `.md` files), so the site landing on disk does NOT move the graph, and that
|
|
70
|
-
is correct, not a bug. The tester runs the serve commands themselves (one of the
|
|
71
|
-
few non-`sm` beats); guide them, do not run them.
|
|
72
|
-
|
|
73
128
|
**Preparation**:
|
|
74
129
|
|
|
75
130
|
1. Ask the tester the two questions straight, with no "before we build, let's
|
|
@@ -262,10 +317,6 @@ Wait for confirmation. Mark `add-page`: done. Auto-advance to `broken-ref`.
|
|
|
262
317
|
|
|
263
318
|
## Chapter `broken-ref` - A rename breaks a link (~4 min)
|
|
264
319
|
|
|
265
|
-
**Context**: the daily safety net, and where skill-map earns its keep: rename and
|
|
266
|
-
move things freely, and skill-map shows you exactly what you forgot to update
|
|
267
|
-
before it ships broken.
|
|
268
|
-
|
|
269
320
|
**Preparation**: none (the tester drives). Everything here is watched live on
|
|
270
321
|
the Map; no `sm` commands.
|
|
271
322
|
|
|
@@ -341,10 +392,6 @@ Wait for confirmation. Mark `reserved`: done. Auto-advance to `publish`.
|
|
|
341
392
|
|
|
342
393
|
## Chapter `publish` - Ship it: run /publish for real (~4 min)
|
|
343
394
|
|
|
344
|
-
**Context**: the publish flow only earns its keep when something is actually
|
|
345
|
-
wrong, so first you plant a real bug in the site, then watch `/publish` catch and
|
|
346
|
-
fix it for real.
|
|
347
|
-
|
|
348
395
|
**Preparation**: make sure the pages exist (`index`, `about`, `projects` from the
|
|
349
396
|
earlier chapters; lay any that are missing from the templates in `setup`).
|
|
350
397
|
|
|
@@ -434,12 +481,17 @@ Tell the tester:
|
|
|
434
481
|
> The first time skill-map writes its own metadata it asks for **consent**:
|
|
435
482
|
> confirm it in the dialog that pops up. Two things happen at once: a stability
|
|
436
483
|
> badge for the stage you picked appears on the `AGENTS` node, and skill-map
|
|
437
|
-
> creates a **`.sm` sidecar file**
|
|
438
|
-
>
|
|
439
|
-
>
|
|
484
|
+
> creates a **`.sm` sidecar file** right next to the handbook, named after it
|
|
485
|
+
> (`AGENTS.md` becomes `AGENTS.sm` in the same folder), to hold that metadata.
|
|
486
|
+
> Your `AGENTS.md` itself is never touched. Your consent is remembered for the
|
|
487
|
+
> project, so it will not ask again.
|
|
440
488
|
>
|
|
441
|
-
>
|
|
442
|
-
>
|
|
489
|
+
> What is a **sidecar**? A sibling file that lives in the same folder as the
|
|
490
|
+
> node it describes and is committed to the same repository, so it travels with
|
|
491
|
+
> the `.md` wherever it goes. skill-map keeps what it learns about a node
|
|
492
|
+
> (stability, version, tags) there ON PURPOSE: that is the tool's bookkeeping,
|
|
493
|
+
> not your content, so it stays OUT of your source markdown. Your `.md` files
|
|
494
|
+
> stay clean and authored by you, never polluted by skill-map.
|
|
443
495
|
>
|
|
444
496
|
> See the new stability badge on the handbook?
|
|
445
497
|
|
|
@@ -447,23 +499,25 @@ Wait for confirmation. Mark `stability`: done. Auto-advance to `golive`.
|
|
|
447
499
|
|
|
448
500
|
## Chapter `golive` - Your website, live next to the graph (~3 min)
|
|
449
501
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
502
|
+
The site is already serving from `add-page` (the tester brought `node server.js`
|
|
503
|
+
back up in their third terminal after their agent wrote its page), so for most
|
|
504
|
+
testers the finale is just opening it, not restarting anything. Only if they
|
|
505
|
+
closed that terminal do they bring it back with the block below; guide them, do
|
|
506
|
+
not run it for them. `npm install` is idempotent if they do restart.
|
|
453
507
|
|
|
454
508
|
**Preparation**: none. `server.js` / `package.json` exist from the kickoff; the
|
|
455
509
|
pages exist from the earlier chapters.
|
|
456
510
|
|
|
511
|
+
> Last step, the fun one. Your site is still serving from earlier in your third
|
|
512
|
+
> terminal, so just open `http://localhost:3000` and click through Home, About,
|
|
513
|
+
> and the page you added, the pages your harness produced and shipped through the
|
|
514
|
+
> publish flow you just ran. (If you closed that terminal, bring it back up first
|
|
515
|
+
> with the commands below.)
|
|
516
|
+
|
|
457
517
|
```bash
|
|
458
518
|
npm install
|
|
459
519
|
node server.js
|
|
460
520
|
```
|
|
461
|
-
|
|
462
|
-
> Last step, the fun one. `npm install` confirms the one small library is there,
|
|
463
|
-
> and `node server.js` starts the server (`Listening on http://localhost:3000`).
|
|
464
|
-
>
|
|
465
|
-
> Open `http://localhost:3000` and click through Home, About, and Projects, the
|
|
466
|
-
> pages your harness produced and shipped through the publish flow you just ran.
|
|
467
521
|
>
|
|
468
522
|
> Now take it in at once. On one side, your real running website, named after
|
|
469
523
|
> you, that you could deploy as-is. On the other, the skill-map graph of the
|
|
@@ -4,10 +4,13 @@ The live-UI prologue: the tester runs `sm init`, opens the browser, and watches
|
|
|
4
4
|
|
|
5
5
|
**Codex deltas (rich track).** When `tutorial.provider == codex` the lay commands are unchanged (the `--only` ids match the Codex overlay), but the on-disk shapes differ; substitute in the tester-facing prose:
|
|
6
6
|
|
|
7
|
-
- `init`: the boot node `demo-agent` is a **TOML agent** at `.codex/agents/demo-agent.toml`.
|
|
7
|
+
- `init`: the boot node `demo-agent` is a **TOML agent** at `.codex/agents/demo-agent.toml`. `sm init` resolves the `codex` lens with no prompt (the `.codex/` marker outranks the shared `.agents/` open default), so the commands stay `sm init` then `sm`, exactly like claude.
|
|
8
8
|
- `kinds`: the node list reads `.codex/agents/demo-agent.toml` (agent), `.agents/skills/demo-command/SKILL.md` (skill), `.agents/skills/demo-skill/SKILL.md` (skill), and the `notes/*.md`. Name the kinds as agent + skill + markdown (two new kinds this step: skill + markdown). Present `demo-command` as a plain skill: do NOT tell the tester it "is a command" or narrate any command-to-skill substitution. Codex has no `command` kind, so on this track `demo-command` is simply one of the two skills, nothing to explain.
|
|
9
9
|
- `first-edit`: the description to edit lives in `.codex/agents/demo-agent.toml` (the `description = "…"` TOML field, not YAML frontmatter).
|
|
10
|
-
- `connectors
|
|
10
|
+
- `connectors`: the hub wires its nodes with the CODEX grammar, NOT claude's `/`+`@`-mention (the `todo-connectors` codex overlay lays the right bullets automatically; you only narrate the shapes). The two skill bullets INVOKE with `$` (`$demo-command`, `$demo-skill`); the agent bullet is a markdown-link reference to the agent file (`[demo-agent](../.codex/agents/demo-agent.toml)`, since Codex cannot `@`-mention an agent); `@demo-guideline2.md` is a file reference (Codex's `@` is a file picker). The bare `@demo-guideline` (no extension) forms NO edge on Codex (`@` points at a FILE, not a name), so the hub shows **four resolved arrows and NO broken-reference marker** (claude's fifth, broken bullet does not exist here). `Expected`: four drawn arrows, zero issues.
|
|
11
|
+
- `inspector` (Codex): the hub lists **four** outgoing links, all resolved at `1.00`, and zero incoming. There is no `0.50` broken row (the bare `@demo-guideline` formed nothing); adapt the claude "five links, one broken" wording to "four links, all resolved".
|
|
12
|
+
- `edit-link` (Codex): the tester turns the inert bare `@demo-guideline` into a file reference by adding `.md` (`@demo-guideline.md`), and the new arrow appears live. Same muscle memory as claude ("add `.md`"), but the Codex lesson is "`@` needs a filename to be a file reference, a bare `@handle` is just text".
|
|
13
|
+
- `workspace` / `ignore`: identical; only the directory tree shows `.codex/agents/` + `.agents/skills/` instead of `.claude/`.
|
|
11
14
|
|
|
12
15
|
## Chapter `init` - Your first node (~2 min)
|
|
13
16
|
|
|
@@ -197,8 +200,6 @@ Mark `inspector`: done.
|
|
|
197
200
|
|
|
198
201
|
## Chapter `edit-link` - Edit a link, the topology changes (~3 min)
|
|
199
202
|
|
|
200
|
-
**Context**: the `first-edit` chapter had the tester edit a scalar (`description`) and watch the inspector card refresh. This chapter raises the bar: edit Markdown links and watch the MAP TOPOLOGY change both ways, a connector disappears when you remove a link, and a new one appears (clearing the broken-reference error) when you fix the unresolved one.
|
|
201
|
-
|
|
202
203
|
The server has been live since the `init` chapter, leave it running; this chapter and the next two (the workspace tour, then `.skillmapignore`) reuse it.
|
|
203
204
|
|
|
204
205
|
> Your turn. Edit `notes/todo.md` with your editor of choice and
|
|
@@ -229,8 +230,6 @@ You verify by reading `notes/todo.md` to confirm both edits landed (the `@demo-a
|
|
|
229
230
|
|
|
230
231
|
## Chapter `workspace` - Navigate the workspace (files, search, isolate) (~2 min)
|
|
231
232
|
|
|
232
|
-
**Context**: you've built the graph and understood it; this beat is about *moving around* it. The workspace has two halves: the **Map** you've been working in, and a **Files** panel, a folder tree of every node. You'll open that tree and filter it with the search box. The same `sm` session you booted back in the `init` chapter is still running.
|
|
233
|
-
|
|
234
233
|
Walk the three tester actions below one at a time (open the Files
|
|
235
234
|
panel, then search, then isolate); each ends with its own
|
|
236
235
|
confirmation, so present one and wait for the tester before the next.
|
|
@@ -251,8 +250,12 @@ action itself.
|
|
|
251
250
|
> two guideline nodes (`demo-guideline` and `demo-guideline2`). The
|
|
252
251
|
> search matches a node's name, path, or description, and filters
|
|
253
252
|
> live as you type, no Enter needed. The **Map** stays put: by
|
|
254
|
-
> default the search filters only the files list, not the map
|
|
255
|
-
>
|
|
253
|
+
> default the search filters only the files list, not the map.
|
|
254
|
+
>
|
|
255
|
+
> 💡 Tip: the map-icon button right next to the search box controls
|
|
256
|
+
> whether the search also filters the **Map**. It's off by default,
|
|
257
|
+
> which is why the **Map** stayed put while only the tree narrowed.
|
|
258
|
+
> Click it on if you want a search to filter the map too.
|
|
256
259
|
>
|
|
257
260
|
> Now clear the box. All six nodes come back in the tree. Confirm you
|
|
258
261
|
> saw it filter and then restore.
|
|
@@ -271,12 +274,6 @@ action itself.
|
|
|
271
274
|
> the Map: there's a **Show all** button (an eye icon). Click it and
|
|
272
275
|
> all six nodes return.
|
|
273
276
|
>
|
|
274
|
-
> 💡 Tip: remember the search box from a moment ago? The map-icon
|
|
275
|
-
> button right next to it controls whether the search also filters
|
|
276
|
-
> the **Map**. It's off by default, which is why the **Map** stayed
|
|
277
|
-
> put while only the tree narrowed when you searched `guideline`.
|
|
278
|
-
> Click it on if you want a search to filter the map too.
|
|
279
|
-
>
|
|
280
277
|
> Did the map isolate and then restore?
|
|
281
278
|
|
|
282
279
|
Leave the server running, the next chapter (`.skillmapignore`) is the last one that uses it. Mark `workspace`: done.
|
|
@@ -12,20 +12,10 @@ only. Shared conventions live in `_core.md`.
|
|
|
12
12
|
|
|
13
13
|
## Chapter `mcp-node` - The agent reaches for an MCP tool (~3 min)
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
server
|
|
18
|
-
|
|
19
|
-
Claude names those tools `mcp__<server>__<tool>` in an agent's
|
|
20
|
-
frontmatter. When the agent declares it uses `mcp__images__search`
|
|
21
|
-
(an image-search tool, so it can find art for the pages), skill-map's
|
|
22
|
-
`core/mcp-tools` extractor reads that declaration and draws a
|
|
23
|
-
virtual `mcp://images` node plus a `references` link from
|
|
24
|
-
content-editor to it. The link confidence is around 0.85 (high, but
|
|
25
|
-
not the 1.00 of a markdown link to a real file, because the target is
|
|
26
|
-
an external service, not a file on disk). If several harness members
|
|
27
|
-
named the same server, skill-map would draw a single shared
|
|
28
|
-
`mcp://images` node, not one per caller.
|
|
15
|
+
Agent note (not narrated, the demo only adds one tool so it never
|
|
16
|
+
manifests here): if several harness members named the same MCP
|
|
17
|
+
server, skill-map draws ONE shared `mcp://images` node, not one per
|
|
18
|
+
caller.
|
|
29
19
|
|
|
30
20
|
**Preparation**: `Edit` `.claude/agents/content-editor.md`. Do NOT
|
|
31
21
|
rewrite the file. Change only the `tools:` line in the frontmatter so
|
|
@@ -23,10 +23,6 @@ restore the files.") and stop.
|
|
|
23
23
|
|
|
24
24
|
## Step `tour-1-intro` - how plugins work (~4 min)
|
|
25
25
|
|
|
26
|
-
**Context**: A short tour of what a plugin is, how it groups
|
|
27
|
-
extensions, and a peek at the five plugins that ship
|
|
28
|
-
pre-installed.
|
|
29
|
-
|
|
30
26
|
> Plugins are how skill-map gets extended. A **plugin** is the
|
|
31
27
|
> deployable unit: one directory with a `plugin.json` manifest and
|
|
32
28
|
> the extension code. It groups one or more **extensions**, the
|
|
@@ -130,10 +126,6 @@ Mark `tour-2-kinds: done`.
|
|
|
130
126
|
|
|
131
127
|
## Step `tour-3-explore` - explore one extension up close (~4 min)
|
|
132
128
|
|
|
133
|
-
**Context**: Drill into a single extension to see its detail,
|
|
134
|
-
run the diagnostic, then toggle one off and back on so you see
|
|
135
|
-
the change persists.
|
|
136
|
-
|
|
137
129
|
> Pick one extension and look at its details. We'll use
|
|
138
130
|
> `core/external-url-counter`, an extractor that counts how many
|
|
139
131
|
> external URLs each node body contains:
|
|
@@ -22,9 +22,11 @@ The chapters grow the harness from there.
|
|
|
22
22
|
|
|
23
23
|
**Codex deltas (rich track).** When `tutorial.provider == codex`:
|
|
24
24
|
|
|
25
|
-
- `kickoff` / `manual`: identical
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
- `kickoff` / `manual`: identical flow (`sm init` then `sm`, no lens
|
|
26
|
+
prompt, `.codex/` outranks the shared `.agents/` home). `CLAUDE.md`'s
|
|
27
|
+
`@AGENTS.md` reference resolves the same (it carries `.md`, so Codex reads
|
|
28
|
+
`@AGENTS.md` as a FILE reference, Codex's `@` is a file picker, not an agent
|
|
29
|
+
mention). `AGENTS.md` is still the one boot node.
|
|
28
30
|
- `first-agent`: the `content-editor` is a **TOML agent** at
|
|
29
31
|
`.codex/agents/content-editor.toml`, not a `.claude/agents/*.md` file; point
|
|
30
32
|
the tester at the `.toml` if they want to peek. Its body references the style
|
|
@@ -38,28 +40,24 @@ The chapters grow the harness from there.
|
|
|
38
40
|
no `command`. Lay only `docs/DEPLOY.md` here (STYLE landed in `first-agent`),
|
|
39
41
|
and name the kinds as agent + skill + markdown (the skill + the publish piece
|
|
40
42
|
arrive later in this part as skills).
|
|
41
|
-
- `publish`: Codex has no `command` kind, so the tester creates a **skill** at `.agents/skills/publish/SKILL.md` instead of `.claude/commands/publish.md`. The body
|
|
43
|
+
- `publish`: Codex has no `command` kind, so the tester creates a **skill** at `.agents/skills/publish/SKILL.md` instead of `.claude/commands/publish.md`. The body uses the CODEX grammar (`$check-links` invokes the link checker; a markdown link references `content-editor`; the deploy runbook is a markdown reference), so the three connectors still light up, just `$`/file-ref instead of `/`+`@`-mention. Fetch it with `fixtures.js cat harness --file "__PROVIDER__/skills/publish/SKILL.md" --provider codex --lang <lang>`. Tell the tester they are creating a `skill` (one node, three connectors); present it plainly as a skill, with no mention of a command or a substitution (per _core.md §Rendering the rich book on Codex, silent substitution). The fixture lays no `publish` for codex in this chapter (the tester authors it), so the `cat` is the source.
|
|
42
44
|
- `links`: the `content-editor-style` reference is baked into the Codex content-editor's TOML (`developer_instructions`) at lay time, so the `edit content-editor-style` step is a no-op on Codex, the `content-editor -> docs/STYLE.md` arrow is already drawn from earlier in this part. Run only `edit agents-hub` and narrate the two `AGENTS.md` arrows; mention the style-guide arrow as already present.
|
|
43
45
|
|
|
44
46
|
## Chapter `kickoff` - Start the portfolio (~2 min)
|
|
45
47
|
|
|
46
|
-
**Context**: same `sm init` the tester learned in the prologue, but
|
|
47
|
-
now on a real project. The map will show the project's harness, not
|
|
48
|
-
throwaway demo nodes.
|
|
49
|
-
|
|
50
48
|
If the prologue (`fundamentals`) ran first in this directory, the
|
|
51
49
|
demo fixture (`demo-agent`, `demo-skill`, `notes/…`) is still on
|
|
52
50
|
disk. The orchestrator's `portfolio-init` already cleared it during
|
|
53
51
|
pre-flight, so the tester sees only the portfolio. If anything demo
|
|
54
52
|
lingers, mention it once and move on.
|
|
55
53
|
|
|
56
|
-
**Context (agent, do not narrate the plumbing): the lens.**
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
a
|
|
62
|
-
|
|
54
|
+
**Context (agent, do not narrate the plumbing): the lens.** `sm init`
|
|
55
|
+
auto-detects the lens with no prompt: claude from its lone `.claude/`
|
|
56
|
+
marker, codex from `.codex/` (which outranks the shared `.agents/` open
|
|
57
|
+
default, so the extra `.agents/skills/` skill home does NOT trigger an
|
|
58
|
+
ambiguous prompt). The root `AGENTS.md` is the vendor-neutral handbook,
|
|
59
|
+
NOT a lens marker, so it never forces a prompt either. Do not promise the
|
|
60
|
+
tester a lens prompt here.
|
|
63
61
|
|
|
64
62
|
```bash
|
|
65
63
|
sm init
|
|
@@ -88,12 +86,6 @@ Wait for confirmation. Mark `kickoff`: done.
|
|
|
88
86
|
|
|
89
87
|
## Chapter `manual` - The handbook (AGENTS.md) and CLAUDE.md (~2 min)
|
|
90
88
|
|
|
91
|
-
**Context**: the dogfood beat. Real Claude Code projects can
|
|
92
|
-
reference the generic `AGENTS.md` from their `CLAUDE.md` (this very
|
|
93
|
-
repo does). That one-line pointer is a real `references` link (the
|
|
94
|
-
`.md` extension makes `@AGENTS.md` a file pointer), the tester's first
|
|
95
|
-
connector on the real project.
|
|
96
|
-
|
|
97
89
|
Tell the tester to create the file themselves (it is their project's
|
|
98
90
|
file, Inviolable rule #2). Backstage, get the content:
|
|
99
91
|
`node .claude/skills/sm-tutorial/scripts/fixtures.js cat portfolio --file "CLAUDE.md" --provider <provider> --lang <lang>`,
|
|
@@ -145,11 +137,6 @@ Wait for confirmation. Mark `first-agent`: done.
|
|
|
145
137
|
|
|
146
138
|
## Chapter `real-kinds` - The real kinds in context (~2 min)
|
|
147
139
|
|
|
148
|
-
**Context**: the prologue showed the four kinds on abstract demo
|
|
149
|
-
nodes. Now name them on the real project, and add the two markdown
|
|
150
|
-
docs the harness references later (the style guide and the deploy
|
|
151
|
-
runbook), so the Daily Loop's maintenance beats have something to point at.
|
|
152
|
-
|
|
153
140
|
Lay the two markdown docs the harness references later (their content
|
|
154
141
|
+ translation live in `fixtures-data/`). Backstage (silent):
|
|
155
142
|
|
|
@@ -179,8 +166,6 @@ Wait for confirmation. Mark `real-kinds`: done.
|
|
|
179
166
|
|
|
180
167
|
## Chapter `check-links` - The link checker (~3 min)
|
|
181
168
|
|
|
182
|
-
**Context**: the harness needs a guard that runs before publishing, a skill that checks the site's internal links resolve before it ships. We only create the `skill` node here; the `publish` command in the next chapter is its caller.
|
|
183
|
-
|
|
184
169
|
Lay the `check-links` skill (its content + translation live in
|
|
185
170
|
`fixtures-data/`; this kind exists on every provider, so no skip).
|
|
186
171
|
Backstage (silent):
|
|
@@ -201,9 +186,7 @@ Wait for confirmation. Mark `check-links`: done.
|
|
|
201
186
|
|
|
202
187
|
## Chapter `publish` - The publish command (~4 min)
|
|
203
188
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
Tell the tester to create the file themselves (it is their project's file, Inviolable rule #2). Substitute `<provider_dir>` per `_core.md` in the path you give them. Backstage, get the content: `node .claude/skills/sm-tutorial/scripts/fixtures.js cat harness --file "__PROVIDER__/commands/publish.md" --provider <provider> --lang <lang>`, then render it as a **top-level fenced code block**: at column 0, NOT inside the `> ` blockquote and with NO leading indentation, so the tester's copy keeps every line flush left. The frontmatter fences (`---`) MUST land on column 0. If the block is rendered (or pasted) indented, the opening and closing `---` shift off column 0, the YAML never parses, and the `publish` node loads body-only without its `name` / `description` (`sm check` then warns `frontmatter-malformed`). Present the block below exactly as written.
|
|
189
|
+
Tell the tester to create the file themselves (it is their project's file, Inviolable rule #2). Substitute `<provider_dir>` per `_core.md` in the path you give them. Backstage, get the content: `node .claude/skills/sm-tutorial/scripts/fixtures.js cat harness --file "__PROVIDER__/commands/publish.md" --provider <provider> --lang <lang>`, then render it as a **top-level fenced code block**: at column 0, NOT inside the `> ` blockquote and with NO leading indentation, so the tester's copy keeps every line flush left. The frontmatter fences (`---`) MUST land on column 0. If the block is rendered (or pasted) indented, the opening and closing `---` shift off column 0, the YAML never parses, and the `publish` node loads body-only without its `name` / `description` (`sm check` then warns `frontmatter-malformed`). Present the block below exactly as written, line for line: never soft-wrap, and never let a newline fall inside a `[text](path)` link (a break inside the `(path)`, e.g. `(../../docs/DEPLOY.md)`, splits it and the link stops resolving). See `_core.md` §Language mirroring + fixture content.
|
|
207
190
|
|
|
208
191
|
> Create `.claude/commands/publish.md` with exactly this content (the first line is `---`, nothing before it):
|
|
209
192
|
|
|
@@ -251,8 +234,6 @@ Wait for confirmation. You MAY use `Read` on the file afterwards to verify it la
|
|
|
251
234
|
|
|
252
235
|
## Chapter `links` - The handbook becomes the hub (~4 min)
|
|
253
236
|
|
|
254
|
-
**Context**: the handbook (`AGENTS.md`) has been a lonely node since the start of this part. Here it becomes the hub: we add two bullets so it mentions the content editor and invokes the publish command. We also give the content editor a reference to the style guide it follows. Several connectors land, and we recap the three link kinds and which syntax produced each.
|
|
255
|
-
|
|
256
237
|
Apply both edits (their content + translation live in `fixtures-data/`).
|
|
257
238
|
The first appends the two hub bullets to `AGENTS.md`; the second adds
|
|
258
239
|
the style-guide reference line to the content-editor. Backstage (silent):
|
|
@@ -323,9 +304,10 @@ Tell the tester:
|
|
|
323
304
|
>
|
|
324
305
|
> **IMPORTANT:** why does confidence matter? It mirrors how the runtime itself
|
|
325
306
|
> resolves a reference: a deterministic name-and-path lookup, no guessing
|
|
326
|
-
> and no scanning the tree for a file under some other extension.
|
|
327
|
-
>
|
|
328
|
-
>
|
|
307
|
+
> and no scanning the tree for a file under some other extension. A link that
|
|
308
|
+
> does not resolve sends the agent guessing and retrying, which burns time and
|
|
309
|
+
> tokens; a deterministic one does not fail and resolves first try, the same
|
|
310
|
+
> reason a clean, well-named harness is worth keeping.
|
|
329
311
|
>
|
|
330
312
|
> Do you see every badge reading 1.00 in the Inspector?
|
|
331
313
|
|
|
@@ -22,9 +22,6 @@ stop, do not try to re-init mid-chapter.
|
|
|
22
22
|
|
|
23
23
|
## Step `settings-1-layers` - the config layers (~3 min)
|
|
24
24
|
|
|
25
|
-
**Context**: where settings live and how `sm` resolves a value
|
|
26
|
-
when more than one place sets it.
|
|
27
|
-
|
|
28
25
|
> `sm` resolves every setting through a stack of **layers**, each
|
|
29
26
|
> one overriding the layer below it:
|
|
30
27
|
>
|
|
@@ -74,9 +71,6 @@ Mark `settings-1-layers: done`.
|
|
|
74
71
|
|
|
75
72
|
## Step `settings-2-resolve` - read, resolve, and set a value (~3 min)
|
|
76
73
|
|
|
77
|
-
**Context**: the four config verbs (`get`, `show`, `set`, `reset`)
|
|
78
|
-
and how `show --source` reveals which layer won.
|
|
79
|
-
|
|
80
74
|
> Read a single setting. We'll use `scan.maxNodes`, the cap on how
|
|
81
75
|
> many nodes a scan walks:
|
|
82
76
|
|
|
@@ -123,10 +117,8 @@ Mark `settings-2-resolve: done`.
|
|
|
123
117
|
|
|
124
118
|
## Step `settings-3-lens` - the active provider lens (~2 min)
|
|
125
119
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
never touches your `.md` files. (Agent: substitute `<provider>` with
|
|
129
|
-
`tutorial.provider`, the lens this run was scaffolded for.)
|
|
120
|
+
(Agent: substitute `<provider>` with `tutorial.provider`, the lens
|
|
121
|
+
this run was scaffolded for.)
|
|
130
122
|
|
|
131
123
|
> One setting earns its own step: the **active provider lens**. A
|
|
132
124
|
> skill-map project reads its files through exactly **one** provider
|
|
@@ -58,9 +58,10 @@ export function overlayKey(provider) {
|
|
|
58
58
|
/**
|
|
59
59
|
* Kinds whose edit fragments (the todo-connectors hub bullets, etc.) apply for
|
|
60
60
|
* a provider, keyed by TRACK, not by the base-tier kinds. A rich provider links
|
|
61
|
-
* to every node role even when it renders some differently
|
|
62
|
-
* TOML overlay and its command-node is a skill,
|
|
63
|
-
*
|
|
61
|
+
* to every node role even when it renders some differently (Codex's agent is a
|
|
62
|
+
* TOML overlay and its command-node is a skill), so every hub bullet applies;
|
|
63
|
+
* the per-provider overlay then supplies the right connector grammar (claude
|
|
64
|
+
* `/`+`@`, codex `$`-invoke + `@`-file / markdown-link references). A basic
|
|
64
65
|
* provider only has skill + markdown, so the agent / command bullets fold away.
|
|
65
66
|
*/
|
|
66
67
|
export function fragmentKindsFor(provider) {
|
|
@@ -134,5 +135,5 @@ export function nodeIdForTokenPath(tokenRelPath) {
|
|
|
134
135
|
if (codexAgent) return codexAgent[1];
|
|
135
136
|
return tokenRelPath;
|
|
136
137
|
}
|
|
137
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
138
|
-
//# debugId=
|
|
138
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="54e1e331-4312-5c77-adc1-287ab9df7502")}catch(e){}}();
|
|
139
|
+
//# debugId=54e1e331-4312-5c77-adc1-287ab9df7502
|