Claude Code Plugin Structure
anthropics/claude-plugins-official
Explains the directory layout, plugin.json manifest and component organization of a Claude Code plugin, including auto-discovery and portable paths.
Builds a new Claude Code skill from scratch through a relentless, evidence-based interview that walks the skill's design tree decision-by-decision — entity fit, use cases, name, description…
$ npx skills add testdouble/han --skill skill-builder -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install testdouble/han skill-builder --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .claude/skills && cp -r skills-src/han-plugin-builder/skills/skill-builder .claude/skills/skill-builder && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "skill-builder" agent skill from https://github.com/testdouble/han/tree/main/han-plugin-builder/skills/skill-builder into .claude/skills/skill-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skill-builder", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/testdouble/han/tree/main/han-plugin-builder/skills/skill-builderType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add testdouble/han --skill skill-builder -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install testdouble/han skill-builder --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .agents/skills && cp -r skills-src/han-plugin-builder/skills/skill-builder .agents/skills/skill-builder && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "skill-builder" agent skill from https://github.com/testdouble/han/tree/main/han-plugin-builder/skills/skill-builder into .agents/skills/skill-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skill-builder", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add testdouble/han --skill skill-builder -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install testdouble/han skill-builder --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/han-plugin-builder/skills/skill-builder .cursor/skills/skill-builder && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "skill-builder" agent skill from https://github.com/testdouble/han/tree/main/han-plugin-builder/skills/skill-builder into .cursor/skills/skill-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skill-builder", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/testdouble/han.git --path han-plugin-builder/skills/skill-builder--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add testdouble/han --skill skill-builder -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install testdouble/han skill-builder --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/han-plugin-builder/skills/skill-builder .gemini/skills/skill-builder && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "skill-builder" agent skill from https://github.com/testdouble/han/tree/main/han-plugin-builder/skills/skill-builder into .gemini/skills/skill-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skill-builder", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install testdouble/han skill-builderInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add testdouble/han --skill skill-builder -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .github/skills && cp -r skills-src/han-plugin-builder/skills/skill-builder .github/skills/skill-builder && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "skill-builder" agent skill from https://github.com/testdouble/han/tree/main/han-plugin-builder/skills/skill-builder into .github/skills/skill-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skill-builder", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add testdouble/han --skill skill-builder -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install testdouble/han skill-builder --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/han-plugin-builder/skills/skill-builder .opencode/skills/skill-builder && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "skill-builder" agent skill from https://github.com/testdouble/han/tree/main/han-plugin-builder/skills/skill-builder into .opencode/skills/skill-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skill-builder", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skill-builderBuilds a new Claude Code skill from scratch through a relentless, evidence-based interview that walks the skill's design tree decision-by-decision — entity fit, use cases, name, description…
Skill Builder is an agent skill from testdouble/han. Builds a new Claude Code skill from scratch through a relentless, evidence-based interview that walks the skill's design tree decision-by-decision — entity fit, use cases, name, description, workflow steps, tools, and progressive-disclosure layout — then reviews the finished skill against the plugin-building guidance and applies every fix it finds. Use when creating, authoring, scaffolding, designing, or drafting a new skill or slash command. Does not build an agent or subagent — use agent-builder. Does not…
Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Agent Workflows, covering Building AI agents, Skill authoring and Hooks and plugins. The repository describes itself as: Han: AI skills and agents for "Solo" product engineers and small teams. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit abba73a. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadWriteEditGlobGrepBash(find *)Bash(mkdir *)Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh")From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
bashFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Skill Builder loads about 4.1k tokens when it runs. Until then it costs about 150 tokens; SKILL.md has 1,776 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from testdouble/han at commit abba73a, republished under its MIT licence (© testdouble). 1,776 words, ~4,138 tokens.
.claude/skills/skill-builder/SKILL.md (or your agent's skills folder).bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh" 2>/dev/null || echo "$HOME/.claude"cat .han/config.md 2>/dev/null || echo ""As your first action, use the Read tool on .han/config.md inside the personal config directory path above. A read
that returns no file is no personal configuration: continue silently. When that file or the project .han/config.md
probe supplies content, apply it per config-rule.md, which governs precedence
between the two files, relative-path resolution, and what to do with a file that reads but cannot be used.
The authoritative skill-authoring guidance ships in this plugin. Read the specific document a decision needs, when that decision is on the table — never read them all up front, because that defeats progressive disclosure and burns context on guidance the current skill does not touch.
${CLAUDE_PLUGIN_ROOT}/skills/guidance/references/${CLAUDE_PLUGIN_ROOT}/skills/guidance/references/skill-building-guidance/Map from decision to governing document (read just-in-time):
| Decision on the table | Read |
|---|---|
| Skill vs. agent vs. hook | plugin-entity-taxonomy.md |
| Use cases, trigger phrases, test cases | skill-building-guidance/use-case-planning.md |
| Directory name, file name, dependency prefix | skill-building-guidance/naming-conventions.md |
The description field (four components, boundaries) | skill-building-guidance/skill-description-frontmatter.md, skill-building-guidance/skill-description-length.md |
| Which frontmatter fields to set | skill-building-guidance/skill-frontmatter-fields.md |
| Where content lives (body vs. references vs. scripts vs. assets) | skill-building-guidance/progressive-disclosure.md, skill-building-guidance/skill-reference-files.md |
| Step structure and workflow shape | skill-building-guidance/workflow-patterns.md, skill-building-guidance/writing-effective-instructions.md |
allowed-tools, Bash permission granularity | skill-building-guidance/allowed-tools-bash-permissions.md, skill-building-guidance/allowed-tools-AskUserQuestion.md |
| Reading config / runtime data | skill-building-guidance/context-injection-commands.md, skill-building-guidance/dynamic-project-discovery.md |
| Running scripts | skill-building-guidance/script-execution-instructions.md |
| Dispatching agents from the skill | skill-building-guidance/agent-dispatch-namespacing.md, plus agent-building-guidelines/multi-agent-economics.md |
| Degraded environments (no git, missing tools) | skill-building-guidance/graceful-degradation.md, skill-building-guidance/optional-git-repositories.md |
| Frontmatter safety (angle brackets, YAML types) | skill-building-guidance/security-restrictions.md |
| Hardening fuzzy steps into deterministic ones | skill-building-guidance/hardening-fuzzy-vs-deterministic.md |
| Splitting or composing skills | skill-building-guidance/skill-decomposition.md, skill-building-guidance/skill-composition.md |
| Defining success and tests | skill-building-guidance/success-criteria-and-testing.md |
| New plugin needed (plugin.json, marketplace.json) | claude-marketplace-and-plugin-configuration/ and templates/ |
plugin.json, conventions, the guidance documents above — explore instead of asking. Only surface
questions that genuinely require the user's judgment.Read the user's argument and the conversation to extract what the skill should do. If the request is too thin to start (for example, just "build a skill"), ask the user for one or two sentences on what the skill should accomplish and what triggers it — nothing else yet.
Confirm the entity type before anything else. Read
${CLAUDE_PLUGIN_ROOT}/skills/guidance/references/plugin-entity-taxonomy.md and apply its decision heuristic. A skill
is a deterministic, flowchartable process ("Can I flowchart every path?" → skill). If the work is really contextual
judgment with no fixed flowchart, it is an agent — stop and recommend agent-builder. If it fires automatically on an
event, it is a hook. If the request bundles a deterministic process and a judgment layer, recommend building them
separately and composing them. Only proceed once a skill is the right entity.
Locate the target plugin and learn its conventions before asking the user anything beyond the framing. Use Glob, Grep,
and find to gather:
.claude-plugin/plugin.json (name, description, version). If the user has not
said which plugin, infer candidates from the repository and confirm the target in Step 4.{plugin}/skills/*/SKILL.md) — their descriptions, frontmatter, step structure, and
the trigger space they already own. New descriptions must disambiguate against these siblings in both directions.CLAUDE.md, AGENTS.md, and any project-discovery.md — repository conventions, the documentation root, and how
skills are catalogued.description mention.Record what was found (file paths) and what was not. A missing convention is itself a finding that shapes the skill.
Enumerate the decisions the skill needs, in dependency order. Resolve foundational decisions before dependent ones; never ask a dependent question before its parent is settled.
use-case-planning.md? What artifact or outcome does each use case produce?description say across all four components (what, when, boundary,
breadth), and how does it disambiguate against siblings in both directions?allowed-tools does each step need, at the right Bash granularity? Does the skill dispatch
agents (and are they available in this plugin)? Does it run scripts? Does it read runtime config via context
injection?references/ (templates, checklists, domain knowledge),
in scripts/ (deterministic operations), and in assets/ (output files)? What other frontmatter fields apply
(argument-hint, arguments, model, paths)?Keep each node a concrete decision with a candidate answer. Do not pre-fill the tree with content the user has not confirmed.
For each decision in dependency order:
Keep the interview moving — do not stall on questions the evidence can answer, and do not batch.
Create the skill directory and write the files:
{plugin}/skills/{skill-name}/ (use mkdir). The directory name is the slash command and must match the
frontmatter name.SKILL.md with:name (matching the directory), the description settled in the interview, allowed-tools, and any
other settled fields. Never put AskUserQuestion in allowed-tools. No XML angle brackets in any frontmatter
value.Always/Never X BECAUSE Y), include error handling for tool-dependent steps, and reference any
bundled resource by exact path.references/, scripts/, or assets/ and their files only if a use case needs them. Domain knowledge
(templates, checklists, matrices) goes in references/; deterministic operations go in scripts/; output-only files
go in assets/. Do not create empty or speculative folders..claude-plugin/plugin.json, and a
marketplace entry if the repo uses one) per the claude-marketplace-and-plugin-configuration/ guidance and the
templates/.This is the review pass the skill commits to. Re-read each governing document that applies to what you built and verify the finished files against it, applying every fix directly. Do not summarize problems for the user without fixing them. Cover at minimum:
plugin-entity-taxonomy.md) — the skill is genuinely a flowchartable process, not a judgment layer
that should be an agent.skill-description-frontmatter.md, skill-description-length.md) — third person; covers what,
when, boundary, and trigger breadth; weaves trigger words into prose rather than appending a keyword list; names
sibling skills in boundary clauses; disambiguates in both directions (update the sibling's description if a one-way
gap exists); within 1024 characters.naming-conventions.md) — directory name matches name, is a process/gerund name when the output is a
plan or doc, carries a dependency prefix when an external tool is required, no README.md in the skill folder,
SKILL.md cased exactly.progressive-disclosure.md, skill-reference-files.md) — body is process only and under
500 lines; domain knowledge is in references/; scripts hold deterministic work; nothing the toolchain already
enforces is restated; every reference file is linked directly from SKILL.md rather than only through another
reference file, every reference link stays inside the plugin directory, and any reference file over roughly 100 lines
opens with a ## Contents list unless it is a template copied whole into output.writing-effective-instructions.md, workflow-patterns.md) — steps are specific and
actionable; constraints embed reasoning; error handling is present; human gates sit only at irreversible actions; the
most critical item in each list is placed last.allowed-tools-bash-permissions.md, allowed-tools-AskUserQuestion.md,
security-restrictions.md) — Bash permissions are scoped correctly with separate entries; AskUserQuestion is
absent from allowed-tools; no angle brackets or non-standard YAML in frontmatter.dynamic-project-discovery.md, graceful-degradation.md,
optional-git-repositories.md) — the skill discovers project specifics dynamically rather than hardcoding them, and
degrades gracefully when a tool or git is absent, where relevant.agent-dispatch-namespacing.md) — if the skill dispatches agents, every dispatch uses the qualified
defining-plugin:agent-name, and the agents actually exist in an installed plugin.success-criteria-and-testing.md) — each use case maps to a triggering and functional test the user can
run.Apply the YAGNI discipline throughout: every step, reference file, tool permission, and frontmatter field must earn its place against a real use case. Cut anything added "for completeness" or "for future flexibility."
Summarize for the user:
Note that plugin entities rarely land in one pass: per iterative-plugin-development.md, plan for 3-5 iterations. Ask
whether the user wants to iterate on specific steps or considers the skill ready to test.
© testdouble, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in han-plugin-builder/skills/skill-builder of testdouble/han.
Open the folder on GitHubat commit abba73a
Skill Builder next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Skill Builder this skilltestdouble/han | 279 | — | ~4.1k | Automated safety check: Pass | MIT | |
| Claude Code Plugin Structureanthropics/claude-plugins-official | 37k | 10 repos | ~3.4k | Automated safety check: Pass | Apache-2.0 | |
| Agent Creatorsickn33/agentic-awesome-skills | 47k | 1 repos | ~2.7k | Automated safety check: Pass | MIT | |
| Claude Code Agent Developmentanthropics/claude-plugins-official | 37k | 8 repos | ~2.8k | Automated safety check: Pass | Apache-2.0 | |
| Claude Code Skill Developer Guidediet103/claude-code-infrastructure-showcase | 10k | 10 repos | ~3.5k | Automated safety check: Pass | MIT | |
| Claude Code Command Developmentanthropics/claude-plugins-official | 37k | 10 repos | ~4.8k | Automated safety check: Pass | Apache-2.0 |
anthropics/claude-plugins-official
Explains the directory layout, plugin.json manifest and component organization of a Claude Code plugin, including auto-discovery and portable paths.
sickn33/agentic-awesome-skills
Create custom AI subagents with proper plugin structure, persona generation, and companion routing skills.
anthropics/claude-plugins-official
Explains how to write agents for Claude Code plugins: the markdown file with YAML frontmatter, trigger descriptions, model and color settings, and system prompt design.
diet103/claude-code-infrastructure-showcase
A guide to creating and managing Claude Code skills with auto-activation: skill-rules.json triggers, hooks, enforcement levels, YAML frontmatter and progressive disclosure.
anthropics/claude-plugins-official
Explains how to write Claude Code slash commands: Markdown files with YAML frontmatter, arguments, file references, bash context and interactive prompts.
MicrosoftDocs/mcp
Create agent skills for Microsoft technologies using official documentation.
testdouble/han
Convert a stakeholder summary markdown file into a single self-contained HTML executive report — bottom line and decision asks up front, supporting detail later — styled with a Test Double-derived…
testdouble/han
Update Han plugin documentation so every skill, agent, guidance doc, index, and cross-reference is current and accurate.
testdouble/han
Authoritative guidance for building Claude Code skills, agents, and plugins, plus init and update steps that install and refresh the plugin-building skills in the current repository.
testdouble/han
Cut a Han release: update CHANGELOG.md with the changes since the last release, bump and tag every plugin that changed as {plugin-name}--v{version} so a version-constrained dependency can resolve…
testdouble/han
Builds a feature implementation plan from an existing feature specification (or equivalent context) through a facilitated team conversation.
testdouble/han
Restructure existing code without changing its behavior, through a test-gated refactoring loop: a named target, a green suite over that target before any edit, a planned sequence of small named…
Categories
Builds a new Claude Code skill from scratch through a relentless, evidence-based interview that walks the skill's design tree decision-by-decision — entity fit, use cases, name, description…. Skill Builder is an agent skill from testdouble/han. Builds a new Claude Code skill from scratch through a relentless, evidence-based interview that walks the skill's design tree decision-by-decision — entity fit, use cases, name, description, workflow steps, tools, and progressive-disclosure layout — then reviews the finished skill against the plugin-building guidance and applies every fix it finds.
Skill Builder fits situations like: drafting a new skill; tasks that involve Building AI agents; tasks that involve Skill authoring.
Run `npx skills add testdouble/han --skill skill-builder -a claude-code`. Or copy the skill folder (han-plugin-builder/skills/skill-builder in testdouble/han) into .claude/skills/skill-builder in your project. Claude Code loads it when a task matches its description.
Run `npx skills add testdouble/han --skill skill-builder -a codex`. Or copy the skill folder (han-plugin-builder/skills/skill-builder in testdouble/han) into .agents/skills/skill-builder in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add testdouble/han --skill skill-builder -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/skill-builder, .gemini/skills/skill-builder, .github/skills/skill-builder and .opencode/skills/skill-builder in your project.
Going by SKILL.md and its folder, Skill Builder needs the command-line tools its instructions call (bash). Its frontmatter pre-approves these tools: Read, Write, Edit, Glob, Grep, Bash(find *), Bash(mkdir *), Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh").
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Skill Builder is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.1k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Skill Builder: Claude Code Plugin Structure (anthropics/claude-plugins-official, 37k stars), Agent Creator (sickn33/agentic-awesome-skills, 47k stars), Claude Code Agent Development (anthropics/claude-plugins-official, 37k stars) and Claude Code Skill Developer Guide (diet103/claude-code-infrastructure-showcase, 10k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
testdouble (a GitHub organization) maintains it in testdouble/han, which has 279 GitHub stars. The repository holds 54 skills in this directory. The repository was last updated on October 1, 2026.
Source: testdouble/han on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.