Skip to content
Development
Skill

/dev-validate

Use when the user wants to validate the plugin, check integrity, verify cross-references, or before a release. Also use when the user says 'validate', 'check plugin', or 'verify'.

From plugin
harness-evolver
579 skills6 agents1 hook

Claude Code

$ npx -y skills add raphaelchristi/harness-evolver --skill dev-validate --agent claude-code

SKILL.md

dev-validate.SKILL.md
name: dev:validate
description: "Use when the user wants to validate the plugin, check integrity, verify cross-references, or before a release. Also use when the user says 'validate', 'check plugin', or 'verify'."
allowed-tools: [Read, Bash, Glob, Grep]

/dev:validate

Check plugin integrity: skill/agent frontmatter, cross-references, Python tool syntax, version sync, hook script executability.

Checks

1. Version Sync

PKG_V=$(python3 -c "import json; print(json.load(open('package.json'))['version'])")
PLUGIN_V=$(python3 -c "import json; print(json.load(open('.claude-plugin/plugin.json'))['version'])")
if [ "$PKG_V" = "$PLUGIN_V" ]; then
    echo "OK: versions match ($PKG_V)"
else
    echo "FAIL: package.json=$PKG_V, plugin.json=$PLUGIN_V"
fi

2. Skill Frontmatter

For each `skills/*/SKILL.md`:

  • Must have `name:` in frontmatter
  • Must have `description:` in frontmatter
  • Must have `allowed-tools:` in frontmatter
for f in skills/*/SKILL.md; do
    NAME=$(grep -m1 "^name:" "$f" | cut -d: -f2- | xargs)
    DESC=$(grep -m1 "^description:" "$f")
    TOOLS=$(grep -m1 "^allowed-tools:" "$f")
    if [ -z "$NAME" ] || [ -z "$DESC" ] || [ -z "$TOOLS" ]; then
        echo "FAIL: $f missing frontmatter fields"
    else
        echo "OK: $f ($NAME)"
    fi
done

3. Agent Frontmatter

For each `agents/*.md`:

  • Must have `name:` in frontmatter
  • Must have `description:` in frontmatter
  • Must have `tools:` in frontmatter
  • Must have `color:` in frontmatter
for f in agents/*.md; do
    NAME=$(grep -m1 "^name:" "$f" | cut -d: -f2- | xargs)
    COLOR=$(grep -m1 "^color:" "$f" | cut -d: -f2- | xargs)
    if [ -z "$NAME" ] || [ -z "$COLOR" ]; then
        echo "FAIL: $f missing name or color"
    else
        echo "OK: $f ($NAME, $COLOR)"
    fi
done

4. Agent Cross-References

Check that every `subagent_type:` referenced in skills exists as an agent file:

for AGENT in $(grep -roh 'subagent_type: "[^"]*"' skills/ | sed 's/subagent_type: "//;s/"//' | sort -u); do
    if [ ! -f "agents/$AGENT.md" ]; then
        echo "FAIL: subagent_type '$AGENT' referenced in skills but agents/$AGENT.md not found"
    else
        echo "OK: $AGENT agent exists"
    fi
done

5. Python Tool Syntax

ERRORS=0
for f in tools/*.py; do
    python3 -c "import ast; ast.parse(open('$f').read())" 2>&1
    if [ $? -ne 0 ]; then
        echo "FAIL: $f has syntax errors"
        ERRORS=$((ERRORS+1))
    else
        echo "OK: $f"
    fi
done
echo "Python tools: $ERRORS errors"

6. Hook Script

if [ -f "hooks/session-start.sh" ]; then
    if [ -x "hooks/session-start.sh" ]; then
        echo "OK: hooks/session-start.sh is executable"
    else
        echo "FAIL: hooks/session-start.sh not executable"
    fi
    if [ -f "hooks/hooks.json" ]; then
        python3 -c "import json; json.load(open('hooks/hooks.json'))" 2>&1
        if [ $? -eq 0 ]; then echo "OK: hooks.json valid JSON"; else echo "FAIL: hooks.json invalid"; fi
    fi
else
    echo "WARN: no hooks/session-start.sh"
fi

7. CLAUDE.md Accuracy

Check that tool count and agent count in CLAUDE.md match reality:

TOOL_COUNT=$(ls tools/*.py 2>/dev/null | wc -l)
AGENT_COUNT=$(ls agents/*.md 2>/dev/null | wc -l)
echo "Tools: $TOOL_COUNT Python files"
echo "Agents: $AGENT_COUNT agent definitions"

Report

Print a summary:

Plugin Validation:
  Versions: {OK/FAIL}
  Skills: {N} checked, {N} passed
  Agents: {N} checked, {N} passed
  Cross-refs: {N} checked, {N} passed
  Python tools: {N} checked, {N} syntax errors
  Hooks: {OK/FAIL}

Result: {PASS/FAIL}
Read more
@raphaelchristi
Ships withharness-evolver

Point at any LLM agent codebase. Harness Evolver will autonomously improve it — prompts, routing, tools, architecture — using multi-agent evolution with LangSmith as the evaluation backend.

579 skills6 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
57
Star history of raphaelchristi/harness-evolver on GitHub, a chart by star-history.com

Other skills on harness-evolver.

evolve

evolve

Use when the user wants to run the optimization loop, improve agent performance, evolve the agent, or iterate on quality.…

health

health

Use when the user wants to check dataset quality, diagnose eval issues, or before running evolve. Checks size, difficulty…

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills2w309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react5d252k
@facebook@facebookInstall Skill

Questions about dev-validate.

Which coding agents can use dev-validate?
dev-validate installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.