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), while skills only use allowed-tools (allowlist). 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.
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:
name: {agent-name} # Lowercase letters and hyphens, unique identifier
description: "{specialty}" # When Claude should delegate to this subagent
Optional fields (include only what's needed):
tools: "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)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 disallowedTools
Body Content Guidelines:
Role section must set boundaries. Don't just say what the agent does — say what it 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."
Process steps must be concrete. Each step should tell Claude exactly what to do, 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."
Output format must be machine-parseable if feeding an orchestrator. Use JSON with a concrete schema example. Include field descriptions so Claude knows what each field means.
Guidelines should include both DO and DON'T rules. Example:
Keep under 300 lines (agent body limit — prevents context bloat in subagent window).
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 (use disallowedTools instead) |
| 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:
python3 ${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)?## Role section?## Process section with numbered steps?## Output Format with concrete example?## Guidelines?Input: "Create a risk assessment agent that scores contract clauses"
Output: agents/risk-assessor.md with frontmatter:
name: 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:
name: 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 disallowedTools (denylist) or remove |
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 |