aigent and plugin-dev both support skill development for Claude Code, but they occupy different layers of the ecosystem.
| aigent | plugin-dev | |
|---|---|---|
| Nature | Rust library + CLI + Claude Code plugin | Claude Code plugin (skills + agents + scripts) |
| Execution | Deterministic code — parses, validates, scores, formats | LLM-guided — Claude reads skills and follows methodology |
| Scope | Deep: focused on SKILL.md files | Broad: entire plugin ecosystem (7 component types) |
| Author | wkusnierczyk/aigent | Anthropic (official, bundled with Claude Code) |
aigent is to plugin-dev as rustfmt + clippy is to The Rust Book.
One enforces rules mechanically; the other teaches you how to think about the domain. You need both: the book to learn the patterns, the tools to enforce them at scale.
plugin-dev is a comprehensive teaching toolkit for the Claude Code plugin ecosystem. It ships as 7 skills, 3 agents, 1 guided workflow command, and utility scripts.
| Skill | Content | Purpose |
|---|---|---|
skill-development |
1,232 words + references | Skill creation methodology (6-step process, progressive disclosure) |
plugin-structure |
1,619 words + 2 references | Plugin directory layout, manifest format, auto-discovery |
hook-development |
1,619 words + 3 references + 3 examples + 3 scripts | Hook types (prompt/command), 9 events, security patterns |
agent-development |
1,438 words + 2 examples + 3 references + 1 script | Agent file structure, system prompts, triggering |
command-development |
1,535 words + 5 references + 10 examples | Slash commands, frontmatter, dynamic arguments |
mcp-integration |
1,666 words + 3 references + 3 examples | MCP server types (stdio/SSE/HTTP/WS), auth patterns |
plugin-settings |
1,623 words + 3 examples + 2 references + 2 scripts | Per-project config via .local.md, YAML frontmatter parsing |
Total: ~11,000 words of core skill content, ~10,000+ words of reference documentation, 12+ working examples, 6 validation/testing scripts.
| Agent | Purpose |
|---|---|
plugin-validator |
Validates plugin structure, manifest, component files, naming conventions |
skill-reviewer |
Reviews skill quality, trigger phrases, progressive disclosure |
agent-creator |
AI-assisted agent generation using proven prompts from Claude Code's architecture |
/create-plugin — an 8-phase guided workflow:
Discovery → Component Planning → Detailed Design → Structure Creation →
Component Implementation → Validation → Testing → Documentation.
validate-hook-schema.sh,test-hook.sh,hook-linter.sh(hook validation)validate-agent.sh(agent validation)validate-settings.sh,parse-frontmatter.sh(settings validation)
| Capability | aigent | plugin-dev |
|---|---|---|
| Create from natural language | aigent new — deterministic or LLM |
Guidance-based — skill-development teaches Claude |
| Template scaffolding | aigent init — 3 template levels |
Examples in skill-development references |
| Interactive creation | aigent new --interactive |
8-phase /create-plugin workflow |
| LLM provider support | 4 providers (Anthropic, OpenAI, Google, Ollama) | Uses whatever model Claude Code is running |
| Capability | aigent | plugin-dev |
|---|---|---|
| Spec conformance | aigent validate — typed diagnostics with error codes |
plugin-validator agent — heuristic checks |
| Semantic quality | aigent check (validate + lint) |
skill-reviewer agent |
| Quality scoring | aigent score — weighted 0–100 |
Not available |
| Auto-fix | aigent validate --apply-fixes |
Not available |
| Structure validation | aigent validate --structure |
plugin-validator covers structure |
| Cross-skill conflicts | Multi-dir validation detects collisions | Not available |
| CI integration | JSON output, non-zero exit codes | Not applicable (LLM-based) |
| Watch mode | aigent validate --watch |
Not available |
| Capability | aigent | plugin-dev |
|---|---|---|
| SKILL.md formatting | aigent fmt — canonical key order, idempotent |
Not available |
| CI check mode | aigent fmt --check (exit 1 if unformatted) |
Not available |
| Capability | aigent | plugin-dev |
|---|---|---|
| Single-query probe | aigent probe <dir> <query> — weighted match score |
Not available |
| Fixture-based testing | aigent test — reads tests.yml |
General guidance only |
| Fixture generation | aigent test --generate |
Not available |
| Hook testing | Not available | test-hook.sh script |
| Agent validation | Not available | validate-agent.sh script |
| Capability | aigent | plugin-dev |
|---|---|---|
| Skill-to-plugin assembly | aigent build — deterministic, scriptable |
/create-plugin — guided, interactive |
| Plugin manifest generation | Generates plugin.json automatically |
Teaches manifest format for manual creation |
| Validation on assembly | aigent build --validate |
plugin-validator agent post-creation |
| Component Type | aigent | plugin-dev |
|---|---|---|
| Skills (SKILL.md) | ✅ Full toolchain | ✅ Guidance + review |
| Commands (slash commands) | ❌ | ✅ Full coverage |
| Agents | ❌ | ✅ Full coverage + AI-assisted generation |
| Hooks | Consumer only (own hooks.json) |
✅ Full coverage + 3 validation scripts |
| MCP servers | ❌ | ✅ Full coverage (4 server types) |
| Plugin settings | ❌ | ✅ Full coverage |
| Plugin structure/manifest | Generated during assembly | ✅ Full coverage |
| Feature | aigent | plugin-dev |
|---|---|---|
| Deterministic output | ✅ Always reproducible | ❌ LLM-dependent |
| Machine-parseable (JSON) | ✅ Most commands support --format json |
❌ |
| Library API | ✅ 30+ pub functions in Rust crate | ❌ |
| Multi-format prompts | ✅ XML, JSON, YAML, Markdown | ❌ |
A typical skill development workflow uses both:
# Learn — plugin-dev teaches the patterns
"What's the best way to structure a plugin with 3 skills and a hook?"
→ Claude reads plugin-structure, hook-development, skill-development skills
# Create — aigent generates the SKILL.md files
aigent new "Process PDF files" --no-llm
aigent new "Convert images" --no-llm
# Validate — aigent checks spec conformance + quality
aigent check skills/ --recursive
# Format — aigent normalizes formatting
aigent fmt skills/ --recursive
# Test — aigent runs activation tests
aigent test --generate skills/
aigent test skills/ --recursive
# Score — aigent rates quality
aigent score skills/processing-pdf-files
# Assemble — aigent packages into a plugin
aigent build skills/ --output ./dist --validate
# Review — plugin-dev validates the assembled plugin
→ plugin-validator agent checks plugin structure, manifest, components
# Iterate — plugin-dev's skill-reviewer catches quality issues
→ skill-reviewer agent suggests trigger phrase improvements
plugin-dev covers the breadth of the Claude Code plugin ecosystem (7 component types, ~21,000 words of guidance). aigent covers the depth of one component type (SKILL.md) with deterministic tooling that integrates into CI/CD pipelines.
-
Deterministic validation — typed error codes, severity levels, machine- parseable JSON output. Every run produces identical results.
-
Numeric scoring — weighted 0–100 quality score usable as a CI gate (
exit 1if imperfect). -
Idempotent formatting —
aigent fmtnormalizes SKILL.md files with canonical key ordering.--checkmode for CI enforcement. Running twice produces no further changes. -
Fixture-based testing —
tests.ymlfiles define expected activation patterns. Regression testing for skill descriptions. -
Programmatic assembly —
aigent buildis reproducible and scriptable. No LLM variance between runs. -
Library API — all functionality exposed as
pub fnin a Rust crate. Consumers can embed validation, formatting, and assembly in their own tools. -
Auto-fix —
--apply-fixescorrects fixable issues (name casing, etc.) without human intervention. -
Cross-skill analysis — conflict detection (name collisions, description similarity), token budget estimation across skill collections.
-
Covers 6 other component types — commands, agents, hooks, MCP servers, settings, plugin structure. aigent only handles skills.
-
Teaches design patterns — not just "is this valid?" but "here's how to think about progressive disclosure, trigger phrases, hook security."
-
AI-assisted generation — agent-creator uses proven prompts from Claude Code's own architecture to generate agent configurations.
-
Guided workflows —
/create-pluginwalks through 8 phases with clarifying questions at each step. aigent commands are single-purpose. -
Real-world examples — 12+ working examples and reference documents per component type. aigent has no tutorial content.
-
Hook/agent validation scripts — bash utilities for validating hook schemas, testing hooks, and validating agent files. aigent has no tooling for non-skill components.
aigent is not only a CLI — it ships as a Claude Code plugin (since M9). When installed, Claude Code gains access to the same deterministic tooling through the same platform as plugin-dev:
| Component | File | What It Does |
|---|---|---|
| Manifest | .claude-plugin/plugin.json |
Registers aigent as a Claude Code plugin |
aigent-validator skill |
skills/aigent-validator/SKILL.md |
Teaches Claude to validate via aigent validate |
aigent-scorer skill |
skills/aigent-scorer/SKILL.md |
Teaches Claude to score via aigent score |
aigent-builder skill |
skills/aigent-builder/SKILL.md |
Teaches Claude to create via aigent new |
| PostToolUse hook | hooks/hooks.json |
Auto-validates SKILL.md on every Write/Edit |
When both plugins are installed, Claude Code has plugin-dev's guidance skills and aigent's CLI-backed skills. The hook gives aigent continuous automated validation without the user asking — something plugin-dev's LLM-driven agents cannot do.
Each aigent skill includes a "Without aigent CLI" fallback that teaches Claude
the rules directly, so the skills remain useful even if the aigent binary
is not on $PATH.
plugin-dev encodes concrete validation rules in its agent system prompts and bash utility scripts. These rules are fully deterministic and could be enforced mechanically by a CLI tool — the same value-add aigent already provides for SKILL.md validation.
| Rule | Check |
|---|---|
| Frontmatter present | File starts and ends with --- |
| Required fields | name, description, model, color all present |
| Name format | Kebab-case, 3–50 chars, not generic ("helper", "assistant", "agent", "tool") |
| Description length | 10–5000 characters |
| Description content | Includes <example> blocks, starts with "Use this agent when" |
| Model value | One of: inherit, sonnet, opus, haiku |
| Color value | One of: blue, cyan, green, yellow, magenta, red |
| System prompt length | >20 chars (error if empty), <10k chars (warning) |
| System prompt style | Uses second person ("You are…", "Your…") |
| Rule | Check |
|---|---|
| JSON syntax | Valid JSON |
| Event names | One of 9 types: PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification |
| Hook structure | Each event has array of objects with matcher + hooks |
| Hook type | Each hook has type field: command or prompt |
| Type-specific fields | Command hooks have command; prompt hooks have prompt |
| Timeout range | Number, 5–600 seconds recommended |
| Path hygiene | No hardcoded absolute paths; use ${CLAUDE_PLUGIN_ROOT} |
| Rule | Check |
|---|---|
| Location | plugin.json in .claude-plugin/ directory |
| JSON syntax | Valid JSON |
| Required fields | name (kebab-case, no spaces) |
| Version format | Semantic versioning when present |
| Custom paths | Start with ./ (relative, no absolute) |
| Security | No hardcoded credentials; MCP servers use HTTPS/WSS |
| Rule | Check |
|---|---|
| File format | Markdown with optional YAML frontmatter |
| Description length | ≤60 chars, starts with verb |
| Model value | sonnet, opus, or haiku |
allowed-tools |
Valid format (string or array) |
| Rule | Check |
|---|---|
| Description person | Third-person ("This skill should be used when…") |
| Trigger specificity | Concrete trigger phrases, not vague |
| Description length | 50–500 characters |
| Body word count | 1,000–3,000 words (lean, focused) |
| Writing style | Imperative/infinitive form, not second person |
| Progressive disclosure | Core in SKILL.md; details in references/ |
The rules above are currently enforced by plugin-dev in two ways:
- Bash scripts (
validate-agent.sh,validate-hook-schema.sh, etc.) — deterministic but fragile, no structured output, no CI integration. - Agent system prompts — flexible but non-reproducible, no exit codes, no JSON output.
aigent could complement plugin-dev by providing deterministic CLI enforcement of these rules — the same relationship it already has with SKILL.md. This is not duplication: plugin-dev teaches the patterns, aigent enforces them.
- Frontmatter validation (name, description, all fields)
- Semantic linting (third-person, trigger phrases, gerund names, generic names)
- Quality scoring (weighted 0–100)
- Formatting (canonical key order, idempotent)
- Fixture-based testing and single-query probing
- Plugin assembly (
aigent build) - Cross-skill conflict detection
| Capability | What It Does | plugin-dev Equivalent |
|---|---|---|
| Agent validation | Validate agent .md files: frontmatter fields, name format, model/color values, example blocks, system prompt length |
validate-agent.sh (bash) |
| Hook validation | Validate hooks.json: JSON syntax, event names, structure, timeout ranges, path hygiene |
validate-hook-schema.sh (bash) |
| Manifest validation | Validate plugin.json: required fields, version format, path conventions, credential scanning |
plugin-validator agent (LLM) |
| Command validation | Validate command .md files: frontmatter fields, description length, model values |
command-development skill (guidance) |
| Cross-component checks | Verify agents referenced in hooks exist, skills referenced in commands exist, orphan detection | Not available in plugin-dev |
| Plugin-wide scoring | Extend the 0–100 scoring model to agents, hooks, commands — not just skills | Not available |
| Plugin-wide formatting | Extend fmt to agent frontmatter and hooks.json |
Not available |
The bash scripts in plugin-dev are the clearest candidates for replacement. They implement specific, mechanical checks in fragile shell code. Reimplementing them in Rust with typed diagnostics, JSON output, and proper exit codes is a natural extension of what aigent already does.
The agent system prompts encode higher-level quality rules (e.g., "description should be specific, not vague") that are harder to mechanize but partially tractable — similar to how aigent's linter checks for trigger phrases and generic names.
Cross-component validation is unique to a CLI tool — no LLM-driven agent can reliably verify that all inter-component references resolve correctly across an entire plugin directory.
| Dimension | aigent | plugin-dev |
|---|---|---|
| Strength | Depth: deterministic SKILL.md toolchain | Breadth: full plugin ecosystem guidance |
| Execution model | Code (Rust) | LLM (Claude reads skills) |
| Reproducibility | Deterministic | Varies per run |
| CI/CD integration | Native (exit codes, JSON, --check) |
Not designed for CI |
| Learning curve | Tool documentation | Progressive guidance |
| Ecosystem coverage | Skills only (agents/hooks/commands possible) | Skills + 6 other component types |
| Best for | Enforcing quality at scale | Learning and creating plugins |
| Platform | CLI + library + Claude Code plugin | Claude Code plugin |