@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 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
- 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
 
@@ -53,11 +56,15 @@ resolvable install — not "should work now".
53
56
 
54
57
  ## What you get
55
58
 
56
- **Conformance to the open standard, not just a house style.** The
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. Local conventions that merely *feel* right drift from those
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 spec rules, version sync across every manifest, front-matter on commands
75
- and Cursor rules, link integrity, and the traps below. CI runs it plus **negative
76
- self-tests** — deliberately broken copies that must make it exit non-zero. A
77
- validator nobody has seen fail is decoration.
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 open standard — field limits, optional front-matter, token budgets, the description trigger-eval loop |
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 — [@fuck_this_year](https://x.com/fuck_this_year)
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 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
 
@@ -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), 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."
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 — the Agent Skills open standard (non-negotiable)
12
+ ## Spec floor — two authorities, both non-negotiable
13
13
 
14
- <https://agentskills.io/specification> — the house canon below only ADDS to it.
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
- - `description`: ≤1024 chars (that cap is on the field, not the whole front-matter).
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"). Gotchas stay in SKILL.md.
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 such.
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.7.1",
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.",
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": "ssheleg",
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.7.1",
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",