From skill-factory
Create, validate, and release a Claude Agent Skill from the @aubron package factory monorepo. Use this when adding a new skill to this repo, packaging a skill as an installable plugin, wiring it into the marketplace, or deciding how to distribute a skill (marketplace plugin vs library-bundled). Triggers on requests like "add a skill", "make this a skill", "publish/release a skill", or "how do we distribute skills here".
How this skill is triggered — by the user, by Claude, or both
Slash command
/skill-factory:skill-factoryThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
How this monorepo contains and ships Claude Agent Skills. Skills here are **npm
How this monorepo contains and ships Claude Agent Skills. Skills here are npm
packages that are also Claude plugins: a SKILL.md plus a .claude-plugin/plugin.json,
published under @aubron/* and listed in a root marketplace. There are two
distribution shapes — pick by intent:
--type skill package in the aubron marketplace.SKILL.md shipped inside a normal library
(e.g. @aubron/ankerts-cli) so consumers of that library can install it. See
Pattern B below.pnpm new <name> --type skill --description "One line: what it does + when to use it."
This scaffolds packages/<name>/ with:
packages/<name>/
.claude-plugin/plugin.json # the plugin manifest (name = install id)
skills/<name>/SKILL.md # the skill itself
package.json # @aubron/<name>; files ship .claude-plugin + skills
README.md
It also drops a changeset and regenerates the root .claude-plugin/marketplace.json.
The frontmatter is the contract:
---
name: my-skill # kebab-case; this is the /command name and install id
description: What it does AND when Claude should invoke it. # this line drives triggering
---
name must be kebab-case (a-z, 0-9, -).description is required and is how Claude decides to trigger the skill —
lead with the capability, then concrete triggers ("Use this when…"). Keep
description (+ optional when_to_use) well under ~1024 chars.SKILL.md small. Move deep reference docs,
examples, and scripts into sibling files under skills/<name>/ and link to
them; the agent reads them only when needed.allowed-tools, disable-model-invocation
(user-only), user-invocable: false (Claude-only), argument-hint, model.pnpm --filter @aubron/<name> test # runs `aubron-skill validate`
pnpm --filter @aubron/<name> lint # prettier --check
aubron-skill validate checks the plugin manifest, the SKILL.md frontmatter
(name kebab-case, description present and within limits), and the skills/
layout. claude plugin validate . is the Claude-native cross-check.
The root .claude-plugin/marketplace.json is generated from the skill packages —
never hand-edit it. Regenerate after adding/removing a skill or changing its
source preference:
pnpm --filter @aubron/skill-tools exec aubron-skill sync-marketplace
# CI guard: fail if the committed file is stale
aubron-skill sync-marketplace --check
Each skill package declares how the marketplace should fetch it, via
"aubronSkill": { "source": ... } in its package.json:
git-subdir (default): the marketplace points at packages/<name>/ in the
repo. No publish step — works the moment you push. Best for unreleased/dev skills.npm: the marketplace references the published @aubron/<name> package,
pinned to ^version. Best for released skills. Requires a changeset + publish.Flip git-subdir → npm when a skill is ready to release, then re-run
sync-marketplace.
Releases are CI-first (same as every package here):
pnpm changeset (the scaffolder already wrote an initial one) — pick the bump.main → the Version Packages PR bumps versions/changelogs.@aubron/<name> to npm (provenance on).npm marketplace source, bump its pinned version and
re-run sync-marketplace.claude plugin marketplace add GraffAI/aubron # once
claude plugin install <name>@aubron # install a skill's plugin
claude plugin list --available
To ship a skill with a library so its consumers get it (the way
@aubron/ankerts-cli ships an ankerts skill):
skills/<skill>/SKILL.md inside the library package and add "skills" to
its files so it's published.node_modules (e.g. a
--json introspection command or the README) — no network needed.<bin> skills install) that copies the bundled
skill into .claude/skills/ on demand. Never use a postinstall copy —
it's unversioned, hard to uninstall, and surprising.Because SKILL.md is the open Agent Skills standard, the same file also works in
Codex, Cursor, and Copilot.
pnpm eject <name> copies a skill package into its own repo, rewriting
workspace:*/catalog: deps to concrete versions. The ejected repo keeps its
.claude-plugin/plugin.json + skills/, so it can be referenced directly by a
github/git-subdir marketplace source.
Provides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.
npx claudepluginhub graffai/aubron --plugin skill-factory