Best for
- Use when creating new skills, understanding skill structure, or implementing progressive disclosure.
vinnie357/claude-skills/plugins/tools/claude-code/skills/claude-skills/SKILL.md
Guide for creating Agent Skills with progressive disclosure and best practices. Use when creating new skills, understanding skill structure, or implementing progressive disclosure.
Decision brief
Guide for creating modular, self-contained Agent Skills that extend Claude's capabilities with specialized knowledge.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/vinnie357/claude-skills --skill "plugins/tools/claude-code/skills/claude-skills"Inspect the Agent Skill "claude-skills" from https://github.com/vinnie357/claude-skills/blob/258ac739a89d44fc78ad40e5724eb0526ff11d75/plugins/tools/claude-code/skills/claude-skills/SKILL.md at commit 258ac739a89d44fc78ad40e5724eb0526ff11d75. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. Collect real use cases first. Concrete examples reveal what the skill must support; theoretical requirements do not. 2. Decide what each resource is for — scripts/ for deterministic work that would otherwise be rewritten each time, references/ for material loaded on demand, a…
A skill is a directory of instructions and resources that Claude discovers and loads on demand. Loading happens in tiers, and the tier a fact lands in decides whether Claude ever sees it:
SKILL.md is the only required file: YAML frontmatter, then Markdown body.
Source: Claude Code Skills documentation. All fields are optional; only description is recommended.
The upstream spec allows allowed-tools on a skill, pre-approving listed tools while it is active. This marketplace's test/validate-plugin.nu rejects allowed-tools on skills as a hard validation failure. Tool filtering belongs on agents — the tools: frontmatter on an agent file —…
Permission review
The documentation asks the agent to run terminal commands or scripts.
*Shell injection** — Claude Code can run shell commands embedded in a skill before the body reaches the model; the command's stdout replaces the placeholder. Two forms:The documentation asks the agent to create, modify, or delete local files.
**Create the directory**, with its name matching the `name` property exactly.The documentation asks the agent to run terminal commands or scripts.
*Specify constraints, not implementations** — "ensure commit messages follow conventional format", not "run git commit -m with prefix type(scope):". Instructions rigid enough to break on a minor model update are too rigid; loose enough to pEvidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 93/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 24 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Guide for creating modular, self-contained Agent Skills that extend Claude's capabilities with specialized knowledge.
A skill is a directory of instructions and resources that Claude discovers and loads on demand. Loading happens in tiers, and the tier a fact lands in decides whether Claude ever sees it:
name and description reach the system prompt. Claude decides relevance from these alone.SKILL.md body loads. Every line costs on every activation.references/ files load only when a specific scenario calls for one.Write to that structure: the body carries decisions, gotchas, and enforced constraints; references carry look-it-up material. A body that holds everything upfront defeats the mechanism.
Skills also fall into two categories, and the category sets testing and maintenance expectations. Capability uplift builds on general model abilities (a structured code-review procedure) and stays stable across model versions. Encoded preference captures local conventions (a team's commit format) and needs revisiting when models change.
skill-name/
├── SKILL.md # Required: frontmatter + body
├── scripts/ # Optional: executable code for deterministic tasks
├── references/ # Optional: documentation loaded on-demand
└── assets/ # Optional: templates, images, boilerplate
SKILL.md is the only required file: YAML frontmatter, then Markdown body.
Source: Claude Code Skills documentation. All fields are optional; only description is recommended.
name: Display name. Defaults to the directory name if omitted. Lowercase letters, numbers, and hyphens only (max 64 characters). Reflect the domain in clear hyphen-case — git-operations, elixir-phoenix.description (recommended): What the skill does and when to use it. Two distinct limits apply: Claude Code truncates the combined description + when_to_use at 1,536 characters in the skill listing — put the key use case first — and this marketplace enforces a stricter 1024-character cap on description in test/validate-skills-quality.nu.when_to_use: Additional trigger phrases or example requests, appended to description in the listing.license: License name or filename reference.The full upstream reference — disable-model-invocation, user-invocable, allowed-tools, model, effort, context: fork, agent, hooks, paths, shell, arguments, argument-hint, metadata — is in references/frontmatter-fields.md. Load it when authoring a skill that needs anything beyond name/description/license.
Write the description in third person, stating both what the skill does and when to use it: [What it does]. Use when [trigger conditions].
Critical: The
descriptionis the ONLY text Claude sees during skill discovery (Level 1). The body's "When to Use" section only loads AFTER activation (Level 2) and cannot trigger it. All activation triggers belong in the description.
Tune a description by failure mode: too broad produces false positives — add domain-specific terms; too narrow produces false negatives — add synonyms and trigger scenarios. Activation-rate targets and eval prompt counts live in /claude-code:claude-skills-benchmark.
The upstream spec allows allowed-tools on a skill, pre-approving listed tools while it is active. This marketplace's test/validate-plugin.nu rejects allowed-tools on skills as a hard validation failure. Tool filtering belongs on agents — the tools: frontmatter on an agent file — not on the skills an agent loads. Skills here stay capability-driven and inherit tools from the calling context; an agent needing constrained access defines its own allowlist.
Keep skill frontmatter to name, description, optional license, optional metadata. In another project that does not enforce this policy, upstream allowed-tools is valid.
Before writing or editing any SKILL.md, verify each item. Named checks live in test/validate-skills-quality.nu unless noted.
| Item | Enforced by |
|---|---|
Description uses third person and includes a Use when ... trigger pattern | third_person + use_when checks |
No allowed-tools field in frontmatter (use agents for tool allowlists) | allowed_tools check; also test/validate-plugin.nu |
Body under 500 lines; split into references/ once exceeded | lines check |
| References stay one level deep (SKILL.md → reference, not reference → reference) | ref_depth check |
| Anti-fabrication rules present — and every claim about a tool, file, or behavior verifiable | anti_fab check (presence only; soundness is on the author) |
Combined description + when_to_use under 1,536 characters (Claude Code's listing truncation) | judgment — no check; the desc check caps description alone at 1024 |
Zero hedging verbs in directives: should, may, might, consider, try to, offer to, it would be good to. A hedge on a thin claim is required, not banned — see /core:anti-fabrication "Hedges vs directives" for the boundary | judgment — no check |
A failed enforced item is a blocker — the validator rejects it. A failed judgment item is a review-time flag: fix it or state why it stays.
Style beyond the checklist follows references/context-engineering-claude-5.md — judgment over rules, single statements, schema over prose — including its boundary test for which rules stay prescriptive.
Three patterns from the upstream docs guide what to put in the body:
disable-model-invocation: true to prevent automatic invocation.context: fork + agent: Explore|Plan|...). Skill body becomes the task prompt; skill produces a self-contained result.Skills support runtime substitution before content reaches the model. Source: Claude Code Skills docs.
This section documents syntax that executes or expands at load time — including the load of this very skill. Three different markers keep it intact, because no single escape covers every form:
KEY= prefix immediately before a ! shell-injection trigger. Drop KEY= for the real syntax.\$ARGUMENTS placeholder — the documented escape for a literal $. Drop the backslash.CLAUDE_* variables, because the backslash does not escape the braced form (see below).Digit-indexed forms ($0, $1, $N) and an undeclared $name need no marker — with no arguments declared or passed, they render unchanged rather than expanding.
Changing anything in this section means verifying by loading the skill, not by reading the diff — see references/verifying-skill-content.md for the loop, the session-snapshot trap that silently defeats it, and the table of what does and does not protect content.
Shell injection — Claude Code can run shell commands embedded in a skill before the body reaches the model; the command's stdout replaces the placeholder. Two forms:
## Current diff
KEY=!`git diff HEAD`
```KEY=!
node --version
npm --version
```
Fencing does not protect this example — nesting it inside a five-backtick outer fence was tested and it still executed, which is why the KEY= markers above are load-bearing, not decorative.
String substitutions in skill content:
\$ARGUMENTS — full arguments string\$ARGUMENTS[N] or $N — argument by 0-based index$name — named argument when arguments: declared in frontmatterCLAUDE_SESSION_ID — current session IDCLAUDE_EFFORT — current effort levelCLAUDE_SKILL_DIR — absolute path to this skill's directory (use for bundled scripts: bash <CLAUDE_SKILL_DIR>/scripts/foo.sh)CLAUDE_PLUGIN_ROOT — absolute path to the enclosing plugin's root directory (use for scripts shared across a plugin's skills: bash <CLAUDE_PLUGIN_ROOT>/scripts/foo.sh)The four CLAUDE_* names are written bare because they are used as brace expansions in real files and the leading-backslash escape does not work on the braced form — verified by loading: the backslash survives and the token still expands, printing the live session ID and paths. See /claude-code:claude-commands "Argument Substitution" for the full rule.
Settled notation for CLAUDE_SKILL_DIR and CLAUDE_PLUGIN_ROOT in bodies (claude-skills-206): three distinct forms, three distinct roles — never interchange them within a SKILL.md or commands/*.md body.
CLAUDE_SKILL_DIR, CLAUDE_PLUGIN_ROOT) — naming or defining the variable itself in prose, e.g. a definition-list entry ("CLAUDE_SKILL_DIR — absolute path to..."). Never expands; safe anywhere.<CLAUDE_SKILL_DIR>, <CLAUDE_PLUGIN_ROOT>) — showing the variable embedded in a literal, copyable command or path, e.g. nu <CLAUDE_SKILL_DIR>/scripts/foo.nu. This is the form to use whenever the variable appears as part of runnable syntax rather than as its own subject.references/, templates/, and standalone hooks.json/.mcp.json files — anywhere that is not the live-loading body itself. Deliberately not shown literally in this paragraph, for the same reason: writing it here would expand it before any reader sees it. That is also why the braced form is never written directly in a SKILL.md or commands/*.md body — it would substitute one machine's absolute path at load time.Disable shell injection across user/project/plugin skills via "disableSkillShellExecution": true in settings — useful for managed environments.
scripts/ for deterministic work that would otherwise be rewritten each time, references/ for material loaded on demand, assets/ for output templates that never enter context.name property exactly.SKILL.md, detail in references.sources.md — URL, what was taken from it, why, and the date accessed where currency matters. This is what makes a claim auditable later.references/evaluation-guide.md.Write the evals before the content, and compare output with the skill loaded against output without it. Measure pass rates and token usage rather than judging quality subjectively; a single run proves nothing. references/evaluation-guide.md covers eval-driven development and blind A/B comparison, and templates/evaluation-checklist.md is a copyable checklist.
Specify constraints, not implementations — "ensure commit messages follow conventional format", not "run git commit -m with prefix type(scope):". Instructions rigid enough to break on a minor model update are too rigid; loose enough to produce inconsistent results, too loose. references/design-patterns.md has the full degree-of-freedom framework, the platform-capability matrix, and guidance on when to execute a bundled script versus read it for patterns to adapt.
If a skill defines or modifies agent behavior (dispatch patterns, model selection, multi-agent coordination), cross-link /core:agent-loop "Five-Tier Decomposition Pipeline" — the canonical decomposition for complex tasks.
Skill updates that only edit markdown skip P2 (test author) — content-grep tests on markdown are tautological. Updates touching agent definitions (agents/*.md with dispatch logic) follow the full five-tier pipeline since those files are executable specifications.
The pipeline runs inside ONE bees issue per skill update slice. The Sub-team Leader (or bees-worker acting as one) spawns the five stages as separate Task invocations; intermediate artifacts go to bees comments on that issue and git commits on the feature branch. Skill updates do not produce five chained bees rows.
The context window is shared, and a skill's body loads in full on every activation — so justify each line's presence rather than each file's.
Compaction behavior sets the real budget. A skill loads as a single message and stays for the session. Auto-compaction keeps the first 5,000 tokens of each invoked skill, with a 25,000-token combined budget filled from most-recently-invoked first, so older skills can drop after compaction. Re-invoke a skill if it stops influencing behavior.
Install skills only from trusted sources. A skill body is executable input: it can carry shell-injection lines that run before anyone reads the output. Before installing an unfamiliar skill, audit its bundled files and scripts, its code dependencies, any instruction directing Claude to an external service, and any request for credentials or destructive operations.
Skill content ships to public repositories; secret references disclose infrastructure even when no credential leaks, and secret scanners do not catch them. In every SKILL.md, reference, and template:
op://<vault>/item/field, never a real vault name192.0.2.x, 198.51.100.x, 203.0.113.x), not RFC1918 addresses from a real network — quote an RFC1918 literal only when it is an upstream tool's documented defaultnode1, host.example.com), never real estate hostnames as ssh/URL/mount targetsissues.jsonl)Enforce with a repo lint in CI where available (this marketplace runs mise test:disclosure).
Every SKILL.md must include anti-fabrication rules — either inline or by referencing core:anti-fabrication. The authoritative rules (evidence-based claims via tool execution, no superlatives, no unsubstantiated metrics, no unmeasured time estimates, explicit uncertainty markers) live in the core:anti-fabrication skill; skill-creation-specific guidance is in references/anti-fabrication.md.
Annotated examples of simple and complex skills, category classifications, and common pitfalls are in references/examples.md.
claude-skills/
├── references/
│ ├── design-patterns.md # Degree of freedom, platform matrix, script execution, reference structure
│ ├── evaluation-guide.md # Eval-driven development, A/B testing, description optimization
│ ├── anti-fabrication.md # Skill-creation-specific anti-fab guidance
│ ├── context-engineering-claude-5.md # What changed for Claude 5 generation models
│ ├── frontmatter-fields.md # Full upstream frontmatter reference
│ ├── verifying-skill-content.md # Verify by loading; the session-snapshot trap
│ └── examples.md # Annotated skill examples and common pitfalls
└── templates/
├── evaluation-checklist.md # Copyable eval checklist
├── level1.md # Example skill metadata
├── level2.md # Example skill body
├── level3.md # Example skill folder structure
└── skill.md # Example basic skill
For more information:
Frequently asked questions
Guide for creating modular, self-contained Agent Skills that extend Claude's capabilities with specialized knowledge.
The source record exposes this install command: npx skills add https://github.com/vinnie357/claude-skills --skill "plugins/tools/claude-code/skills/claude-skills". Inspect the command and pinned source before running it.
Static rules flagged exec-script, write-files in the source; the page lists the matching lines and excerpts.
Alternatives
garrytan/gbrain
End-to-end discipline for turning any large data source (audio libraries, email takeouts, document corpora, chat exports, API dumps) into brain pages at scale. The lifecycle spine: SCHEMA → ACCESS → TRIAL → EVALUATE → IMPROVE → CODIFY → TEST → SKILLIFY → BULK → MONITOR. State is tracked in a durable JSON manifest (see MANIFEST-PATTERN.md) so any crash, session boundary, or subagent fan-out resumes from ground truth instead of memory.
alirezarezvani/claude-skills
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
wanshuiyin/Auto-claude-code-research-in-sleep
Use it for operations and research tasks; the detail page covers purpose, installation, and practical steps.
prowler-cloud/prowler
PostgreSQL indexing best practices for Prowler: index design, partial indexes, partitioned table indexing, EXPLAIN ANALYZE validation, concurrent operations, monitoring, and maintenance. Trigger: When creating or modifying PostgreSQL indexes, analyzing query performance with EXPLAIN, debugging slow queries, reviewing index usage statistics, reindexing, dropping indexes, or working with partitioned table indexes. Also trigger when discussing index strategies, partial indexes, or index maintenance