# Validate Plugin

> Validate plugin structure and manifests against marketplace requirements

- Skill: `tmchow/validate-plugin` (Agent Skill)
- Install (CLI): `npx skillmds@latest add tmchow/validate-plugin`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tmchow/validate-plugin/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tmchow (https://skillmd.com/u/tmchow)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tmchow/validate-plugin

---


# Plugin Validator

Validate a plugin meets marketplace requirements before publishing.

## Usage

```
/validate-plugin <plugin-name>
```

Or validate all plugins:

```
/validate-plugin --all
```

## Validation Checks

### 1. Plugin Structure

```bash
# Check required files exist
ls plugins/<plugin-name>/.claude-plugin/plugin.json
ls plugins/<plugin-name>/README.md
ls plugins/<plugin-name>/skills/  # At least skills/ or agents/ must exist
```

### 2. plugin.json Validation

Required fields:
- `name` - must match directory name
- `version` - semver format (e.g., "0.1.0")
- `description` - non-empty string
- `author.name` - non-empty string
- `skills` - path to skills directory (if skills exist)
- `agents` - path to agents directory (if agents exist)

```bash
# Validate JSON syntax
cat plugins/<plugin-name>/.claude-plugin/plugin.json | jq .
```

### 3. Skill Validation

For each `plugins/<plugin-name>/skills/*/SKILL.md`:

**Required frontmatter:**
```yaml
---
name: skill-name        # Required
description: ...        # Required - when Claude should use this
---
```

**Optional frontmatter:**
```yaml
disable-model-invocation: true   # User-only skill
user-invocable: false            # Claude-only skill
```

**Check:** Frontmatter must be valid YAML between `---` markers

### 4. Agent Validation

For each `plugins/<plugin-name>/agents/*/AGENT.md`:

**Required frontmatter:**
```yaml
---
name: agent-name        # Required
description: ...        # Required - when Claude should use this agent
---
```

### 5. Marketplace Registry

Check `.claude-plugin/marketplace.json` contains entry:

```json
{
  "plugins": [
    {
      "name": "<plugin-name>",
      "source": "./plugins/<plugin-name>",
      "description": "...",
      "version": "..."
    }
  ]
}
```

### 6. No Deprecated Commands

Verify no `commands/` directory exists (commands merged into skills in Claude Code 2.1.3+)

## Output Format

```
Validating plugin: <plugin-name>

[PASS] Plugin structure valid
[PASS] plugin.json valid
[PASS] 2 skills validated
[WARN] No agents defined (optional)
[PASS] Marketplace entry found
[PASS] No deprecated commands

Result: VALID (5 passed, 1 warning, 0 errors)
```

Or if errors:

```
[FAIL] plugin.json missing required field: description
[FAIL] skills/my-skill/SKILL.md missing frontmatter

Result: INVALID (3 passed, 0 warnings, 2 errors)
```

