Shareable Skills (Sharing Spec)
Purpose
Define the single normative spec for how a repo names, describes in frontmatter, scopes,
shares, vendors, and validates for export its skills. This is the source of truth for
that standardization; other skills point here instead of restating it. The mechanism is portable —
any repo can adopt it — while the concrete values it fills in (owner prefix, owner, domain registry)
are that repo's own. The values shown throughout are this repo's instantiation.
This skill owns the sharing-spec rules. It does not own general skill-quality rules
(trigger quality, structure, progressive disclosure) — those belong to the repo's skill-authoring
skill (ref-sp-agents-skills-authoring here). The two are complementary and independent; neither
hard-depends on the other (see the spec's "Relationship" section).
Schema status (this repo): the migration is complete here. Every skill is owner-prefix renamed,
all portability fields live under the metadata.shareable-skills.* namespace, and the validator
runs at Phase 3 (hard-fail). A repo adopting this spec fresh starts at whatever phase it sets in
its registry. ./references/spec.md §9 keeps this repo's migration history.
When to use this skill
- Naming or renaming a skill (owner-prefix / domain / template / topic grammar).
- Setting
shareable-skills.owner, shareable-skills.domain, shareable-skills.tags,
shareable-skills.visibility, or the top-level license.
- Recording hard (
requires) vs soft (suggests) skill dependencies.
- Deciding
repo-local vs organization vs public.
- Vendoring or forking a skill from another repo, including provenance and read-only handling.
- Validating a skill against the sharing spec before linking, exporting, or publishing.
Scope boundaries
This skill owns how a skill is named, scoped, shared, and vendored — the metadata layer. It owns
nothing about whether the skill is any good, and nothing about the machinery that moves it.
ref-sp-agents-skills-authoring — skill quality: structure, triggers, description wording,
progressive disclosure. Complementary and independent; neither hard-depends on the other.
ref-sp-agents-skills-management — the CLI that links and syncs skills into a consuming repo.
This skill decides whether a skill may travel; that one moves it.
ref-sp-agents-plugin-marketplaces — publishing skills as an installable plugin. This skill owns
the visibility tiers; that one owns the manifest that must respect them.
tool-sp-make-skill-shareable — the guided workflow for applying this spec to one skill.
Read this skill for the rules; invoke that one to walk a skill through them.
Read this first
./references/spec.md is the full normative spec. Load it whenever you need the exact rules.
The sections below are the always-needed summary; the spec has the detail and examples.
Canonical schema (summary)
Every portability field nests under the metadata.shareable-skills. namespace as a string (the
Agent Skills spec treats metadata as a string→string map — no YAML lists or nested objects; the
dot is part of the flat key name, not YAML nesting). Conceptual lists are comma-delimited. license
is the only exception — it uses the spec's top-level license field, not metadata.
license: "MIT" # top-level; required iff public
metadata:
shareable-skills.owner-prefix: "sp" # short token used in the name
shareable-skills.owner: "swiftpostlabs/agentic-tools" # canonical home — the repo, not just the org
shareable-skills.domain: "agents" # from the domain registry; hard-validated
shareable-skills.tags: "ci, github" # advisory grouping; any tag passes
shareable-skills.visibility: "organization" # repo-local | organization | public
shareable-skills.requires: "ref-sp-dev-git-commits" # hard deps; missing => validator fails
shareable-skills.suggests: "ref-sp-dev-docs-authoring" # soft deps; may be absent
# vendored copies only (owner stays upstream): shareable-skills.vendored-sha, .vendored-time
# forks only: shareable-skills.forked-from
Naming grammar (summary)
- refs:
ref-<owner-prefix>-<domain>-<topic>[-template]
- tools:
tool-<owner-prefix>-<verb>[-<topic>] (first topic segment is an action verb)
template is a reserved topic suffix marking an app-level scaffold/blueprint, never a template- type prefix.
- The name is derived from and validated against
shareable-skills.owner-prefix +
shareable-skills.domain; mismatch is a failure.
- The owner prefix is on every skill for collision avoidance, which is what lets vendoring be a
pure copy with no rename. Read
./references/spec.md §2.
Domain and tags (summary)
shareable-skills.domain is one token naming the skill's primary subject, drawn from the
growing domain registry (./references/registry.json). Unknown domain => hard fail, with a
"vocabulary is growing, open an issue" note.
- A domain mixes a stack axis (
py, js, rust, …) and a concern axis (db, baas, ops,
agents, dev, biz, ai, llm, ml, nlp, data, seo, …). Pick the primary subject;
push the other axis into tags.
- Key distinctions:
db = database concepts (not products); baas = managed backend products you
build on (Supabase, Firebase, Appwrite); ops = operational activities (CI, deploy).
baas vs ops = subject vs activity. Read ./references/spec.md §4 for belongs-when
questions and the full list.
tags are advisory: any tag passes, unknown tags get a soft nudge only.
Dependencies (summary)
shareable-skills.requires = hard deps the skill genuinely needs; validator fails if missing;
reference them from the body via $SKILLS_FOLDER/<name>. Keep the list short or split the skill.
shareable-skills.suggests = soft deps: optional/richer info that may be absent; reference by name only.
- A skill must not hard-depend on a lower-visibility skill (order:
repo-local < organization
< public). A public skill may require only public; an organization skill may require
organization or public; repo-local may require anything. This keeps every hard dependency at
least as portable as the skill that needs it.
Visibility (summary)
repo-local — this repo only; the linker rejects export.
organization — org-wide; symlink from ~/.claude/skills into projects, or a privately hosted
marketplace.
public — anywhere + marketplace; requires license.
- Operational model: your own org/public skills = symlink from home; foreign skills you consume =
vendor-copy with provenance. Read
./references/spec.md §6.
- Publishing to a plugin marketplace is one more export destination, gated by these same tiers.
No client has a notion of skill-level visibility — a plugin publishes exactly what its manifest
enumerates — so the tier is only enforced by generating that list from
shareable-skills.visibility and drift-checking it. The packaging, hosting, and release mechanics
are owned by ref-sp-agents-plugin-marketplaces; do not restate them here.
Vendoring vs forking (summary)
- Symlink = the skill is the source; no provenance metadata.
- Vendor = copy that respects upstream:
shareable-skills.owner stays upstream, add
shareable-skills.vendored-sha + shareable-skills.vendored-time, keep the name identical (so
drift checks work), and add a read-only body banner. Do not edit a vendored skill — route the
change upstream. Run ./scripts/check-vendored-drift.mts to detect edited or stale copies.
- Fork = you take ownership: a new skill with your own owner-prefix and name, plus optional
shareable-skills.forked-from. Read ./references/spec.md §7–§8.
Defaults
- Prefer
organization/public when the skill moves to another repo with light adaptation and
without dragging repo-only wrappers. Prefer repo-local when it depends on this repo's specific
scripts, policies, layout, or adoption workflow.
- Keep
shareable-skills.requires short. Prefer splitting a mixed skill over marking a broadly
useful core repo-local because one section is repo-tied.
- Do not encode shareability, namespace, or vendoring status in the name — those live in metadata.
Validation (sharing-spec validator only)
Run ./scripts/validate-sharing.mts (TypeScript, needs Node >= 22). It reads the domain registry
from ./references/registry.json and the phase there controls strictness (now Phase 3, hard-fail):
node ./scripts/validate-sharing.mts <skill-dir>
# point it at the skills root with --all (in this repo, .agents/skills):
node ./scripts/validate-sharing.mts .agents/skills --all
# a repo may wrap it in a package-manager script; this repo exposes:
yarn validate:sharing # or `yarn validate` to run both validators
This validator checks the sharing spec and is separate from the general skill-quality validator
owned by the repo's skill-authoring skill (ref-sp-agents-skills-authoring here, validate-skill.mts).
Run both when a skill should be good and shareable.
name matches type + owner-prefix + domain (+ template) + topic and equals the folder name.
shareable-skills.domain exists in the registry (else hard fail); unknown shareable-skills.tags
warn only.
- Every
shareable-skills.requires entry resolves to an existing skill; no skill hard-depends on a
lower-visibility skill (repo-local < organization < public).
shareable-skills.visibility: public carries a top-level license.
- Vendored copies keep
shareable-skills.owner upstream and carry a read-only body banner.
- Legacy keys are no longer accepted (Phase 3). Full rules in
./references/spec.md §10.
Plugin-manifest check (--all runs only)
If the repo publishes a plugin (.claude-plugin/plugin.json), the validator also checks that
manifest against the catalog. This matters because the manifest's skills list is where the
visibility tiers are actually enforced: with a marketplace-root source the enumerated paths are the
complete published set, and nothing else stops a repo-local skill from shipping. Severity follows
the stakes:
- Error — a listed skill is not
public. Publishing leaks a skill that was never meant to leave,
and installs are cached on users' machines, so it cannot be recalled.
- Error — a listed path is not a skill. Dangling entries silently drop from the published plugin.
- Error — the manifest lists the skills container while non-public skills exist inside it.
Listing the container publishes everything in it, tier metadata notwithstanding.
- Warning — a
public skill is missing from the manifest. It will not ship, but a skill can be
legitimately in flight before its first release, and an omission is recoverable where a leak is not.
A repo with no .claude-plugin/plugin.json is unaffected. The manifest's semantics are owned by
ref-sp-agents-plugin-marketplaces; this validator only enforces that they agree with the tiers.
References
./references/spec.md — the full normative spec (load for exact rules, examples, migration).
./references/checklist.md — quick pass before finalizing sharing metadata on a skill.
./scripts/validate-sharing.mts — the sharing-spec validator (TypeScript, Node >= 22).
./scripts/check-vendored-drift.mts — flags vendored copies that were edited or whose upstream advanced.
./references/registry.json — the domains/tags/aliases registry and validator phase.
ref-sp-agents-skills-authoring — general skill-quality authoring (complementary).
ref-sp-agents-plugin-marketplaces — publishing skills as an agent plugin via a marketplace;
the mechanics behind the marketplace export destination named under Visibility.
tool-sp-make-skill-shareable — guided shareability decision for a skill.
.agents/tasks/skill-standardization-spec/README.md — decision log and rationale (local, may be absent).
1---2name: ref-sp-agents-shareable-skills3description: Normative spec for how a repo names, describes, scopes, shares, and vendors skills: owner-prefix naming grammar, the domain registry, visibility tiers, dependency semantics, vendoring vs forking, and the sharing-spec validator. Use when: naming or renaming a skill, setting owner/domain/visibility/tags, recording hard vs soft skill dependencies, vendoring or forking a skill from another repo, or validating a skill for export.4license: MIT5---67# Shareable Skills (Sharing Spec)89## Purpose1011Define the single normative spec for how a repo **names**, **describes in frontmatter**, **scopes**,12**shares**, **vendors**, and **validates for export** its skills. This is the source of truth for13that standardization; other skills point here instead of restating it. The mechanism is portable —14any repo can adopt it — while the concrete values it fills in (owner prefix, owner, domain registry)15are that repo's own. The values shown throughout are this repo's instantiation.1617This skill owns the **sharing-spec** rules. It does **not** own general skill-quality rules18(trigger quality, structure, progressive disclosure) — those belong to the repo's skill-authoring19skill (`ref-sp-agents-skills-authoring` here). The two are complementary and independent; neither20hard-depends on the other (see the spec's "Relationship" section).2122> **Schema status (this repo):** the migration is complete here. Every skill is owner-prefix renamed,23> all portability fields live under the `metadata.shareable-skills.*` namespace, and the validator24> runs at Phase 3 (hard-fail). A repo adopting this spec fresh starts at whatever phase it sets in25> its registry. `./references/spec.md` §9 keeps this repo's migration history.2627## When to use this skill2829- Naming or renaming a skill (owner-prefix / domain / template / topic grammar).30- Setting `shareable-skills.owner`, `shareable-skills.domain`, `shareable-skills.tags`,31 `shareable-skills.visibility`, or the top-level `license`.32- Recording hard (`requires`) vs soft (`suggests`) skill dependencies.33- Deciding `repo-local` vs `organization` vs `public`.34- Vendoring or forking a skill from another repo, including provenance and read-only handling.35- Validating a skill against the sharing spec before linking, exporting, or publishing.3637## Scope boundaries3839This skill owns **how a skill is named, scoped, shared, and vendored** — the metadata layer. It owns40nothing about whether the skill is any good, and nothing about the machinery that moves it.4142- `ref-sp-agents-skills-authoring` — skill *quality*: structure, triggers, description wording,43 progressive disclosure. Complementary and independent; neither hard-depends on the other.44- `ref-sp-agents-skills-management` — the CLI that links and syncs skills into a consuming repo.45 This skill decides *whether* a skill may travel; that one moves it.46- `ref-sp-agents-plugin-marketplaces` — publishing skills as an installable plugin. This skill owns47 the visibility tiers; that one owns the manifest that must respect them.48- `tool-sp-make-skill-shareable` — the guided workflow for applying this spec to one skill.49 Read this skill for the rules; invoke that one to walk a skill through them.5051## Read this first5253**`./references/spec.md` is the full normative spec.** Load it whenever you need the exact rules.54The sections below are the always-needed summary; the spec has the detail and examples.5556## Canonical schema (summary)5758Every portability field nests under the `metadata.shareable-skills.` namespace as a **string** (the59Agent Skills spec treats `metadata` as a string→string map — no YAML lists or nested objects; the60dot is part of the flat key name, not YAML nesting). Conceptual lists are comma-delimited. `license`61is the **only** exception — it uses the spec's top-level `license` field, not `metadata`.6263```yaml64license: "MIT" # top-level; required iff public65metadata:66 shareable-skills.owner-prefix: "sp" # short token used in the name67 shareable-skills.owner: "swiftpostlabs/agentic-tools" # canonical home — the repo, not just the org68 shareable-skills.domain: "agents" # from the domain registry; hard-validated69 shareable-skills.tags: "ci, github" # advisory grouping; any tag passes70 shareable-skills.visibility: "organization" # repo-local | organization | public71 shareable-skills.requires: "ref-sp-dev-git-commits" # hard deps; missing => validator fails72 shareable-skills.suggests: "ref-sp-dev-docs-authoring" # soft deps; may be absent73 # vendored copies only (owner stays upstream): shareable-skills.vendored-sha, .vendored-time74 # forks only: shareable-skills.forked-from75```7677## Naming grammar (summary)7879- refs: `ref-<owner-prefix>-<domain>-<topic>[-template]`80- tools: `tool-<owner-prefix>-<verb>[-<topic>]` (first topic segment is an action verb)81- `template` is a reserved topic suffix marking an app-level scaffold/blueprint, never a `template-` type prefix.82- The name is derived from and validated against `shareable-skills.owner-prefix` +83 `shareable-skills.domain`; mismatch is a failure.84- The owner prefix is on every skill for collision avoidance, which is what lets vendoring be a85 pure copy with no rename. Read `./references/spec.md` §2.8687## Domain and tags (summary)8889- `shareable-skills.domain` is one token naming the skill's **primary subject**, drawn from the90 growing domain registry (`./references/registry.json`). Unknown domain => hard fail, with a91 "vocabulary is growing, open an issue" note.92- A domain mixes a stack axis (`py`, `js`, `rust`, …) and a concern axis (`db`, `baas`, `ops`,93 `agents`, `dev`, `biz`, `ai`, `llm`, `ml`, `nlp`, `data`, `seo`, …). Pick the primary subject;94 push the other axis into `tags`.95- Key distinctions: `db` = database *concepts* (not products); `baas` = managed backend products you96 build on (Supabase, Firebase, Appwrite); `ops` = operational *activities* (CI, deploy).97 `baas` vs `ops` = subject vs activity. Read `./references/spec.md` §4 for `belongs-when`98 questions and the full list.99- `tags` are advisory: any tag passes, unknown tags get a soft nudge only.100101## Dependencies (summary)102103- `shareable-skills.requires` = hard deps the skill genuinely needs; validator fails if missing;104 reference them from the body via `$SKILLS_FOLDER/<name>`. Keep the list short or split the skill.105- `shareable-skills.suggests` = soft deps: optional/richer info that may be absent; reference by name only.106- A skill must not hard-depend on a **lower-visibility** skill (order: `repo-local` < `organization`107 < `public`). A `public` skill may require only `public`; an `organization` skill may require108 `organization` or `public`; `repo-local` may require anything. This keeps every hard dependency at109 least as portable as the skill that needs it.110111## Visibility (summary)112113- `repo-local` — this repo only; the linker rejects export.114- `organization` — org-wide; symlink from `~/.claude/skills` into projects, or a **privately hosted**115 marketplace.116- `public` — anywhere + marketplace; **requires `license`**.117- Operational model: your own org/public skills = symlink from home; foreign skills you consume =118 vendor-copy with provenance. Read `./references/spec.md` §6.119- **Publishing to a plugin marketplace is one more export destination**, gated by these same tiers.120 No client has a notion of skill-level visibility — a plugin publishes exactly what its manifest121 enumerates — so the tier is only enforced by generating that list from122 `shareable-skills.visibility` and drift-checking it. The packaging, hosting, and release mechanics123 are owned by `ref-sp-agents-plugin-marketplaces`; do not restate them here.124125## Vendoring vs forking (summary)126127- **Symlink** = the skill is the source; no provenance metadata.128- **Vendor** = copy that respects upstream: `shareable-skills.owner` stays upstream, add129 `shareable-skills.vendored-sha` + `shareable-skills.vendored-time`, keep the name identical (so130 drift checks work), and add a read-only body banner. Do not edit a vendored skill — route the131 change upstream. Run `./scripts/check-vendored-drift.mts` to detect edited or stale copies.132- **Fork** = you take ownership: a new skill with your own owner-prefix and name, plus optional133 `shareable-skills.forked-from`. Read `./references/spec.md` §7–§8.134135## Defaults136137- Prefer `organization`/`public` when the skill moves to another repo with light adaptation and138 without dragging repo-only wrappers. Prefer `repo-local` when it depends on this repo's specific139 scripts, policies, layout, or adoption workflow.140- Keep `shareable-skills.requires` short. Prefer splitting a mixed skill over marking a broadly141 useful core `repo-local` because one section is repo-tied.142- Do not encode shareability, namespace, or vendoring status in the name — those live in metadata.143144## Validation (sharing-spec validator only)145146Run `./scripts/validate-sharing.mts` (TypeScript, needs Node >= 22). It reads the domain registry147from `./references/registry.json` and the `phase` there controls strictness (now Phase 3, hard-fail):148149```sh150node ./scripts/validate-sharing.mts <skill-dir>151# point it at the skills root with --all (in this repo, .agents/skills):152node ./scripts/validate-sharing.mts .agents/skills --all153# a repo may wrap it in a package-manager script; this repo exposes:154yarn validate:sharing # or `yarn validate` to run both validators155```156157This validator checks the **sharing spec** and is separate from the general skill-quality validator158owned by the repo's skill-authoring skill (`ref-sp-agents-skills-authoring` here, `validate-skill.mts`).159Run both when a skill should be good *and* shareable.160161- `name` matches `type + owner-prefix + domain (+ template) + topic` and equals the folder name.162- `shareable-skills.domain` exists in the registry (else hard fail); unknown `shareable-skills.tags`163 warn only.164- Every `shareable-skills.requires` entry resolves to an existing skill; no skill hard-depends on a165 lower-visibility skill (`repo-local` < `organization` < `public`).166- `shareable-skills.visibility: public` carries a top-level `license`.167- Vendored copies keep `shareable-skills.owner` upstream and carry a read-only body banner.168- Legacy keys are no longer accepted (Phase 3). Full rules in `./references/spec.md` §10.169170### Plugin-manifest check (`--all` runs only)171172If the repo publishes a plugin (`.claude-plugin/plugin.json`), the validator also checks that173manifest against the catalog. This matters because **the manifest's `skills` list is where the174visibility tiers are actually enforced**: with a marketplace-root source the enumerated paths are the175complete published set, and nothing else stops a `repo-local` skill from shipping. Severity follows176the stakes:177178- **Error** — a listed skill is not `public`. Publishing leaks a skill that was never meant to leave,179 and installs are cached on users' machines, so it cannot be recalled.180- **Error** — a listed path is not a skill. Dangling entries silently drop from the published plugin.181- **Error** — the manifest lists the skills *container* while non-public skills exist inside it.182 Listing the container publishes everything in it, tier metadata notwithstanding.183- **Warning** — a `public` skill is missing from the manifest. It will not ship, but a skill can be184 legitimately in flight before its first release, and an omission is recoverable where a leak is not.185186A repo with no `.claude-plugin/plugin.json` is unaffected. The manifest's semantics are owned by187`ref-sp-agents-plugin-marketplaces`; this validator only enforces that they agree with the tiers.188189## References190191- `./references/spec.md` — the full normative spec (load for exact rules, examples, migration).192- `./references/checklist.md` — quick pass before finalizing sharing metadata on a skill.193- `./scripts/validate-sharing.mts` — the sharing-spec validator (TypeScript, Node >= 22).194- `./scripts/check-vendored-drift.mts` — flags vendored copies that were edited or whose upstream advanced.195- `./references/registry.json` — the domains/tags/aliases registry and validator `phase`.196- `ref-sp-agents-skills-authoring` — general skill-quality authoring (complementary).197- `ref-sp-agents-plugin-marketplaces` — publishing skills as an agent plugin via a marketplace;198 the mechanics behind the marketplace export destination named under Visibility.199- `tool-sp-make-skill-shareable` — guided shareability decision for a skill.200- `.agents/tasks/skill-standardization-spec/README.md` — decision log and rationale (local, may be absent).