Skip to content

Commit 01a3421

Browse files
docs(skills): install the catalog from the installed @objectstack/skills package; the GitHub path is the next channel only (#23220)
Part of #22668 Clause-②: no (docs) The docs half of ruling A on #22649 (record 6096124407): the four pages that gave `npx skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y` as the install command now install the catalog from the `@objectstack/skills` package at the installed `@objectstack/spec`'s version, and the skills reference names the GitHub path once, as the `next` channel. This PR does not close the card: the `skills/README.md` half is not in it (see "The split" below). ## What changes, page by page - `content/docs/ai/skills-reference.mdx`, section "Installing skills" (rewritten, outside the generated block): - the two-step install: `npm install --save-dev "@objectstack/skills@$(node -p "require('@objectstack/spec/package.json').version")"`, then `npx skills experimental_sync --agent claude-code -y`; the sentence that the catalog's version is then the installed spec's; - what the sync writes (links, `--copy`, `skills-lock.json`), and that a bare `npm install --save-dev @objectstack/skills` takes the `latest` tag, not the spec's version; - the update story: bump `@objectstack/skills` with the other `@objectstack/*` packages, then re-run the sync; - which versions exist: the package is published from `18.0.0-next.0` on, and a 17.x version answers `ETARGET`; - new projects: through `18.0.0-next.0` the scaffolder installs from the `next` channel with `skills add`, and the sync skips skills that `skills add` installed, so they are removed first; - the one `next` channel sentence naming the GitHub path: the unreleased `main`, for trying the next version's skills, not for a released project. - Removed: the `--all` multi-runtime paragraph and the old callout. Both described the GitHub `add` path, and the callout's claim that `--skill '*'` "always installs the matching set for the `@objectstack/spec` version in your project" was false for that path. - `content/docs/ai/skills.mdx`, "Installing skills": the same two commands, the version sentence, the update story and the 17.x line, then a link to the reference for the rest. - `content/docs/getting-started/build-with-claude-code.mdx`: in the step-1 bullet the scaffolder no longer "runs `npx skills add …`". The bullet says where the bundle comes from through `18.0.0-next.0` and gives the package-based replacement. The "Keep the skills current" bullet now gives the bump-then-sync story. - `content/docs/getting-started/your-first-project.mdx`: scaffold step 3 and the section 7 upgrade sentence get the same two changes. Every `npx skills add objectstack-ai/objectstack/skills` occurrence under `content/docs` outside `releases/` is gone except the one `next` channel sentence (`git grep -n "skills add objectstack-ai" -- content/docs ':!content/docs/releases'` gives 1 hit, `skills-reference.mdx:41`). ## Measured on the claim's day (2026-10-13), not taken from the card Every claim the pages make was read in throwaway projects under the session scratchpad, against the registry: - `npm view @objectstack/skills dist-tags` gives `latest` and `next` both `18.0.0-next.0`. The versions are `0.0.0-stage` (the staged-publish placeholder, "Temporary package placeholder for staged publishing") and `18.0.0-next.0`. `@objectstack/spec` has `latest` 17.7.0 and `next` 18.0.0-next.0. - The version binding: `.changeset/config.json` has one `fixed` group of 71 members that holds both `@objectstack/skills` and `@objectstack/spec`. Every public `@objectstack/*` package in the workspace is in it (0 outside, read off every `package.json`). `.changeset/pre.json` is in `pre` mode with tag `next`. - Installed package layout: `node_modules/@objectstack/skills/dist/skills/` holds 10 skills (64 files) plus `README.md`. Every `SKILL.md` carries `compatibility: Requires @objectstack/spec 18.x` and `metadata.version: "18.0.0-next.0"`. - The documented commands, on a project with `@objectstack/spec@next`: - step 1 exits 0 and saves `"@objectstack/skills": "^18.0.0-next.0"`; - `npx skills experimental_sync --agent claude-code -y` (skills CLI 1.7.2) exits 0 and syncs 10 skills: `.agents/skills/SKILL` links to `../../node_modules/@objectstack/skills/dist/skills/SKILL`, `.claude/skills/SKILL` links to `../../.agents/skills/SKILL`, and `skills-lock.json` records `sourceType: node_modules`, `version: 18.0.0-next.0`. - `--copy --agent claude-code` writes 64 real files under `.claude/skills/`, no symlink and no `.agents/`. `--agent codex` writes `.agents/skills/`. - On a project with `@objectstack/spec@17.7.0`, step 1 exits 1 with `npm error code ETARGET` / `No matching version found for @objectstack/skills@17.7.0`. A bare `npm install --save-dev @objectstack/skills` on that project exits 0 and installs `18.0.0-next.0`, the catalog for the next major. That is why the pages keep the version in the command. - Scaffolded projects: the published `create-objectstack` 17.7.0 and 18.0.0-next.0 tarballs both run `skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y` (`dist/index.js`). - The scaffolder's exact sequence (that `add` from GitHub, then `experimental_sync --agent claude-code -y`) prints `Skipped objectstack-ai from @objectstack/skills: installed with skills add from objectstack-ai/objectstack` for all 10 skills and changes nothing. - After `npx skills remove --all`, the sync installs all 10 from the package (`metadata.version: "18.0.0-next.0"`). - Named removal (`npx skills remove objectstack-data objectstack-ui -y`) removes exactly those two. A glob (`--skill 'objectstack-*'`) answers `No matching skills found`, so the pages name the skills. - The update story, simulated: after an in-place edit of a file under `node_modules/@objectstack/skills` plus its `version` field, `experimental_sync --copy` refreshed the copy and the lock's version. A real second version does not exist yet. ## The split, and why the README half is not here The claim's file surface allows `skills/README.md`'s install paragraph only as a separate Tier H PR. `node scripts/pm/dispatch-gates.mjs --tier` over that one path prints `Model tier — MANDATORY: claude-fable-5-1 … 'skills/**' — clause ① (2026-09-10 ruling, verbatim 「必须 fable的还包括对外发布的skills」)`, with no one-line exemption for that root. This run's tier is the default one, and the claim records no exit. So the README PR was not authored here. The README PR is the one that carries the card's closing keyword. The README also ships inside the package as `dist/skills/README.md`, so its PR owes a `patch` changeset for `@objectstack/skills`. ## Gates All runs are at `7a3bc7f47`, with each exit code captured before any pipe. Logs are under the session scratchpad. - `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` derived 42 commands for the 4 paths, and all 42 exit 0. The `--ran` reconciliation reads: `42 derived, 42 run, 0 NOT-MEASURED, 0 UNRUN` (`a DERIVED zero — all 42 recorded an exit code and none of them is 3`). - The card's named gates are among the 42: `pnpm check:corpus-claim-drift`, `pnpm check:doc-authoring`, `pnpm --filter @objectstack/spec run check:skill-docs`, and `node scripts/check-doc-route-spelling.mjs --advisory` plus `--self-test`. The route gate in enforce mode (no flag) also exits 0: `population clean`. - Four gates first exited 3 (`PREREQUISITE NOT MET`), read as not measured: `check:doc-formula-expressions`, `check:doc-security-posture`, `check:skill-examples` and `check:docs-transcript-drift`. After `@objectstack/formula`, `@objectstack/lint`, `@objectstack/client` and `@objectstack/client-react` were built under the verify lock, all four re-ran to exit 0. - Docs link check, run the way `check-links.yml` runs it: `lychee 0.24.2 --offline --root-dir content --fallback-extensions mdx,md --config lychee.toml` over `content/**/*.md`, `content/**/*.mdx`, `README.md` and `ARCHITECTURE.md` exits 0 (`2453 Total … 0 Errors`). The new `/docs/ai/skills-reference#installing-skills` links resolve. - MDX compile of the four pages with the workspace's `@mdx-js/mdx` 3.1.1: all ok. A negative control, a bare less-than tag fragment, fails to compile. - `pnpm lint` (eslint) is not affected. The population comes from eslint's own config: each of the four `.mdx` files answers `File ignored because no matching configuration was supplied` (4 files in the `--format json` output, 0 errors). The four pages are outside eslint's population, so this diff cannot change any file's verdict. - No package is touched and nothing publishes, so `skip-changeset` applies (fast lane: `content/docs/**`). ## Acceptance notes - When the `create-objectstack` card (#22659 remains open) lands the package-based scaffolder, two sentences go stale and its PR owes the rewording: "Through `18.0.0-next.0` …" on the reference page and in the two getting-started step-1 texts. They stay true as written for every scaffolder version up to and including `18.0.0-next.0`. - 17.x projects: the pages say what is measured and nothing more: there is no 17.x `@objectstack/skills`, so no catalog bound to 17.x exists. One path does work technically: a sparse clone of the `@objectstack/spec@17.7.0` tag's `skills/`, then `npx skills add ./PATH --skill '*' --agent claude-code -y`, which wrote 64 files to `.claude/skills/`. It is left out of the docs because it is a second GitHub channel, and ruling A keeps the GitHub path only as `next`. The skills CLI cannot take this repository's tags directly: `tree/@objectstack/spec@17.7.0/skills` clones branch `@objectstack`, and the URL-encoded form is not found. The choice is raised in the report. - `packages/skills/README.md`, the published package's own README, still teaches a bare `npm install --save-dev @objectstack/skills`. It is outside this claim's surface and goes to the seat in the report. --- _Generated by [Claude Code](https://claude.ai/code/session_012zwsLMxQBwHUYJgPyrpEvx)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 6e6881e commit 01a3421

4 files changed

Lines changed: 49 additions & 38 deletions

File tree

‎content/docs/ai/skills-reference.mdx‎

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,31 @@ ObjectStack ships a set of **domain-specific skills** that teach AI assistants (
1414

1515
## Installing skills
1616

17-
Skills install into a project from the [skills.sh](https://skills.sh) registry, reading the `skills/` directory of the [`objectstack-ai/objectstack`](https://github.com/objectstack-ai/objectstack) repository.
18-
19-
**New projects — installed automatically.** `create-objectstack` runs the install step for you during scaffolding, for a single agent runtime: the bundle lands once, in `.claude/skills/`, and the scaffolder's closing summary prints the exact command it ran — with a different agent name for any other runtime you use.
17+
The catalog ships as the npm package [`@objectstack/skills`](https://www.npmjs.com/package/@objectstack/skills), released together with every other `@objectstack/*` package at one shared version. Install it at the version of the `@objectstack/spec` your project has installed — the catalog's version is then your spec's, so the skills teach what that spec accepts — and sync it from `node_modules` into your coding agent's skills directory:
2018

2119
```bash
22-
npm create objectstack@latest my-app
20+
# 1 · the catalog, at the version of your installed @objectstack/spec
21+
npm install --save-dev "@objectstack/skills@$(node -p "require('@objectstack/spec/package.json').version")"
22+
23+
# 2 · link it from node_modules into your agent's skills directory
24+
npx skills experimental_sync --agent claude-code -y
2325
```
2426

25-
**Existing projects — install the whole bundle:**
27+
Step 2 is the [skills CLI](https://www.npmjs.com/package/skills)'s sync from `node_modules`: it finds the skills under `node_modules/@objectstack/skills/dist/skills/`, links each one into `.agents/skills/<skill>` (and, for `claude-code`, `.claude/skills/<skill>` to that), and records the source and version in `skills-lock.json`. Name your own runtime after `--agent` (`codex`, `cursor`, …). Add `--copy` to write real files instead of links — for `claude-code` the catalog then lands once, in `.claude/skills/`, and nowhere else. A bare `npm install --save-dev @objectstack/skills` installs whichever version the registry tags `latest`, not your spec's — keep the version in step 1.
28+
29+
**Updating.** The catalog is versioned as **one bundle**, and it moves only with your ObjectStack version — you never track or update a skill on its own: bump `@objectstack/skills` with the other `@objectstack/*` packages, then re-run the sync (step 2, same flags).
30+
31+
**Which versions exist.** `@objectstack/skills` is published from `18.0.0-next.0` on; there is no 17.x release of it. A project on `@objectstack/spec` 17.x therefore has no catalog bound to its version: step 1 refuses with `ETARGET` (`No matching version found`).
32+
33+
**New projects.** `create-objectstack` installs the skills for one agent runtime while it scaffolds — once, into `.claude/skills/` — and its closing summary prints the command for any other runtime you use.
2634

2735
```bash
28-
npx skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y
36+
npm create objectstack@latest my-app
2937
```
3038

31-
Name your own runtime after `--agent` (`codex`, `cursor`, …) — the bundle is byte-identical whichever you name, and it lands **once**, in that agent's own directory (`.claude/skills/` for `claude-code`). Run the same command again at any time to pull the latest versions: re-running is idempotent per destination, so updating is one command regardless of how many skills the bundle contains. To choose which skills to add instead of the full set, run `npx skills add objectstack-ai/objectstack/skills` with neither `--skill` nor `--all` and pick from the list. (The `/skills` subpath scopes discovery to the published catalog — always keep it in the command.)
32-
33-
**The multi-runtime opt-in, and what it costs.** Replacing `--skill '*' --agent claude-code -y` with `--all` installs for every runtime the skills CLI knows. It is the same bundle, but it writes it to **three** destinations instead of one — a full real copy in **both** `.agents/` and `agent/`, plus `.claude/` symlinks pointing into `.agents/`. Inside a git repository that means the first `git add -A` stages the bundle twice over, plus the symlinks. Idempotence does not help here: re-running is idempotent *per destination*, and it is the destination count that grows. Name one `--agent` per runtime you actually use instead.
39+
Through `18.0.0-next.0` the scaffolder takes those skills from the `next` channel below with `skills add`, not from `@objectstack/skills`, and step 2 skips every skill a `skills add` installed (it prints `Skipped … installed with skills add`). To bind a scaffolded project's skills to a version the package is published at, remove them first — `npx skills remove --all` removes every installed skill; name the `objectstack-*` ones instead (`npx skills remove objectstack-data objectstack-ui …`) if you added others — then run steps 1 and 2.
3440

35-
<Callout type="info">
36-
Skills are versioned as **one bundle**. You do not track or update each skill individually — `--skill '*'` always installs the matching set for the `@objectstack/spec` version in your project.
37-
</Callout>
41+
**The `next` channel.** `npx skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y` reads the catalog straight from the repository's unreleased `main` — for trying the next version's skills, not for a released project.
3842

3943
---
4044

‎content/docs/ai/skills.mdx‎

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,14 @@ See [Agents](/docs/ai/agents#you-extend-the-platform-with-skills-not-agents) for
2626

2727
## Installing skills
2828

29-
Skills are distributed through the [skills.sh](https://skills.sh) registry from the [`objectstack-ai/objectstack`](https://github.com/objectstack-ai/objectstack) repository's `skills/` directory.
29+
Skills ship as the npm package `@objectstack/skills`, released with the other `@objectstack/*` packages at one shared version. Install it at your installed `@objectstack/spec`'s version — the catalog's version is then your spec's — and sync it from `node_modules` into your agent's directory:
3030

3131
```bash
32-
# New project — create-objectstack installs them automatically, for one agent
33-
npm create objectstack@latest my-app
34-
35-
# Existing project — add the whole bundle for your agent (re-run to update)
36-
npx skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y
32+
npm install --save-dev "@objectstack/skills@$(node -p "require('@objectstack/spec/package.json').version")"
33+
npx skills experimental_sync --agent claude-code -y
3734
```
3835

39-
Name your own runtime after `--agent` (`codex`, `cursor`, …); the bundle lands **once**, in that agent's own directory. It is versioned and updated as **one unit** — re-running the command is idempotent, so you never track skills individually. `--all` installs for every runtime the CLI knows and writes the bundle to **three** destinations instead of one; for that trade-off and the rest of the install options, see the [AI Skills Reference](/docs/ai/skills-reference#installing-skills).
36+
Name your own runtime after `--agent` (`codex`, `cursor`, …). The catalog is versioned and updated as **one unit**, with ObjectStack itself: bump `@objectstack/skills` with the other `@objectstack/*` packages, then re-run the sync. The package is published from `18.0.0-next.0` on (there is no 17.x release); for the versions, `--copy`, projects scaffolded by `create-objectstack` and the `next` channel, see the [AI Skills Reference](/docs/ai/skills-reference#installing-skills).
4037

4138
---
4239

‎content/docs/getting-started/build-with-claude-code.mdx‎

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,14 @@ The scaffolder does more than copy files. It:
5757
- derives a **namespace** from the name (`support-desk` → `support_desk`), so
5858
every object you create is named `support_desk_*`;
5959
- installs dependencies;
60-
- runs `npx skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y`
61-
to install the **AI skills bundle** for one agent runtime — once, into
62-
`.claude/skills/`, and it prints the same command for any other runtime you
63-
use;
60+
- installs the **AI skills bundle** for one agent runtime — once, into
61+
`.claude/skills/` — and prints the command for any other runtime you use.
62+
Through `18.0.0-next.0` that bundle comes from the repository's unreleased
63+
`main`, not from your version; to make the catalog's version your installed
64+
`@objectstack/spec`'s, replace it with the `@objectstack/skills` package and
65+
`npx skills experimental_sync --agent claude-code -y`
66+
([Installing skills](/docs/ai/skills-reference#installing-skills) has the
67+
steps, and the versions the package is published at);
6468
- writes an **`AGENTS.md`** (and `.github/copilot-instructions.md`) that teach your
6569
coding agent the project layout, the naming rules, and — critically — *to run
6670
`npm run validate` after every metadata change*.
@@ -421,11 +425,12 @@ Three habits keep this reliable as the app grows:
421425
- **The gate applies to every domain.** Flows, dashboards, permissions, and
422426
translations all go through the same `npm run validate` — the agent should run
423427
it after each change, exactly as `AGENTS.md` instructs.
424-
- **Keep the skills current.** After upgrading `@objectstack/spec`, re-run
425-
`npx skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y`
426-
— name your own runtime after `--agent` — so the agent authors against the
427-
schemas you actually run. The full catalog, and the multi-runtime `--all`
428-
trade-off, are documented in the
428+
- **Keep the skills current.** The catalog's version is your installed
429+
`@objectstack/spec`'s: when you upgrade, bump `@objectstack/skills` with the
430+
other `@objectstack/*` packages, then re-run
431+
`npx skills experimental_sync --agent claude-code -y` — name your own runtime
432+
after `--agent` — so the agent authors against the schemas you actually run.
433+
The install steps, and the versions the package is published at, are in the
429434
[AI Skills Reference](/docs/ai/skills-reference#installing-skills).
430435

431436
## 7. Your app is natively AI-operable (MCP)

‎content/docs/getting-started/your-first-project.mdx‎

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,15 @@ The scaffolder (`create-objectstack`) does four things:
4343
renamed to carry that prefix (`my_app_note`), which is what
4444
`os validate` later enforces.
4545
2. **Installs dependencies** (pnpm if available, otherwise npm).
46-
3. **Installs the AI skills bundle for one coding agent** — it runs
47-
`npx skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y`,
48-
so the bundle lands **once**, in `.claude/skills/`, and a coding agent is
49-
productive in the project from the first prompt. The closing summary prints
50-
the same command with a different agent name for any other runtime you use.
46+
3. **Installs the AI skills bundle for one coding agent** — once, into
47+
`.claude/skills/` — so a coding agent is productive in the project from the
48+
first prompt. The closing summary prints the command for any other runtime
49+
you use. Through `18.0.0-next.0` the bundle comes from the repository's
50+
unreleased `main`, not from your version; to make the catalog's version your
51+
installed `@objectstack/spec`'s, replace it with the `@objectstack/skills`
52+
package and `npx skills experimental_sync --agent claude-code -y`
53+
([Installing skills](/docs/ai/skills-reference#installing-skills) has the
54+
steps, and the versions the package is published at).
5155
4. **Writes `AGENTS.md`** (and `.github/copilot-instructions.md`) with the
5256
project conventions — including the rule to run `npm run validate` after
5357
every metadata change.
@@ -349,11 +353,12 @@ Each of those lands in a different metadata domain (UI, dashboards,
349353
automation) — the agent loads the matching skill per task. The full loop, and a
350354
per-domain prompt catalog, is on
351355
[Build with Claude Code](/docs/getting-started/build-with-claude-code#beyond-the-first-app--one-skill-per-metadata-domain).
352-
If you upgrade `@objectstack/spec` later, re-run
353-
`npx skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y`
354-
— the same command the scaffolder ran, so it refreshes the one directory it
355-
installed — to keep the agent in sync with the schemas you run. Name your own
356-
runtime after `--agent` if it is not Claude Code.
356+
The catalog's version is your installed `@objectstack/spec`'s once it comes
357+
from the `@objectstack/skills` package (step 1.3): when you upgrade, bump
358+
`@objectstack/skills` with the other `@objectstack/*` packages, then re-run
359+
`npx skills experimental_sync --agent claude-code -y` to keep the agent in sync
360+
with the schemas you run. Name your own runtime after `--agent` if it is not
361+
Claude Code.
357362

358363
## Next steps
359364

0 commit comments

Comments
 (0)