diff --git a/.changeset/agent-skills-token-based-length.md b/.changeset/agent-skills-token-based-length.md deleted file mode 100644 index 468f2f4..0000000 --- a/.changeset/agent-skills-token-based-length.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -'@gtbuchanan/eslint-plugin-agent-skills': major ---- - -Gate skill length on tokens rather than lines - -`configs.recommended` now caps both `SKILL.md` and -`**/skills/*/references/**/*.md` with `agent-skills/max-tokens` at 5000, -and applies `agent-skills/max-lines` to neither. The rule still ships, so -a repo wanting the spec's 500-line figure can wire it explicitly: - -```js -{ - files: ['**/skills/*/SKILL.md'], - rules: { 'agent-skills/max-lines': ['warn', { max: 500 }] }, -} -``` - -Both rules proxy for how much context a skill costs to load, and tokens -measure it directly. At the ~10-14 tokens per line typical of prose -skills, 500 lines works out to 5200-7000 tokens, so the token cap is the -one that fires. The line cap leads only below ~10 tokens per line, where -it reports formatting — semantic line breaks and dense lists raise a line -count without changing what the agent loads. - -The 300-line cap on `references/` had no upstream basis: the spec's third -tier is "Resources (as needed)" and `skill-creator` calls bundled -resources "unlimited, loaded as needed". The 5000 there is a backstop for -a reference file costing more to load than the instructions tier it was -split out of. diff --git a/.changeset/root-deploy-skills-task.md b/.changeset/root-deploy-skills-task.md deleted file mode 100644 index fec5ac7..0000000 --- a/.changeset/root-deploy-skills-task.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -'@gtbuchanan/cli': patch ---- - -Generate `deploy:skills` for skills at the workspace root - -A monorepo whose `skills/` sits at the root got no `deploy:skills` task -at all: the capability was read from the packages alone, so the root's -copy — which `capabilitiesFor` already detects — went unused. The task -disappeared the moment `packages:` globs were added to -`pnpm-workspace.yaml` and the root stopped being the lone package. - -`gtb sync` now emits a `//#deploy:skills` root task and the root -`deploy:skills` script backing it whenever a monorepo root carries its -own `skills/`, with `build` depending on it — the shape -`//#lint:eslint` already uses. `gtb verify` covers it for free, since a -generated task is one it can report as missing. - -Root skills are not a fallback for per-package ones: both are emitted -when both exist. They are the case a package can't serve — skills -consumed as `/skills//SKILL.md` are invisible inside a -package, and a private workspace package reaches no consumer at all. - -Because turbo dispatches `//#deploy:skills` through the root script of -that name, such a root no longer gets the `gtb turbo run deploy:skills` -alias — it would re-enter turbo and trip the -`recursive_turbo_invocations` guard. Reach every package's copy through -`pnpm build` or `gtb turbo run deploy:skills`. diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 7bbd3f2..75696c4 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,34 @@ # @gtbuchanan/cli +## 0.7.1 + +### Patch Changes + +- 23ae7e2: Generate `deploy:skills` for skills at the workspace root + + A monorepo whose `skills/` sits at the root got no `deploy:skills` task + at all: the capability was read from the packages alone, so the root's + copy — which `capabilitiesFor` already detects — went unused. The task + disappeared the moment `packages:` globs were added to + `pnpm-workspace.yaml` and the root stopped being the lone package. + + `gtb sync` now emits a `//#deploy:skills` root task and the root + `deploy:skills` script backing it whenever a monorepo root carries its + own `skills/`, with `build` depending on it — the shape + `//#lint:eslint` already uses. `gtb verify` covers it for free, since a + generated task is one it can report as missing. + + Root skills are not a fallback for per-package ones: both are emitted + when both exist. They are the case a package can't serve — skills + consumed as `/skills//SKILL.md` are invisible inside a + package, and a private workspace package reaches no consumer at all. + + Because turbo dispatches `//#deploy:skills` through the root script of + that name, such a root no longer gets the `gtb turbo run deploy:skills` + alias — it would re-enter turbo and trip the + `recursive_turbo_invocations` guard. Reach every package's copy through + `pnpm build` or `gtb turbo run deploy:skills`. + ## 0.7.0 ### Minor Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index e870836..775b895 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@gtbuchanan/cli", - "version": "0.7.0", + "version": "0.7.1", "description": "Shared build CLI", "type": "module", "imports": { diff --git a/packages/eslint-config/CHANGELOG.md b/packages/eslint-config/CHANGELOG.md index 1b4cda3..fa00574 100644 --- a/packages/eslint-config/CHANGELOG.md +++ b/packages/eslint-config/CHANGELOG.md @@ -1,5 +1,12 @@ # @gtbuchanan/eslint-config +## 0.5.2 + +### Patch Changes + +- Updated dependencies [79c96d0] + - @gtbuchanan/eslint-plugin-agent-skills@1.0.0 + ## 0.5.1 ### Patch Changes diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 938d328..6195583 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@gtbuchanan/eslint-config", - "version": "0.5.1", + "version": "0.5.2", "description": "Shared ESLint configuration", "type": "module", "imports": { diff --git a/packages/eslint-plugin-agent-skills/CHANGELOG.md b/packages/eslint-plugin-agent-skills/CHANGELOG.md index 69182d2..145bac6 100644 --- a/packages/eslint-plugin-agent-skills/CHANGELOG.md +++ b/packages/eslint-plugin-agent-skills/CHANGELOG.md @@ -1,5 +1,36 @@ # @gtbuchanan/eslint-plugin-agent-skills +## 1.0.0 + +### Major Changes + +- 79c96d0: Gate skill length on tokens rather than lines + + `configs.recommended` now caps both `SKILL.md` and + `**/skills/*/references/**/*.md` with `agent-skills/max-tokens` at 5000, + and applies `agent-skills/max-lines` to neither. The rule still ships, so + a repo wanting the spec's 500-line figure can wire it explicitly: + + ```js + { + files: ['**/skills/*/SKILL.md'], + rules: { 'agent-skills/max-lines': ['warn', { max: 500 }] }, + } + ``` + + Both rules proxy for how much context a skill costs to load, and tokens + measure it directly. At the ~10-14 tokens per line typical of prose + skills, 500 lines works out to 5200-7000 tokens, so the token cap is the + one that fires. The line cap leads only below ~10 tokens per line, where + it reports formatting — semantic line breaks and dense lists raise a line + count without changing what the agent loads. + + The 300-line cap on `references/` had no upstream basis: the spec's third + tier is "Resources (as needed)" and `skill-creator` calls bundled + resources "unlimited, loaded as needed". The 5000 there is a backstop for + a reference file costing more to load than the instructions tier it was + split out of. + ## 0.3.0 ### Minor Changes diff --git a/packages/eslint-plugin-agent-skills/package.json b/packages/eslint-plugin-agent-skills/package.json index 976e38b..08b968f 100644 --- a/packages/eslint-plugin-agent-skills/package.json +++ b/packages/eslint-plugin-agent-skills/package.json @@ -1,6 +1,6 @@ { "name": "@gtbuchanan/eslint-plugin-agent-skills", - "version": "0.3.0", + "version": "1.0.0", "description": "ESLint plugin and JSON Schema for Agent Skills", "type": "module", "imports": {