@ssheleg/make-skill 0.6.6 → 0.7.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/CHANGELOG.md CHANGED
@@ -1,5 +1,74 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.7.0 — 2026-07-30
4
+
5
+ Conformance to Anthropic's own plugin reference
6
+ (<https://code.claude.com/docs/en/plugins-reference>), checked with Anthropic's
7
+ own checker. The canon already matched the Agent Skills open standard; the
8
+ Claude Code layer on top of it — manifest schemas, component layout, path
9
+ variables, the CLI — was folk knowledge until now. Everything stays
10
+ multi-agent: the host layer is documented as host-specific and never
11
+ load-bearing for skills that also run on Cursor, Codex, or the skills CLI.
12
+
13
+ v0.6.5 wired the upstream gate into CI and fixed the two failures it caught;
14
+ this release is the rulebook behind it — so the next repo passes `--strict`
15
+ before anyone runs it, not after.
16
+
17
+ ### Added
18
+ - **`references/claude-code-plugin.md`** — the Anthropic layer: full
19
+ `plugin.json` and `marketplace.json` schemas, plugin sources, strict mode,
20
+ reserved marketplace names, component locations, skill front-matter host
21
+ extensions, plugin-agent restrictions, scoped MCP hook names,
22
+ `${CLAUDE_PLUGIN_ROOT}` / `${CLAUDE_PLUGIN_DATA}` / `${CLAUDE_SKILL_DIR}`,
23
+ cache and symlink behavior, skills-directory plugins, the whole
24
+ `claude plugin` CLI, and a conformance checklist. Dated against Claude Code
25
+ 2.1.212.
26
+ - `$schema` in both manifests (schemastore), so the next edit gets autocomplete
27
+ and inline validation.
28
+ - The upstream gate now also covers the **retrofit audit** and the **release
29
+ checklist**, and CI runs it as **its own job** so an upstream CLI outage
30
+ cannot mask a house-validator failure.
31
+ - Validator rules, each with a negative self-test: recognized-fields-only for
32
+ both manifests, `$schema` present, reserved marketplace names, `./`-relative
33
+ component paths that never escape the plugin root, source directory name ==
34
+ plugin name, and nothing but the manifest inside `.claude-plugin/`.
35
+ - Skill front-matter now accepts the **Claude Code extension keys**
36
+ (`when_to_use`, `argument-hint`, `arguments`, `disable-model-invocation`,
37
+ `user-invocable`, `disallowed-tools`, `model`, `effort`, `context`, `agent`,
38
+ `background`, `hooks`, `paths`, `shell`) alongside the spec set. Previously a
39
+ conformant Claude Code skill failed this repo's own audit.
40
+ - `templates/plugin.template.json` and `templates/marketplace.template.json` —
41
+ annotated, schema-linked skeletons for the two manifests.
42
+ - Personal workflow: a `~/.claude/skills/<name>/` folder with
43
+ `.claude-plugin/plugin.json` loads as `<name>@skills-dir` with hooks, agents,
44
+ and MCP servers — no marketplace, no install step (`claude plugin init`).
45
+ - Gotchas: unknown manifest fields load fine and mean nothing (only `--strict`
46
+ surfaces them); a pinned `version` you forget to bump freezes every user,
47
+ because the version is the update cache key.
48
+ - `displayName` in both manifests, and the v0.6.6 canon on `claude plugin
49
+ details`, folded in from the parallel release.
50
+
51
+ ### Removed
52
+ - **`plugins/make-skill/commands/make-skill.md`.** `claude plugin details`
53
+ reported `Skills (2) make-skill, make-skill`: a command and a skill of the
54
+ same name register `/make-skill` twice, the skill wins, and the command was
55
+ ~100 always-on tokens per session for something unreachable. Its workflow
56
+ detection now lives in the skill body, where it was always going to be read.
57
+ The validator rejects any `commands/<x>.md` that collides with `skills/<x>/`
58
+ and any unquoted `argument-hint`, with negative tests for both; the npx
59
+ installer and `install.sh` no longer write `~/.claude/commands/make-skill.md`
60
+ (an existing copy from an older install is harmless and can be deleted).
61
+
62
+ ### Changed
63
+ - **Progressive disclosure applied to the body itself.** The four installer
64
+ implementation traps (piped-stdin readline, raw-mode pickers, ANSI literals,
65
+ Python 3.9 annotation drift) and the 11-step **First publish** sequence moved
66
+ out of `SKILL.md` into `references/distribution.md`, each under a stated load
67
+ condition: they matter only while writing the CLI or actually publishing,
68
+ while the body's token budget is paid by every session. `SKILL.md` ends this
69
+ release under both caps — 347 lines, ~5k tokens — despite everything added
70
+ here and in v0.6.2–v0.6.5.
71
+
3
72
  ## v0.6.6 — 2026-07-30
4
73
 
5
74
  ### Added
package/README.md CHANGED
@@ -60,6 +60,16 @@ directory, `description` caps at 1024 characters, the body should stay under 500
60
60
  lines and 5000 tokens. Local conventions that merely *feel* right drift from those
61
61
  without anyone noticing; here they're checked.
62
62
 
63
+ **Plugins Anthropic's own tooling accepts.** The
64
+ [Claude Code plugin reference](https://code.claude.com/docs/en/plugins-reference)
65
+ is a second rulebook on top of the standard: which fields `plugin.json` and
66
+ `marketplace.json` actually recognize, where components must sit, which paths
67
+ survive installation. Unknown fields load silently and do nothing, so the repo is
68
+ checked with Anthropic's own gate — `claude plugin validate <path> --strict` on
69
+ both manifests, in CI as its own job. That check is what caught this repo's own
70
+ `marketplace.json` shipping `homepage` and `repository` at a level where Claude
71
+ Code ignores them.
72
+
63
73
  **A validator that can fail.** `test/validate.py` (Python stdlib only, no deps)
64
74
  checks spec rules, version sync across every manifest, front-matter on commands
65
75
  and Cursor rules, link integrity, and the traps below. CI runs it plus **negative
@@ -95,12 +105,15 @@ agent opens only when the situation calls for them:
95
105
  | Reference | Covers |
96
106
  |---|---|
97
107
  | `agent-skills-spec.md` | the open standard — field limits, optional front-matter, token budgets, the description trigger-eval loop |
108
+ | `claude-code-plugin.md` | the [Claude Code layer](https://code.claude.com/docs/en/plugins-reference) — `plugin.json` / `marketplace.json` schemas, plugin sources, component locations, host-only front-matter, path variables, cache and symlink rules, the `claude plugin` CLI |
98
109
  | `distribution.md` | every install channel, exact CLI flags, npm publishing traps |
99
110
  | `mcp.md` | [MCP](https://modelcontextprotocol.io) — skill vs server, primitives and methods, transports, consent and untrusted-output rules |
100
111
  | `a2a.md` | [A2A](https://a2a-protocol.org) — Agent Cards, task lifecycle, method mapping, v0.x→1.0 wire drift |
101
112
 
102
- Plus `templates/SKILL.template.md`, a spec-legal skeleton with the limits written
103
- into it.
113
+ Plus three skeletons in `templates/`: `SKILL.template.md` with the spec limits
114
+ written into it, and `plugin.template.json` / `marketplace.template.json`, which
115
+ carry only fields Claude Code recognizes so a seeded repo passes
116
+ `claude plugin validate --strict` on day one.
104
117
 
105
118
  ## Install
106
119
 
@@ -177,12 +190,11 @@ The skill itself is plain Markdown and needs nothing.
177
190
  .claude-plugin/marketplace.json
178
191
  plugins/make-skill/
179
192
  ├── .claude-plugin/plugin.json
180
- ├── commands/make-skill.md # the /make-skill entry point
181
- └── skills/make-skill/
193
+ └── skills/make-skill/ # the skill IS /make-skill — no command file
182
194
  ├── SKILL.md # the canon, < 500 lines by rule
183
195
  └── references/*.md # loaded on demand
184
196
  cursor/rules/make-skill.mdc # self-contained Cursor rule
185
- templates/SKILL.template.md # spec-legal skeleton
197
+ templates/ # SKILL.template.md + the two manifest skeletons
186
198
  bin/make-skill.js + package.json # zero-dep npx installer
187
199
  test/validate.py # structural validator
188
200
  .github/workflows/{validate,release}.yml
package/bin/make-skill.js CHANGED
@@ -2,8 +2,9 @@
2
2
  /*
3
3
  * make-skill installer CLI.
4
4
  *
5
- * Installs the make-skill skill into ~/.claude/skills/make-skill and the
6
- * /make-skill slash command into ~/.claude/commands/ (same layout as install.sh).
5
+ * Installs the make-skill skill into ~/.claude/skills/make-skill, which is what
6
+ * provides /make-skill (same layout as install.sh). No separate command file:
7
+ * a command sharing a skill's name registers the same slash command twice.
7
8
  * Idempotent: existing installs are skipped unless --force. Zero dependencies.
8
9
  *
9
10
  * For other agents (Cursor, Codex, 70+) use: npx skills add ssheleg/make-skill
@@ -29,7 +30,7 @@ function usage() {
29
30
  console.log(`make-skill installer v${version()}
30
31
 
31
32
  Usage:
32
- npx @ssheleg/make-skill [--force] install skill + /make-skill command into
33
+ npx @ssheleg/make-skill [--force] install the make-skill skill into
33
34
  ~/.claude (skip existing unless --force)
34
35
  npx @ssheleg/make-skill --version
35
36
  npx @ssheleg/make-skill --help
@@ -81,29 +82,19 @@ function main(argv) {
81
82
  }
82
83
 
83
84
  const skillSrc = path.join(ROOT, 'plugins/make-skill/skills/make-skill');
84
- const cmdSrc = path.join(ROOT, 'plugins/make-skill/commands/make-skill.md');
85
- for (const [p, what] of [[skillSrc, 'skill sources'], [cmdSrc, 'command source']]) {
86
- if (!fs.existsSync(p)) {
87
- console.error(`error: ${what} missing at ${p} — corrupted package?`);
88
- return 1;
89
- }
85
+ if (!fs.existsSync(skillSrc)) {
86
+ console.error(`error: skill sources missing at ${skillSrc} — corrupted package?`);
87
+ return 1;
90
88
  }
91
89
 
92
90
  const home = os.homedir();
93
91
  installOne(
94
- 'make-skill skill ',
92
+ 'make-skill skill',
95
93
  skillSrc,
96
94
  path.join(home, '.claude', 'skills', 'make-skill'),
97
95
  true,
98
96
  force
99
97
  );
100
- installOne(
101
- '/make-skill command',
102
- cmdSrc,
103
- path.join(home, '.claude', 'commands', 'make-skill.md'),
104
- false,
105
- force
106
- );
107
98
  return 0;
108
99
  }
109
100
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: "make-skill: create, retrofit, audit, or publish an agent skill / plugin the proven ssheleg way — the Agent Skills open standard (front-matter limits, progressive-disclosure budgets), marketplace repo layout, four-way version sync, validator + CI, multi-channel distribution (Claude Code plugin, skills CLI, npx, Cursor), npm gotchas, and the MCP / A2A rules for protocol-connected skills. Apply when creating a new skill, upgrading one to standard, checking one against the spec, or wrapping one into a plugin."
2
+ description: "make-skill: create, retrofit, audit, or publish an agent skill / plugin the proven ssheleg way — the Agent Skills open standard (front-matter limits, progressive-disclosure budgets), the Claude Code plugin reference (manifest schemas, component layout, claude plugin validate --strict), marketplace repo layout, four-way version sync, validator + CI, multi-channel distribution (Claude Code plugin, skills CLI, npx, Cursor), npm gotchas, and the MCP / A2A rules for protocol-connected skills. Apply when creating a new skill, upgrading one to standard, checking one against the spec, or wrapping one into a plugin."
3
3
  alwaysApply: false
4
4
  ---
5
5
 
@@ -15,9 +15,13 @@ every contract inline and uses **absolute URLs only — never a relative link**
15
15
 
16
16
  - `name`: 1–64 chars, `a-z0-9` + single internal hyphens, == directory name.
17
17
  - `description`: ≤1024 chars (that cap is on the field, not the whole front-matter).
18
- - Only these front-matter keys exist: `name`, `description`, `license`,
18
+ - Portable front-matter keys: `name`, `description`, `license`,
19
19
  `compatibility` (≤500), `metadata` (string→string map), `allowed-tools`
20
- (space-separated string, experimental).
20
+ (space-separated string, experimental). Claude Code additionally reads
21
+ `when_to_use`, `argument-hint`, `arguments`, `disable-model-invocation`,
22
+ `user-invocable`, `disallowed-tools`, `model`, `effort`, `context`, `agent`,
23
+ `background`, `hooks`, `paths`, `shell` — legal, ignored elsewhere, never
24
+ load-bearing. Anything outside both sets is a typo.
21
25
  - Body < 500 lines and < 5000 tokens. Overflow goes to `references/` (docs),
22
26
  `scripts/` (code), `assets/` (templates) INSIDE the skill dir, one level deep,
23
27
  each with a stated load trigger ("read X when Y"). Gotchas stay in SKILL.md.
@@ -39,8 +43,8 @@ every contract inline and uses **absolute URLs only — never a relative link**
39
43
  ```
40
44
  .claude-plugin/marketplace.json # plugins[0].source: ./plugins/<name>
41
45
  plugins/<name>/.claude-plugin/plugin.json
42
- plugins/<name>/commands/*.md
43
46
  plugins/<name>/skills/<skill>/SKILL.md (+ references/, scripts/, assets/)
47
+ plugins/<name>/commands/*.md # only under a name no skill uses
44
48
  cursor/rules/*.mdc # self-contained, NO relative links
45
49
  templates/*.md # skeletons — NEVER name one SKILL.md
46
50
  bin/<name>.js + package.json # zero-dep npx installer
@@ -51,6 +55,36 @@ CONTRIBUTING.md + SECURITY.md # required once the repo is public
51
55
  docs/superpowers/{specs,plans}/
52
56
  ```
53
57
 
58
+ ## Claude Code plugin conformance (Anthropic's own reference)
59
+
60
+ <https://code.claude.com/docs/en/plugins-reference> — the gate is Anthropic's
61
+ checker, not a house opinion:
62
+
63
+ - `claude plugin validate ./plugins/<name> --strict` **and**
64
+ `claude plugin validate . --strict` (marketplace) must both exit 0. Unknown
65
+ fields are warnings that `--strict` turns into errors; wrong types always fail.
66
+ It runs offline, so it belongs in CI.
67
+ - `$schema` in both manifests:
68
+ `https://json.schemastore.org/claude-code-plugin-manifest.json` and
69
+ `https://json.schemastore.org/claude-code-marketplace.json`.
70
+ - Marketplace level takes ONLY `name`, `owner`, `plugins`, `$schema`,
71
+ `description`, `version`, `metadata`, `allowCrossMarketplaceDependenciesOn`,
72
+ `renames`. `homepage`/`repository`/`license` are plugin-entry fields; the
73
+ project URL goes in `owner.url`. Plugin entry needs `name` + `source`.
74
+ - Only `plugin.json` lives in `.claude-plugin/`; `skills/`, `commands/`,
75
+ `agents/`, `hooks/`, `.mcp.json` sit at the plugin ROOT. Buried components
76
+ load as nothing and the plugin still appears to work.
77
+ - Every component path is relative and starts `./`; nothing outside the plugin
78
+ root survives install (the plugin is copied into a version cache).
79
+ `skills` ADDS to the default scan, `commands`/`agents`/`workflows`/
80
+ `outputStyles` REPLACE it.
81
+ - A pinned `version` is the update cache key — bump it or nobody ever receives
82
+ the change. Marketplace names like `agent-skills`/`anthropic-*` are reserved
83
+ and stop loading.
84
+ - Bundled scripts resolve through `${CLAUDE_PLUGIN_ROOT}`, state through
85
+ `${CLAUDE_PLUGIN_DATA}` — both Claude-Code-only, so keep relative paths as the
86
+ portable contract.
87
+
54
88
  ## Hard rules
55
89
 
56
90
  - **Version sync:** marketplace.json, plugin.json, package.json (if npm), and the
@@ -64,6 +98,9 @@ docs/superpowers/{specs,plans}/
64
98
  - **One channel per agent:** don't run a plugin AND a plain `~/.claude/skills` copy
65
99
  on the same install — the stale plain copy shadows the plugin.
66
100
  - **npm name first:** `npm view <name>` (E404 = free). **npm publish = human 2FA.**
101
+ - **Commands ARE skills now:** a `commands/<x>.md` beside `skills/<x>/` registers
102
+ `/<x>` twice — the skill wins, the command is unreachable always-on cost. Check
103
+ with `claude plugin details <name>@<marketplace>`; quote every `argument-hint`.
67
104
  - **Cursor .mdc:** embed contracts inline (files get copied into foreign projects).
68
105
  - **e2e npx from a NON-repo cwd** (inside the repo it resolves the local package →
69
106
  false "command not found").
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ssheleg/make-skill",
3
- "version": "0.6.6",
4
- "description": "Create, retrofit, audit, and ship agent skills & Claude Code plugins the proven ssheleg way — conformance to the Agent Skills open standard (front-matter limits, progressive-disclosure budgets), marketplace repo layout, version sync, validator + CI, multi-channel distribution (plugin, vercel skills CLI, npx, Cursor), npm gotchas, and MCP / A2A rules for protocol-connected skills. This package is the installer CLI.",
3
+ "version": "0.7.0",
4
+ "description": "Create, retrofit, audit, and ship agent skills & Claude Code plugins the proven ssheleg way — conformance to the Agent Skills open standard (front-matter limits, progressive-disclosure budgets) and the Claude Code plugin reference (manifest schemas, component layout, claude plugin validate --strict), marketplace repo layout, version sync, validator + CI, multi-channel distribution (plugin, vercel skills CLI, npx, Cursor), npm gotchas, and MCP / A2A rules for protocol-connected skills. This package is the installer CLI.",
5
5
  "keywords": [
6
6
  "skill",
7
7
  "plugin",
@@ -1,8 +1,9 @@
1
1
  {
2
+ "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
2
3
  "name": "make-skill",
3
4
  "displayName": "Make Skill",
4
- "description": "Create, retrofit, audit, and ship agent skills & Claude Code plugins the proven ssheleg way: conformance to the Agent Skills open standard, marketplace repo layout, version sync, validator + CI, multi-channel distribution (plugin, vercel skills CLI, npx, Cursor), npm gotchas, end-to-end first publish, plus MCP / A2A references for protocol-connected skills.",
5
- "version": "0.6.6",
5
+ "description": "Create, retrofit, audit, and ship agent skills & Claude Code plugins the proven ssheleg way: conformance to the Agent Skills open standard and the Claude Code plugin reference, marketplace repo layout, version sync, validator + CI, multi-channel distribution (plugin, vercel skills CLI, npx, Cursor), npm gotchas, end-to-end first publish, plus MCP / A2A references for protocol-connected skills.",
6
+ "version": "0.7.0",
6
7
  "author": {
7
8
  "name": "ssheleg"
8
9
  },