@ssheleg/make-skill 0.5.1 → 0.6.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,62 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.6.1 — 2026-07-28
4
+
5
+ Open-source hygiene pass — the repo is public, so the files a first-time
6
+ contributor looks for now exist.
7
+
8
+ ### Added
9
+ - `CODE_OF_CONDUCT.md`, issue forms for bugs and ideas, and a pull-request
10
+ template carrying this repo's actual checks (`test/validate.py`, `bash -n
11
+ install.sh`).
12
+ - US spelling in the changelog.
13
+
14
+ ## v0.6.0 — 2026-07-28
15
+
16
+ Production pass for a public repository: the README now explains the project
17
+ before it explains its own conventions, contributors get an entry point, and the
18
+ last inaccuracies found by reading every file end to end are gone.
19
+
20
+ ### Added
21
+ - **`CONTRIBUTING.md`** — what belongs in the canon (evidence, not advice), the
22
+ offline one-liner that runs the entire CI suite locally, the rules the
23
+ validator enforces, and the standing requirement that every new validator rule
24
+ ships with a negative test.
25
+ - **`SECURITY.md`** — private reporting channel, an exact statement of what the
26
+ installers touch (`~/.claude/skills/make-skill`, `~/.claude/commands/`, no
27
+ network, no postinstall, zero dependencies), and the point that a skill is text
28
+ an agent executes, so it deserves review before installation.
29
+ - `--version` / `-v` on the installer CLI, asserted in CI against
30
+ `package.json`.
31
+ - **Public-repo floor** in the canon and in the validator: README, CHANGELOG,
32
+ LICENSE, CONTRIBUTING and SECURITY are required root files once a repo is
33
+ public, each with a negative self-test.
34
+ - Validator rule: every `references/*.md` must carry a `Load this when:` line.
35
+ A reference without a stated condition is loaded always or never — the exact
36
+ failure progressive disclosure exists to prevent.
37
+ - `bugs` URL in `package.json`; `SECURITY.md` added to the published files.
38
+
39
+ ### Fixed
40
+ - **The shadow-copy gotcha understated the problem.** Docs said to remove a stray
41
+ `~/.claude/skills/<name>` copy "if it appears". It reappears on schedule: the
42
+ skills CLI auto-detects Claude Code and recreates that path — usually as a
43
+ symlink — on every `--global` add or update, whether or not `claude-code` was
44
+ targeted. The prune is now documented as part of the update command itself.
45
+ - The v0.1.0 implementation plan still described `templates/SKILL.md` and an
46
+ unscoped npm package; marked executed and pointed at the spec's Superseded
47
+ table, matching the treatment its sibling spec already had.
48
+ - Reference files derived from moving specs (Agent Skills, MCP, A2A) now carry
49
+ the date they were read, so a stale claim is visible instead of implied.
50
+
51
+ ### Changed
52
+ - **README rewritten for a first-time reader**: what it is in two sentences, a
53
+ quickstart that ends in a working command, what you actually get (standard
54
+ conformance, a validator that can fail, every channel, the named gotchas,
55
+ where a skill ends and MCP/A2A begin), an install matrix with the prune step
56
+ in it, and a requirements section.
57
+ - `permissions: contents: read` on the validate workflow.
58
+ - `package.json` keys ordered conventionally.
59
+
3
60
  ## v0.5.1 — 2026-07-28
4
61
 
5
62
  Full-repo consistency pass: every file read against every other, contradictions
@@ -12,7 +69,7 @@ fixed rather than annotated.
12
69
  - **The canon demanded a README section this repo deliberately doesn't have.**
13
70
  `README.md (EN + closing RU section)` in the layout and "RU section" in the
14
71
  Retrofit audit contradicted the v0.4.0 decision to ship an English-only README.
15
- Canon now says English-first, with Russian where it actually changes behaviour
72
+ Canon now says English-first, with Russian where it actually changes behavior
16
73
  (trigger phrases) and an optional RU section for RU-facing projects.
17
74
  - **The entry-point command contradicted its own design rule.** The canon says a
18
75
  `/<name>` command must "detect mode, never ask"; `/make-skill` with no argument
package/README.md CHANGED
@@ -4,133 +4,184 @@
4
4
  [![validate](https://github.com/ssheleg/make-skill/actions/workflows/validate.yml/badge.svg)](https://github.com/ssheleg/make-skill/actions/workflows/validate.yml)
5
5
  [![license](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
6
6
 
7
- Create, retrofit, audit, and ship agent **skills** and **Claude Code plugins** the
8
- proven ssheleg way — conformance to the [Agent Skills open standard](https://agentskills.io/specification),
9
- marketplace repo layout, four-way version sync, a structural validator + CI,
10
- multi-channel distribution, and end-to-end first publish, encoded as a skill so
11
- every new skill follows the same standard.
7
+ **A skill that builds skills.** Install it and your coding agent knows how to
8
+ create, audit, and ship [Agent Skills](https://agentskills.io/specification) and
9
+ Claude Code plugins properly — conforming to the open standard, validated in CI,
10
+ and installable on every agent instead of just yours.
11
+
12
+ The idea for a skill takes ten minutes. The packaging eats the evening: which
13
+ front-matter fields are legal, how long a description may be, four manifests that
14
+ must carry one identical version, plugin ids that only work in full `name@name`
15
+ form, an installer that quietly leaves a second copy shadowing the one you just
16
+ fixed. `make-skill` is that evening, written down and enforced.
17
+
18
+ ## Quickstart
19
+
20
+ ```bash
21
+ claude plugin marketplace add ssheleg/make-skill
22
+ claude plugin install make-skill@make-skill
23
+ ```
24
+
25
+ Restart Claude Code, then just ask:
26
+
27
+ ```
28
+ make a skill that turns our incident runbooks into a triage workflow
29
+ ```
30
+
31
+ …or point it at something that already exists:
32
+
33
+ ```
34
+ /make-skill audit ./skills/my-skill against the spec
35
+ ```
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.
12
39
 
13
40
  ## What it does
14
41
 
15
- `make-skill` is a meta-skill: point it at a task and it routes to the right workflow.
42
+ Four workflows, picked automatically from what you asked for:
16
43
 
17
44
  | Workflow | When |
18
45
  |---|---|
19
46
  | **Create (personal)** | a skill only for your own agents (`~/.claude/skills/<name>/`) |
20
47
  | **Create (distributable)** | a skill others install → full marketplace repo + first publish |
21
- | **Retrofit** | an existing skill/repo below the standard → audit → fix → release |
48
+ | **Retrofit** | an existing skill or repo below the standard → audit → fix → release |
22
49
  | **Promote** | a personal skill that should become installable |
23
50
 
24
- It encodes: conformance to the [Agent Skills open standard](https://agentskills.io/specification),
25
- the repo layout, the version-sync hard rule, the validator (with negative
26
- self-tests), the distribution matrix (Claude Code plugin, vercel skills CLI, npx,
27
- Cursor), the npm gotchas, and a release checklist.
51
+ Each one ends somewhere verifiable — a validator exit code, a green CI run, a
52
+ resolvable install — not "should work now".
53
+
54
+ ## What you get
55
+
56
+ **Conformance to the open standard, not just a house style.** The
57
+ [Agent Skills specification](https://agentskills.io/specification) sets hard
58
+ limits — `name` is 1–64 chars of `a-z0-9` and single hyphens and must match its
59
+ 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
61
+ without anyone noticing; here they're checked.
62
+
63
+ **A validator that can fail.** `test/validate.py` (Python stdlib only, no deps)
64
+ checks spec rules, version sync across every manifest, front-matter on commands
65
+ and Cursor rules, link integrity, and the traps below. CI runs it plus **negative
66
+ self-tests** — deliberately broken copies that must make it exit non-zero. A
67
+ validator nobody has seen fail is decoration.
68
+
69
+ **Every distribution channel, with the flags that actually work.** Claude Code
70
+ plugin, the [vercel `skills` CLI](https://github.com/vercel-labs/skills) (70+
71
+ agents), `npx`, Cursor rules, and umbrella-repo families — including the
72
+ one-channel-per-agent rule that stops them from shadowing each other.
73
+
74
+ **The gotchas that each cost a debugging round**, so your first publish works
75
+ instead of your fourth:
76
+
77
+ - a stray `SKILL.md` anywhere in the repo ships as a *real* skill on every agent;
78
+ - `npm view` returning E404 does **not** mean the name is publishable;
79
+ - npm reports expired-token failures as `404 Not Found` on publish;
80
+ - `npx <pkg>` inside the package's own repo resolves the local copy and lies;
81
+ - the skills CLI recreates the Claude Code shadow copy on every `--global` update,
82
+ whether or not you targeted Claude Code.
28
83
 
29
- Bundled references the skill loads on demand:
84
+ **Knowing where a skill ends.** A skill is instructions — it cannot hold a
85
+ credential or open a socket. When the task needs a live system that's an **MCP**
86
+ server; when the other side is another autonomous agent that's **A2A**. The skill
87
+ ships references for both, including the version drift that silently breaks
88
+ integrations.
89
+
90
+ ## What ships with it
91
+
92
+ The skill body stays small on purpose; the detail sits in reference files the
93
+ agent opens only when the situation calls for them:
30
94
 
31
95
  | Reference | Covers |
32
96
  |---|---|
33
- | `agent-skills-spec.md` | the open standard — field limits, optional front-matter, token budgets, description-trigger evals |
97
+ | `agent-skills-spec.md` | the open standard — field limits, optional front-matter, token budgets, the description trigger-eval loop |
34
98
  | `distribution.md` | every install channel, exact CLI flags, npm publishing traps |
35
- | `mcp.md` | [MCP](https://modelcontextprotocol.io) — skill vs server, primitives, transports, security rules |
36
- | `a2a.md` | [A2A](https://a2a-protocol.org) — Agent Cards, task lifecycle, v0.x→1.0 wire drift |
99
+ | `mcp.md` | [MCP](https://modelcontextprotocol.io) — skill vs server, primitives and methods, transports, consent and untrusted-output rules |
100
+ | `a2a.md` | [A2A](https://a2a-protocol.org) — Agent Cards, task lifecycle, method mapping, v0.x→1.0 wire drift |
37
101
 
38
- Reference implementations it mirrors: [super-ux](https://github.com/ssheleg/super-ux)
39
- (structure) and [task-pipeline](https://github.com/ssheleg/task-pipeline)
40
- (config-contract + toggleable release automation). make-skill is itself built to
41
- this canon.
102
+ Plus `templates/SKILL.template.md`, a spec-legal skeleton with the limits written
103
+ into it.
42
104
 
43
105
  ## Install
44
106
 
45
- **Plugin (recommended):**
46
- ```
47
- /plugin marketplace add ssheleg/make-skill
48
- /plugin install make-skill@make-skill
49
- ```
107
+ **Claude Code (recommended):**
50
108
 
51
- **Any agent via the skills CLI (Cursor, Codex, OpenCode, 70+ — not Claude Code, use the plugin above):**
109
+ ```bash
110
+ claude plugin marketplace add ssheleg/make-skill
111
+ claude plugin install make-skill@make-skill
52
112
  ```
113
+
114
+ **Any other agent — Cursor, Codex, OpenCode, Zed, 70+ via the skills CLI:**
115
+
116
+ ```bash
53
117
  npx skills add ssheleg/make-skill
54
118
  ```
55
119
 
56
- **npm / npx (no clone):**
57
- ```
58
- npx github:ssheleg/make-skill # straight from GitHub
59
- npx @ssheleg/make-skill # from the npm registry (scoped — npm blocks the bare name)
60
- ```
120
+ Don't target `claude-code` here if you installed the plugin above — see
121
+ one-channel-per-agent.
61
122
 
62
- **Cursor:**
63
- ```
64
- npx skills add ssheleg/make-skill --agent cursor --global
123
+ **npx, no clone:**
124
+
125
+ ```bash
126
+ npx github:ssheleg/make-skill # always current with this repo
127
+ npx @ssheleg/make-skill # npm registry (scoped: npm blocks the bare name)
65
128
  ```
66
- …or copy `cursor/rules/make-skill.mdc` into a project's `.cursor/rules/`.
129
+
130
+ **Cursor, per project:** copy [`cursor/rules/make-skill.mdc`](cursor/rules/make-skill.mdc)
131
+ into `.cursor/rules/` — it is self-contained by design.
67
132
 
68
133
  **Plain skill:**
69
- ```
134
+
135
+ ```bash
70
136
  git clone https://github.com/ssheleg/make-skill
71
137
  cd make-skill && ./install.sh # idempotent; --force to overwrite
72
138
  ```
73
139
 
74
- ## Updating everywhere
140
+ ### Updating
75
141
 
76
- One channel per agent (a plugin plus a plain `~/.claude/skills` copy on the same
77
- Claude Code install shadow each other).
142
+ **One channel per agent.** A plugin plus a plain `~/.claude/skills` copy on the
143
+ same Claude Code install shadow each other, and the stale one usually wins.
78
144
 
79
145
  | Channel | Update |
80
146
  |---|---|
81
147
  | Claude Code (plugin) | `claude plugin marketplace update make-skill` → `claude plugin update make-skill@make-skill` → restart |
82
- | Any agent (skills CLI) | `npx skills update make-skill --global --yes` (repeated `--agent`; never `claude-code`) |
83
- | npm | `npx @ssheleg/make-skill@latest` / `npx github:ssheleg/make-skill` |
148
+ | Any agent (skills CLI) | `npx skills update make-skill --global --yes && rm -f ~/.claude/skills/make-skill` |
149
+ | npx | `npx github:ssheleg/make-skill` / `npx @ssheleg/make-skill@latest` |
84
150
  | Plain skill | `git pull && ./install.sh --force` |
85
151
 
86
- ## Use
152
+ The prune in row two is not optional: the skills CLI recreates the Claude Code
153
+ copy on every global update, even when Claude Code was never named.
87
154
 
88
- Say *"make a skill"*, *"retrofit this skill to the standard"*, or *"does this
89
- skill match the spec?"* — or invoke `/make-skill <what to build, retrofit, or
90
- audit>`. With no argument inside a skill repo it detects the situation and runs
91
- the audit rather than asking. Russian phrasings (*"сделай скилл"*, *"приведи
92
- скилл к стандарту"*) route the same way.
155
+ ### Requirements
156
+
157
+ Node ≥ 16 for the `npx` installer; Python 3 only if you run the validator;
158
+ `bash` for `install.sh` (Windows users: use `npx`, the plugin, or the skills CLI).
159
+ The skill itself is plain Markdown and needs nothing.
93
160
 
94
161
  ## Repo layout
95
162
 
96
163
  ```
97
164
  .claude-plugin/marketplace.json
98
- plugins/make-skill/{.claude-plugin/plugin.json, commands/make-skill.md,
99
- skills/make-skill/{SKILL.md, references/*.md}}
100
- cursor/rules/make-skill.mdc # self-contained Cursor rule
101
- templates/SKILL.template.md # skeleton seeded into new skills
102
- bin/make-skill.js + package.json # npx installer
103
- test/validate.py # structural validator (+ negative self-test in CI)
165
+ plugins/make-skill/
166
+ ├── .claude-plugin/plugin.json
167
+ ├── commands/make-skill.md # the /make-skill entry point
168
+ └── skills/make-skill/
169
+ ├── SKILL.md # the canon, < 500 lines by rule
170
+ └── references/*.md # loaded on demand
171
+ cursor/rules/make-skill.mdc # self-contained Cursor rule
172
+ templates/SKILL.template.md # spec-legal skeleton
173
+ bin/make-skill.js + package.json # zero-dep npx installer
174
+ test/validate.py # structural validator
104
175
  .github/workflows/{validate,release}.yml
105
- install.sh README.md CHANGELOG.md LICENSE
106
- docs/superpowers/{specs,plans}/
176
+ install.sh README.md CHANGELOG.md CONTRIBUTING.md SECURITY.md LICENSE
177
+ docs/superpowers/{specs,plans}/ # historical design records
107
178
  ```
108
179
 
109
- ## What this gives you
110
-
111
- The moment you catch yourself re-explaining the same workflow to your agent, you
112
- want a skill. Then the packaging eats your evening: front-matter limits, four
113
- files that must carry the identical version, plugin ids that only work in full
114
- `name@name` form, a CLI that silently installs a second copy shadowing the one
115
- you just fixed.
116
-
117
- - **Turns a workflow you keep repeating into something installable** — for
118
- yourself, your team, or the public.
119
- - **Keeps you inside the open standard** — the `name` charset, the 1024-char
120
- `description` cap, the <500-line / <5000-token body budget. The validator
121
- fails on each, so a skill that installs on Claude Code also installs
122
- everywhere else.
123
- - **Ships the scaffolding that keeps it alive:** repo layout, a validator, CI
124
- with negative self-tests. A skill that fails loudly beats one that quietly
125
- stops firing.
126
- - **Knows where a skill ends and a protocol begins** — when to write an MCP
127
- server instead, how to consume one safely, and what changes when the other
128
- side is another agent over A2A.
129
- - **Covers every distribution channel** — Claude Code plugin, 70+ agents via the
130
- vercel `skills` CLI, `npx`, Cursor rules — and the one-channel-per-agent rule
131
- that stops them from shadowing each other.
132
- - **Encodes the gotchas that each cost a debugging round**, so your first
133
- publish works instead of your fourth.
180
+ ## Contributing
181
+
182
+ Issues and PRs welcome — see [CONTRIBUTING.md](CONTRIBUTING.md) for how to run the
183
+ validator and the full CI suite locally (both work offline, no dependencies to
184
+ install). Security reports: [SECURITY.md](SECURITY.md).
134
185
 
135
186
  ## Author
136
187
 
package/SECURITY.md ADDED
@@ -0,0 +1,47 @@
1
+ # Security Policy
2
+
3
+ ## Reporting a vulnerability
4
+
5
+ Report privately through
6
+ [GitHub Security Advisories](https://github.com/ssheleg/make-skill/security/advisories/new),
7
+ or by Telegram to [@sshlg](https://t.me/sshlg) if you'd rather not use GitHub.
8
+ Please don't open a public issue for something exploitable.
9
+
10
+ Expect an acknowledgement within a few days. This is a small project maintained by
11
+ one person — there is no bounty, but you'll be credited in the release notes
12
+ unless you'd prefer otherwise.
13
+
14
+ ## What this project touches
15
+
16
+ `make-skill` ships Markdown plus two small installers. Knowing exactly what runs
17
+ where is most of the threat model:
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.
23
+ - **`test/validate.py`** reads repository files and exits with a status. It writes
24
+ nothing.
25
+ - The Claude Code plugin and the `skills` CLI channels are handled by those tools,
26
+ not by code in this repo.
27
+
28
+ Nothing here asks for credentials, and nothing phones home. The npm package has no
29
+ dependencies, so its supply-chain surface is npm itself.
30
+
31
+ ## Content is instructions for an agent
32
+
33
+ A skill is text that a coding agent loads into its context and follows. Two
34
+ consequences worth stating plainly:
35
+
36
+ - **Review a skill before installing it**, from any source including this one.
37
+ Prose that an agent treats as instruction deserves the same scrutiny as code you
38
+ would run.
39
+ - The canon in this repo deliberately tells agents to treat everything coming back
40
+ from an MCP server or an A2A peer as **untrusted data, never instructions**, and
41
+ never to auto-approve tool calls or bypass consent prompts. If you find guidance
42
+ here that contradicts that, it is a bug — please report it.
43
+
44
+ ## Supported versions
45
+
46
+ The latest release on `main` is supported. Fixes go into a new version rather than
47
+ being backported.
package/bin/make-skill.js CHANGED
@@ -17,12 +17,21 @@ const os = require('os');
17
17
  const ROOT = path.resolve(__dirname, '..');
18
18
  const REPO = 'ssheleg/make-skill';
19
19
 
20
+ function version() {
21
+ try {
22
+ return require(path.join(ROOT, 'package.json')).version;
23
+ } catch {
24
+ return 'unknown';
25
+ }
26
+ }
27
+
20
28
  function usage() {
21
- console.log(`make-skill installer
29
+ console.log(`make-skill installer v${version()}
22
30
 
23
31
  Usage:
24
32
  npx @ssheleg/make-skill [--force] install skill + /make-skill command into
25
33
  ~/.claude (skip existing unless --force)
34
+ npx @ssheleg/make-skill --version
26
35
  npx @ssheleg/make-skill --help
27
36
 
28
37
  Other install paths:
@@ -59,6 +68,10 @@ function main(argv) {
59
68
  usage();
60
69
  return 0;
61
70
  }
71
+ if (args.includes('--version') || args.includes('-v')) {
72
+ console.log(version());
73
+ return 0;
74
+ }
62
75
  const force = args.includes('--force');
63
76
  const unknown = args.filter((a) => a !== '--force');
64
77
  if (unknown.length) {
@@ -47,6 +47,7 @@ bin/<name>.js + package.json # zero-dep npx installer
47
47
  test/validate.py # stdlib-only consistency validator
48
48
  .github/workflows/validate.yml (+ release.yml, off by default)
49
49
  install.sh, README.md (English-first), CHANGELOG.md, LICENSE (MIT)
50
+ CONTRIBUTING.md + SECURITY.md # required once the repo is public
50
51
  docs/superpowers/{specs,plans}/
51
52
  ```
52
53
 
package/package.json CHANGED
@@ -1,29 +1,7 @@
1
1
  {
2
2
  "name": "@ssheleg/make-skill",
3
- "version": "0.5.1",
3
+ "version": "0.6.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 (front-matter limits, progressive-disclosure budgets), marketplace repo layout, version sync, validator + CI, multi-channel distribution (plugin, vercel skills CLI, npx, Cursor), npm gotchas, and MCP / A2A rules for protocol-connected skills. This package is the installer CLI.",
5
- "bin": {
6
- "make-skill": "bin/make-skill.js"
7
- },
8
- "publishConfig": {
9
- "access": "public"
10
- },
11
- "files": [
12
- "bin",
13
- "plugins",
14
- "cursor",
15
- "templates",
16
- "README.md",
17
- "LICENSE",
18
- "CHANGELOG.md"
19
- ],
20
- "repository": "github:ssheleg/make-skill",
21
- "homepage": "https://github.com/ssheleg/make-skill",
22
- "license": "MIT",
23
- "author": "ssheleg",
24
- "engines": {
25
- "node": ">=16"
26
- },
27
5
  "keywords": [
28
6
  "skill",
29
7
  "plugin",
@@ -37,5 +15,31 @@
37
15
  "agent-skills",
38
16
  "mcp",
39
17
  "a2a"
40
- ]
18
+ ],
19
+ "homepage": "https://github.com/ssheleg/make-skill",
20
+ "bugs": {
21
+ "url": "https://github.com/ssheleg/make-skill/issues"
22
+ },
23
+ "repository": "github:ssheleg/make-skill",
24
+ "license": "MIT",
25
+ "author": "ssheleg",
26
+ "bin": {
27
+ "make-skill": "bin/make-skill.js"
28
+ },
29
+ "files": [
30
+ "bin",
31
+ "plugins",
32
+ "cursor",
33
+ "templates",
34
+ "README.md",
35
+ "LICENSE",
36
+ "CHANGELOG.md",
37
+ "SECURITY.md"
38
+ ],
39
+ "publishConfig": {
40
+ "access": "public"
41
+ },
42
+ "engines": {
43
+ "node": ">=16"
44
+ }
41
45
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "make-skill",
3
3
  "description": "Create, retrofit, audit, and ship agent skills & Claude Code plugins the proven ssheleg way: conformance to the Agent Skills open standard, marketplace repo layout, version sync, validator + CI, multi-channel distribution (plugin, vercel skills CLI, npx, Cursor), npm gotchas, end-to-end first publish, plus MCP / A2A references for protocol-connected skills.",
4
- "version": "0.5.1",
4
+ "version": "0.6.1",
5
5
  "author": {
6
6
  "name": "ssheleg"
7
7
  },
@@ -5,18 +5,13 @@ description: Use when creating, upgrading, auditing, or publishing agent skills
5
5
 
6
6
  # make-skill — Create, Retrofit, and Ship Skills the Proven Way
7
7
 
8
- Reference implementations (local checkouts usually at `~/DATA/<name>`):
9
- - **`ssheleg/super-ux`** — the canonical structure; copy it verbatim when in
10
- doubt. Multi-skill suite, Cursor rules, templates seeded into projects.
11
- - **`ssheleg/task-pipeline`** — the reference for the newer patterns: a
12
- single-skill orchestrator with a generic JSON **config-contract**
13
- (`pipeline.schema.json` + a copy-and-rewrite `pipeline.example.json`),
14
- four-way version sync with jsonschema conformance in the validator, and
15
- **toggleable release automation**.
16
-
17
- Both work end-to-end; match whichever is closer to the skill at hand.
18
- **make-skill itself** (`ssheleg/make-skill`) is built to this exact canon — the
19
- single-skill-plus-templates shape, distributed on all channels.
8
+ Reference implementations to copy from (local checkouts usually `~/DATA/<name>`):
9
+ **`ssheleg/super-ux`** — canonical structure, multi-skill suite, Cursor rules,
10
+ seeded templates. **`ssheleg/task-pipeline`** — newer patterns: single-skill
11
+ orchestrator, generic JSON config-contract (`pipeline.schema.json` +
12
+ `pipeline.example.json`), jsonschema conformance in the validator, toggleable
13
+ release automation. Match whichever is closer; both work end-to-end.
14
+ **make-skill itself** is built to this canon.
20
15
 
21
16
  ## References — load on demand
22
17
 
@@ -110,9 +105,16 @@ path if it proves useful.
110
105
  ├── .github/workflows/validate.yml # validator on push+PR (+ release.yml, off by default)
111
106
  ├── install.sh # POSIX fallback
112
107
  ├── README.md (English-first), CHANGELOG.md, LICENSE (MIT)
108
+ ├── CONTRIBUTING.md + SECURITY.md # public repo: how to check work, where to report
113
109
  └── docs/superpowers/{specs,plans}/
114
110
  ```
115
111
 
112
+ **Public-repo floor** (validator-enforced): a README that says what it does
113
+ before how to install it; `CONTRIBUTING.md` with the exact offline commands that
114
+ verify a change; `SECURITY.md` naming a private reporting channel and what the
115
+ installers touch — a skill is text an agent executes, so "review before
116
+ installing" belongs in writing.
117
+
116
118
  README language: **English-first** — it is the public face of the repo and most
117
119
  readers aren't Russian speakers. Russian belongs in the skill's trigger phrases
118
120
  (where it changes whether the skill fires) and, optionally, in a closing RU
@@ -193,7 +195,8 @@ with evidence (`file:line` or command output) — never "looks fine".
193
195
  `npx --yes skills add <repo> --list` lists ONLY real skills; `npx <name>`
194
196
  works from a non-repo cwd (if npm published); `.mdc` rules have no relative
195
197
  links and valid front-matter.
196
- 8. Repo meta: homepage → npm page; LICENSE; CHANGELOG current.
198
+ 8. Repo meta: homepage + description + topics set on the forge; LICENSE;
199
+ CHANGELOG current; public repos also carry CONTRIBUTING.md and SECURITY.md.
197
200
  9. Gotcha compliance (see below): `from __future__ import annotations` in
198
201
  validate.py; `\x1b` literals not raw ESC; single prompter for piped
199
202
  stdin; raw-mode only behind isTTY guards.
@@ -283,11 +286,13 @@ Non-negotiables for any such skill:
283
286
  `3.x` won't catch it, local run will.
284
287
  - **gh auth status may lie** (invalid-token report while git+ssh path
285
288
  works): attempt the operation before declaring it blocked.
286
- - **Duplicate-shadow: one channel per agent.** A plugin install AND a plain
287
- `~/.claude/skills/<name>` copy (from `install.sh` or `npx skills add
288
- --agent '*'`) on the SAME Claude Code install = two listings; the plain copy
289
- can be STALE and shadow the fresh plugin. Keep exactly one channel per
290
- agent; `rm -rf ~/.claude/skills/<name>` if a stray plain copy appears.
289
+ - **Duplicate-shadow: one channel per agent — and the shadow regrows.** A plugin
290
+ install AND a plain `~/.claude/skills/<name>` copy on the SAME Claude Code
291
+ install = two listings, and the plain copy (often STALE) wins. It is not only
292
+ `install.sh`: `npx skills add|update … --global` auto-detects Claude Code and
293
+ recreates that path — usually as a symlink — **even when `claude-code` was
294
+ never targeted**. So the prune belongs in the update step itself:
295
+ `npx skills update <name> --global --yes && rm -f ~/.claude/skills/<name>`.
291
296
  - **Plugin commands need the full `<name>@<name>`:** `claude plugin update
292
297
  <name>` → "Plugin not found"; it must be `claude plugin update
293
298
  <name>@<name>`. Same for install.
@@ -8,7 +8,7 @@ Spec referenced here: **A2A 1.0.0**
8
8
  (<https://a2a-protocol.org/latest/specification/>). **Verify field and method
9
9
  names against the version you target before locking a contract** — v0.x → v1.0
10
10
  renamed the wire surface (examples below), and plenty of SDKs and blog posts still
11
- document v0.3.
11
+ document v0.3. *Read from the spec on 2026-07-28.*
12
12
 
13
13
  ## A2A vs MCP — not competitors
14
14
 
@@ -11,6 +11,9 @@ Upstream sources (verify before locking anything — the spec moves):
11
11
  - Best practices — <https://agentskills.io/skill-creation/best-practices>
12
12
  - Description tuning — <https://agentskills.io/skill-creation/optimizing-descriptions>
13
13
 
14
+ *Field limits and budgets below were read from the spec on 2026-07-28. Re-read
15
+ before trusting them in a new quarter.*
16
+
14
17
  The ssheleg canon in `SKILL.md` is a **superset** of this spec. It may add rules
15
18
  (RU triggers, version sync, marketplace layout); it must never violate one.
16
19
 
@@ -6,6 +6,20 @@ auditing an existing repo's distribution in a Retrofit.
6
6
  Hard rule across all channels: **one channel per agent.** Two installs of the same
7
7
  skill on one agent = two listings, and the stale copy shadows the fresh one.
8
8
 
9
+ **The shadow comes back on its own.** `npx skills add|update … --global`
10
+ auto-detects Claude Code and writes `~/.claude/skills/<name>` — often as a symlink
11
+ into `~/.agents/skills/<name>` — *even when `claude-code` was never named as a
12
+ target*. So the routine that refreshes the Cursor/Codex channel silently recreates
13
+ the shadow every single run. It cannot be handled by discipline; it needs a step:
14
+
15
+ ```bash
16
+ npx skills update <name> --global --yes && rm -f ~/.claude/skills/<name>
17
+ ```
18
+
19
+ Put that prune inside whatever script performs the update, so the supported path
20
+ can't leave a shadow behind. A symlink shadows exactly as a directory does — check
21
+ with `ls -ld`, and remember `find -type f` will not see through it.
22
+
9
23
  ## 1. Claude Code plugin
10
24
 
11
25
  `/plugin marketplace add <owner>/<repo>` → `/plugin install <name>@<name>`;
@@ -7,6 +7,7 @@ Spec revision referenced here: **2025-11-25**
7
7
  (<https://modelcontextprotocol.io/specification/latest>). Pin the revision you
8
8
  build against and re-verify method names before locking a contract — MCP versions
9
9
  by date and the negotiated `protocolVersion` string is part of the handshake.
10
+ *Read from the spec on 2026-07-28.*
10
11
 
11
12
  ## Skill vs MCP server — pick the right one
12
13