Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create production-grade agent .md files aligned with the Anthropic 2026 spec (16-field schema). Also validates existing agents against the marketplace compliance rules. Use when building custom subagents, reviewing agent quality, or creating parallel agent architectures for orchestrator skills. Trigger with "/agent-creator", "create an agent", "build a subagent", or "validate my agent". Make sure to use this skill whenever creating agents/*.md files for plugins or standalone use.
.claude/skills/jeremylongshore-agent-creator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 165% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 322% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 429% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 228% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 101% | 0% |
Creates spec-compliant agent .md files following the Anthropic 2026 16-field schema. Supports both creation of new agents and validation of existing ones.
Agent Creator fills the gap between ad-hoc agent files and production-grade agents that pass marketplace validation. It enforces the Anthropic agent schema (14 valid fields), prevents common mistakes (using allowed-tools instead of disallowedTools, adding invalid fields like capabilities or expertise_level), and produces agents with substantive body content that actually guides Claude's behavior.
Key difference from skill-creator: agents support both tools (allowlist) AND disallowedTools (denylist). Skills use allowed-tools (allowlist) and, since schema 3.7.0, an optional kebab-case disallowed-tools denylist — a parallel field, not a unification. Agents also support effort, maxTurns, skills, memory, isolation, permissionMode, background, color, and initialPrompt — fields that don't exist for skills. The agent body becomes the system prompt that drives the subagent — it does NOT receive the full Claude Code system prompt.
Field-naming warning: Agents use camelCase disallowedTools: (canonical sub-agents spec); skills use kebab-case disallowed-tools: (schema 3.7.0+). The validator rejects either mismatch — never copy-paste between agent and skill frontmatter without renaming.
agents/ within a plugin or ~/.claude/agents/ for standalone)Determine user intent from their prompt:
Ask the user with AskUserQuestion:
Agent Identity:
risk-assessor, clause-analyzer)Execution Context:
plugins/*/agents/) or standalone (~/.claude/agents/)?Task tool?skills: [skill-name])Behavioral Controls:
sonnet for speed, opus for quality, inherit for default)low for simple, medium default, high for complex analysis)maxTurns — how many tool-use loops before stopping)disallowedTools — denylist approach, opposite of skills)Plugin Restrictions (if plugin agent):
hooks — NOT supported in plugin agents (use plugin-level hooks)mcpServers — NOT supported in plugin agentspermissionMode — standalone only, NOT plugin agentsBefore writing, determine:
Agent Role Clarity: The agent body must make three things unambiguous:
Body Structure Pattern: All production agents should follow this body structure:
| Section | Purpose | Required? | |---------|---------|-----------| | # Title | Agent name as heading | Yes | | ## Role | 2-3 sentence domain description with boundaries | Yes | | ## Inputs | Parameters the agent receives when spawned | Yes (if spawned by orchestrator) | | ## Process | Step-by-step methodology (numbered steps with ### headings) | Yes | | ## Output Format | Structured output spec (JSON, markdown, or table) | Yes | | ## Guidelines | Do/don't behavioral rules | Yes | | ## When Activated | Trigger conditions (when spawned or auto-detected) | Recommended | | ## Communication Style | Tone and formatting preferences | Recommended | | ## Success Criteria | What good vs poor output looks like | Recommended | | ## Examples | Concrete interaction examples | For complex agents |
Output Structure Decision:
Generate the agent .md using the template from ${CLAUDE_SKILL_DIR}/../skill-creator/templates/agent-template.md.
Frontmatter Rules (Anthropic 16-field schema):
See Anthropic Agent Spec for the full official reference.
Required fields:
yamlname: {agent-name} # Lowercase letters and hyphens, unique identifier description: "{specialty}" # When Claude should delegate to this subagent
Optional fields (include only what's needed):
yamltools: "Read, Glob, Grep" # Allowlist — inherits all tools if omitted disallowedTools: "Write" # Denylist — removed from inherited/specified list model: sonnet # sonnet|haiku|opus|inherit|full model ID effort: medium # low|medium|high|max (max = Opus 4.6 only) maxTurns: 15 # Max agentic turns before stopping skills: [skill-name] # Skills to inject at startup (full content loaded) memory: project # user|project|local — persistent cross-session background: false # Always run as background task isolation: worktree # Run in temporary git worktree color: blue # Display: red|blue|green|yellow|purple|orange|pink|cyan initialPrompt: "..." # Auto-submitted first turn (--agent mode only) permissionMode: default # Standalone only, NOT plugin agents hooks: {} # Standalone only, NOT plugin agents mcpServers: {} # Standalone only, NOT plugin agents
Tool access:
tools = allowlist (like skills' allowed-tools)disallowedTools = denylist (remove specific tools)disallowedTools on agents. Skills spell their denylistkebab-case (disallowed-tools, schema 3.7.0+) — the validator rejects camelCase on skills and kebab-case on agents, so never copy-paste between the two without renaming
Invalid fields (ERROR — never use these):
capabilities — looks valid but flagged by validatorexpertise_level — invented, not in Anthropic specactivation_priority — invented, not in Anthropic specactivation_triggers, type, category — not in specallowed-tools — that's the skill-only syntax; agents use tools or disallowedToolsdisallowed-tools (kebab-case) — skill-only spelling (schema 3.7.0+); agents use camelCase disallowedToolsBody Content Guidelines:
does NOT do. Example: "You analyze contract clauses for risk. You do NOT provide legal advice or make recommendations — that is the recommendations agent's responsibility."
not vaguely gesture at an activity. Bad: "Analyze the document." Good: "Read the full contract. For each clause, extract: (a) the exact text, (b) the clause category from the taxonomy below, (c) a plain English summary in one sentence."
a concrete schema example. Include field descriptions so Claude knows what each field means.
If the agent needs extensive reference material, create a companion skill with references/ directory and preload it via the skills field.
Run validation against the Anthropic 16-field schema:
Manual checklist:
| Check | Rule | |-------|------| | name present | 1-64 chars, kebab-case | | description present | 20-200 chars | | No invalid fields | None of: capabilities, expertise_level, activation_priority, type, category | | No skill-only fields | No allowed-tools, no kebab-case disallowed-tools (agents use tools / camelCase disallowedTools) | | Plugin restrictions | No hooks/mcpServers/permissionMode if plugin agent | | Body has Role section | Clear domain + boundaries | | Body has Process section | Numbered steps | | Body has Output Format | Concrete schema example | | Body has Guidelines | Do/don't rules | | Body under 300 lines | Offload to references if longer (prevents context bloat) |
Automated validation:
bashpython3 ${CLAUDE_SKILL_DIR}/../skill-creator/scripts/validate-skill.py --agents-only {plugin-dir}/
Test the agent by spawning it via the Task tool or the Agent tool:
Provide a summary:
When the user wants to validate an existing agent:
name present and valid (1-64 chars, kebab-case)?description present and valid (20-200 chars)?allowed-tools, kebab-case disallowed-tools)## Role section?## Process section with numbered steps?## Output Format with concrete example?## Guidelines?plus a creation report with validation status.
specific fix recommendations for each.
Input: "Create a risk assessment agent that scores contract clauses"
Output: agents/risk-assessor.md with frontmatter:
yamlname: risk-assessor description: "Score contract clauses for legal and financial risk on a 1-10 scale" model: sonnet effort: high maxTurns: 10
Body sections: Role (risk scoring specialist, does NOT make recommendations), Inputs (contract_text, contract_type, output_path), Process (4 steps: read, categorize, score, aggregate), Output Format (JSON with clause scores and risk matrix), Guidelines (be specific, cite clause text, use 4-factor scoring methodology).
Input: "Create a code review agent"
Output: ~/.claude/agents/code-reviewer.md with frontmatter:
yamlname: code-reviewer description: "Review code for bugs, performance issues, and security vulnerabilities" effort: high
Body sections: Role (code quality specialist), Process (read code, check patterns, identify issues, suggest fixes), Output Format (markdown with severity-rated findings), Guidelines (cite line numbers, explain why not just what), Communication Style (direct, educational, actionable).
| Error | Cause | Resolution | |-------|-------|------------| | allowed-tools in agent | Used skill-only field | Replace with tools (allowlist) or disallowedTools (denylist), or remove | | disallowed-tools (kebab-case) in agent | Copy-pasted from skill frontmatter | Rename to camelCase disallowedTools — the validator rejects the kebab-case spelling on agents | | capabilities field | Common mistake — looks valid but isn't in Anthropic spec | Remove field entirely | | expertise_level field | Invented field from community templates | Remove — express expertise in body content | | Description > 200 chars | Exceeds Anthropic limit | Shorten to 20-200 char range | | Description < 20 chars | Below minimum | Expand to describe agent's specific specialty | | permissionMode in plugin agent | Standalone-only field used in plugin context | Remove — only valid in ~/.claude/agents/ | | hooks in plugin agent | Plugin agents can't have hooks | Move to plugin-level hooks/hooks.json | | Body has no Process section | Agent lacks step-by-step methodology | Add numbered steps under ## Process | | Body over 300 lines | Too long for agent context | Extract reference material to companion skill |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 15,637 | 15,582 | -0% | 1 | 1 | 0% | 3,013 | 6,401 | +112% | 0 | 0 | — |
case-02 | fail→fail | 6,992 | 32,650 | +367% | 1 | 1 | 0% | 261 | 3,803 | +1357% | 0 | 0 | — |
case-03 | fail→pass | 13,286 | 12,914 | -3% | 1 | 1 | 0% | 2,232 | 5,924 | +165% | 0 | 0 | — |
case-04 | pass→pass | 10,471 | 15,331 | +46% | 1 | 1 | 0% | 2,180 | 6,459 | +196% | 0 | 0 | — |
case-05 | pass→pass | 8,292 | 13,559 | +64% | 1 | 1 | 0% | 1,755 | 6,117 | +249% | 0 | 0 | — |
case-06 | pass→pass | 12,355 | 13,434 | +9% | 1 | 1 | 0% | 2,450 | 6,154 | +151% | 0 | 0 | — |
case-07 | fail→pass | 6,398 | 6,976 | +9% | 1 | 1 | 0% | 1,138 | 4,805 | +322% | 0 | 0 | — |
case-08 | fail→pass | 4,375 | 3,491 | -20% | 1 | 1 | 0% | 779 | 4,119 | +429% | 0 | 0 | — |
case-09 | fail→pass | 8,168 | 7,891 | -3% | 1 | 1 | 0% | 1,542 | 5,057 | +228% | 0 | 0 | — |
case-10 | fail→pass | 15,232 | 11,373 | -25% | 1 | 1 | 0% | 2,749 | 5,528 | +101% | 0 | 0 | — |
case-11 | pass→pass | 10,515 | 5,910 | -44% | 1 | 1 | 0% | 1,930 | 4,736 | +145% | 0 | 0 | — |
case-12 | fail→pass | 6,911 | 2,709 | -61% | 1 | 1 | 0% | 1,166 | 3,941 | +238% | 0 | 0 | — |
case-13 | pass→pass | 13,463 | 8,697 | -35% | 1 | 1 | 0% | 2,446 | 5,108 | +109% | 0 | 0 | — |
case-14 | fail→pass | 19,035 | 4,094 | -78% | 1 | 1 | 0% | 936 | 4,171 | +346% | 0 | 0 | — |
case-15 | pass→pass | 8,945 | 2,932 | -67% | 1 | 1 | 0% | 1,456 | 4,016 | +176% | 0 | 0 | — |
case-16 | fail→pass | 4,566 | 1,972 | -57% | 1 | 1 | 0% | 800 | 3,791 | +374% | 0 | 0 | — |
case-17 | fail→pass | 6,320 | 3,240 | -49% | 1 | 1 | 0% | 1,083 | 3,984 | +268% | 0 | 0 | — |
case-18 | pass→pass | 5,183 | 3,758 | -27% | 1 | 1 | 0% | 939 | 4,149 | +342% | 0 | 0 | — |
case-19 | fail→pass | 9,599 | 4,690 | -51% | 1 | 1 | 0% | 1,818 | 4,350 | +139% | 0 | 0 | — |
case-20 | pass→pass | 8,396 | 3,147 | -63% | 1 | 1 | 0% | 1,532 | 3,981 | +160% | 0 | 0 | — |
case-21 | fail→pass | 10,435 | 6,815 | -35% | 1 | 1 | 0% | 1,850 | 4,629 | +150% | 0 | 0 | — |
case-22 | fail→pass | 12,136 | 7,245 | -40% | 1 | 1 | 0% | 2,137 | 4,827 | +126% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +55 percentage points is the difference between those two pass rates over the 20 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.