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 agent (subagent) from scratch through a relentless, evidence-based interview that walks the agent's design tree decision-by-decision — entity fit, domain focus and…
$ npx skills add testdouble/han --skill agent-builder -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install testdouble/han agent-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/agent-builder .claude/skills/agent-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 "agent-builder" agent skill from https://github.com/testdouble/han/tree/main/han-plugin-builder/skills/agent-builder into .claude/skills/agent-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-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/agent-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 agent-builder -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install testdouble/han agent-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/agent-builder .agents/skills/agent-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 "agent-builder" agent skill from https://github.com/testdouble/han/tree/main/han-plugin-builder/skills/agent-builder into .agents/skills/agent-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-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 agent-builder -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install testdouble/han agent-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/agent-builder .cursor/skills/agent-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 "agent-builder" agent skill from https://github.com/testdouble/han/tree/main/han-plugin-builder/skills/agent-builder into .cursor/skills/agent-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-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/agent-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 agent-builder -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install testdouble/han agent-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/agent-builder .gemini/skills/agent-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 "agent-builder" agent skill from https://github.com/testdouble/han/tree/main/han-plugin-builder/skills/agent-builder into .gemini/skills/agent-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-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 agent-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 agent-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/agent-builder .github/skills/agent-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 "agent-builder" agent skill from https://github.com/testdouble/han/tree/main/han-plugin-builder/skills/agent-builder into .github/skills/agent-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-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 agent-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 agent-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/agent-builder .opencode/skills/agent-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 "agent-builder" agent skill from https://github.com/testdouble/han/tree/main/han-plugin-builder/skills/agent-builder into .opencode/skills/agent-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-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.
agent-builderBuilds a new Claude Code agent (subagent) from scratch through a relentless, evidence-based interview that walks the agent's design tree decision-by-decision — entity fit, domain focus and…
Agent Builder is an agent skill from testdouble/han. Builds a new Claude Code agent (subagent) from scratch through a relentless, evidence-based interview that walks the agent's design tree decision-by-decision — entity fit, domain focus and vocabulary, role identity, anti-patterns, description, model tier, tools, and self-containment — then reviews the finished agent against the plugin-building guidance and applies every fix it finds. Use when creating, authoring, scaffolding, designing, or drafting a new agent or subagent. Does not build a skill or slash command…
Its SKILL.md is about 3.8k 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 Skill authoring, Building AI agents 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.
Agent Builder loads about 3.8k tokens when it runs. Until then it costs about 158 tokens; SKILL.md has 1,823 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,823 words, ~3,844 tokens.
.claude/skills/agent-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 agent-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 agent does not touch.
${CLAUDE_PLUGIN_ROOT}/skills/guidance/references/${CLAUDE_PLUGIN_ROOT}/skills/guidance/references/agent-building-guidelines/Map from decision to governing document (read just-in-time):
| Decision on the table | Read |
|---|---|
| Agent vs. skill vs. hook; one role (generate or evaluate) | plugin-entity-taxonomy.md, agent-building-guidelines/agent-domain-focus.md |
| Domain focus, vocabulary, role identity, anti-patterns | agent-building-guidelines/agent-domain-focus.md |
The description field (four components, boundaries, length) | agent-building-guidelines/agent-description-length.md, skill-building-guidance/skill-description-frontmatter.md |
Model tier (opus / sonnet / haiku / inherit) | agent-building-guidelines/agent-model-selection.md, specialization-and-model-selection.md |
| Self-containment — no references, scripts, or context injection | agent-building-guidelines/agent-external-files.md |
| Which frontmatter fields are valid (and which plugins ignore) | agent-building-guidelines/agent-external-files.md |
| Degraded environments (no git, missing tools) | agent-building-guidelines/graceful-degradation.md |
| Whether this agent is justified at all; how it gets dispatched | agent-building-guidelines/multi-agent-economics.md, skill-building-guidance/agent-dispatch-namespacing.md |
| New plugin needed (plugin.json, marketplace.json) | claude-marketplace-and-plugin-configuration/ and templates/ |
.md file. No references/ folder, no
scripts/ folder, no !`command` context injection. Everything the agent needs is inlined in its body.Read the user's argument and the conversation to extract what the agent should do. If the request is too thin to start (for example, just "build an agent"), ask the user for one or two sentences on the agent's domain and what it produces — 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. An agent
is the thinking layer: it applies contextual judgment, taste, and discernment ("Does this require reasoning about
context?" → agent). If the work is a deterministic, flowchartable process, it is a skill — stop and recommend
skill-builder. If it fires automatically on an event, it is a hook.
Confirm the single role. An agent generates or evaluates, never both, because self-evaluation bias means the
reasoning that created a blind spot also rates it as correct (agent-domain-focus.md). If the request bundles
generation and evaluation, recommend splitting it into a generator agent and a separate evaluator agent. Only proceed
once an agent — with one role — 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. Confirm the plugin actually ships agents (an
agents/ directory) or is the right home for the first one. If the user has not said which plugin, infer candidates
and confirm in Step 4.{plugin}/agents/*.md) — their descriptions, role identities, model tiers, domain
vocabulary, and the boundaries they draw. A new agent's description must disambiguate against near-sibling agents in
both directions.Agent tool using the qualified
defining-plugin:agent-name. Knowing the caller tells you what the agent receives and returns.Record what was found (file paths) and what was not.
Enumerate the decisions the agent needs, in dependency order. Resolve foundational decisions before dependent ones; never ask a dependent question before its parent is settled.
description say across all four components (what, when, boundary, breadth), and how
does it disambiguate against near-sibling agents in both directions, within 1024 characters?opus for synthesis and judgment, sonnet for
structured procedures, haiku for fast lookups, inherit only when matching the session is intentional)? What
tools does it need, defaulting to no Agent tool, since dispatch flows from skills to agents, and carrying it only
when the agent's own protocol dispatches sub-agents?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.
Write the single self-contained file:
{plugin}/agents/ if it does not exist (use mkdir), then write {plugin}/agents/{agent-name}.md. The file
is flat — no per-agent subdirectory, no companion folders.name, the description settled in the interview, tools (the allowlist — agents use tools, not
allowed-tools), and model. Add other supported fields (disallowedTools, maxTurns, color, and so on) only
when a decision called for them. Do not rely on hooks, mcpServers, or permissionMode — Claude Code ignores
all three on plugin agents as a security boundary. No XML angle brackets in any frontmatter value.## Domain Vocabulary section, the
## Anti-Patterns section, and the inlined protocol or checklist the agent follows. Embed reasoning in constraints.
Add graceful-degradation wording ("If {tool} is not available, skip this step and note the limitation") to any
tool-dependent step. No flattery, superlatives, or motivational framing — let domain vocabulary do the routing.claude-marketplace-and-plugin-configuration/ guidance and 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 agent against it, applying every fix directly. Do not summarize problems for the user without fixing them. Cover at minimum:
plugin-entity-taxonomy.md, agent-building-guidelines/agent-domain-focus.md) — the
agent is genuinely a judgment layer, targets one narrow domain, and only generates or only evaluates.agent-domain-focus.md) — the opening paragraph is under 50 tokens, states domain + task +
perspective, and carries no flattery or motivational filler.agent-domain-focus.md) — 15-30 precise terms that pass the
15-year-practitioner test, and 5-10 named anti-patterns each with a detection signal, both inlined in the body.agent-description-length.md, skill-description-frontmatter.md) — covers what, when, boundary,
and trigger breadth; names near-sibling agents in boundary clauses; disambiguates in both directions (repair the
sibling's description if a one-way gap exists); within 1024 characters, with domain vocabulary and anti-patterns kept
in the body, not the description.agent-model-selection.md, specialization-and-model-selection.md) — model is set explicitly
and matches the cognitive load, chosen on capability and not on cost.agent-external-files.md) — no references/ or scripts/ folder, no !`command` context
injection; all protocol and reference content is inlined; frontmatter uses tools (not allowed-tools), and the
file relies on no field plugins ignore.agent-dispatch-namespacing.md, agent-external-files.md) — the agent defaults to no Agent tool,
since dispatch flows from skills to agents; it carries the Agent tool only when its own protocol dispatches
sub-agents. The tools allowlist is the minimum the work needs, each tool present only if the body uses it.agent-building-guidelines/graceful-degradation.md) — every tool-dependent step checks
availability inline and notes the limitation when the tool is absent.multi-agent-economics.md) — the agent clears the bar for existing: a single
well-prompted agent or an instruction improvement to an existing agent would not do the job as well.Apply the YAGNI discipline throughout: vocabulary terms, anti-patterns, tools, and frontmatter fields must each earn their place against the agent's actual job. Cut anything added "for completeness."
Summarize for the user:
defining-plugin:agent-name and which skill (existing or to-be-built)
would call it. If a calling skill is needed and does not exist, recommend skill-builder.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 the agent's domain framing or considers it 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/agent-builder of testdouble/han.
Open the folder on GitHubat commit abba73a
Agent 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 |
|---|---|---|---|---|---|---|
| Agent Builder this skilltestdouble/han | 279 | — | ~3.8k | 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 agent (subagent) from scratch through a relentless, evidence-based interview that walks the agent's design tree decision-by-decision — entity fit, domain focus and…. Agent Builder is an agent skill from testdouble/han. Builds a new Claude Code agent (subagent) from scratch through a relentless, evidence-based interview that walks the agent's design tree decision-by-decision — entity fit, domain focus and vocabulary, role identity, anti-patterns, description, model tier, tools, and self-containment — then reviews the finished agent against the plugin-building guidance and applies every fix it finds.
Agent Builder fits situations like: drafting a new agent; tasks that involve Skill authoring; tasks that involve Building AI agents.
Run `npx skills add testdouble/han --skill agent-builder -a claude-code`. Or copy the skill folder (han-plugin-builder/skills/agent-builder in testdouble/han) into .claude/skills/agent-builder in your project. Claude Code loads it when a task matches its description.
Run `npx skills add testdouble/han --skill agent-builder -a codex`. Or copy the skill folder (han-plugin-builder/skills/agent-builder in testdouble/han) into .agents/skills/agent-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 agent-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/agent-builder, .gemini/skills/agent-builder, .github/skills/agent-builder and .opencode/skills/agent-builder in your project.
Going by SKILL.md and its folder, Agent 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.
Agent 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 3.8k tokens (SKILL.md is roughly 15k 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 Agent 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.