@ssheleg/make-skill 0.8.0 → 0.8.1

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,55 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.8.1 — 2026-08-03
4
+
5
+ A file-by-file re-read of everything 0.8.0 touched, and of everything it didn't.
6
+ Fourteen findings, all fixed. The two that would have misled a reader:
7
+
8
+ ### Fixed
9
+ - **The token estimate was asserted, not measured.** The validator's comment
10
+ claimed dense markdown runs "closer to 3.7 chars/token, so this under-reports";
11
+ nothing had ever been counted. Tokenizing the bundle gives **3.78–4.47**
12
+ chars/token (3.9 for `SKILL.md`), so the divisor is now 3.9, measured — and
13
+ the recalibration immediately failed the body it was checking, which is what a
14
+ calibrated rule is for. The audit checklist moved to a new
15
+ **`references/retrofit.md`**, bringing the body to ~4.6k tokens with headroom.
16
+ - **`claude plugin details` and a real tokenizer disagree by ~40%** — the CLI
17
+ reported ~7.2k on-invoke for a `SKILL.md` that tokenizes at ~5.0k, because its
18
+ estimator assumes ~2.8 chars/token. Measured across six installed skills and
19
+ recorded as a gotcha: budget against a tokenizer, expect the CLI to look
20
+ alarming, and never gut a body that is genuinely inside the budget.
21
+ - **`SECURITY.md` described paths the installers do not write.** It claimed
22
+ `bin/make-skill.js` and `install.sh` copy into `~/.claude/commands/`; that
23
+ command file was deleted in 0.6.x and CI asserts its absence on every run. The
24
+ threat model now matches the code, and states what `test/evals/fixtures/` is —
25
+ including that the malicious sample is inert data, never installed.
26
+ - **The trigger split could not measure what it claimed.** `train: q01-q12` /
27
+ `validation: q13-q20` put all ten positives in train and left validation with
28
+ nothing but negatives, so the held-out half could only detect false-firing.
29
+ Split is now explicit ids with both classes on both sides, and the validator
30
+ rejects a half that holds only one class.
31
+ - **`displayName` was required by the canon and absent from the skeletons.**
32
+ Both manifest templates now seed it, and the validator enforces it in the
33
+ templates, in `plugin.json`, and in the marketplace entry — where it belongs
34
+ (the marketplace root takes neither `displayName` nor `homepage`).
35
+ - **`/make-skill` is only half the truth.** As a plugin the command is
36
+ `/make-skill:make-skill`; the bare form is what a skills-directory install
37
+ gets. README and canon now state both, and the canon says to write both rather
38
+ than promise one.
39
+ - `distribution.md`'s table of contents listed a "shadow rule" section that did
40
+ not exist as a heading — the exact failure a table of contents prevents. It is
41
+ a real section now.
42
+ - Counts that had drifted: CONTRIBUTING said CI runs "four negative self-tests"
43
+ (six groups), the issue-template contact link said "the other four skills"
44
+ (five), the retrofit fixture header claimed eight planted defects (nine, now
45
+ scored one per line).
46
+ - Dead `EVAL_DIR` variable removed; `test/evals/` added to the Cursor rule's
47
+ layout tree and to the templates README, both of which still described a repo
48
+ without it; the PR template now asks for the two `--strict` runs and for an
49
+ eval re-run when the description changes.
50
+ - Three more negative self-tests (split classes, `displayName` ×2), keeping the
51
+ rule that no validator rule ships without one.
52
+
3
53
  ## v0.8.0 — 2026-08-03
4
54
 
5
55
  Read Anthropic's four Agent Skills pages end to end (overview, authoring best
@@ -63,9 +113,10 @@ six new validator rules, and one self-violation fixed.
63
113
  - **This skill was over its own token budget.** `SKILL.md` was ~5.2k estimated
64
114
  tokens against a stated `< 5000` — a rule the repo enforced on everyone but
65
115
  itself, because only the 500-line half was ever checked. The body budget is
66
- now measured (chars/4, frontmatter excluded as level-1 metadata) and the body
67
- was cut to ~4.6k by moving the repo layout, the two Claude Code gates, the
68
- validator spec and the release checklist into `references/distribution.md`.
116
+ now measured (frontmatter excluded as level-1 metadata) and the body was cut
117
+ by moving the repo layout, the two Claude Code gates, the validator spec and
118
+ the release checklist into `references/distribution.md`. (The divisor used
119
+ here was a guess; v0.8.1 measured it and cut further.)
69
120
  - **Reference files longer than 100 lines now open with a `## Contents` list.**
70
121
  Agents preview long files with `head`; without a table of contents they act on
71
122
  the first hundred lines and never learn the rest exists. All eight references
package/README.md CHANGED
@@ -31,11 +31,14 @@ make a skill that turns our incident runbooks into a triage workflow
31
31
  …or point it at something that already exists:
32
32
 
33
33
  ```
34
- /make-skill audit ./skills/my-skill against the spec
34
+ /make-skill:make-skill audit ./skills/my-skill against the spec
35
35
  ```
36
36
 
37
- Inside a skill repo, `/make-skill` with no argument detects the situation and runs
38
- the audit rather than asking you what you meant.
37
+ With no argument it detects the situation — a `SKILL.md` or `.claude-plugin/` in
38
+ the current directory means it runs the audit rather than asking you what you
39
+ meant. The command is `/make-skill:make-skill` when installed as a plugin and
40
+ `/make-skill` when it sits in a skills directory; both reach the same skill, and
41
+ asking in plain language works either way.
39
42
 
40
43
  ## What it does
41
44
 
@@ -122,6 +125,7 @@ agent opens only when the situation calls for them:
122
125
  | `authoring.md` | the craft — naming, third-person descriptions, degrees of freedom, workflows and feedback loops, script rules, evaluation-driven development |
123
126
  | `surfaces.md` | Claude Code vs the Claude API vs claude.ai — the Skills API (upload, versions, 8 per request), and the no-network / no-package-install limits that break scripts moved between surfaces |
124
127
  | `enterprise.md` | installing a skill you didn't write, and running a fleet — risk tiers, the review checklist, the five approval gates, lifecycle, recall limits, rollback |
128
+ | `retrofit.md` | the audit procedure — the 13-item checklist, what counts as evidence for a PASS, and the short form for a personal skill |
125
129
  | `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 |
126
130
  | `distribution.md` | the repo layout, every install channel, exact CLI flags, npm publishing traps, the release checklist |
127
131
  | `mcp.md` | [MCP](https://modelcontextprotocol.io) — skill vs server, primitives and methods, transports, consent and untrusted-output rules |
package/SECURITY.md CHANGED
@@ -16,12 +16,16 @@ unless you'd prefer otherwise.
16
16
  `make-skill` ships Markdown plus two small installers. Knowing exactly what runs
17
17
  where is most of the threat model:
18
18
 
19
- - **`bin/make-skill.js`** (run via `npx`) and **`install.sh`** copy files into
20
- `~/.claude/skills/make-skill` and `~/.claude/commands/`. They create and
21
- overwrite only those paths, never elsewhere in `$HOME`, and overwrite only with
22
- `--force`. Both are zero-dependency: no network calls, no postinstall script.
19
+ - **`bin/make-skill.js`** (run via `npx`) and **`install.sh`** copy the skill
20
+ directory into `~/.claude/skills/make-skill` and nothing else — no command file,
21
+ no other path in `$HOME` — and overwrite only with `--force`. Both are
22
+ zero-dependency: no network calls, no postinstall script. CI asserts the
23
+ absence of `~/.claude/commands/make-skill.md` on every run.
23
24
  - **`test/validate.py`** reads repository files and exits with a status. It writes
24
- nothing.
25
+ nothing. `test/evals/` is inert data — text a human feeds to an agent — and
26
+ `test/evals/fixtures/untrusted-skill.md` is a deliberately malicious *sample*
27
+ used to score a review; it is never installed or executed, and its endpoints
28
+ are `example.com` placeholders.
25
29
  - The Claude Code plugin and the `skills` CLI channels are handled by those tools,
26
30
  not by code in this repo.
27
31
 
@@ -77,6 +77,7 @@ cursor/rules/*.mdc # self-contained, NO relative links
77
77
  templates/*.md # skeletons — NEVER name one SKILL.md
78
78
  bin/<name>.js + package.json # zero-dep npx installer
79
79
  test/validate.py # stdlib-only consistency validator
80
+ test/evals/ # triggers.json + scenarios.json (data, run by a human)
80
81
  .github/workflows/validate.yml (+ release.yml, off by default)
81
82
  install.sh, README.md (English-first), CHANGELOG.md, LICENSE (MIT)
82
83
  CONTRIBUTING.md + SECURITY.md # required once the repo is public
@@ -132,6 +133,10 @@ checker, not a house opinion:
132
133
  - **Cursor .mdc:** embed contracts inline (files get copied into foreign projects).
133
134
  - **e2e npx from a NON-repo cwd** (inside the repo it resolves the local package →
134
135
  false "command not found").
136
+ - **Two token counters, ~40% apart:** `claude plugin details` assumes ~2.8
137
+ chars/token and shows a far bigger on-invoke cost than a real tokenizer
138
+ (3.8–4.5 chars/token). Budget the body against a tokenizer; expect the CLI to
139
+ look alarming for a file that is genuinely inside 5000 tokens.
135
140
  - **Installing a skill you did not write is installing software.** Read every
136
141
  file, run scripts sandboxed, grep for network calls and credentials, and check
137
142
  the instructions for "ignore previous rules", hidden actions, or data routed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ssheleg/make-skill",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
4
4
  "description": "Create, retrofit, audit, and ship agent skills & Claude Code plugins the proven ssheleg way — conformance to the Agent Skills open standard AND Anthropic's platform rules (front-matter limits, disclosure budgets, per-surface runtime limits, the Skills API, evals) plus 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, the review checklist for third-party skills, and MCP / A2A rules for protocol-connected skills. This package is the installer CLI.",
5
5
  "keywords": [
6
6
  "skill",
@@ -3,7 +3,7 @@
3
3
  "name": "make-skill",
4
4
  "displayName": "Make Skill",
5
5
  "description": "Create, retrofit, audit, and ship agent skills & Claude Code plugins the proven ssheleg way: conformance to the Agent Skills open standard, Anthropic's platform rules (surfaces, Skills API, evals) 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, the review checklist for third-party skills, plus MCP / A2A references for protocol-connected skills.",
6
- "version": "0.8.0",
6
+ "version": "0.8.1",
7
7
  "author": {
8
8
  "name": "ssheleg",
9
9
  "url": "https://x.com/sshlg93"
@@ -19,6 +19,7 @@ Copy from a working repo (usually `~/DATA/<name>`): **`ssheleg/super-ux`**
19
19
  | `references/authoring.md` | writing or tuning a body/description — naming, third-person rule, degrees of freedom, script rules, eval loops |
20
20
  | `references/surfaces.md` | shipping anywhere but Claude Code — Skills API upload/versions/8-per-request, claude.ai zip, the no-network / no-install limits |
21
21
  | `references/enterprise.md` | installing someone else's skill, or governing a fleet — risk tiers, review checklist, approval gates, lifecycle, recall limits |
22
+ | `references/retrofit.md` | auditing an existing skill/repo — the 13-item checklist, the evidence rules, the short form for personal skills |
22
23
  | `references/claude-code-plugin.md` | anything shipping as a **Claude Code plugin/marketplace** — manifest schemas, component layout, LSP/monitors, path variables, `validate` failures |
23
24
  | `references/distribution.md` | the repo layout, publishing, channels, releases |
24
25
  | `references/mcp.md` | the skill calls/wraps/documents an **MCP** server, or you're choosing skill vs server |
@@ -109,11 +110,14 @@ House additions on top of the spec:
109
110
  passes; a skill built without a baseline documents imagined problems. Adding a
110
111
  member to an existing family → test **coexistence**: a broad description
111
112
  steals the triggers of the skills already installed.
112
- - Ship a one-command entry point `/<name>`: idempotent — inspect state → repair
113
- missing pieces → status report → exactly ONE suggested next action. Detect
114
- mode, never ask. (Pattern: super-ux `/ux`.) **The skill IS that command** —
115
- a `commands/<name>.md` beside `skills/<name>/` registers `/<name>` twice; add
116
- a `commands/*.md` only under a DIFFERENT name, with a quoted `argument-hint`.
113
+ - Ship a one-command entry point: idempotent — inspect state → repair missing
114
+ pieces → status report → exactly ONE suggested next action. Detect mode, never
115
+ ask. (Pattern: super-ux `/ux`.) **The skill IS that command** — a
116
+ `commands/<name>.md` beside `skills/<name>/` registers the same command twice;
117
+ add a `commands/*.md` only under a DIFFERENT name, with a quoted
118
+ `argument-hint`. The invocation differs by channel: `/<skill>` from a skills
119
+ directory, `/<plugin>:<skill>` once it is installed as a plugin — write both
120
+ in the README rather than promising one.
117
121
  - Never overwrite user data: seed only when absent; overwrite only behind
118
122
  `--force`.
119
123
 
@@ -145,6 +149,8 @@ writing the first file.** What holds regardless:
145
149
  - **Both `--strict` runs green, in CI, as their own job** — and they read
146
150
  MANIFESTS only, so front-matter rules live in your own `test/validate.py`,
147
151
  which needs a negative self-test: a validator that can't fail is decoration.
152
+ Ship `$schema` and `displayName` in `plugin.json` AND in the marketplace
153
+ ENTRY (the marketplace root takes neither `displayName` nor `homepage`).
148
154
  - A public repo owes a reader an English-first README, `CONTRIBUTING.md` with
149
155
  the offline commands that verify a change, and `SECURITY.md` naming a private
150
156
  channel and what the installers touch.
@@ -163,46 +169,19 @@ next tag publishing without a human.
163
169
  ## Retrofit (bring an existing skill/repo up to standard)
164
170
 
165
171
  Audit first, fix second, in the same session. Verdict per item: PASS / GAP with
166
- evidence (`file:line` or command output) — never "looks fine".
167
-
168
- 1. **Spec floor** (`references/agent-skills-spec.md`): name charset + ≤64 +
169
- ==dir + no reserved word or angle bracket; description ≤1024, "Use when…",
170
- third person, EN and RU triggers; no front-matter key outside spec ∪ host
171
- extensions; body <500 lines / <5000 tokens; every bundled file one level
172
- deep, linked from the body with a load trigger, `## Contents` past 100 lines.
173
- 2. **Anthropic floor** if it ships as a plugin
174
- (`references/claude-code-plugin.md`): both `claude plugin validate <plugin
175
- dir|.> --strict` runs exit 0; `$schema` present; components at the plugin
176
- root, never inside `.claude-plugin/`; `claude plugin details <name>` token
177
- cost worth paying.
178
- 3. **Surface honesty** (`references/surfaces.md`): every runtime need (network,
179
- packages, MCP server) declared in `compatibility`; no script assuming an
180
- install the target surface forbids.
181
- 4. One-job check; shared contracts INSIDE the skill dir — verify by installing
182
- via the skills CLI and checking the files actually arrived.
183
- 5. Entry-point command exists, idempotent (inspect → repair → status → one next
184
- action).
185
- 6. Layout matches the tree; manifests complete; version sync ×4 (×5 with
186
- `metadata.version`).
187
- 7. Validator present, green, and able to fail (run the negative test); CI
188
- present, last run `success`.
189
- 8. **Evals exist** in `test/evals/` (`references/authoring.md`): ≥3 scenarios
190
- plus should-NOT-trigger queries, coexistence checked against the installed
191
- set, re-run on every model the skill claims.
192
- 9. README: badges (npm/CI/license), install + update matrix, English-first,
193
- bundled `references/` listed so a reader sees what ships.
194
- 10. Distribution live-checks (`references/distribution.md`): `npx --yes skills
195
- add <repo> --list` lists ONLY real skills; `npx <name>` works from a
196
- non-repo cwd (if npm published); `.mdc` rules valid, no relative links.
197
- 11. Repo meta: homepage + description + topics on the forge; LICENSE; CHANGELOG
198
- current; public repos also CONTRIBUTING.md + SECURITY.md.
199
- 12. Gotcha compliance: the list below, plus the installer traps in
200
- `references/distribution.md` if the repo ships a CLI or validator.
201
- 13. MCP or A2A involved: see Protocol-connected skills below.
172
+ evidence — a `file:line` or the output of the command you actually ran. "Looks
173
+ fine" is not a verdict, and neither is a PASS on a check that was reasoned about
174
+ instead of executed.
175
+
176
+ **The 13-item checklist is in `references/retrofit.md` — open it before
177
+ auditing.** It covers, in order: the spec floor, the Anthropic plugin floor,
178
+ surface honesty, one-job, entry point, layout and version sync, validator and
179
+ CI, evaluations, README, distribution live-checks, repo meta, gotcha compliance,
180
+ protocol dependencies. For a PERSONAL skill only three of them apply (spec
181
+ floor, one-job, entry point) — that file says which.
202
182
 
203
183
  **Then:** report the gap table, fix everything fixable now, bump a minor/patch
204
- version, run the release checklist. For a PERSONAL skill, retrofit = items 1, 4,
205
- 5 only.
184
+ version, run the release checklist.
206
185
 
207
186
  ## Promote (personal → distributable)
208
187
 
@@ -301,6 +280,12 @@ Non-negotiables for any such skill:
301
280
  - **Time-branching text rots.** "Before August, use the old API" is wrong the day
302
281
  it ships — superseded material goes under `## Old patterns`, and a dated
303
282
  provenance line ("*read from the spec on 2026-08-03*") ages well.
283
+ - **Two token counters, ~40% apart.** `claude plugin details` reported ~7.2k
284
+ on-invoke for a SKILL.md that a real tokenizer puts at ~5.0k (measured across
285
+ six installed skills: the CLI assumes ~2.8 chars/token, cl100k gives 3.8–4.5).
286
+ Its estimator is the pessimistic one — budget against a tokenizer, then expect
287
+ the CLI to show a bigger number, and never "fix" a body that is already
288
+ inside 5000 real tokens because the CLI looked alarming.
304
289
 
305
290
  ## Release (every version)
306
291
 
@@ -22,8 +22,8 @@ must also run on Cursor, Codex, or the skills CLI.
22
22
  ## Contents
23
23
 
24
24
  - The gate: `claude plugin validate`
25
- - `plugin.json` fields
26
- - `marketplace.json` fields, reserved names, plugin entries
25
+ - `plugin.json` — `.claude-plugin/plugin.json` (field table)
26
+ - `marketplace.json` — `.claude-plugin/marketplace.json` (fields, reserved names, plugin entries)
27
27
  - Component locations
28
28
  - Skill frontmatter — host extensions
29
29
  - Agents, hooks, MCP inside a plugin
@@ -19,6 +19,8 @@ API or claude.ai instead is `references/surfaces.md`.
19
19
  - Release checklist (every version)
20
20
  - Toggleable release automation
21
21
 
22
+ ## The shadow rule (one channel per agent)
23
+
22
24
  Hard rule across all channels: **one channel per agent.** Two installs of the same
23
25
  skill on one agent = two listings, and the stale copy shadows the fresh one.
24
26
 
@@ -0,0 +1,91 @@
1
+ # Retrofit — the audit procedure
2
+
3
+ **Load this when:** auditing an existing skill, plugin or repo against this
4
+ standard — including the no-argument `/make-skill` path, where a `SKILL.md`,
5
+ `.claude-plugin/` or `plugins/*/skills/*/` in the current directory means Retrofit.
6
+
7
+ ## Contents
8
+
9
+ - How to report (the only acceptable verdict format)
10
+ - The 13-item audit checklist
11
+ - Personal skills — the short form
12
+ - After the audit
13
+
14
+ ## How to report
15
+
16
+ Audit first, fix second, in the same session. One verdict per item:
17
+
18
+ | Verdict | Requires |
19
+ |---|---|
20
+ | **PASS** | the check was actually run — a command's output or a `file:line` |
21
+ | **GAP** | what is wrong, the evidence, and the fix that closes it |
22
+
23
+ "Looks fine" is not a verdict. Neither is a PASS on a check that was reasoned
24
+ about rather than executed: `python3 test/validate.py`, `claude plugin validate
25
+ … --strict`, `npx skills add <repo> --list` all produce output, and the output is
26
+ the evidence. Report the gap table before changing anything, then fix.
27
+
28
+ ## The 13-item audit checklist
29
+
30
+ 1. **Spec floor** (`references/agent-skills-spec.md`): `name` charset + ≤64 +
31
+ equal to the directory + no `anthropic`/`claude` + no angle brackets;
32
+ `description` ≤1024, starts "Use when…", third person, English AND Russian
33
+ triggers, says what it does and when; no front-matter key outside spec ∪ host
34
+ extensions; body <500 lines and <5000 tokens; every `references/`,
35
+ `scripts/`, `assets/` file one level deep, linked from the body with a stated
36
+ load trigger, and a `## Contents` list past 100 lines. A skill can pass every
37
+ house rule and still be invalid upstream.
38
+ 2. **Anthropic floor** if it ships as a plugin
39
+ (`references/claude-code-plugin.md`): `claude plugin validate <plugin dir>
40
+ --strict` and `claude plugin validate . --strict` both exit 0; `$schema` and
41
+ `displayName` in the manifest and in the marketplace entry; components at the
42
+ plugin root, never inside `.claude-plugin/`; `claude plugin details <name>`
43
+ token cost worth paying every session.
44
+ 3. **Surface honesty** (`references/surfaces.md`): every runtime need — network,
45
+ packages, MCP server — declared in `compatibility`; no script assuming an
46
+ install the target surface forbids. A `pip install` in a workflow step is a
47
+ Claude Code skill claiming to be portable.
48
+ 4. **One job.** Two concerns → two skills plus a shared contract, and the
49
+ contract lives INSIDE each skill directory. Verify by installing through the
50
+ skills CLI and listing what actually arrived, not by reading the repo.
51
+ 5. **Entry point** exists and is idempotent: inspect state → repair what is
52
+ missing → status report → exactly ONE suggested next action, detected rather
53
+ than asked. Check the invocation for the channel it ships on (`/<skill>` from
54
+ a skills dir, `/<plugin>:<skill>` as a plugin).
55
+ 6. **Layout and manifests**: matches the tree in `references/distribution.md`;
56
+ version sync ×4 (×5 when `SKILL.md` carries `metadata.version`).
57
+ 7. **Validator**: present, green, and able to fail — run the negative test. CI
58
+ present, last run `success`, with `claude plugin validate --strict` as its own
59
+ job so an upstream outage cannot mask a house failure.
60
+ 8. **Evaluations** exist in `test/evals/` (`references/authoring.md`): ≥3
61
+ behavioral scenarios, a trigger set whose negatives are near-misses, both
62
+ classes on both sides of the train/validation split, coexistence checked
63
+ against the skills already installed, and a re-run on every model the skill
64
+ claims support for.
65
+ 9. **README**: badges (npm/CI/license), install + update matrix, English-first
66
+ prose, and the bundled `references/` listed so a reader sees what ships.
67
+ 10. **Distribution live-checks** (`references/distribution.md`): `npx --yes
68
+ skills add <repo> --list` lists ONLY real skills; `npx <name>` works from a
69
+ non-repo cwd if it is published; `.mdc` rules valid and free of relative
70
+ links.
71
+ 11. **Repo meta**: homepage, description and topics set on the forge; LICENSE
72
+ present and declared in the front matter and the marketplace entry;
73
+ CHANGELOG current; public repos also carry CONTRIBUTING.md and SECURITY.md.
74
+ 12. **Gotcha compliance**: the list in `SKILL.md`, plus the installer traps in
75
+ `references/distribution.md` when the repo ships a CLI or a validator.
76
+ 13. **Protocol dependencies** if it touches MCP or A2A (`references/mcp.md`,
77
+ `references/a2a.md`): dependency and protocol version in `compatibility`,
78
+ discovery instead of hardcoded tool names, the untrusted-output rule stated,
79
+ interactive auth handled as a human step rather than a retry loop.
80
+
81
+ ## Personal skills — the short form
82
+
83
+ A skill in `~/.claude/skills/<name>/` has no repo, no manifests, no CI and no
84
+ distribution, so items 1, 4 and 5 are the whole audit. Do not invent a release
85
+ process for a file that loads next session.
86
+
87
+ ## After the audit
88
+
89
+ Report the gap table, fix everything fixable now, bump a minor or patch version,
90
+ and run the release checklist in `references/distribution.md`. A retrofit that
91
+ ends in a list of things someone should do later is a report, not a retrofit.
@@ -27,5 +27,8 @@ level deep, each with a stated load trigger in the body. A sibling directory
27
27
  reaches Claude Code plugins but arrives broken on every other agent.
28
28
 
29
29
  Distributable repos also get the full tree (manifests, `bin/`, `test/validate.py`,
30
- workflows, `install.sh`, README/CHANGELOG/LICENSE) — copy those from a reference
31
- impl (`ssheleg/task-pipeline` or `ssheleg/super-ux`) per the SKILL.md layout.
30
+ `test/evals/`, workflows, `install.sh`, README/CHANGELOG/LICENSE) — copy those
31
+ from a reference impl (`ssheleg/task-pipeline` or `ssheleg/super-ux`) per the
32
+ layout in `references/distribution.md`. The evaluation suite is not optional
33
+ scaffolding: the canon requires ≥3 behavioral scenarios and a trigger set with
34
+ near-miss negatives before a skill ships.
@@ -9,6 +9,7 @@
9
9
  "plugins": [
10
10
  {
11
11
  "name": "<plugin-name>",
12
+ "displayName": "<Plugin Name>",
12
13
  "source": "./plugins/<plugin-name>",
13
14
  "description": "<what the plugin gives an agent>",
14
15
  "version": "0.1.0",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "<plugin-name>",
4
+ "displayName": "<Plugin Name>",
4
5
  "description": "<what the plugin gives an agent, in one sentence>",
5
6
  "version": "0.1.0",
6
7
  "author": {