proactive-audit

v2026.09.24

Automated health checks for framework artifacts modified during a pipeline. Validates hook syntax, security patterns (SE-01/SE-02), skill wiring, agent consistency, and routing correctness. Invoked as the final pipeline step when framework artifacts were created, modified, or deleted.

GitHub
安装命令
npx skhub add oimiragieo/proactive-audit
Markdown
SKILL.md

Proactive Audit

Overview

Automated health checks for framework artifacts that were modified during the current pipeline. This skill fills the gap between reactive verification (tests, lint) and proactive framework-level validation (wiring, syntax, security patterns).

Core principle: Framework artifact changes require the same rigor as code changes. If a skill was created, verify it is wired. If a hook was modified, verify it compiles. If an agent was changed, verify its tool/skill lists are consistent.

When to Invoke

Invoke this skill as the final pipeline step whenever ANY of the following paths were created, modified, or deleted during the session:

  • .claude/hooks/**/*.cjs
  • .claude/skills/**/SKILL.md
  • .claude/agents/**/*.md
  • .claude/workflows/**/*.md
  • .claude/schemas/**/*.json
  • .claude/templates/**/*
  • .claude/CLAUDE.md
  • .claude/lib/routing/routing-table.cjs

Invocation:

Skill({ skill: 'proactive-audit' });

Mandatory Skills

SkillPurposeWhen
task-management-protocolTrack audit progressAlways
ripgrepFast targeted artifact searchDuring checks
code-semantic-searchPattern discovery across artifactsWhen investigating
context-compressorCompress large audit resultsWhen output is large
verification-before-completionGate completion on zero CRITICALBefore marking done
memory-searchCheck prior audit patternsAt start

Step 1: Detect Changed Artifacts

Use git diff to identify which framework artifacts changed in this session:

# Primary: git diff against recent commits
git diff --name-only HEAD~5 -- .claude/hooks/ .claude/skills/ .claude/agents/ .claude/workflows/ .claude/schemas/ .claude/templates/ .claude/CLAUDE.md .claude/lib/routing/

# Secondary: check unstaged changes
git diff --name-only -- .claude/hooks/ .claude/skills/ .claude/agents/ .claude/workflows/ .claude/schemas/ .claude/templates/

# Tertiary: check untracked files
git ls-files --others --exclude-standard .claude/hooks/ .claude/skills/ .claude/agents/ .claude/workflows/ .claude/schemas/ .claude/templates/

Combine all three lists into a deduplicated set of changed artifact paths.

Step 2: Apply Check Matrix

For each changed artifact, apply the relevant checks from this matrix:

Hook Files (.claude/hooks/**/*.cjs)

Check IDCheckCommandSeverity
H-01Syntax validitynode --check <file>CRITICAL
H-02SE-02: raw JSON.parse without safeParseJSONgrep -n "JSON.parse(" <file> then verify safeParseJSON importHIGH
H-03SE-01: shell injection via shell: truegrep -n "shell:\\s*true" <file>HIGH
H-04Hook registered in settings.jsongrep "<hook-filename>" .claude/settings.jsonMEDIUM
H-05Exit code correctnessVerify try/catch wrapping, exit 0 on non-critical errorsMEDIUM

H-02 detail: If JSON.parse( is found, check if the file also imports safeParseJSON from .claude/lib/utils/safe-json.cjs. If not, flag as HIGH finding. Exclude test files (*.test.cjs).

Skill Files (.claude/skills/**/SKILL.md)

Check IDCheckCommandSeverity
S-01Skill appears in skill-catalog.mdgrep "<skill-name>" .claude/docs/skill-catalog.mdHIGH
S-02At least one agent has skill in frontmattergrep -r "<skill-name>" .claude/agents/ --include="*.md"MEDIUM
S-03Skill appears in CLAUDE.md Section 8.5grep "<skill-name>" .claude/CLAUDE.mdMEDIUM
S-04SKILL.md has valid frontmatterVerify name:, description:, version: fields existMEDIUM
S-05Validate skills (if available)pnpm validate:skills 2>&1LOW

Agent Files (.claude/agents/**/*.md)

Check IDCheckCommandSeverity
A-01Agent appears in agent-registry.jsongrep "<agent-name>" .claude/context/agent-registry.jsonHIGH
A-02Agent's skills: list references existing skillsFor each skill in frontmatter, verify .claude/skills/<skill>/SKILL.md existsMEDIUM
A-03Agent's tools: list contains only valid toolsVerify each tool name against known tool listMEDIUM
A-04Agent appears in CLAUDE.md routing tablegrep "<agent-name>" .claude/CLAUDE.mdMEDIUM

Workflow Files (.claude/workflows/**/*.md)

Check IDCheckCommandSeverity
W-01Workflow referenced in WORKFLOW_AGENT_MAP.mdgrep "<workflow-name>" .claude/docs/@WORKFLOW_AGENT_MAP.mdMEDIUM
W-02Referenced agents existFor each agent name in workflow, verify agent file existsMEDIUM

Schema Files (.claude/schemas/**/*.json)

Check IDCheckCommandSeverity
SC-01Valid JSON syntaxnode -e "JSON.parse(require('fs').readFileSync('<file>', 'utf8'))"CRITICAL
SC-02Schema appears in schema-catalog.mdgrep "<schema-name>" .claude/context/artifacts/catalogs/schema-catalog.mdMEDIUM

Root Cleanliness Check

ls -1 | grep -cvE '^(\.|node_modules|src|tests|scripts|dist|build|docs|package\.json|package-lock\.json|pnpm-lock\.yaml|tsconfig|eslint|prettier|jest|vitest|README|LICENSE|CHANGELOG|CLAUDE\.md|\.env)'

FAIL if the count is greater than 0.

Known slop patterns (any of these in project root = FAIL):

  • *-debug*.txt, *-debug*.log, debug-*.json
  • dump-*.cjs, dump-*.js, dump-*.json
  • rename_*.cjs, revert_*.cjs, update_*.cjs
  • test-out.txt, lint-output.txt, eslint.json, errors.json
  • UUID-named files (e.g. a3f2c1b0-*.json)
  • new_session_analysis.md or any *.analysis.md not under .claude/context/
  • Any .cjs/.js/.mjs not referenced in package.json scripts or tracked project source
  • Any .md not named README.md, CLAUDE.md, LICENSE, or CHANGELOG.md

Action when FAIL:

  1. Delete the offending files (or move to .claude/context/tmp/ if content may be needed)
  2. Log deletion to session-gap-log.jsonl with type: "cleanup"
  3. Append a reflection-spawn-request.json entry with trigger: "ai-slop-found" so the root cause is investigated

Reference: .claude/rules/cleanup-always.md

Documentation Staleness Check

After any feature work, verify:

  1. CHANGELOG.md — does it have an entry dated within the last session?

    • Check: git log --oneline -5 vs grep "## \[" CHANGELOG.md | head -3
    • FAIL if: feature commits exist but no matching CHANGELOG entry
  2. .env.example — does it document all env vars in the codebase?

    • Check: grep -r "process.env\." .claude/skills/ .claude/hooks/ | grep -oP "process\.env\.\K\w+" | sort -u
    • Compare against entries in .env.example
    • FAIL if: env var used in code but not documented in .env.example
  3. README.md — are agent/skill counts current?

    • Check counts in README vs jq '.agents | length' .claude/context/agent-registry.json
    • WARN if counts diverge by more than 2

Routing Files (.claude/lib/routing/routing-table.cjs, .claude/CLAUDE.md)

Check IDCheckCommandSeverity
R-01routing-table.cjs syntaxnode --check .claude/lib/routing/routing-table.cjsCRITICAL
R-02Validate skills (full)pnpm validate:skills 2>&1MEDIUM

Step 3: Generate Report

Write a structured report to .claude/context/reports/ecosystem-audit/proactive-audit-{ISO-date}.md with this format:

<!-- Agent: qa | Task: #N | Session: YYYY-MM-DD -->

# Proactive Audit Report

**Date:** YYYY-MM-DD
**Artifacts Scanned:** N
**Findings:** N CRITICAL, N HIGH, N MEDIUM, N LOW
**Overall:** PASS | FAIL

## Changed Artifacts

- path/to/artifact1 (type: hook)
- path/to/artifact2 (type: skill)

## Findings

### CRITICAL

| ID   | File          | Check  | Detail                 | Remediation      |
| ---- | ------------- | ------ | ---------------------- | ---------------- |
| H-01 | hooks/foo.cjs | Syntax | SyntaxError at line 42 | Fix syntax error |

### HIGH

| ID   | File          | Check | Detail                                      | Remediation                                               |
| ---- | ------------- | ----- | ------------------------------------------- | --------------------------------------------------------- |
| H-02 | hooks/bar.cjs | SE-02 | JSON.parse at line 15 without safeParseJSON | Import safeParseJSON from .claude/lib/utils/safe-json.cjs |

### MEDIUM

(same table format)

### PASS

| ID   | File          | Check  | Result |
| ---- | ------------- | ------ | ------ |
| H-01 | hooks/baz.cjs | Syntax | OK     |

## Summary

- Total checks run: N
- Passed: N
- Failed: N
- Pass rate: N%

Step 4: Return Verdict

After generating the report:

  • If ANY CRITICAL findings exist: return FAIL with the report path and list of critical findings
  • If ANY HIGH findings exist: return WARN with the report path and list of high findings
  • If only MEDIUM/LOW findings: return PASS with the report path and note about medium findings
  • If no findings: return PASS with the report path

Iron Laws

  1. ALWAYS run every applicable check from the check matrix — skipping "small" changes is how undetected wiring failures accumulate across sessions.
  2. NEVER trust task metadata alone for change detection — use git diff as the primary source of changed artifact paths.
  3. NEVER report PASS without actually executing each check command — self-attested PASS without evidence violates verification-before-completion.
  4. NEVER ignore SE-02 (prototype pollution) findings in hook files — a single compromised hook can corrupt all subsequent tool calls in the pipeline.
  5. ALWAYS validate hook syntax with node --check before reporting findings — broken hooks silently block the entire tool pipeline.

Anti-Patterns

Anti-PatternWhy It FailsCorrect Approach
Skipping checks for "small" changesSmall wiring failures accumulate silently until a pipeline breaksRun all checks regardless of perceived change size
Trusting task metadata for change detectionMetadata can be incomplete or stale; misses unstaged changesUse git diff --name-only + git ls-files --others as primary source
Self-attesting PASS without running commandsUnverified PASS masks real failures; violates verification-before-completionExecute every check command and capture output as evidence
Ignoring SE-02 (prototype pollution) in hooksOne polluted hook corrupts Object.prototype globally across all tool callsFlag SE-02 as HIGH severity and block pipeline until fixed
Reporting findings without remediation stepsDevelopers know what broke but not how to fix itInclude specific remediation for every finding with file+line reference

Severity Guide

SeverityMeaningAction Required
CRITICALFramework will breakFix immediately, block pipeline completion
HIGHSecurity risk or invisible artifactFix before next session, warn user
MEDIUMMissing integration, incomplete wiringFix in follow-up task
LOWBest practice violation, cosmeticTrack for future improvement

Integration with Router Step 0.7

The router invokes this skill via Step 0.7 in the Router Output Contract (CLAUDE.md Section 0.1). The router:

  1. Detects that framework artifacts were modified during the pipeline
  2. Spawns a QA agent with this skill as the final pipeline step
  3. Reads the audit report
  4. If CRITICAL findings: spawns developer to fix them before claiming completion
  5. If HIGH findings: warns user and notes findings in pipeline summary
  6. If PASS: proceeds to claim pipeline completion

Related Skills

  • verification-before-completion -- General evidence-based completion gates
  • checklist-generator -- IEEE 1028 quality checklists
  • sharp-edges -- Known hazard patterns (SE-01 through SE-07)

Related References

  • .claude/context/plans/proactive-audit-design-2026-02-22.md -- Design document
  • .claude/rules/security.md -- SE-01 and SE-02 patterns
  • .claude/rules/artifact-integration.md -- Must-have integration requirements
发现
标签

此技能尚未发布标签。

版本
最新版本元数据

版本

v2026.09.24

发布时间

Sep 24, 2026

分类

未分类

许可证

未指定

源路径

.claude/skills/proactive-audit

默认分支

main

最新提交

64b580e

Tree SHA

42a1df4