@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 +54 -3
- package/README.md +7 -3
- package/SECURITY.md +9 -5
- package/cursor/rules/make-skill.mdc +5 -0
- package/package.json +1 -1
- package/plugins/make-skill/.claude-plugin/plugin.json +1 -1
- package/plugins/make-skill/skills/make-skill/SKILL.md +28 -43
- package/plugins/make-skill/skills/make-skill/references/claude-code-plugin.md +2 -2
- package/plugins/make-skill/skills/make-skill/references/distribution.md +2 -0
- package/plugins/make-skill/skills/make-skill/references/retrofit.md +91 -0
- package/templates/README.md +5 -2
- package/templates/marketplace.template.json +1 -0
- package/templates/plugin.template.json +1 -0
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 (
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
38
|
-
the audit rather than asking you what you
|
|
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
|
|
20
|
-
`~/.claude/skills/make-skill` and
|
|
21
|
-
|
|
22
|
-
|
|
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.
|
|
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.
|
|
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
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
a `commands/*.md` only under a DIFFERENT name, with a quoted
|
|
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
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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.
|
|
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`
|
|
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.
|
package/templates/README.md
CHANGED
|
@@ -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
|
|
31
|
-
impl (`ssheleg/task-pipeline` or `ssheleg/super-ux`) per the
|
|
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.
|