Skip to content

Commit 98ee767

Browse files
committed
docs(skills): the end state after create-objectstack installs @objectstack/skills — one pinned --copy spelling, one next.0 exception, and the 17.x to 18 skills step
The scaffolder now installs the catalog from @objectstack/skills at the project's @objectstack/spec version and copies it into .claude/skills/, so the three transitional "through 18.0.0-next.0" passages are rewritten to that end state, and the one scaffolder that still read main is named once, in the skills reference's "Which versions exist". Every sync on the site is now the scaffolder's own command, npx skills@1.7.2 experimental_sync --agent claude-code --copy -y. upgrading.mdx gains step 4 of "Moving the dependency pins" and the v18 line page gains the same 17.x to 18 skills step: remove the skills add-installed skills, add the catalog at the new spec version, copy it. Claude-Session: https://claude.ai/code/session_012zwsLMxQBwHUYJgPyrpEvx Co-authored-by: Claude <noreply@anthropic.com>
1 parent 99e944d commit 98ee767

6 files changed

Lines changed: 83 additions & 36 deletions

File tree

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

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,30 +14,28 @@ ObjectStack ships a set of **domain-specific skills** that teach AI assistants (
1414

1515
## Installing skills
1616

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:
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 copy it from `node_modules` into your coding agent's skills directory:
1818

1919
```bash
2020
# 1 · the catalog, at the version of your installed @objectstack/spec
2121
npm install --save-dev "@objectstack/skills@$(node -p "require('@objectstack/spec/package.json').version")"
2222

23-
# 2 · link it from node_modules into your agent's skills directory
24-
npx skills experimental_sync --agent claude-code -y
23+
# 2 · copy it from node_modules into your agent's skills directory
24+
npx skills@1.7.2 experimental_sync --agent claude-code --copy -y
2525
```
2626

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.
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/`, copies each one into your agent's directory — for `claude-code`, real files in `.claude/skills/<skill>` and nowhere else — and records the source and version in `skills-lock.json`. Commit both with the project. Keep `--copy`: without it the sync writes links into `node_modules`, which is not committed, so a clone of the project gets dangling links and no skills. The CLI is pinned because `experimental_sync` is that tool's own unstable interface; `create-objectstack` runs the same version. Name your own runtime after `--agent` (`codex`, `cursor`, …), one runtime per run — never `--agent '*'`, which copies the catalog into dozens of agent directories at once. 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.
2828

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).
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) and commit what it changed.
3030

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`).
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`), and moving it to 18 includes [a skills step](/docs/upgrading#moving-the-dependency-pins). One scaffolder is the exception to the next paragraph: `create-objectstack@18.0.0-next.0` still installed the skills from the repository's `main` with `skills add`, and step 2 skips every skill a `skills add` installed (it prints `Skipped … installed with skills add` and exits 0), so in a project it scaffolded run `npx skills remove --all` — or remove the `objectstack-*` skills by name, as the [upgrade step](/docs/upgrading#moving-the-dependency-pins) does, if you added others — and then steps 1 and 2.
3232

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.
33+
**New projects.** `create-objectstack` runs both steps while it scaffolds: the `package.json` it writes depends on `@objectstack/skills` at the same version as `@objectstack/spec`, its dependency install puts the catalog in `node_modules`, and step 2 copies it for one agent runtime, into `.claude/skills/`. Its closing summary prints step 2 again — to re-run after an upgrade, and with another `--agent` for any other runtime you use.
3434

3535
```bash
3636
npm create objectstack@latest my-app
3737
```
3838

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.
40-
4139
**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.
4240

4341
---

‎content/docs/ai/skills.mdx‎

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

2727
## Installing skills
2828

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:
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 copy it from `node_modules` into your agent's directory, the two steps `create-objectstack` runs when it scaffolds a project:
3030

3131
```bash
3232
npm install --save-dev "@objectstack/skills@$(node -p "require('@objectstack/spec/package.json').version")"
33-
npx skills experimental_sync --agent claude-code -y
33+
npx skills@1.7.2 experimental_sync --agent claude-code --copy -y
3434
```
3535

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).
36+
The skills land as real files in `.claude/skills/`; commit them with the project, and keep `--copy` — without it they are links into `node_modules`, which a clone does not have. 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 what the sync writes, the versions, the one scaffolder that is an exception and the `next` channel, see the [AI Skills Reference](/docs/ai/skills-reference#installing-skills).
3737

3838
---
3939

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,13 @@ 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-
- 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`
60+
- installs the **AI skills bundle** for one agent runtime from the
61+
`@objectstack/skills` package, at your `@objectstack/spec`'s version — copied
62+
once into `.claude/skills/`, to commit with the project — and prints the
63+
command for any other runtime you use
6664
([Installing skills](/docs/ai/skills-reference#installing-skills) has the
67-
steps, and the versions the package is published at);
65+
steps, the versions the package is published at, and the one scaffolder
66+
version that is an exception);
6867
- writes an **`AGENTS.md`** (and `.github/copilot-instructions.md`) that teach your
6968
coding agent the project layout, the naming rules, and — critically — *to run
7069
`npm run validate` after every metadata change*.
@@ -428,8 +427,9 @@ Three habits keep this reliable as the app grows:
428427
- **Keep the skills current.** The catalog's version is your installed
429428
`@objectstack/spec`'s: when you upgrade, bump `@objectstack/skills` with the
430429
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.
430+
`npx skills@1.7.2 experimental_sync --agent claude-code --copy -y` — name your
431+
own runtime after `--agent` — and commit what it changed, so the agent authors
432+
against the schemas you actually run.
433433
The install steps, and the versions the package is published at, are in the
434434
[AI Skills Reference](/docs/ai/skills-reference#installing-skills).
435435

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

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,14 @@ 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** — 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`
46+
3. **Installs the AI skills bundle for one coding agent** from the
47+
`@objectstack/skills` package, at your installed `@objectstack/spec`'s
48+
version — copied once into `.claude/skills/`, to commit with the project — so
49+
a coding agent is productive in the project from the first prompt. The
50+
closing summary prints the command for any other runtime you use
5351
([Installing skills](/docs/ai/skills-reference#installing-skills) has the
54-
steps, and the versions the package is published at).
52+
steps, the versions the package is published at, and the one scaffolder
53+
version that is an exception).
5554
4. **Writes `AGENTS.md`** (and `.github/copilot-instructions.md`) with the
5655
project conventions — including the rule to run `npm run validate` after
5756
every metadata change.
@@ -353,12 +352,12 @@ Each of those lands in a different metadata domain (UI, dashboards,
353352
automation) — the agent loads the matching skill per task. The full loop, and a
354353
per-domain prompt catalog, is on
355354
[Build with Claude Code](/docs/getting-started/build-with-claude-code#beyond-the-first-app--one-skill-per-metadata-domain).
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.
355+
The catalog's version is your installed `@objectstack/spec`'s (step 1.3): when
356+
you upgrade, bump `@objectstack/skills` with the other `@objectstack/*`
357+
packages, then re-run
358+
`npx skills@1.7.2 experimental_sync --agent claude-code --copy -y` and commit
359+
what it changed, to keep the agent in sync with the schemas you run. Name your
360+
own runtime after `--agent` if it is not Claude Code.
362361

363362
## Next steps
364363

‎content/docs/releases/v18/index.mdx‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,28 @@ under the same rules.
3737
v18 prerelease's handshake admits `engines.protocol: '^18'` and refuses
3838
`'^17'`. Read [Upgrading](/docs/upgrading) before you move an app's declared
3939
range.
40+
- **The AI skills move with the packages.** From v18 the skills catalog is the
41+
`@objectstack/skills` package, on the same version as every other
42+
`@objectstack/*` package, and it moves only with them. A 17.x project has no
43+
such dependency — its skills were installed with `skills add` from the
44+
repository's `main` — and the sync from the package skips every skill a
45+
`skills add` installed (`Skipped … installed with skills add`, exit 0), so
46+
bumping the packages alone keeps the 17.x-era skill text. After moving the
47+
`@objectstack/*` dependencies to 18, remove those skills, then add the
48+
catalog at the new `@objectstack/spec`'s version and copy it into your
49+
agent's directory ([Upgrading](/docs/upgrading#moving-the-dependency-pins),
50+
step 4):
51+
52+
```bash
53+
npx skills remove objectstack-ai objectstack-api objectstack-automation \
54+
objectstack-data objectstack-formula objectstack-i18n objectstack-platform \
55+
objectstack-pm-dispatch objectstack-query objectstack-ui objectstack-upgrade -y
56+
npm install --save-dev "@objectstack/skills@$(node -p "require('@objectstack/spec/package.json').version")"
57+
npx skills@1.7.2 experimental_sync --agent claude-code --copy -y
58+
```
59+
60+
`npx skills remove --all` replaces the first command when these are the only
61+
skills the project has.
4062
- **GA ends the prerelease.** Reaching GA exits pre mode and publishes the line
4163
to `latest`. Curated notes for the line's releases are compiled at release
4264
time and are not written yet; until then, the changesets are the record.

‎content/docs/upgrading.mdx‎

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ Not every deployment moves a tag. An app that consumes the platform as **npm
6868
dependencies** — `@objectstack/*` in its own `package.json`, which is the shape
6969
[`create-objectstack`](/docs/getting-started/quick-start) scaffolds — carries the
7070
platform version in its dependency tree and moves it there. There is no `os`
71-
command for this move; it is three steps you run yourself.
71+
command for this move; it is four steps you run yourself.
7272

7373
1. **Bump every `@objectstack/*` dependency together, to the same version.**
7474
The train is version-locked — every package on it shares one version number —
@@ -87,6 +87,34 @@ command for this move; it is three steps you run yourself.
8787
manifest. Both name the protocol **major**, so a move inside one major leaves
8888
both alone, and a major boundary is where they change. Move them deliberately
8989
when you cross one; never edit them to silence a mismatch.
90+
4. **Re-install the AI skills from the moved catalog, and commit them.** The
91+
skills your coding agent reads come from the `@objectstack/skills` dev
92+
dependency, which moves only with the other `@objectstack/*` packages — in
93+
step 1, never on its own — and step 2 only puts it in `node_modules`. Copy it
94+
into your agent's directory (name your own runtime after `--agent`):
95+
96+
```bash
97+
npx skills@1.7.2 experimental_sync --agent claude-code --copy -y
98+
```
99+
100+
**From 17.x to 18**, a project has no `@objectstack/skills` to move: its
101+
skills were installed with `skills add` from the repository's `main`, and the
102+
sync skips every skill a `skills add` installed (it prints
103+
`Skipped … installed with skills add` and exits 0), so a project that only
104+
bumps its packages keeps its 17.x-era skill text. Remove those skills first,
105+
then add the catalog at your new `@objectstack/spec`'s version and copy it:
106+
107+
```bash
108+
npx skills remove objectstack-ai objectstack-api objectstack-automation \
109+
objectstack-data objectstack-formula objectstack-i18n objectstack-platform \
110+
objectstack-pm-dispatch objectstack-query objectstack-ui objectstack-upgrade -y
111+
npm install --save-dev "@objectstack/skills@$(node -p "require('@objectstack/spec/package.json').version")"
112+
npx skills@1.7.2 experimental_sync --agent claude-code --copy -y
113+
```
114+
115+
The list names every skill the catalog carried during 17.x, and a name that
116+
is not installed is skipped; `npx skills remove --all` does the same when
117+
these are the only skills the project has.
90118

91119
Then run [the loop](#the-loop) below — `os validate` before `os build` — because
92120
moving the pins can move the gate.

0 commit comments

Comments
 (0)