diff --git a/.changeset/22668-skills-readme-install.md b/.changeset/22668-skills-readme-install.md new file mode 100644 index 00000000000..50130190805 --- /dev/null +++ b/.changeset/22668-skills-readme-install.md @@ -0,0 +1,13 @@ +--- +"@objectstack/skills": patch +--- + +docs(skills): both READMEs the package ships install the catalog from `@objectstack/skills` at the installed `@objectstack/spec`'s version, and name the GitHub path only as the `next` channel (#22668) + +Clause-②: no + +`README.md` (the npm page) and `dist/skills/README.md` (the catalog's front page, copied from the repository's `skills/README.md`) are the two READMEs this package ships. Both now give the same two-step install the docs give: `npm install --save-dev "@objectstack/skills@$(node -p "require('@objectstack/spec/package.json').version")"`, then `npx skills experimental_sync --agent claude-code -y` — the catalog's version is then the installed spec's. + +Before: the npm page taught a bare `npm install --save-dev @objectstack/skills`, which on a project depending on `@objectstack/spec` 17.x installs `18.0.0-next.0`, the next major's catalog (the registry's `latest`); its example named `@objectstack/skills@17.7.0`, a version that was never published; and it did not say that the sync skips every skill a `skills add` installed, which is every project `create-objectstack` scaffolded through `18.0.0-next.0`. The catalog's front page still taught `npx skills add objectstack-ai/objectstack/skills …` as the install command for existing projects. + +Both pages now state which versions exist (published from `18.0.0-next.0` on; no 17.x, so step 1 answers `ETARGET` there), the update story (bump `@objectstack/skills` with the other `@objectstack/*` packages, then re-run the sync), and the GitHub path once, as the `next` channel: the unreleased `main`, for trying the next version's skills, not for a released project. Nothing under `dist/skills/*/` changes. diff --git a/packages/skills/README.md b/packages/skills/README.md index 9c3611b1572..8c98f384b9d 100644 --- a/packages/skills/README.md +++ b/packages/skills/README.md @@ -11,34 +11,53 @@ that released this version. It is published from the Changesets `fixed` group, so its version is always the version of `@objectstack/spec`, `@objectstack/cli` and every other `@objectstack/*` package released with it. A project that depends on -`@objectstack/skills@17.7.0` reads the skills written for `@objectstack/spec` -17.7.0 — never the ones already teaching the next major, and never a catalog -that has moved on since the project was created. +`@objectstack/skills` at the version of its `@objectstack/spec` reads the skills +written for that spec — never the ones already teaching the next major, and +never a catalog that has moved on since the project was created. ## Installing the skills into an agent's directory The catalog is read from `node_modules`, so it follows the version the project -depends on. With this package in `devDependencies`, the -[skills CLI](https://www.npmjs.com/package/skills) syncs it into the detected +depends on. Install it at the version of the `@objectstack/spec` your project +has installed — the catalog's version is then your spec's — and let the +[skills CLI](https://www.npmjs.com/package/skills) sync it into your coding agent's own skills directory (`.claude/skills/` for Claude Code, and so on): ```sh -npm install --save-dev @objectstack/skills -npx skills experimental_sync +# 1 · the catalog, at the version of your installed @objectstack/spec +npm install --save-dev "@objectstack/skills@$(node -p "require('@objectstack/spec/package.json').version")" + +# 2 · link it from node_modules into your agent's skills directory +npx skills experimental_sync --agent claude-code -y ``` `experimental_sync` discovers the skills at `dist/skills//SKILL.md` of -every dependency and links or copies them for the agent runtimes it detects -(`--agent ` names one; `--copy` copies instead of linking). Re-running it -after `pnpm up @objectstack/skills` — which moves with the rest of the -`@objectstack/*` set — refreshes the installed catalog. +every dependency and links each one into the named agent's skills directory +(`--agent ` names the runtime — `codex`, `cursor`, …; `--copy` writes real +files instead of links). Keep the version in step 1: a bare +`npm install --save-dev @objectstack/skills` installs whichever version the +registry tags `latest`, not your spec's. + +**Updating.** The catalog moves only with your ObjectStack version: bump +`@objectstack/skills` with the other `@objectstack/*` packages, then re-run the +sync (step 2, same flags). + +**Which versions exist.** The package is published from `18.0.0-next.0` on; +there is no 17.x release of it, so on a project whose `@objectstack/spec` is +17.x step 1 refuses with `ETARGET` (`No matching version found`). + +**Projects scaffolded by `create-objectstack`.** Through `18.0.0-next.0` the +scaffolder installs the skills from the `next` channel below with `skills add`, +and step 2 skips every skill a `skills add` installed (it prints `Skipped … +installed with skills add`). Remove them first — `npx skills remove --all`, or +name the `objectstack-*` skills if you added others — then run steps 1 and 2. ## The `next` channel The repository's `skills/` tree on `main` is the catalog of the **next** release. `npx skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y` -reads it directly from GitHub — for trying the skills of the version that is -not published yet, not for a released project. +reads it straight from the repository's unreleased `main` — for trying the next +version's skills, not for a released project. ## How the tree is produced @@ -51,5 +70,5 @@ of truth, reviewed and gated there. ## Related -- [Skills reference](https://objectstack.ai/docs/ai/skills-reference) — every skill in the catalog, with what it covers. +- [Skills reference](https://objectstack.ai/docs/ai/skills-reference#installing-skills) — every skill in the catalog, with what it covers, and the install reference. - [`@objectstack/spec`](https://www.npmjs.com/package/@objectstack/spec) — the schemas the skills point at (`node_modules/@objectstack/spec/src/**/*.zod.ts`), shipped at the same version. diff --git a/skills/README.md b/skills/README.md index 23a3453dd17..fca5f43e0d0 100644 --- a/skills/README.md +++ b/skills/README.md @@ -2,23 +2,25 @@ Domain-scoped instructions for AI coding assistants (Claude Code, Copilot, Cursor) working in **any ObjectStack app** — this monorepo *and* third-party projects. -`npm create objectstack` installs them into new apps automatically; existing -projects add (or update) the bundle with: +They 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: ```bash -npx skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y +npm install --save-dev "@objectstack/skills@$(node -p "require('@objectstack/spec/package.json').version")" +npx skills experimental_sync --agent claude-code -y ``` -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`). Replacing -`--skill '*' --agent claude-code -y` with `--all` is the multi-runtime opt-in: -it installs for every runtime the CLI knows and writes the bundle to **three** -destinations instead of one — a full real copy in **both** `.agents/` and -`agent/`, plus `.claude/` symlinks pointing into `.agents/`. +Name your own runtime after `--agent` (`codex`, `cursor`, …). To update, 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); +`--copy`, projects scaffolded by `npm create objectstack` and the rest are in the +[Skills reference](https://objectstack.ai/docs/ai/skills-reference#installing-skills). -The `/skills` subpath matters: it is the published catalog boundary — pointing -the skills CLI at the repo root would also pick up repo-internal skills. +**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. Each **domain** skill is self-contained: a `SKILL.md` with YAML frontmatter, plus a `references/_index.md` that points into the authoritative Zod sources in