Scaffolds a new agent skill with SKILL.md, scripts/, and references/ layout. Supports local or global install with symlink to .claude/skills/.
How this skill is triggered — by the user, by Claude, or both
Slash command
/paulrberg-agent-skills:create-skill <skill-name> [--project | --global]<skill-name> [--project | --global]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Bootstrap a new agent skill, then symlink it into `.claude/skills/` so Claude Code can discover it. Default to splitting bulk content into `references/` and `scripts/` so `SKILL.md` stays lean.
Bootstrap a new agent skill, then symlink it into .claude/skills/ so Claude Code can discover it. Default to splitting bulk content into references/ and scripts/ so SKILL.md stays lean.
my-skill). Stop if missing or invalid.--global (optional): install under ~ instead of the current repo.| Mode | Skill source | Claude Code symlink |
|---|---|---|
| local (default) | .agents/skills/<name>/ | .claude/skills/<name> |
--global | ~/.agents/skills/<name>/ | ~/.claude/skills/<name> |
For local mode, <scope> is the chosen project directory. It may be the repository root or a nested project/workspace directory under a larger repo; a local .agents/skills/ below the repo root is valid when that is the intended project scope.
The symlink target is always the relative path ../../.agents/skills/<name> so it resolves correctly in both scopes.
<name>/
├── SKILL.md # Required: frontmatter + lean workflow (aim for <500 lines)
├── agents/
│ └── openai.yaml # Required: Codex metadata; disables implicit invocation
├── scripts/ # Optional: helper code (prefer TypeScript via bun run; Python via uv)
├── references/ # Optional: long-form docs loaded on demand
└── assets/ # Optional: templates / fonts / images used in OUTPUT (never loaded into context)
Agents load skills via progressive disclosure, in three stages:
name + description are visible at startup. Front-load triggers in description.SKILL.md body is read once a task matches.scripts/ run without being read into context; references/ are read only when SKILL.md explicitly links to them.Keep SKILL.md focused on workflow. Push bulk into scripts/ (deterministic logic) or references/ (documentation).
scripts/ whenSKILL.md.Scripts are token-efficient: the agent invokes them without reading them. Document the CLI signature in SKILL.md and leave the implementation in scripts/.
Prefer scripts/*.ts run with bun run scripts/<name>.ts, unless there is a good reason TypeScript is the wrong fit for the helper. Python is also a good choice for data, text, and file processing; run Python helpers through uv run scripts/<name>.py, not raw python or python3.
references/ whenSKILL.md.Rules of thumb:
references/placeholder.md directly from SKILL.md, never reference-to-reference.SKILL.md so the agent can locate sections without reading the whole file.SKILL.md or a reference, never both.SKILL.md that says when to read it.Pattern A — High-level guide + topical references
SKILL.md
references/
├── forms.md
├── api.md
└── examples.md
SKILL.md teaches the happy path; references hold deep-dive material.
Pattern B — Domain or variant split
SKILL.md # workflow + selection logic
references/
├── aws.md
├── gcp.md
└── azure.md
The agent reads only the variant the user picked — irrelevant providers never enter context.
Pattern C — Conditional details
Inline the basic case in SKILL.md, link advanced files for edge cases (tracked-changes.md, ooxml.md, etc.).
README.md, INSTALLATION.md, CHANGELOG.md, QUICK_REFERENCE.md — extraneous.Always fetch the latest spec before authoring frontmatter or content:
Use WebFetch to confirm the current frontmatter schema, naming rules, and progressive-disclosure conventions. Do not guess — the spec evolves.
<scope>/.agents/skills/<name>/ or <scope>/.claude/skills/<name> already exists.Before writing anything, decide what belongs where:
scripts/<name>.ts run with bun run; use scripts/<name>.py through uv run when Python is a better fit.references/<topic>.mdassets/SKILL.md.Sketch the directory tree first, then create only the subdirectories the layout actually needs.
Before writing the frontmatter description or any body prose, read references/writing-great-skills.md — the predictability levers that shape every wording choice: invocation loads, one-trigger-per-branch descriptions, leading words, completion criteria, and the no-op/pruning tests.
mkdir -p "<scope>/.agents/skills/<name>/agents"
# Add only the subdirectories the layout calls for:
# mkdir -p "<scope>/.agents/skills/<name>/scripts"
# mkdir -p "<scope>/.agents/skills/<name>/references"
Write <scope>/.agents/skills/<name>/SKILL.md with:
description last. The description is the only field seen at discovery time — front-load trigger phrases there, not in the body.# Title.disable-model-invocation and user-invocable fields set for Claude behavior. Omit only when intentionally relying on Claude defaults: disable-model-invocation: false, user-invocable: true.## Arguments (if any) and ## Workflow sections in imperative form with concrete steps.references/ file the workflow may need, each with a one-line note describing when to read it.bun run scripts/<name>.ts or uv run scripts/<name>.py), so the agent can call them without reading them.Aim for SKILL.md under 500 lines. If a section grows past ~50 lines and is not core workflow, move it to references/ and link it.
Write <scope>/.agents/skills/<name>/agents/openai.yaml with:
policy:
allow_implicit_invocation: true
Set allow_implicit_invocation to the inverse of SKILL.md disable-model-invocation. If later adding Codex UI metadata or MCP/tool dependencies, merge them into the same file and keep the policy.
Always create a relative symlink so Claude Code picks the skill up from its own discovery path:
mkdir -p "<scope>/.claude/skills"
ln -s "../../.agents/skills/<name>" "<scope>/.claude/skills/<name>"
test -f "<scope>/.agents/skills/<name>/SKILL.md"test -f "<scope>/.agents/skills/<name>/agents/openai.yaml"readlink "<scope>/.claude/skills/<name>" resolves to the source directory.description last.SKILL.md frontmatter as YAML before loading a skill. Avoid unquoted colon-space tokens in scalar values
such as Triggers: "foo" inside description; either omit the label or quote the whole value.description (discovery-time), not in the body (activation-time only).SKILL.md.SKILL.md (e.g., references/placeholder.md, scripts/example.sh) are relative to the skill directory.agents/openai.yaml with policy.allow_implicit_invocation derived from SKILL.md, never the other way around.bun run; use Python through uv run, never raw python or python3./bin/bash), since Codex uses the built-in Bash by default.npx claudepluginhub joshuarweaver/cascade-code-general-misc-1 --plugin paulrberg-agent-skillsCreates new Claude Code agent skills with proper folder structure, SKILL.md format, and optional examples/templates. Use when adding model-invoked skills for autonomous activation.
Creates new Claude Code agent skills with proper structure, progressive disclosure, and bundled resources. Use when user wants to create, write, or build a new skill.
Creates, updates, or validates SKILL.md agent skills including frontmatter authoring, bundled resource planning, and three-phase discoverability validation.