@ssheleg/make-skill 0.7.1 → 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 +134 -0
- package/README.md +35 -13
- package/SECURITY.md +9 -5
- package/cursor/rules/make-skill.mdc +49 -7
- package/package.json +6 -3
- package/plugins/make-skill/.claude-plugin/plugin.json +4 -3
- package/plugins/make-skill/skills/make-skill/SKILL.md +170 -213
- package/plugins/make-skill/skills/make-skill/references/a2a.md +10 -0
- package/plugins/make-skill/skills/make-skill/references/agent-skills-spec.md +80 -70
- package/plugins/make-skill/skills/make-skill/references/authoring.md +244 -0
- package/plugins/make-skill/skills/make-skill/references/claude-code-plugin.md +15 -0
- package/plugins/make-skill/skills/make-skill/references/distribution.md +120 -1
- package/plugins/make-skill/skills/make-skill/references/enterprise.md +141 -0
- package/plugins/make-skill/skills/make-skill/references/mcp.md +17 -4
- package/plugins/make-skill/skills/make-skill/references/retrofit.md +91 -0
- package/plugins/make-skill/skills/make-skill/references/surfaces.md +139 -0
- package/templates/README.md +7 -4
- package/templates/SKILL.template.md +23 -10
- package/templates/marketplace.template.json +1 -0
- package/templates/plugin.template.json +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,139 @@
|
|
|
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
|
+
|
|
53
|
+
## v0.8.0 — 2026-08-03
|
|
54
|
+
|
|
55
|
+
Read Anthropic's four Agent Skills pages end to end (overview, authoring best
|
|
56
|
+
practices, enterprise, the API skills guide) and audited the canon against them.
|
|
57
|
+
The canon had been written against the open standard and the Claude Code plugin
|
|
58
|
+
reference only — so it was correct about the format and blind to everything
|
|
59
|
+
Anthropic's own surfaces enforce, recommend, or forbid. Three new references,
|
|
60
|
+
six new validator rules, and one self-violation fixed.
|
|
61
|
+
|
|
62
|
+
### Added
|
|
63
|
+
- **`references/surfaces.md`** — the surface a skill runs on is a portability
|
|
64
|
+
contract, and it was undocumented here. Claude Code has full network and local
|
|
65
|
+
installs; the **Claude API container has neither**; claude.ai varies. A skill
|
|
66
|
+
whose script `pip install`s or curls works on one surface and silently fails
|
|
67
|
+
on the next. Also the whole Skills API — beta headers, `container.skills[]`,
|
|
68
|
+
**max 8 skills per request**, upload rules (top-level dir must match `name`,
|
|
69
|
+
`display_title` uniqueness, **< 30 MB**), epoch-timestamp versions,
|
|
70
|
+
delete-all-versions-before-delete — the claude.ai zip channel (per user, no
|
|
71
|
+
admin push), and the fact that **nothing syncs between surfaces**.
|
|
72
|
+
- **`references/enterprise.md`** — installing a skill you did not write is
|
|
73
|
+
installing software, and the canon said so without saying how to check.
|
|
74
|
+
Anthropic's risk-tier table, the 8-step review checklist, the five approval
|
|
75
|
+
gates (triggering accuracy, isolation, **coexistence**, instruction following,
|
|
76
|
+
output quality), lifecycle with separation of duties, registry fields, recall
|
|
77
|
+
limits, and the production versioning/rollback/integrity rules.
|
|
78
|
+
- **`references/authoring.md`** — the craft that the spec reference had only
|
|
79
|
+
hinted at: naming conventions (gerund; never `helper`/`utils`/`tools`),
|
|
80
|
+
**degrees of freedom** matched to task fragility, workflow checklists and
|
|
81
|
+
feedback loops, the script rules (solve-don't-defer, no voodoo constants,
|
|
82
|
+
execute-vs-read intent, declare packages), content guidelines, and
|
|
83
|
+
**evaluation-driven development** — evals before prose, ≥3 scenarios, a
|
|
84
|
+
no-skill baseline, the Claude-A/Claude-B loop, testing on every target model.
|
|
85
|
+
The trigger-eval loop moved here from the spec reference.
|
|
86
|
+
- Six validator rules with negative self-tests that assert the *reason* for the
|
|
87
|
+
failure, not just a non-zero exit: reserved words in `name`, XML tags in
|
|
88
|
+
`name`/`description`, first/second person in `description`, the body token
|
|
89
|
+
budget, a `## Contents` list on references past 100 lines, and angle-bracket
|
|
90
|
+
placeholders in the SKILL template.
|
|
91
|
+
- **`test/evals/`** — make-skill's own evaluation suite, because the canon now
|
|
92
|
+
requires one from every skill and shipping the rule without obeying it is how
|
|
93
|
+
a standard becomes decoration. `triggers.json`: 20 queries, 10 that must fire
|
|
94
|
+
(EN + RU) and 10 near-misses that share the keywords — "add a skills section
|
|
95
|
+
to my CV", "publish this React library to npm", "implement an MCP server for
|
|
96
|
+
Postgres". `scenarios.json`: four behavioral evaluations in Anthropic's shape
|
|
97
|
+
(create, retrofit-with-evidence, surface portability, third-party review),
|
|
98
|
+
scored line by line, with fixtures under `test/evals/fixtures/` — deliberately
|
|
99
|
+
broken and deliberately not named `SKILL.md`. The validator proves they exist
|
|
100
|
+
and are well-formed and cannot run them: that part is a human with an agent
|
|
101
|
+
(`test/evals/README.md`).
|
|
102
|
+
|
|
103
|
+
### Fixed
|
|
104
|
+
- **`name` may not contain `anthropic` or `claude`, and neither field may
|
|
105
|
+
contain XML tags.** The open standard is silent on both; Anthropic's platform
|
|
106
|
+
enforces them at upload. So `claude-helper` loads happily in Claude Code and
|
|
107
|
+
is rejected the day someone ships it to the API — a failure that only ever
|
|
108
|
+
appears on someone else's machine. Canon, spec reference, Cursor rule, README
|
|
109
|
+
and validator now carry the rule.
|
|
110
|
+
- **Descriptions must be third person.** They are injected into the system
|
|
111
|
+
prompt, where "I can help you…" / "You can use this to…" measurably degrades
|
|
112
|
+
selection. Stated in the canon and checked by the validator.
|
|
113
|
+
- **This skill was over its own token budget.** `SKILL.md` was ~5.2k estimated
|
|
114
|
+
tokens against a stated `< 5000` — a rule the repo enforced on everyone but
|
|
115
|
+
itself, because only the 500-line half was ever checked. The body budget is
|
|
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.)
|
|
120
|
+
- **Reference files longer than 100 lines now open with a `## Contents` list.**
|
|
121
|
+
Agents preview long files with `head`; without a table of contents they act on
|
|
122
|
+
the first hundred lines and never learn the rest exists. All eight references
|
|
123
|
+
gained one — five were in violation.
|
|
124
|
+
- **The SKILL template seeded an invalid skill.** Its `name: <skill-name>` and
|
|
125
|
+
`<angle-bracket>` description placeholders are XML tags in exactly the two
|
|
126
|
+
fields where Anthropic rejects them. Replaced with plain placeholders, and the
|
|
127
|
+
validator now checks the skeleton it ships.
|
|
128
|
+
- **MCP tool names: two conventions, both real.** Anthropic's authoring guidance
|
|
129
|
+
writes `ServerName:tool_name`; Claude Code's runtime names are
|
|
130
|
+
`mcp__<server>__<tool>`. The canon documented only the second, which reads as
|
|
131
|
+
wrong against the docs — both are recorded now, with "list and match" still
|
|
132
|
+
the rule.
|
|
133
|
+
- Retrofit audit gained surface honesty (item 3) and evaluations (item 8);
|
|
134
|
+
authoring rules gained naming style, prescriptiveness-to-fragility, and the
|
|
135
|
+
no-time-branching rule with the "Old patterns" escape hatch.
|
|
136
|
+
|
|
3
137
|
## v0.7.1 — 2026-07-31
|
|
4
138
|
|
|
5
139
|
Re-read the plugin reference against what the canon actually says, and against
|
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
|
|
|
@@ -53,11 +56,15 @@ resolvable install — not "should work now".
|
|
|
53
56
|
|
|
54
57
|
## What you get
|
|
55
58
|
|
|
56
|
-
**Conformance to
|
|
59
|
+
**Conformance to both rulebooks, not just a house style.** The
|
|
57
60
|
[Agent Skills specification](https://agentskills.io/specification) sets hard
|
|
58
61
|
limits — `name` is 1–64 chars of `a-z0-9` and single hyphens and must match its
|
|
59
62
|
directory, `description` caps at 1024 characters, the body should stay under 500
|
|
60
|
-
lines and 5000 tokens.
|
|
63
|
+
lines and 5000 tokens. [Anthropic's platform docs](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview)
|
|
64
|
+
add rules the open standard is silent about and only the Skills API enforces —
|
|
65
|
+
no XML tags in `name`/`description`, and no `anthropic`/`claude` anywhere in the
|
|
66
|
+
name, so `claude-helper` loads fine in Claude Code and is rejected the day
|
|
67
|
+
someone uploads it. Local conventions that merely *feel* right drift from both
|
|
61
68
|
without anyone noticing; here they're checked.
|
|
62
69
|
|
|
63
70
|
**Plugins Anthropic's own tooling accepts.** The
|
|
@@ -70,16 +77,26 @@ both manifests, in CI as its own job. That check is what caught this repo's own
|
|
|
70
77
|
`marketplace.json` shipping `homepage` and `repository` at a level where Claude
|
|
71
78
|
Code ignores them.
|
|
72
79
|
|
|
80
|
+
**Evaluations, not vibes.** The canon requires every skill to carry at least
|
|
81
|
+
three behavioral scenarios and a trigger set whose negatives are *near-misses* —
|
|
82
|
+
queries that share the keywords and need something else. make-skill ships its
|
|
83
|
+
own in [`test/evals/`](test/evals/), because a description that also fires on
|
|
84
|
+
"review my pull request" steals turns from every other skill you have installed.
|
|
85
|
+
|
|
73
86
|
**A validator that can fail.** `test/validate.py` (Python stdlib only, no deps)
|
|
74
|
-
checks
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
87
|
+
checks both rulebooks' front-matter rules, the 500-line **and** 5000-token body
|
|
88
|
+
budgets, a `## Contents` list on every reference past 100 lines, version sync
|
|
89
|
+
across every manifest, front-matter on commands and Cursor rules, link
|
|
90
|
+
integrity, and the traps below. CI runs it plus **negative self-tests** —
|
|
91
|
+
deliberately broken copies that must make it exit non-zero, each asserted to
|
|
92
|
+
fail for the right reason. A validator nobody has seen fail is decoration.
|
|
78
93
|
|
|
79
94
|
**Every distribution channel, with the flags that actually work.** Claude Code
|
|
80
95
|
plugin, the [vercel `skills` CLI](https://github.com/vercel-labs/skills) (70+
|
|
81
96
|
agents), `npx`, Cursor rules, and umbrella-repo families — including the
|
|
82
|
-
one-channel-per-agent rule that stops them from shadowing each other
|
|
97
|
+
one-channel-per-agent rule that stops them from shadowing each other — plus
|
|
98
|
+
Anthropic's own surfaces (Skills API upload, claude.ai zip), which sync with
|
|
99
|
+
none of the above and impose their own limits on what a skill may do at runtime.
|
|
83
100
|
|
|
84
101
|
**The gotchas that each cost a debugging round**, so your first publish works
|
|
85
102
|
instead of your fourth:
|
|
@@ -104,9 +121,13 @@ agent opens only when the situation calls for them:
|
|
|
104
121
|
|
|
105
122
|
| Reference | Covers |
|
|
106
123
|
|---|---|
|
|
107
|
-
| `agent-skills-spec.md` | the
|
|
124
|
+
| `agent-skills-spec.md` | the hard rules from both authorities — field limits, where the open standard and Anthropic's platform differ, budgets, which checker says no |
|
|
125
|
+
| `authoring.md` | the craft — naming, third-person descriptions, degrees of freedom, workflows and feedback loops, script rules, evaluation-driven development |
|
|
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 |
|
|
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 |
|
|
108
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 |
|
|
109
|
-
| `distribution.md` | every install channel, exact CLI flags, npm publishing traps |
|
|
130
|
+
| `distribution.md` | the repo layout, every install channel, exact CLI flags, npm publishing traps, the release checklist |
|
|
110
131
|
| `mcp.md` | [MCP](https://modelcontextprotocol.io) — skill vs server, primitives and methods, transports, consent and untrusted-output rules |
|
|
111
132
|
| `a2a.md` | [A2A](https://a2a-protocol.org) — Agent Cards, task lifecycle, method mapping, v0.x→1.0 wire drift |
|
|
112
133
|
|
|
@@ -197,6 +218,7 @@ cursor/rules/make-skill.mdc # self-contained Cursor rule
|
|
|
197
218
|
templates/ # SKILL.template.md + the two manifest skeletons
|
|
198
219
|
bin/make-skill.js + package.json # zero-dep npx installer
|
|
199
220
|
test/validate.py # structural validator
|
|
221
|
+
test/evals/ # trigger set + behavioral scenarios (data)
|
|
200
222
|
.github/workflows/{validate,release}.yml
|
|
201
223
|
install.sh README.md CHANGELOG.md CONTRIBUTING.md SECURITY.md LICENSE
|
|
202
224
|
docs/superpowers/{specs,plans}/ # historical design records
|
|
@@ -212,7 +234,7 @@ install). Security reports: [SECURITY.md](SECURITY.md).
|
|
|
212
234
|
|
|
213
235
|
Built by ssheleg — [sshlg.me](https://sshlg.me)
|
|
214
236
|
|
|
215
|
-
- X / Twitter — [@
|
|
237
|
+
- X / Twitter — [@sshlg93](https://x.com/sshlg93)
|
|
216
238
|
- Telegram — [@sshlg](https://t.me/sshlg)
|
|
217
239
|
|
|
218
240
|
Part of the [ssheleg skill family](https://github.com/ssheleg/sshlg-skills):
|
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
|
|
|
@@ -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,
|
|
2
|
+
description: "make-skill: create, retrofit, audit, or publish an agent skill / plugin the proven ssheleg way — the Agent Skills open standard AND Anthropic's platform rules (front-matter limits, disclosure budgets, per-surface runtime limits, evals), 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, Skills API), npm gotchas, the review checklist for installing someone else's skill, 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
|
|
|
@@ -9,12 +9,20 @@ Self-contained rule: Cursor copies this file into foreign projects, so it carrie
|
|
|
9
9
|
every contract inline and uses **absolute URLs only — never a relative link**
|
|
10
10
|
(a relative link dangles the moment the file is copied).
|
|
11
11
|
|
|
12
|
-
## Spec floor —
|
|
12
|
+
## Spec floor — two authorities, both non-negotiable
|
|
13
13
|
|
|
14
|
-
<https://agentskills.io/specification>
|
|
14
|
+
<https://agentskills.io/specification> (the portable format) and
|
|
15
|
+
<https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview>
|
|
16
|
+
(what Anthropic's own surfaces enforce). Write to the intersection; the house
|
|
17
|
+
canon below only ADDS to it.
|
|
15
18
|
|
|
16
|
-
- `name`: 1–64 chars, `a-z0-9` + single internal hyphens, == directory name
|
|
17
|
-
|
|
19
|
+
- `name`: 1–64 chars, `a-z0-9` + single internal hyphens, == directory name,
|
|
20
|
+
**no angle brackets and never containing `anthropic`/`claude`** — reserved
|
|
21
|
+
substrings Claude Code loads happily and the Skills API rejects on upload.
|
|
22
|
+
- `description`: ≤1024 chars (the cap is on the field, not the whole
|
|
23
|
+
front-matter), no angle brackets, **third person** (it goes into the system
|
|
24
|
+
prompt; "I can help you…" degrades selection), stating WHAT it does and WHEN
|
|
25
|
+
to use it.
|
|
18
26
|
- Portable front-matter keys: `name`, `description`, `license`,
|
|
19
27
|
`compatibility` (≤500), `metadata` (string→string map), `allowed-tools`
|
|
20
28
|
(space-separated string — Claude Code also takes a comma-list or YAML list, but
|
|
@@ -25,7 +33,14 @@ every contract inline and uses **absolute URLs only — never a relative link**
|
|
|
25
33
|
load-bearing. Anything outside both sets is a typo.
|
|
26
34
|
- Body < 500 lines and < 5000 tokens. Overflow goes to `references/` (docs),
|
|
27
35
|
`scripts/` (code), `assets/` (templates) INSIDE the skill dir, one level deep,
|
|
28
|
-
each with a stated load trigger ("read X when Y")
|
|
36
|
+
each linked from the body with a stated load trigger ("read X when Y"), and
|
|
37
|
+
any reference over 100 lines opens with a `## Contents` list (a partial `head`
|
|
38
|
+
read is what the agent often gets). Gotchas stay in SKILL.md.
|
|
39
|
+
- **Surfaces differ and nothing syncs between them:** the Claude API container
|
|
40
|
+
has NO network and NO runtime package install, claude.ai varies, only Claude
|
|
41
|
+
Code has both. A script that `pip install`s or curls is a Claude Code skill —
|
|
42
|
+
declare it in `compatibility` or drop the dependency. Skills API also caps a
|
|
43
|
+
request at 8 skills and an upload at 30 MB.
|
|
29
44
|
- Upstream checker: `skills-ref validate <skill dir>` (Python, from the
|
|
30
45
|
`agentskills/agentskills` repo).
|
|
31
46
|
|
|
@@ -33,8 +48,20 @@ every contract inline and uses **absolute URLs only — never a relative link**
|
|
|
33
48
|
|
|
34
49
|
- `description` starts "Use when …" with concrete trigger phrases in English AND
|
|
35
50
|
Russian. A skill nobody triggers is dead weight.
|
|
51
|
+
- One naming pattern, preferably gerund (`processing-pdfs`); never `helper`,
|
|
52
|
+
`utils`, `tools`, `data`.
|
|
36
53
|
- One skill = one job. Multiple concerns → multiple skills + a shared contract file.
|
|
37
|
-
- Body: imperative, procedural, checklists over prose. State non-negotiables as
|
|
54
|
+
- Body: imperative, procedural, checklists over prose. State non-negotiables as
|
|
55
|
+
such. Match prescriptiveness to fragility — exact commands for destructive or
|
|
56
|
+
order-dependent work, direction only where context decides.
|
|
57
|
+
- **Evals before prose:** run the task with NO skill, record the failures, write
|
|
58
|
+
≥3 evaluations (including should-NOT-trigger cases), then write the minimum
|
|
59
|
+
that passes; re-run on every model you claim. Adding to an existing set → test
|
|
60
|
+
coexistence, a broad description steals other skills' triggers.
|
|
61
|
+
- Scripts: handle their own errors, justify every constant, declare packages,
|
|
62
|
+
and say whether the agent should RUN or READ each one.
|
|
63
|
+
- No time-branching text ("before August, use the old API") — superseded
|
|
64
|
+
material goes under `## Old patterns`; forward slashes in every path.
|
|
38
65
|
- Commands are thin wrappers: front-matter `description` (+ `argument-hint`), body =
|
|
39
66
|
"invoke skill X in mode Y", pass `$ARGUMENTS`.
|
|
40
67
|
- Never overwrite user data: seed only when absent; overwrite only behind `--force`.
|
|
@@ -50,6 +77,7 @@ cursor/rules/*.mdc # self-contained, NO relative links
|
|
|
50
77
|
templates/*.md # skeletons — NEVER name one SKILL.md
|
|
51
78
|
bin/<name>.js + package.json # zero-dep npx installer
|
|
52
79
|
test/validate.py # stdlib-only consistency validator
|
|
80
|
+
test/evals/ # triggers.json + scenarios.json (data, run by a human)
|
|
53
81
|
.github/workflows/validate.yml (+ release.yml, off by default)
|
|
54
82
|
install.sh, README.md (English-first), CHANGELOG.md, LICENSE (MIT)
|
|
55
83
|
CONTRIBUTING.md + SECURITY.md # required once the repo is public
|
|
@@ -105,6 +133,15 @@ checker, not a house opinion:
|
|
|
105
133
|
- **Cursor .mdc:** embed contracts inline (files get copied into foreign projects).
|
|
106
134
|
- **e2e npx from a NON-repo cwd** (inside the repo it resolves the local package →
|
|
107
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.
|
|
140
|
+
- **Installing a skill you did not write is installing software.** Read every
|
|
141
|
+
file, run scripts sandboxed, grep for network calls and credentials, and check
|
|
142
|
+
the instructions for "ignore previous rules", hidden actions, or data routed
|
|
143
|
+
outward. A skill that fetches its instructions from a URL can change after the
|
|
144
|
+
review that approved it.
|
|
108
145
|
|
|
109
146
|
## Protocol-connected skills (MCP / A2A)
|
|
110
147
|
|
|
@@ -132,3 +169,8 @@ Claude Code plugin (`claude plugin marketplace add` → `install <name>@<name>`)
|
|
|
132
169
|
vercel skills CLI (`npx skills add <owner>/<repo>`, discovers via marketplace.json),
|
|
133
170
|
npx (`npx github:<owner>/<repo>`, or the registry after publish), Cursor (global via
|
|
134
171
|
`npx skills add … --agent cursor --global`, or per-project `.cursor/rules/*.mdc`).
|
|
172
|
+
Anthropic's own surfaces are separate deployments that sync with nothing: the
|
|
173
|
+
Skills API (`POST /v1/skills`, beta headers `skills-2025-10-02` +
|
|
174
|
+
`code-execution-2025-08-25`, workspace-wide, ≤8 skills per request, <30 MB, the
|
|
175
|
+
uploaded top-level directory must match `name`) and claude.ai (zip upload in
|
|
176
|
+
Settings → Features, per user, no admin push).
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ssheleg/make-skill",
|
|
3
|
-
"version": "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,
|
|
3
|
+
"version": "0.8.1",
|
|
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",
|
|
7
7
|
"plugin",
|
|
@@ -22,7 +22,10 @@
|
|
|
22
22
|
},
|
|
23
23
|
"repository": "github:ssheleg/make-skill",
|
|
24
24
|
"license": "MIT",
|
|
25
|
-
"author":
|
|
25
|
+
"author": {
|
|
26
|
+
"name": "ssheleg",
|
|
27
|
+
"url": "https://x.com/sshlg93"
|
|
28
|
+
},
|
|
26
29
|
"bin": {
|
|
27
30
|
"make-skill": "bin/make-skill.js"
|
|
28
31
|
},
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"name": "make-skill",
|
|
4
4
|
"displayName": "Make Skill",
|
|
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.
|
|
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.1",
|
|
7
7
|
"author": {
|
|
8
|
-
"name": "ssheleg"
|
|
8
|
+
"name": "ssheleg",
|
|
9
|
+
"url": "https://x.com/sshlg93"
|
|
9
10
|
},
|
|
10
11
|
"homepage": "https://github.com/ssheleg/make-skill",
|
|
11
12
|
"repository": "https://github.com/ssheleg/make-skill",
|