Agent Skills: Test Runner

Verify plugins marketplace structure, version consistency, and JSON/frontmatter validity via subagent

UncategorizedID: hiroro-work/claude-plugins/run-tests

Install this agent skill to your local

pnpm dlx add-skill https://github.com/hiroro-work/claude-plugins/tree/HEAD/.claude/skills/run-tests

Skill Files

Browse the full folder contents for run-tests.

Download Skill

Loading file tree…

.claude/skills/run-tests/SKILL.md

Skill Metadata

Name
run-tests
Description
Verify plugins marketplace structure, version consistency, and JSON/frontmatter validity via subagent

Test Runner

This project is a Claude Code plugins marketplace. "Tests" here means verifying the repository structure, version consistency, JSON syntax, and SKILL.md/agent frontmatter validity — equivalent to the /verify-plugins command logic.

Process

  1. Determine test scope:
    • If $ARGUMENTS contains --base-commit <sha>: run git diff --name-only <sha> to get changed files (includes committed, staged, and unstaged changes)
    • Otherwise: run git diff --name-only HEAD to detect changed files (if HEAD is unavailable or no changed files detected, run full verification)
    • This marketplace is small and structural; any change touching .claude-plugin/marketplace.json, plugins/**, skills/**, or .claude-plugin/plugin.json should trigger full verification. If only unrelated files (e.g. README.md, CHANGELOG.md, docs/**) changed, still run full verification — it is fast
  2. Spawn a subagent (Agent tool, subagent_type: general-purpose) to execute verification
  3. Return the subagent's structured summary to the caller

Subagent Instructions

Verify this Claude Code plugins marketplace repository. Perform the following checks and return a structured summary.

Checks

  1. Load marketplace manifest: Read .claude-plugin/marketplace.json. Extract the plugins array. For each plugin, capture name, source, skills (optional), and version.

  2. Skill entity existence: Verify each skills/*/ directory contains SKILL.md.

  3. Plugin source directory structure: For each plugin in marketplace.json, dispatch by source prefix:

    • If source starts with ./skills/ (direct-skill plugin): verify <source>/SKILL.md exists and skills: ["./"] is present
    • If source starts with ./plugins/ (wrapper plugin): verify <source>/ exists; if <source>/skills/ exists, each entry under it must be a symlink (use readlink) resolving to an existing skills/<skill>/SKILL.md; if <source>/agents/ exists, each .md file must have YAML frontmatter; if <source>/.claude-plugin/plugin.json exists, its JSON must be valid
    • Additionally, for wrapper bundles (wrapper plugin with skills array of specific paths like ./skills/<name>): verify each path in skills array resolves to an existing skills/<name>/SKILL.md, AND verify the set of paths matches the set of symlinks under <source>/skills/ (each symlink has a corresponding skills entry, and vice versa — detect drift in either direction)
  4. Version consistency: For each plugin, if <source>/.claude-plugin/plugin.json exists (only possible for ./plugins/ sources), verify its version matches marketplace.json.

  5. JSON syntax: Validate .claude-plugin/marketplace.json and every plugins/*/.claude-plugin/plugin.json with jq empty.

  6. Frontmatter presence: Verify each skills/*/SKILL.md and each agent file (plugins/*/agents/*.md) starts with --- on the first line (YAML frontmatter).

Return Format

Return a structured summary with one of three statuses:

Status: SUCCESS

  • All checks passed
  • Per-check summary: counts (e.g., "15 skills verified, 13 plugins, 0 version mismatches")

Status: TEST_FAILED

  • Per-check results with failures highlighted
  • For each failure:
    • The specific check that failed
    • File path and what was expected vs actual
    • Remediation hint (e.g., "recreate symlink", "bump version in plugin.json")
  • Keep the summary concise but include enough detail to fix without re-running

Status: EXECUTION_ERROR

  • Command that failed to execute (e.g., jq missing, marketplace.json unreadable)
  • Error output
  • This status is for infrastructure/environment errors, not verification failures