@skill-map/cli 0.68.1 → 0.70.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 +57 -29
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.json +70 -70
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +38 -38
- package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +3 -3
- package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +25 -8
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-daily.md +91 -38
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-fundamentals.md +7 -8
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-kickoff.md +1 -1
- package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +1 -1
- package/dist/cli/tutorial/sm-tutorial/references/part-daily-loop.md +173 -56
- package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +14 -13
- package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +1 -1
- package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +14 -12
- package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +2 -2
- package/dist/cli/tutorial/sm-tutorial/scripts/lib/paths.js +6 -5
- package/dist/cli.js +963 -451
- package/dist/conformance/index.js +3 -3
- package/dist/index.js +17 -14
- package/dist/kernel/index.d.ts +54 -17
- package/dist/kernel/index.js +17 -14
- package/dist/migrations/001_initial.sql +7 -3
- package/dist/ui/{chunk-22EQLC23.js → chunk-EVNCL7FV.js} +21 -21
- package/dist/ui/chunk-GUGB4JY5.js +1 -0
- package/dist/ui/chunk-RJUHQQOF.js +3 -0
- package/dist/ui/{chunk-KMHXNOFZ.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-K4O6LCIJ.js +4 -0
- package/migrations/001_initial.sql +7 -3
- package/package.json +2 -2
- package/dist/ui/chunk-K3ZRQNN5.js +0 -2
- package/dist/ui/chunk-PU5OP5RN.js +0 -1
- package/dist/ui/chunk-TLMV4LOQ.js +0 -3
- package/dist/ui/main-R7BIU4HU.js +0 -4
|
@@ -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
|
|
@@ -249,6 +313,9 @@ the `> ` blockquote, do NOT drop the bar when you personalise it.
|
|
|
249
313
|
> output; the harness on the canvas is Layer 1. Your nodes are not a diagram,
|
|
250
314
|
> they are runnable, and you just ran one.
|
|
251
315
|
>
|
|
316
|
+
> If the new page is not showing, refresh the browser with F5, the site does
|
|
317
|
+
> not reload on its own.
|
|
318
|
+
>
|
|
252
319
|
> See the new page on the site, and the Map unchanged?
|
|
253
320
|
|
|
254
321
|
Wait for confirmation. Mark `add-page`: done. Auto-advance to `broken-ref`.
|
|
@@ -297,30 +364,30 @@ done. Auto-advance to `reserved`.
|
|
|
297
364
|
|
|
298
365
|
## Chapter `reserved` - A reserved name collides (~2 min)
|
|
299
366
|
|
|
300
|
-
**Preparation**: `Write` `.claude/commands/
|
|
367
|
+
**Preparation**: `Write` `.claude/commands/model.md`:
|
|
301
368
|
```markdown
|
|
302
369
|
---
|
|
303
|
-
name:
|
|
370
|
+
name: model
|
|
304
371
|
description: |
|
|
305
372
|
Scaffolds a new empty page in public/ from the shared template.
|
|
306
373
|
---
|
|
307
374
|
|
|
308
|
-
#
|
|
375
|
+
# model
|
|
309
376
|
|
|
310
377
|
Creates a blank page so you can start writing.
|
|
311
378
|
```
|
|
312
379
|
|
|
313
380
|
The watcher picks up the new command. Tell the tester:
|
|
314
381
|
|
|
315
|
-
> I added a command named `
|
|
382
|
+
> I added a command named `model`. Watch the **Map**: the new `model` command node
|
|
316
383
|
> appears, but flagged with a **warning** marker. Open its inspector: it reads
|
|
317
|
-
> `name-reserved`, `
|
|
384
|
+
> `name-reserved`, `model` shadows one of Claude Code's own slash commands (like
|
|
318
385
|
> `/help`, `/clear`, `/config`), so the runtime would silently ignore your file,
|
|
319
386
|
> it never runs. The fix is a name the runtime does not own.
|
|
320
387
|
>
|
|
321
|
-
> Rename it to `new-page`: first rename the file `.claude/commands/
|
|
388
|
+
> Rename it to `new-page`: first rename the file `.claude/commands/model.md` to
|
|
322
389
|
> `.claude/commands/new-page.md`. Then open it in your text editor / IDE and, at
|
|
323
|
-
> the top, where the frontmatter says `name:
|
|
390
|
+
> the top, where the frontmatter says `name: model`, change it to
|
|
324
391
|
> `name: new-page`. Save.
|
|
325
392
|
>
|
|
326
393
|
> Watch the **Map** again: the warning clears and the node is now `new-page`,
|
|
@@ -338,40 +405,83 @@ Wait for confirmation. Mark `reserved`: done. Auto-advance to `publish`.
|
|
|
338
405
|
|
|
339
406
|
## Chapter `publish` - Ship it: run /publish for real (~4 min)
|
|
340
407
|
|
|
408
|
+
**Context**: the publish flow only earns its keep when something is actually
|
|
409
|
+
wrong, so first you plant a real bug in the site, then watch `/publish` catch and
|
|
410
|
+
fix it for real.
|
|
411
|
+
|
|
341
412
|
**Preparation**: make sure the pages exist (`index`, `about`, `projects` from the
|
|
342
|
-
earlier chapters; lay any that are missing from the templates in `setup`).
|
|
343
|
-
by following `.claude/commands/publish.md`: run the `check-links` logic over
|
|
344
|
-
every `.html` under `public/` (does each internal `href` resolve to a file that
|
|
345
|
-
exists?); if any link is broken, brief the `content-editor` to fix it and
|
|
346
|
-
re-run the check; then walk the deploy runbook steps. Do not role-play it.
|
|
413
|
+
earlier chapters; lay any that are missing from the templates in `setup`).
|
|
347
414
|
|
|
348
|
-
|
|
415
|
+
This chapter has two beats: the tester breaks a link in the HTML first, then runs
|
|
416
|
+
`/publish` so the skill catches the break. The split is required, the publish run
|
|
417
|
+
cannot demonstrate the catch until the break is in place.
|
|
349
418
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
> pages, fix anything through the `content-editor`, and walk the deploy runbook,
|
|
353
|
-
> exactly what the command says to do. (You can read the command's content
|
|
354
|
-
> anytime by clicking the `publish` node on the Map, then opening its **Body**
|
|
355
|
-
> section.)
|
|
419
|
+
**Beat 1, plant the bug (the tester breaks the HTML, their file).** Tell the
|
|
420
|
+
tester:
|
|
356
421
|
|
|
357
|
-
|
|
358
|
-
|
|
422
|
+
> Before we ship, let's break something on purpose. Open `public/index.html` in
|
|
423
|
+
> your editor and find the **About** link in the top nav:
|
|
424
|
+
>
|
|
425
|
+
> ```html
|
|
426
|
+
> <a href="/about.html">About</a>
|
|
427
|
+
> ```
|
|
428
|
+
>
|
|
429
|
+
> Change the target to a typo that points at a page that does not exist, then
|
|
430
|
+
> save:
|
|
431
|
+
>
|
|
432
|
+
> ```html
|
|
433
|
+
> <a href="/abuot.html">About</a>
|
|
434
|
+
> ```
|
|
435
|
+
>
|
|
436
|
+
> Now watch the **Map**. Nothing happens: no arrow moves, no red marker. Back in
|
|
437
|
+
> the `broken-ref` chapter, breaking a link between your `.md` files lit up the
|
|
438
|
+
> graph the instant you saved. This break is invisible to it, and that is
|
|
439
|
+
> correct: skill-map maps your **harness** (the `.md` files, Layer 1), not the
|
|
440
|
+
> HTML pages it produces (Layer 2, your `public/` folder, which is even in
|
|
441
|
+
> `.skillmapignore`). A broken link inside your actual site never shows on the
|
|
442
|
+
> graph. The one thing that catches it is your `check-links` skill, which is
|
|
443
|
+
> exactly what `/publish` runs as its first step.
|
|
444
|
+
>
|
|
445
|
+
> Saved the typo, and the Map stayed unchanged?
|
|
446
|
+
|
|
447
|
+
Wait for confirmation. The Map MUST stay unchanged; if a marker appeared they
|
|
448
|
+
edited a `.md` by mistake, point them back at `public/index.html`.
|
|
449
|
+
|
|
450
|
+
**Beat 2, run /publish for real.** Tell the tester:
|
|
451
|
+
|
|
452
|
+
> Now ship it. Tell me to publish (or type `/publish`) and I'll run your publish
|
|
453
|
+
> command for real, exactly as written. (You can read the command anytime by
|
|
454
|
+
> clicking the `publish` node on the Map, then opening its **Body** section.)
|
|
455
|
+
|
|
456
|
+
When the tester asks to publish, **execute the publish flow for real** by
|
|
457
|
+
following `.claude/commands/publish.md`: run the `check-links` logic over every
|
|
458
|
+
`.html` under `public/` (does each internal `href` resolve to a file that
|
|
459
|
+
exists?), which now finds the planted typo; per step 2, brief the
|
|
460
|
+
`content-editor` to fix it (point the link back at `/about.html`), re-run the
|
|
461
|
+
check until it is clean, then walk the deploy runbook. Do not role-play it;
|
|
462
|
+
`Read` `public/index.html` before and after the fix so the report is honest.
|
|
463
|
+
|
|
464
|
+
After running the flow, report what actually happened:
|
|
359
465
|
|
|
360
466
|
> Here is what just ran, for real:
|
|
361
467
|
>
|
|
362
468
|
> - **check-links** walked every page under `public/` and followed each internal
|
|
363
|
-
> link.
|
|
364
|
-
>
|
|
365
|
-
>
|
|
469
|
+
> link. It caught **1 broken link**: `/abuot.html` on `index.html`, the typo
|
|
470
|
+
> you planted. The graph never flagged it, but the skill did, because the skill
|
|
471
|
+
> reads your real pages.
|
|
472
|
+
> - **step 2 kicked in**: I briefed your `content-editor` to fix it. It pointed
|
|
473
|
+
> the link back at `/about.html`, and a re-run of **check-links** came back
|
|
474
|
+
> clean: 0 broken links.
|
|
366
475
|
> - the **deploy runbook** (`docs/DEPLOYMENT.md`) lists the ship steps:
|
|
367
|
-
> regenerate the pages (done), run the link check (done), start the
|
|
368
|
-
> (next chapter).
|
|
476
|
+
> regenerate the pages (done), run the link check (done, now clean), start the
|
|
477
|
+
> server (next chapter).
|
|
369
478
|
>
|
|
370
|
-
>
|
|
371
|
-
>
|
|
372
|
-
> Shall we continue?
|
|
479
|
+
> That is the whole point of the harness: you broke the site, the graph stayed
|
|
480
|
+
> quiet because the HTML is its output and not its map, and your own publish
|
|
481
|
+
> command caught the break and fixed it before it shipped. Shall we continue?
|
|
373
482
|
|
|
374
|
-
Wait for confirmation.
|
|
483
|
+
Wait for confirmation. The site MUST be clean again (the typo fixed) before
|
|
484
|
+
`golive`. Mark `publish`: done. Auto-advance to `stability`.
|
|
375
485
|
|
|
376
486
|
## Chapter `stability` - Set a node's stability (and the `.sm` sidecar) (~3 min)
|
|
377
487
|
|
|
@@ -388,12 +498,17 @@ Tell the tester:
|
|
|
388
498
|
> The first time skill-map writes its own metadata it asks for **consent**:
|
|
389
499
|
> confirm it in the dialog that pops up. Two things happen at once: a stability
|
|
390
500
|
> badge for the stage you picked appears on the `AGENTS` node, and skill-map
|
|
391
|
-
> creates a **`.sm` sidecar file**
|
|
392
|
-
>
|
|
393
|
-
>
|
|
501
|
+
> creates a **`.sm` sidecar file** right next to the handbook, named after it
|
|
502
|
+
> (`AGENTS.md` becomes `AGENTS.sm` in the same folder), to hold that metadata.
|
|
503
|
+
> Your `AGENTS.md` itself is never touched. Your consent is remembered for the
|
|
504
|
+
> project, so it will not ask again.
|
|
394
505
|
>
|
|
395
|
-
>
|
|
396
|
-
>
|
|
506
|
+
> What is a **sidecar**? A sibling file that lives in the same folder as the
|
|
507
|
+
> node it describes and is committed to the same repository, so it travels with
|
|
508
|
+
> the `.md` wherever it goes. skill-map keeps what it learns about a node
|
|
509
|
+
> (stability, version, tags) there ON PURPOSE: that is the tool's bookkeeping,
|
|
510
|
+
> not your content, so it stays OUT of your source markdown. Your `.md` files
|
|
511
|
+
> stay clean and authored by you, never polluted by skill-map.
|
|
397
512
|
>
|
|
398
513
|
> See the new stability badge on the handbook?
|
|
399
514
|
|
|
@@ -401,23 +516,25 @@ Wait for confirmation. Mark `stability`: done. Auto-advance to `golive`.
|
|
|
401
516
|
|
|
402
517
|
## Chapter `golive` - Your website, live next to the graph (~3 min)
|
|
403
518
|
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
519
|
+
The site is already serving from `add-page` (the tester brought `node server.js`
|
|
520
|
+
back up in their third terminal after their agent wrote its page), so for most
|
|
521
|
+
testers the finale is just opening it, not restarting anything. Only if they
|
|
522
|
+
closed that terminal do they bring it back with the block below; guide them, do
|
|
523
|
+
not run it for them. `npm install` is idempotent if they do restart.
|
|
407
524
|
|
|
408
525
|
**Preparation**: none. `server.js` / `package.json` exist from the kickoff; the
|
|
409
526
|
pages exist from the earlier chapters.
|
|
410
527
|
|
|
528
|
+
> Last step, the fun one. Your site is still serving from earlier in your third
|
|
529
|
+
> terminal, so just open `http://localhost:3000` and click through Home, About,
|
|
530
|
+
> and the page you added, the pages your harness produced and shipped through the
|
|
531
|
+
> publish flow you just ran. (If you closed that terminal, bring it back up first
|
|
532
|
+
> with the commands below.)
|
|
533
|
+
|
|
411
534
|
```bash
|
|
412
535
|
npm install
|
|
413
536
|
node server.js
|
|
414
537
|
```
|
|
415
|
-
|
|
416
|
-
> Last step, the fun one. `npm install` confirms the one small library is there,
|
|
417
|
-
> and `node server.js` starts the server (`Listening on http://localhost:3000`).
|
|
418
|
-
>
|
|
419
|
-
> Open `http://localhost:3000` and click through Home, About, and Projects, the
|
|
420
|
-
> pages your harness produced and shipped through the publish flow you just ran.
|
|
421
538
|
>
|
|
422
539
|
> Now take it in at once. On one side, your real running website, named after
|
|
423
540
|
> 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`.
|
|
8
|
-
- `kinds`: the node list reads `.codex/agents/demo-agent.toml` (agent), `.agents/skills/demo-command/SKILL.md` (
|
|
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
|
+
- `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
|
|
|
@@ -177,7 +180,7 @@ The canvas only draws the resolved arrows; the full per-link breakdown, includin
|
|
|
177
180
|
> confidence: the numeric value. Here you'll see the contrast, the
|
|
178
181
|
> `references` to `demo-guideline2` reads `1.00` (resolved), while the
|
|
179
182
|
> `mentions` to `demo-guideline` reads `0.50` and is marked broken,
|
|
180
|
-
> that 0.5 is the broken-reference penalty,
|
|
183
|
+
> that 0.5 is the broken-reference penalty, it's a "half sure".
|
|
181
184
|
>
|
|
182
185
|
> Now open the Inspector for a couple of the nodes to read their
|
|
183
186
|
> Incoming count. The four resolved nodes (`demo-agent`,
|
|
@@ -251,8 +254,12 @@ action itself.
|
|
|
251
254
|
> two guideline nodes (`demo-guideline` and `demo-guideline2`). The
|
|
252
255
|
> search matches a node's name, path, or description, and filters
|
|
253
256
|
> 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
|
-
>
|
|
257
|
+
> default the search filters only the files list, not the map.
|
|
258
|
+
>
|
|
259
|
+
> 💡 Tip: the map-icon button right next to the search box controls
|
|
260
|
+
> whether the search also filters the **Map**. It's off by default,
|
|
261
|
+
> which is why the **Map** stayed put while only the tree narrowed.
|
|
262
|
+
> Click it on if you want a search to filter the map too.
|
|
256
263
|
>
|
|
257
264
|
> Now clear the box. All six nodes come back in the tree. Confirm you
|
|
258
265
|
> saw it filter and then restore.
|
|
@@ -271,12 +278,6 @@ action itself.
|
|
|
271
278
|
> the Map: there's a **Show all** button (an eye icon). Click it and
|
|
272
279
|
> all six nodes return.
|
|
273
280
|
>
|
|
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
281
|
> Did the map isolate and then restore?
|
|
281
282
|
|
|
282
283
|
Leave the server running, the next chapter (`.skillmapignore`) is the last one that uses it. Mark `workspace`: done.
|
|
@@ -313,7 +314,7 @@ Give the tester a mental map of the folder so they know where the file lives, th
|
|
|
313
314
|
│ └── skills/
|
|
314
315
|
│ ├── demo-skill/SKILL.md
|
|
315
316
|
│ └── sm-tutorial/SKILL.md ← the tutorial you loaded
|
|
316
|
-
├── .skill-map/ ← project DB + settings
|
|
317
|
+
├── .skill-map/ ← project DB + settings
|
|
317
318
|
├── .skillmapignore ← the file we're about to edit
|
|
318
319
|
└── notes/
|
|
319
320
|
├── todo.md
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Part
|
|
1
|
+
# Part 4 (b): Extend skill-map - plugins (step library, `tour-*` ids)
|
|
2
2
|
|
|
3
3
|
Guided tour of the **built-in plugins** that ship with `sm`. Three
|
|
4
4
|
steps: a quick mental model of what plugins are plus a peek at
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Part 1: The
|
|
1
|
+
# Part 1: The harness from zero (step library, `kickoff-*` ids)
|
|
2
2
|
|
|
3
3
|
The campaign turns real here. After the abstract prologue, the tester
|
|
4
4
|
starts an actual project: a tiny personal **portfolio website**,
|
|
@@ -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,7 +40,7 @@ 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)
|
|
@@ -53,13 +55,13 @@ disk. The orchestrator's `portfolio-init` already cleared it during
|
|
|
53
55
|
pre-flight, so the tester sees only the portfolio. If anything demo
|
|
54
56
|
lingers, mention it once and move on.
|
|
55
57
|
|
|
56
|
-
**Context (agent, do not narrate the plumbing): the lens.**
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
a
|
|
62
|
-
|
|
58
|
+
**Context (agent, do not narrate the plumbing): the lens.** `sm init`
|
|
59
|
+
auto-detects the lens with no prompt: claude from its lone `.claude/`
|
|
60
|
+
marker, codex from `.codex/` (which outranks the shared `.agents/` open
|
|
61
|
+
default, so the extra `.agents/skills/` skill home does NOT trigger an
|
|
62
|
+
ambiguous prompt). The root `AGENTS.md` is the vendor-neutral handbook,
|
|
63
|
+
NOT a lens marker, so it never forces a prompt either. Do not promise the
|
|
64
|
+
tester a lens prompt here.
|
|
63
65
|
|
|
64
66
|
```bash
|
|
65
67
|
sm init
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Part
|
|
1
|
+
# Part 4 (a): Extend skill-map - settings (step library, `settings-*` ids)
|
|
2
2
|
|
|
3
|
-
Step bodies for the settings chapters of Part
|
|
3
|
+
Step bodies for the settings chapters of Part 4 (config layers, the
|
|
4
4
|
`sm config` verbs, the active provider lens). The SKILL.md
|
|
5
5
|
orchestrator dispatches each `settings-*` chapter id here;
|
|
6
6
|
`authoring-*` ids it dispatches to `part-authoring.md`.
|
|
@@ -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
|