Skip to content
Back to skills

Dev Validate

ASecurity

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'.

  • 49 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 26, 2026
testingpythonbash

Security analysis

A100/100

Scanned May 27, 2026

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

Installs into .claude/skills of the current project.

Are you the author of Dev Validate?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Dev Validate
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/raphaelchristi-dev-validate/badge)](https://www.skillsdirectory.com/skills/raphaelchristi-dev-validate)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
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

```bash
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

```bash
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

```bash
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:

```bash
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

```bash
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

```bash
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:

```bash
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}
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.