@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.
Files changed (51) hide show
  1. package/dist/cli/tutorial/sm-tutorial/SKILL.md +8 -3
  2. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/agents-hub/providers/codex/en/agents-hub.md +2 -0
  3. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/agents-hub/providers/codex/es/agents-hub.md +2 -0
  4. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/codex/en/todo-bullet-agent.md +1 -0
  5. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/codex/en/todo-bullet-command.md +1 -0
  6. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/codex/en/todo-bullet-skill.md +1 -0
  7. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/codex/es/todo-bullet-agent.md +1 -0
  8. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/codex/es/todo-bullet-command.md +1 -0
  9. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/codex/es/todo-bullet-skill.md +1 -0
  10. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/providers/codex/en/__PROVIDER__/skills/publish/SKILL.md +2 -2
  11. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/providers/codex/es/__PROVIDER__/skills/publish/SKILL.md +2 -2
  12. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/providers/codex/en/.codex/agents/master-agent.toml +1 -1
  13. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/providers/codex/es/.codex/agents/master-agent.toml +1 -1
  14. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/codex/en/.codex/agents/content-editor.toml +1 -1
  15. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/codex/es/.codex/agents/content-editor.toml +1 -1
  16. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/providers/codex/en/.codex/agents/demo-agent.toml +1 -1
  17. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/providers/codex/es/.codex/agents/demo-agent.toml +1 -1
  18. package/dist/cli/tutorial/sm-tutorial/references/_core.md +57 -29
  19. package/dist/cli/tutorial/sm-tutorial/references/_manifest.json +70 -70
  20. package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +38 -38
  21. package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +3 -3
  22. package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +25 -8
  23. package/dist/cli/tutorial/sm-tutorial/references/part-basic-daily.md +91 -38
  24. package/dist/cli/tutorial/sm-tutorial/references/part-basic-fundamentals.md +7 -8
  25. package/dist/cli/tutorial/sm-tutorial/references/part-basic-kickoff.md +1 -1
  26. package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +1 -1
  27. package/dist/cli/tutorial/sm-tutorial/references/part-daily-loop.md +173 -56
  28. package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +14 -13
  29. package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +1 -1
  30. package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +14 -12
  31. package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +2 -2
  32. package/dist/cli/tutorial/sm-tutorial/scripts/lib/paths.js +6 -5
  33. package/dist/cli.js +963 -451
  34. package/dist/conformance/index.js +3 -3
  35. package/dist/index.js +17 -14
  36. package/dist/kernel/index.d.ts +54 -17
  37. package/dist/kernel/index.js +17 -14
  38. package/dist/migrations/001_initial.sql +7 -3
  39. package/dist/ui/{chunk-22EQLC23.js → chunk-EVNCL7FV.js} +21 -21
  40. package/dist/ui/chunk-GUGB4JY5.js +1 -0
  41. package/dist/ui/chunk-RJUHQQOF.js +3 -0
  42. package/dist/ui/{chunk-KMHXNOFZ.js → chunk-RSPEJBPT.js} +1 -1
  43. package/dist/ui/chunk-SQCXHF3J.js +2 -0
  44. package/dist/ui/index.html +1 -1
  45. package/dist/ui/main-K4O6LCIJ.js +4 -0
  46. package/migrations/001_initial.sql +7 -3
  47. package/package.json +2 -2
  48. package/dist/ui/chunk-K3ZRQNN5.js +0 -2
  49. package/dist/ui/chunk-PU5OP5RN.js +0 -1
  50. package/dist/ui/chunk-TLMV4LOQ.js +0 -3
  51. package/dist/ui/main-R7BIU4HU.js +0 -4
@@ -64,9 +64,14 @@ ls -A
64
64
  ```
65
65
 
66
66
  **Items you ignore** when evaluating "empty" (internal
67
- infrastructure, not user content): `.claude` (skills/agents infra),
68
- `.tmp` (Claude Code scratch dir), `SKILL.md` / `sm-tutorial.md`
69
- (loose copies of this skill), `tutorial-state.json` (resume mode).
67
+ infrastructure, not user content): the provider scaffold dirs `sm
68
+ tutorial` drops for the active lens, `.claude`, `.codex`, `.agents`,
69
+ `.agent` (the vendor marker plus the open-standard skill home, e.g.
70
+ codex drops both `.codex/` and `.agents/skills/`), `.git` (a
71
+ version-control dir alone is a fresh repo, not user content; real
72
+ files alongside it still trip the check), `.tmp` (Claude Code
73
+ scratch dir), `SKILL.md` / `sm-tutorial.md` (loose copies of this
74
+ skill), `tutorial-state.json` (resume mode).
70
75
 
71
76
  The whitelist is internal; do NOT enumerate it to the tester.
72
77
 
@@ -0,0 +1,2 @@
1
+ - When a page needs writing or fixing, brief [content-editor](.codex/agents/content-editor.toml).
2
+ - When the site is ready to go out, run $publish.
@@ -0,0 +1,2 @@
1
+ - Cuando una página necesita escribirse o arreglarse, informa a [content-editor](.codex/agents/content-editor.toml).
2
+ - Cuando el sitio esté listo para salir, corre $publish.
@@ -0,0 +1 @@
1
+ - [ ] Brief [demo-agent](../.codex/agents/demo-agent.toml) on the rough edges.
@@ -0,0 +1 @@
1
+ - [ ] Trigger $demo-skill when the input lands.
@@ -0,0 +1 @@
1
+ - [ ] Informa a [demo-agent](../.codex/agents/demo-agent.toml) sobre los detalles pendientes.
@@ -0,0 +1 @@
1
+ - [ ] Dispara $demo-skill cuando llegue la entrada.
@@ -10,6 +10,6 @@ description: |
10
10
  The one skill you run when the site is ready to go out.
11
11
 
12
12
  ## Steps
13
- 1. Run /check-links on the pages in public/. If it reports broken links, stop and fix them first.
14
- 2. If a page needs a content fix, brief @content-editor with the change.
13
+ 1. Run $check-links on the pages in public/. If it reports broken links, stop and fix them first.
14
+ 2. If a page needs a content fix, brief [content-editor](../../../.codex/agents/content-editor.toml) with the change.
15
15
  3. Follow the [deploy runbook](../../../docs/DEPLOY.md): regenerate pages, run the link check, start the server.
@@ -11,6 +11,6 @@ description: |
11
11
  La única skill que corres cuando el sitio está listo para salir.
12
12
 
13
13
  ## Pasos
14
- 1. Corre /check-links sobre las páginas en public/. Si reporta enlaces rotos, frena y arréglalos primero.
15
- 2. Si una página necesita un arreglo de contenido, dale el cambio a @content-editor.
14
+ 1. Corre $check-links sobre las páginas en public/. Si reporta enlaces rotos, frena y arréglalos primero.
15
+ 2. Si una página necesita un arreglo de contenido, dale el cambio a [content-editor](../../../.codex/agents/content-editor.toml).
16
16
  3. Sigue el [runbook de despliegue](../../../docs/DEPLOY.md): regenera las páginas, corre el chequeo de enlaces, inicia el servidor.
@@ -1,6 +1,6 @@
1
1
  name = "master-agent"
2
2
  description = "Example agent used by the advanced tutorial. The target node when we exercise extractors, analyzers, and the plugin-authoring flow."
3
- model = "gpt-5-codex"
3
+ model = "gpt-5.5"
4
4
  developer_instructions = """
5
5
  # master-agent
6
6
 
@@ -1,6 +1,6 @@
1
1
  name = "master-agent"
2
2
  description = "Agente de ejemplo que usa el tutorial avanzado. Es el nodo objetivo cuando ejercitamos extractors, analyzers y el flujo de autoría de plugins."
3
- model = "gpt-5-codex"
3
+ model = "gpt-5.5"
4
4
  developer_instructions = """
5
5
  # master-agent
6
6
 
@@ -1,6 +1,6 @@
1
1
  name = "content-editor"
2
2
  description = "Writes and edits the portfolio's pages. Reads a brief, follows the style guide, and emits the HTML into public/."
3
- model = "gpt-5-codex"
3
+ model = "gpt-5.5"
4
4
  developer_instructions = """
5
5
  # content-editor
6
6
 
@@ -1,6 +1,6 @@
1
1
  name = "content-editor"
2
2
  description = "Escribe y edita las páginas del portfolio. Lee un brief, sigue la guía de estilo y emite el HTML en public/."
3
- model = "gpt-5-codex"
3
+ model = "gpt-5.5"
4
4
  developer_instructions = """
5
5
  # content-editor
6
6
 
@@ -1,6 +1,6 @@
1
1
  name = "demo-agent"
2
2
  description = "Example agent that handles read and shell tasks. Solo node at boot; gets connected to the rest of the demo fixture during the Live UI step."
3
- model = "gpt-5-codex"
3
+ model = "gpt-5.5"
4
4
  developer_instructions = """
5
5
  # demo-agent
6
6
 
@@ -1,6 +1,6 @@
1
1
  name = "demo-agent"
2
2
  description = "Agente de ejemplo que maneja tareas de lectura y shell. Nodo solo al arranque; se conecta al resto del fixture demo durante el paso de UI en vivo."
3
- model = "gpt-5-codex"
3
+ model = "gpt-5.5"
4
4
  developer_instructions = """
5
5
  # demo-agent
6
6
 
@@ -20,7 +20,7 @@ Two numbering systems coexist; keep them apart:
20
20
 
21
21
  - **Internal (authoring only)**: the `order` field in `_manifest.yml`
22
22
  and the `# Part N` file headers, 0-based (Part 0 the prologue …
23
- Part 4 the CLI deep-dive; `mcp` at Part 5 is parked / hidden). Use it
23
+ Part 3 the CLI deep-dive, Part 4 the Extend dev section; `mcp` at Part 5 is parked / hidden). Use it
24
24
  in `**Context**:` blocks and author
25
25
  notes; NEVER say it to the tester, it is off by one from what they
26
26
  see.
@@ -259,7 +259,7 @@ A skill-map project reads its files through exactly ONE active lens
259
259
  | Provider | Asset layout | Kinds | Connectors that form | Marker | Stability | Track |
260
260
  |----------------|-------------------------------------------|--------------------------------|--------------------------------|--------------------|------------------|---------|
261
261
  | `claude` | `.claude/` (agents, commands, skills) | agent, command, skill, markdown| `/` invokes, `@` mentions, refs| `.claude/` | stable | rich |
262
- | `codex` | `.codex/agents/*.toml` + `.agents/skills/`| agent (TOML), skill, markdown | `/` invokes, `@` mentions, refs| `.codex/` | beta | rich |
262
+ | `codex` | `.codex/agents/*.toml` + `.agents/skills/`| agent (TOML), skill, markdown | `$` invokes, `@` file-refs, refs| `.codex/` | beta | rich |
263
263
  | `antigravity` | `.agents/skills/` | skill, markdown | `/` invokes, refs | `.agent/workflows/`| beta | basic |
264
264
  | `agent-skills` | `.agents/skills/` | skill, markdown | refs only | `.agents/` | stable (default) | basic |
265
265
 
@@ -269,8 +269,11 @@ active; it is the universal base, never a selectable lens.
269
269
  **Two tracks, by capability** (the axis is "does the lens have an
270
270
  `agent` kind?"):
271
271
 
272
- - **rich** (`claude`, `codex`): agents + skills (+ commands on claude),
273
- wired with `/` invocations and `@` mentions plus markdown references.
272
+ - **rich** (`claude`, `codex`): agents + skills (+ commands on claude).
273
+ Claude wires `/` invocations and `@` mentions; Codex wires `$` invocations
274
+ (skills) and `@`-FILE references (Codex's `@` is a file picker, it cannot
275
+ mention an agent by name, and `/` is a Codex built-in command, not a skill
276
+ invocation). Both also use markdown references.
274
277
  - **basic** (`agent-skills`, `antigravity`): the open-standard family,
275
278
  `skill` + `markdown` only, wired with **markdown references**
276
279
  (`[text](path)`), the one connection the Agent Skills standard
@@ -280,8 +283,10 @@ active; it is the universal base, never a selectable lens.
280
283
 
281
284
  Why references and not slash on the open standard: the Agent Skills
282
285
  spec (agentskills.io) activates a skill by its `description` and
283
- connects files by relative markdown links; it has no `/`-invocation
284
- syntax. claude/codex add `/` and `@` as vendor features on top.
286
+ connects files by relative markdown links; it has no invocation sigil.
287
+ Vendors add their own on top: claude `/`-invokes and `@`-mentions; Codex
288
+ `$`-invokes skills and treats `@` as a file picker (`/` is a Codex
289
+ built-in command, not a skill invocation).
285
290
 
286
291
  **Decision logic, applied silently at pre-flight:**
287
292
 
@@ -296,14 +301,17 @@ syntax. claude/codex add `/` and `@` as vendor features on top.
296
301
  `<provider_dir> = .claude`, `track = rich`.
297
302
  - else skill under `.agents/skills/sm-tutorial/` → `provider = agent-skills`,
298
303
  `<provider_dir> = .agents/skills`, `track = basic`.
299
- **Lens ambiguity for codex / antigravity**: both adopt the open
300
- `.agents/skills/` layout, so their own marker (`.codex/` or
301
- `.agent/workflows/`) coexists with the `agent-skills` marker (`.agents/`)
302
- and a plain `sm scan --yes` reports the lens as ambiguous. For those two,
303
- set it explicitly once before the first scan, `sm config set
304
- activeProvider <codex|antigravity> --yes`, then the book runs unchanged
305
- (the fixture engine renders the right shape: codex its TOML agents +
306
- command-as-skill, antigravity reuses the `agent-skills` overlays).
304
+ **Lens precedence for codex / antigravity**: both adopt the open
305
+ `.agents/skills/` layout, so the scaffold leaves the vendor marker
306
+ (`.codex/` or `.agent/workflows/`) alongside the `agent-skills` marker
307
+ (`.agents/`). The vendor marker WINS: `sm init` resolves `codex` /
308
+ `antigravity` outright with no prompt (the `.agents/` open default only
309
+ competes when no vendor marker is present). So the codex book runs
310
+ exactly like claude, `sm init` then `sm`, with no lens prompt and no
311
+ `sm config set activeProvider` step anywhere (tester chapters or
312
+ backstage seeds). The fixture engine still renders the right shape:
313
+ codex its TOML agents + command-as-skill, antigravity reuses the
314
+ `agent-skills` overlays.
307
315
  2. `state.js init --provider <p>` persists `provider` plus the derived
308
316
  `track`, so a resumed session never re-detects.
309
317
  3. Render only the parts whose `track` is `tutorial.track` (or `both`).
@@ -325,25 +333,45 @@ at `.claude/skills/sm-tutorial/` (this repo is itself a Claude project);
325
333
 
326
334
  ### Rendering the rich book on Codex
327
335
 
328
- The rich track has two lenses, `claude` and `codex`. They teach the SAME
329
- lessons with the SAME connectors (`/` invocations, `@` mentions, markdown
330
- references all resolve on both), so the rich part bodies are written in the
331
- `claude` shape; when `tutorial.provider == codex`, apply these substitutions:
336
+ The rich track has two lenses, `claude` and `codex`. They teach the same
337
+ lessons, but Codex's CONNECTOR GRAMMAR differs from claude's (see the
338
+ Connectors bullet below), so the rich part bodies are written in the `claude`
339
+ shape; when `tutorial.provider == codex`, apply these substitutions:
332
340
 
333
341
  - **Agents are TOML.** A Codex agent is a single `.codex/agents/<name>.toml`
334
342
  file (the prompt lives in its `developer_instructions` field), NOT a
335
343
  `.claude/agents/<name>.md`. The fixtures lay them, so when a chapter says
336
344
  "open the agent file" point at the `.toml`; a chapter that has the tester
337
345
  read or tweak an agent works on the TOML frontmatter / `developer_instructions`.
346
+ - **Connectors differ.** Codex invokes a skill with `$<name>` (NOT `/`, which
347
+ is a Codex built-in command), and `@<name>` is a FILE picker, not an agent
348
+ mention. So where the claude book writes `/check-links` (invoke) say
349
+ `$check-links`; where it writes `@content-editor` (mention an agent),
350
+ reference the agent's FILE instead, a markdown link `[content-editor](<rel-path>.toml)`
351
+ or a file-shaped `@<file>.md` / `@<file>.toml`; a bare `@<name>` (no
352
+ path/extension) forms NOTHING on Codex. The codex fixture overlays already
353
+ carry the `$`/file-ref shapes, narrate them, do not re-derive.
338
354
  - **No `command` kind.** Where the claude book authors a `command` (the
339
- `/publish` command, the reserved-name chapter's `init` command), Codex uses a
340
- **skill** at `.agents/skills/<name>/SKILL.md`. The body is identical (same
341
- `/check-links` + `@content-editor` + deploy reference); only the kind and path
342
- change. `cat <set> --file --provider codex` already returns the Codex skill
343
- body, so the create-the-file block stays a copy-paste. The reserved-name beat
344
- uses a skill named with a reserved verb (Codex inherits the open-standard
345
- `COMMONS_RESERVED_NAMES`, e.g. `config`), exactly like the basic track's
346
- `reserved` chapter, on a skill instead of a command.
355
+ `/publish` command), Codex uses a **skill** at `.agents/skills/<name>/SKILL.md`.
356
+ The body uses the CODEX grammar (`$check-links` to invoke, a file reference to
357
+ `content-editor` instead of an `@`-mention, per Connectors above); the codex
358
+ fixture overlay already carries that shape, so the create-the-file block
359
+ (`cat <set> --file --provider codex`) stays a copy-paste.
360
+ - **No reserved skill names on Codex.** Codex `$`-invokes skills, a namespace
361
+ disjoint from its `/` built-in commands, so a skill named like a built-in
362
+ (`model`) does NOT collide with `/model` and is NOT flagged. The claude
363
+ `reserved` chapter (a `/model` COMMAND collides) has no Codex equivalent; the
364
+ daily-loop `reserved` Codex delta reframes / skips it (see that chapter).
365
+ **Apply every substitution silently.** Use the Codex path, kind and file
366
+ directly in the tester-facing prose, but never EXPLAIN the substitution or
367
+ compare it to the claude shape. The Codex tester only ever sees a `skill`
368
+ where the claude book has a command; never tell them "Codex has no `command`
369
+ kind", never say a node "is a command that shows as a skill" or that it
370
+ "replaces" / "stands in for" / "reemplaza" a command, never append a parenthetical
371
+ like "(in Codex this replaces the command)", never reference "the claude command". On Codex these nodes were always skills, there is
372
+ nothing to explain. (Same for the TOML-agent and path swaps above: point the
373
+ tester at the real `.toml` / `.agents/` file when they interact with it, just
374
+ do not narrate that it "would be" something else on claude.)
347
375
  - **Skills** live under `.agents/skills/<name>/SKILL.md` (the open layout Codex
348
376
  adopted), same as the basic family.
349
377
  - Everything else (the `@`/`/` syntax, the confidence numbers, the hub, the
@@ -444,7 +472,7 @@ promise or pre-announce the next part, the close and the menu own the
444
472
  transition. Sample (Claude variant, mirror the tester's language,
445
473
  apply the host rendering rule):
446
474
 
447
- > ✓ Listo, terminaste **El proyecto desde cero**. Levantaste un
475
+ > ✓ Listo, terminaste **El harness desde cero**. Levantaste un
448
476
  > proyecto real, su handbook y el harness `.claude/` con sus primeros
449
477
  > nodos.
450
478
  >
@@ -484,7 +512,7 @@ fill the parts and durations from `_manifest.yml`):
484
512
  **1. El mapa en vivo** (~12 min)
485
513
  > El prólogo: corrés `sm`, abrís el browser y ves el mapa actualizarse en vivo mientras editás `.md`. Si es tu primera vez, empezá por acá.
486
514
 
487
- **2. El proyecto desde cero** (~8 min)
515
+ **2. El harness desde cero** (~8 min)
488
516
  > Arrancás un proyecto real (un portfolio) y su harness `.claude/`.
489
517
 
490
518
  ¿Cuál?
@@ -503,7 +531,7 @@ the title stays plain):
503
531
  **1. El mapa en vivo** (~12 min)
504
532
  > ✓ Ya la hiciste.
505
533
 
506
- **2. El proyecto desde cero** (~8 min)
534
+ **2. El harness desde cero** (~8 min)
507
535
  > Arrancás un proyecto real (un portfolio) y su harness `.claude/`.
508
536
  ```
509
537
 
@@ -29,7 +29,7 @@
29
29
  {
30
30
  "id": "connectors",
31
31
  "title": "The connectors light up",
32
- "est_min": 2
32
+ "est_min": 1
33
33
  },
34
34
  {
35
35
  "id": "inspector",
@@ -39,17 +39,17 @@
39
39
  {
40
40
  "id": "edit-link",
41
41
  "title": "Edit a link, the topology changes",
42
- "est_min": 3
42
+ "est_min": 2
43
43
  },
44
44
  {
45
45
  "id": "workspace",
46
46
  "title": "Navigate the workspace (files, search, isolate)",
47
- "est_min": 2
47
+ "est_min": 1
48
48
  },
49
49
  {
50
50
  "id": "ignore",
51
51
  "title": "Silence a file via .skillmapignore",
52
- "est_min": 2
52
+ "est_min": 1
53
53
  }
54
54
  ]
55
55
  },
@@ -82,7 +82,7 @@
82
82
  {
83
83
  "id": "connectors",
84
84
  "title": "Connect with references (markdown links)",
85
- "est_min": 2
85
+ "est_min": 1
86
86
  },
87
87
  {
88
88
  "id": "inspector",
@@ -92,24 +92,24 @@
92
92
  {
93
93
  "id": "edit-link",
94
94
  "title": "Edit a link, the topology changes",
95
- "est_min": 3
95
+ "est_min": 2
96
96
  },
97
97
  {
98
98
  "id": "workspace",
99
99
  "title": "Navigate the workspace (files, search, isolate)",
100
- "est_min": 2
100
+ "est_min": 1
101
101
  },
102
102
  {
103
103
  "id": "ignore",
104
104
  "title": "Silence a file via .skillmapignore",
105
- "est_min": 2
105
+ "est_min": 1
106
106
  }
107
107
  ]
108
108
  },
109
109
  {
110
110
  "id": "project-kickoff",
111
111
  "order": 1,
112
- "title": "The project from zero",
112
+ "title": "The harness from zero",
113
113
  "status": "active",
114
114
  "preflight": "portfolio-init",
115
115
  "seed": null,
@@ -135,22 +135,22 @@
135
135
  {
136
136
  "id": "real-kinds",
137
137
  "title": "The real kinds in context",
138
- "est_min": 2
138
+ "est_min": 1
139
139
  },
140
140
  {
141
141
  "id": "check-links",
142
142
  "title": "The check-links skill",
143
- "est_min": 2
143
+ "est_min": 1
144
144
  },
145
145
  {
146
146
  "id": "publish",
147
147
  "title": "The /publish command invokes the skill",
148
- "est_min": 3
148
+ "est_min": 2
149
149
  },
150
150
  {
151
151
  "id": "links",
152
152
  "title": "Mentions (@) and references between assets",
153
- "est_min": 3
153
+ "est_min": 2
154
154
  },
155
155
  {
156
156
  "id": "confidence",
@@ -162,7 +162,7 @@
162
162
  {
163
163
  "id": "basic-kickoff",
164
164
  "order": 1,
165
- "title": "The project from zero",
165
+ "title": "The harness from zero",
166
166
  "status": "active",
167
167
  "preflight": "portfolio-init",
168
168
  "seed": null,
@@ -193,22 +193,22 @@
193
193
  {
194
194
  "id": "check-links",
195
195
  "title": "The link checker",
196
- "est_min": 3
196
+ "est_min": 2
197
197
  },
198
198
  {
199
199
  "id": "publish",
200
200
  "title": "The publish skill references the harness",
201
- "est_min": 4
201
+ "est_min": 3
202
202
  },
203
203
  {
204
204
  "id": "links",
205
205
  "title": "The handbook becomes the hub (references)",
206
- "est_min": 4
206
+ "est_min": 3
207
207
  },
208
208
  {
209
209
  "id": "confidence",
210
210
  "title": "Connector confidence (opacity = certainty)",
211
- "est_min": 3
211
+ "est_min": 2
212
212
  }
213
213
  ]
214
214
  },
@@ -226,17 +226,17 @@
226
226
  {
227
227
  "id": "setup",
228
228
  "title": "Make it yours and bring it up",
229
- "est_min": 5
229
+ "est_min": 4
230
230
  },
231
231
  {
232
232
  "id": "add-page",
233
233
  "title": "Add a page with your agent",
234
- "est_min": 4
234
+ "est_min": 3
235
235
  },
236
236
  {
237
237
  "id": "broken-ref",
238
238
  "title": "A rename breaks a link",
239
- "est_min": 4
239
+ "est_min": 3
240
240
  },
241
241
  {
242
242
  "id": "reserved",
@@ -246,7 +246,7 @@
246
246
  {
247
247
  "id": "publish",
248
248
  "title": "Ship it: run /publish for real",
249
- "est_min": 4
249
+ "est_min": 3
250
250
  },
251
251
  {
252
252
  "id": "stability",
@@ -274,17 +274,17 @@
274
274
  {
275
275
  "id": "setup",
276
276
  "title": "Make it yours and bring it up",
277
- "est_min": 5
277
+ "est_min": 4
278
278
  },
279
279
  {
280
280
  "id": "add-page",
281
281
  "title": "Add a page with your skill",
282
- "est_min": 4
282
+ "est_min": 3
283
283
  },
284
284
  {
285
285
  "id": "broken-ref",
286
286
  "title": "A rename breaks a link",
287
- "est_min": 4
287
+ "est_min": 3
288
288
  },
289
289
  {
290
290
  "id": "reserved",
@@ -294,7 +294,7 @@
294
294
  {
295
295
  "id": "publish",
296
296
  "title": "Ship it: run the publish skill for real",
297
- "est_min": 4
297
+ "est_min": 3
298
298
  },
299
299
  {
300
300
  "id": "stability",
@@ -309,9 +309,47 @@
309
309
  ]
310
310
  },
311
311
  {
312
- "id": "extend",
312
+ "id": "cli",
313
313
  "order": 3,
314
- "title": "Extend skill-map for the site",
314
+ "title": "The CLI for you and your agent",
315
+ "status": "active",
316
+ "preflight": "seed",
317
+ "seed": "prologue-built",
318
+ "prereq": "fundamentals",
319
+ "pace": "auto-advance",
320
+ "track": "both",
321
+ "chapters": [
322
+ {
323
+ "id": "browse",
324
+ "title": "list / show / check",
325
+ "est_min": 2
326
+ },
327
+ {
328
+ "id": "graph-export",
329
+ "title": "graph / export (query, formatters)",
330
+ "est_min": 2
331
+ },
332
+ {
333
+ "id": "issues",
334
+ "title": "Issues and broken refs (--analyzers, --json)",
335
+ "est_min": 2
336
+ },
337
+ {
338
+ "id": "annotations",
339
+ "title": "Annotations and the .sm consent prompt",
340
+ "est_min": 3
341
+ },
342
+ {
343
+ "id": "reference-paths",
344
+ "title": "Validate links to folders outside the scan scope",
345
+ "est_min": 3
346
+ }
347
+ ]
348
+ },
349
+ {
350
+ "id": "extend",
351
+ "order": 4,
352
+ "title": "Extend skill-map with plugins",
315
353
  "status": "active",
316
354
  "preflight": "backstage-init",
317
355
  "seed": null,
@@ -332,22 +370,22 @@
332
370
  {
333
371
  "id": "settings-3-lens",
334
372
  "title": "The active provider lens (`activeProvider`)",
335
- "est_min": 4
373
+ "est_min": 3
336
374
  },
337
375
  {
338
376
  "id": "tour-1-intro",
339
377
  "title": "How plugins work",
340
- "est_min": 4
378
+ "est_min": 3
341
379
  },
342
380
  {
343
381
  "id": "tour-2-kinds",
344
382
  "title": "The six extension kinds",
345
- "est_min": 5
383
+ "est_min": 4
346
384
  },
347
385
  {
348
386
  "id": "tour-3-explore",
349
387
  "title": "Explore one extension up close",
350
- "est_min": 4
388
+ "est_min": 3
351
389
  },
352
390
  {
353
391
  "id": "authoring-1-scaffold",
@@ -376,44 +414,6 @@
376
414
  }
377
415
  ]
378
416
  },
379
- {
380
- "id": "cli",
381
- "order": 4,
382
- "title": "The CLI in depth",
383
- "status": "active",
384
- "preflight": "seed",
385
- "seed": "prologue-built",
386
- "prereq": "fundamentals",
387
- "pace": "auto-advance",
388
- "track": "both",
389
- "chapters": [
390
- {
391
- "id": "browse",
392
- "title": "list / show / check",
393
- "est_min": 3
394
- },
395
- {
396
- "id": "graph-export",
397
- "title": "graph / export (query, formatters)",
398
- "est_min": 3
399
- },
400
- {
401
- "id": "issues",
402
- "title": "Issues and broken refs (--analyzers, --json)",
403
- "est_min": 3
404
- },
405
- {
406
- "id": "annotations",
407
- "title": "Annotations and the .sm consent prompt",
408
- "est_min": 3
409
- },
410
- {
411
- "id": "reference-paths",
412
- "title": "Validate links to folders outside the scan scope",
413
- "est_min": 4
414
- }
415
- ]
416
- },
417
417
  {
418
418
  "id": "mcp",
419
419
  "order": 5,