@skill-map/cli 0.69.0 → 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 +46 -27
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-daily.md +18 -13
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-fundamentals.md +6 -7
- package/dist/cli/tutorial/sm-tutorial/references/part-daily-loop.md +97 -26
- package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +11 -10
- package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +13 -11
- package/dist/cli/tutorial/sm-tutorial/scripts/lib/paths.js +6 -5
- package/dist/cli.js +267 -128
- package/dist/index.js +9 -7
- package/dist/kernel/index.d.ts +27 -0
- package/dist/kernel/index.js +9 -7
- 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-RJUHQQOF.js +3 -0
- 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-K4O6LCIJ.js} +3 -3
- package/package.json +2 -2
- package/dist/ui/chunk-RLRSNHYG.js +0 -3
- package/dist/ui/chunk-SI4MGFOW.js +0 -2
|
@@ -64,9 +64,14 @@ ls -A
|
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
**Items you ignore** when evaluating "empty" (internal
|
|
67
|
-
infrastructure, not user content):
|
|
68
|
-
|
|
69
|
-
(
|
|
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 @@
|
|
|
1
|
+
- [ ] Brief [demo-agent](../.codex/agents/demo-agent.toml) on the rough edges.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
- [ ] Run $demo-command before publishing.
|
|
@@ -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
|
+
- [ ] Ejecuta $demo-command antes de publicar.
|
|
@@ -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
|
|
14
|
-
2. If a page needs a content fix, brief
|
|
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
|
|
15
|
-
2. Si una página necesita un arreglo de contenido, dale el cambio a
|
|
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 = "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
|
|
3
|
+
model = "gpt-5.5"
|
|
4
4
|
developer_instructions = """
|
|
5
5
|
# master-agent
|
|
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
|
|
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
|
|
3
|
+
model = "gpt-5.5"
|
|
4
4
|
developer_instructions = """
|
|
5
5
|
# demo-agent
|
|
6
6
|
|
|
@@ -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 |
|
|
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
|
-
|
|
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
|
|
284
|
-
|
|
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
|
|
300
|
-
`.agents/skills/` layout, so
|
|
301
|
-
`.agent/workflows/`)
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
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,31 +333,42 @@ 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
|
|
329
|
-
lessons
|
|
330
|
-
|
|
331
|
-
|
|
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
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
`
|
|
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).
|
|
347
365
|
**Apply every substitution silently.** Use the Codex path, kind and file
|
|
348
366
|
directly in the tester-facing prose, but never EXPLAIN the substitution or
|
|
349
367
|
compare it to the claude shape. The Codex tester only ever sees a `skill`
|
|
350
368
|
where the claude book has a command; never tell them "Codex has no `command`
|
|
351
|
-
kind", never say a node "is a command that shows as a skill"
|
|
352
|
-
"
|
|
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
|
|
353
372
|
nothing to explain. (Same for the TOML-agent and path swaps above: point the
|
|
354
373
|
tester at the real `.toml` / `.agents/` file when they interact with it, just
|
|
355
374
|
do not narrate that it "would be" something else on claude.)
|
|
@@ -165,24 +165,29 @@ Creates a blank page so you can start writing.
|
|
|
165
165
|
The watcher picks up the new skill. Tell the tester:
|
|
166
166
|
|
|
167
167
|
> I added a skill named `model`. Watch the **Map**: the new `model` skill node
|
|
168
|
-
> appears,
|
|
169
|
-
> `
|
|
170
|
-
>
|
|
171
|
-
>
|
|
168
|
+
> appears **clean, no warning**. On the open Agent Skills standard a skill is
|
|
169
|
+
> activated by its `description`, not invoked by a `/` command, so a skill name
|
|
170
|
+
> can never collide with a built-in command, there are NO reserved skill names.
|
|
171
|
+
> Name your skills anything you like, even after a CLI built-in like `model` or
|
|
172
|
+
> `help`.
|
|
172
173
|
>
|
|
173
|
-
>
|
|
174
|
-
>
|
|
175
|
-
>
|
|
174
|
+
> The one exception is a vendor that bolts `/`-invocation onto the standard:
|
|
175
|
+
> Google's Antigravity invokes skills with `/<name>`, so under the Antigravity
|
|
176
|
+
> lens a skill named after one of its built-in verbs (like `goal`) WOULD be
|
|
177
|
+
> flagged `name-reserved`. The neutral open standard you are on reserves nothing.
|
|
176
178
|
>
|
|
177
|
-
>
|
|
178
|
-
> live. What cleared it was changing `frontmatter.name` (which for a skill must
|
|
179
|
-
> match its folder, so you renamed both). Now `new-page` is yours and the runtime
|
|
180
|
-
> will run it.
|
|
181
|
-
>
|
|
182
|
-
> Did the warning clear after the rename?
|
|
179
|
+
> See the `model` node land clean, with no warning?
|
|
183
180
|
|
|
184
181
|
Wait for confirmation. Mark `reserved`: done. Auto-advance to `publish`.
|
|
185
182
|
|
|
183
|
+
**Antigravity delta** (`tutorial.provider == antigravity`): skills ARE
|
|
184
|
+
`/`-invoked here, so a built-in verb DOES collide. Name the skill `goal` (an
|
|
185
|
+
Antigravity built-in) instead of `model`, narrate the `name-reserved`
|
|
186
|
+
**warning** that appears, and have the tester clear it by renaming the folder +
|
|
187
|
+
`frontmatter.name` to `new-page` (the warning clears live). That collision-and-
|
|
188
|
+
fix beat is the Antigravity version; `agent-skills` gets the "names are free"
|
|
189
|
+
lesson above.
|
|
190
|
+
|
|
186
191
|
---
|
|
187
192
|
|
|
188
193
|
**Act C - Publish**
|
|
@@ -251,8 +251,12 @@ each ends with its own confirmation. Do NOT prepend an intro line to a block.
|
|
|
251
251
|
> `Search…`). Type `guideline`. Watch the tree narrow to the two
|
|
252
252
|
> guideline nodes. The search matches a node's name, path, or
|
|
253
253
|
> description, and filters live, no Enter needed. The **Map** stays
|
|
254
|
-
> put: by default the search filters only the files list, not the map
|
|
255
|
-
>
|
|
254
|
+
> put: by default the search filters only the files list, not the map.
|
|
255
|
+
>
|
|
256
|
+
> 💡 Tip: the map-icon button next to the search box controls whether
|
|
257
|
+
> the search also filters the **Map** (off by default, which is why the
|
|
258
|
+
> map stayed put while only the tree narrowed). Click it on if you want
|
|
259
|
+
> a search to filter the map too.
|
|
256
260
|
>
|
|
257
261
|
> Now clear the box. All four nodes come back in the tree. Confirm you
|
|
258
262
|
> saw it filter and then restore.
|
|
@@ -270,11 +274,6 @@ each ends with its own confirmation. Do NOT prepend an intro line to a block.
|
|
|
270
274
|
> Map: there's a **Show all** button (an eye icon). Click it and all
|
|
271
275
|
> four nodes return.
|
|
272
276
|
>
|
|
273
|
-
> 💡 Tip: the map-icon button next to the search box controls whether
|
|
274
|
-
> the search also filters the **Map** (off by default, which is why the
|
|
275
|
-
> map stayed put while only the tree narrowed). Click it on if you want
|
|
276
|
-
> a search to filter the map too.
|
|
277
|
-
>
|
|
278
277
|
> Did the map isolate and then restore?
|
|
279
278
|
|
|
280
279
|
Leave the server running, the next chapter is the last that uses it. Mark
|
|
@@ -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
|
|
@@ -434,12 +498,17 @@ Tell the tester:
|
|
|
434
498
|
> The first time skill-map writes its own metadata it asks for **consent**:
|
|
435
499
|
> confirm it in the dialog that pops up. Two things happen at once: a stability
|
|
436
500
|
> badge for the stage you picked appears on the `AGENTS` node, and skill-map
|
|
437
|
-
> creates a **`.sm` sidecar file**
|
|
438
|
-
>
|
|
439
|
-
>
|
|
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.
|
|
440
505
|
>
|
|
441
|
-
>
|
|
442
|
-
>
|
|
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.
|
|
443
512
|
>
|
|
444
513
|
> See the new stability badge on the handbook?
|
|
445
514
|
|
|
@@ -447,23 +516,25 @@ Wait for confirmation. Mark `stability`: done. Auto-advance to `golive`.
|
|
|
447
516
|
|
|
448
517
|
## Chapter `golive` - Your website, live next to the graph (~3 min)
|
|
449
518
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
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.
|
|
453
524
|
|
|
454
525
|
**Preparation**: none. `server.js` / `package.json` exist from the kickoff; the
|
|
455
526
|
pages exist from the earlier chapters.
|
|
456
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
|
+
|
|
457
534
|
```bash
|
|
458
535
|
npm install
|
|
459
536
|
node server.js
|
|
460
537
|
```
|
|
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
538
|
>
|
|
468
539
|
> Now take it in at once. On one side, your real running website, named after
|
|
469
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`.
|
|
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
|
|
|
@@ -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.
|
|
@@ -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
|
|
@@ -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
|