component-audit-checklists
**Scope**: Per-component-type audit checklists for agents, skills, hooks, and routing tables. Covers what to inspect, detection commands, and stale-pattern signals. **Version range**: vexjoy-agent, all versions **Generated**: 2026-04-15 — adapt checks to current frontmatter
$ npx -y skills add notque/vexjoy-agent --agent claude-codeHow it fires
How this agent gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
Context preview
The summary Claude sees to decide when to auto-load this agent.
**Scope**: Per-component-type audit checklists for agents, skills, hooks, and routing tables. Covers what to inspect, detection commands, and stale-pattern signals. **Version range**: vexjoy-agent, all versions **Generated**: 2026-04-15 — adapt checks to current frontmatter
Agent definition
component-audit-checklists.mdComponent Audit Checklists Reference
> **Scope**: Per-component-type audit checklists for agents, skills, hooks, and routing tables. Covers what to inspect, detection commands, and stale-pattern signals. > **Version range**: vexjoy-agent, all versions > **Generated**: 2026-04-15 — adapt checks to current frontmatter schema
---
Overview
The AUDIT phase scans affected component types to identify what needs upgrading, deprecating, or creating. The default scope is the 10 most-recently-modified agents + all hooks + affected routing tables. Comprehensive audit (all 120+ components) is opt-in. The most common failure is reading file names without opening the components — that detects presence, not stale patterns.
---
Pattern Table: Scope by Change Signal
| Signal Type | Default Audit Scope | Skip | |-------------|--------------------|----| | New Claude tool available | All agents with `allowed-tools` list | Skills, hooks without tool use | | New hook event type | All hooks matching event type | Agents, skills | | Deprecated API | All components using that API string | Unrelated components | | Routing trigger added | routing tables + affected agents | Hooks, scripts | | Model name change | All agents with `model:` frontmatter | Hooks, routing tables |
---
Agent Audit Checklist
For each agent in scope, check these fields in order:
# 1. Check model field is current
grep "^model:" agents/*.md | grep -v "sonnet\|opus"
# 2. Check allowed-tools for deprecated tools
grep -A 10 "allowed-tools:" agents/*.md | grep "deprecated_tool_name"
# 3. Check routing triggers for gaps (compare against routing table)
grep -A 20 "triggers:" agents/*.md
# 4. Check pairs_with for removed agents/skills
grep -A 10 "pairs_with:" agents/*.md
# 5. Check for outdated entries (patterns already resolved in prior upgrades)
grep -rn "Anti-Pattern" agents/*.md
**Per-agent audit fields to verify**:
| Field | Check | Stale Signal | |-------|-------|-------------| | `model:` | Is this a current model name? | Model ID no longer in active release | | `allowed-tools:` | Are all listed tools still available? | Tool removed from Claude Code | | `routing.triggers` | Does at least one trigger match the user's actual phrasing? | All triggers are technical jargon users never say | | `routing.pairs_with` | Do all listed components still exist? | Agent or skill in the list no longer in the repo | | `version:` | Is version incremented after substantive changes? | Version stuck at `1.0.0` across many commits |
---
Skill Audit Checklist
Skills are invoked via the Skill tool by name. Check:
# 1. Find skills with no routing triggers (unroutable)
grep -L "triggers:" skills/*/SKILL.md
# 2. Find skills referencing removed scripts
grep -rn "python3 scripts/" skills/*/SKILL.md | while read match; do
script=$(echo "$match" | grep -oP 'scripts/[^ ]+\.py')
[ -f "$script" ] || echo "MISSING: $script in $match"
done
# 3. Check phase count matches header count
grep -c "^## Phase\|^### Phase" skills/*/SKILL.md
**Per-skill audit fields**:
| Field | Check | Stale Signal | |-------|-------|-------------| | Phase references | Do all script calls resolve to real files? | `FileNotFoundError` at runtime | | Agent dispatch | Do dispatched agents still exist? | Agent removed but skill still dispatches it | | Output contract | Does the output schema match what downstream tools expect? | Silent data loss in pipelines |
---
Hook Audit Checklist
Hooks are the most fragile components — they fire on every tool call and exit code matters.
# 1. Find hooks with syntax errors (will kill sessions)
for f in hooks/*.py; do python3 -c "import ast; ast.parse(open('$f').read())" 2>&1 | grep -v "^$" && echo "SYNTAX ERROR: $f"; done
# 2. Find hooks registered in settings but not deployed to ~/.claude/hooks/
python3 -c "
import json, os
s = json.load(open(os.path.expanduser('~/.claude/settings.json')))
for event_hooks in s.get('hooks', {}).values():
for h in event_hooks:
p = h.get('command', '')
if 'hooks/' in p:
fname = p.split('hooks/')[-1].split()[0]
if not os.path.exists(os.path.expanduser(f'~/.claude/hooks/{fname}')):
print(f'NOT DEPLOYED: {fname}')
"
# 3. Find hooks that import missing modules
grep -rn "^from hooks\.\|^import hooks\." hooks/*.py
# 4. Check exit codes are consistent
grep -n "sys.exit" hooks/*.py | grep -v "sys.exit(0)\|sys.exit(1)\|sys.exit(2)"**Hook exit code contract**:
| Exit Code | Meaning | When to Use | |-----------|---------|-------------| | `0` | Allow — no message shown to user | Normal pass-through | | `1` | Block — show stderr to user as warning | Soft gate (user can override) | | `2` | Block — show stderr as error | Hard gate (cannot override) |
**Critical**: Exit code `2` on every PreToolUse deadlocks the session entirely. Hooks with syntax errors silently return non-zero. Always verify with `python3 -c "import ast; ast.parse(...)"`.
---
Routing Table Audit Checklist
Routing tables live in `skills/meta/do/references/routing-tables.md` and companion files.
# 1. Find agents referenced in routing table that no longer exist
python3 -c "
import re
table = open('skills/meta/do/references/routing-tables.md').read()
agents = re.findall(r'\|\s*([a-z][a-z-]+engineer|[a-z][a-z-]+agent)\s*\|', table)
import os
for a in set(agents):
if not os.path.exists(f'agents/{a}.md'):
print(f'MISSING AGENT IN TABLE: {a}')
"
# 2. Find agents in repo not present in routing table
grep -rh "^name:" agents/*.md | awk '{print $2}' | while read name; do
grep -q "$name" skills/meta/do/references/routing-tables.md || echo "NOT IN TABLE: $name"
done
# 3. Find routing table entries with no trigger keywords
grep -B 1 "No trigger\|no keywords\|\[\]" skills/meta/do/references/routing-tables.md---
<!-- no-pair-required: section header, not a standalone failure mode block -->
Pattern Catalog
Open a
Read more
Component Audit Checklists Reference
> **Scope**: Per-component-type audit checklists for agents, skills, hooks, and routing tables. Covers what to inspect, detection commands, and stale-pattern signals. > **Version range**: vexjoy-agent, all versions > **Generated**: 2026-04-15 — adapt checks to current frontmatter schema
---
Overview
The AUDIT phase scans affected component types to identify what needs upgrading, deprecating, or creating. The default scope is the 10 most-recently-modified agents + all hooks + affected routing tables. Comprehensive audit (all 120+ components) is opt-in. The most common failure is reading file names without opening the components — that detects presence, not stale patterns.
---
Pattern Table: Scope by Change Signal
| Signal Type | Default Audit Scope | Skip | |-------------|--------------------|----| | New Claude tool available | All agents with `allowed-tools` list | Skills, hooks without tool use | | New hook event type | All hooks matching event type | Agents, skills | | Deprecated API | All components using that API string | Unrelated components | | Routing trigger added | routing tables + affected agents | Hooks, scripts | | Model name change | All agents with `model:` frontmatter | Hooks, routing tables |
---
Agent Audit Checklist
For each agent in scope, check these fields in order:
# 1. Check model field is current grep "^model:" agents/*.md | grep -v "sonnet\|opus" # 2. Check allowed-tools for deprecated tools grep -A 10 "allowed-tools:" agents/*.md | grep "deprecated_tool_name" # 3. Check routing triggers for gaps (compare against routing table) grep -A 20 "triggers:" agents/*.md # 4. Check pairs_with for removed agents/skills grep -A 10 "pairs_with:" agents/*.md # 5. Check for outdated entries (patterns already resolved in prior upgrades) grep -rn "Anti-Pattern" agents/*.md
**Per-agent audit fields to verify**:
| Field | Check | Stale Signal | |-------|-------|-------------| | `model:` | Is this a current model name? | Model ID no longer in active release | | `allowed-tools:` | Are all listed tools still available? | Tool removed from Claude Code | | `routing.triggers` | Does at least one trigger match the user's actual phrasing? | All triggers are technical jargon users never say | | `routing.pairs_with` | Do all listed components still exist? | Agent or skill in the list no longer in the repo | | `version:` | Is version incremented after substantive changes? | Version stuck at `1.0.0` across many commits |
---
Skill Audit Checklist
Skills are invoked via the Skill tool by name. Check:
# 1. Find skills with no routing triggers (unroutable) grep -L "triggers:" skills/*/SKILL.md # 2. Find skills referencing removed scripts grep -rn "python3 scripts/" skills/*/SKILL.md | while read match; do script=$(echo "$match" | grep -oP 'scripts/[^ ]+\.py') [ -f "$script" ] || echo "MISSING: $script in $match" done # 3. Check phase count matches header count grep -c "^## Phase\|^### Phase" skills/*/SKILL.md
**Per-skill audit fields**:
| Field | Check | Stale Signal | |-------|-------|-------------| | Phase references | Do all script calls resolve to real files? | `FileNotFoundError` at runtime | | Agent dispatch | Do dispatched agents still exist? | Agent removed but skill still dispatches it | | Output contract | Does the output schema match what downstream tools expect? | Silent data loss in pipelines |
---
Hook Audit Checklist
Hooks are the most fragile components — they fire on every tool call and exit code matters.
# 1. Find hooks with syntax errors (will kill sessions)
for f in hooks/*.py; do python3 -c "import ast; ast.parse(open('$f').read())" 2>&1 | grep -v "^$" && echo "SYNTAX ERROR: $f"; done
# 2. Find hooks registered in settings but not deployed to ~/.claude/hooks/
python3 -c "
import json, os
s = json.load(open(os.path.expanduser('~/.claude/settings.json')))
for event_hooks in s.get('hooks', {}).values():
for h in event_hooks:
p = h.get('command', '')
if 'hooks/' in p:
fname = p.split('hooks/')[-1].split()[0]
if not os.path.exists(os.path.expanduser(f'~/.claude/hooks/{fname}')):
print(f'NOT DEPLOYED: {fname}')
"
# 3. Find hooks that import missing modules
grep -rn "^from hooks\.\|^import hooks\." hooks/*.py
# 4. Check exit codes are consistent
grep -n "sys.exit" hooks/*.py | grep -v "sys.exit(0)\|sys.exit(1)\|sys.exit(2)"**Hook exit code contract**:
| Exit Code | Meaning | When to Use | |-----------|---------|-------------| | `0` | Allow — no message shown to user | Normal pass-through | | `1` | Block — show stderr to user as warning | Soft gate (user can override) | | `2` | Block — show stderr as error | Hard gate (cannot override) |
**Critical**: Exit code `2` on every PreToolUse deadlocks the session entirely. Hooks with syntax errors silently return non-zero. Always verify with `python3 -c "import ast; ast.parse(...)"`.
---
Routing Table Audit Checklist
Routing tables live in `skills/meta/do/references/routing-tables.md` and companion files.
# 1. Find agents referenced in routing table that no longer exist
python3 -c "
import re
table = open('skills/meta/do/references/routing-tables.md').read()
agents = re.findall(r'\|\s*([a-z][a-z-]+engineer|[a-z][a-z-]+agent)\s*\|', table)
import os
for a in set(agents):
if not os.path.exists(f'agents/{a}.md'):
print(f'MISSING AGENT IN TABLE: {a}')
"
# 2. Find agents in repo not present in routing table
grep -rh "^name:" agents/*.md | awk '{print $2}' | while read name; do
grep -q "$name" skills/meta/do/references/routing-tables.md || echo "NOT IN TABLE: $name"
done
# 3. Find routing table entries with no trigger keywords
grep -B 1 "No trigger\|no keywords\|\[\]" skills/meta/do/references/routing-tables.md---
<!-- no-pair-required: section header, not a standalone failure mode block -->
Pattern Catalog
Open a
Essays and writing behind this toolkit live at vexjoy.com. AI agents skip steps. "Looks correct" replaces running tests. "Trivial change" replaces verification.
Repo: notque/vexjoy-agent
Other agents on vexjoy-agent.
- ansible-automation-engineer
Ansible automation: playbooks, roles, collections, Molecule testing, Vault security.
Open agent - modules
**Scope**: Module selection patterns, builtin vs command/shell decisions, collection modules, and version-specific module changes **Version range**: ansible-core 2.14+ / Ansible Collections (community.general 7.0+) **Generated**: 2026-04-04 — verify against current Ansible
Open agent - testing
**Scope**: Molecule test scenarios, ansible-lint rules, idempotency validation, and check-mode patterns **Version range**: Molecule 6.0+ / ansible-lint 6.0+ / ansible-core 2.14+ **Generated**: 2026-04-04 — verify against current Molecule and ansible-lint documentation
Open agent - base-instructions
Universal operational rules injected by /do at agent dispatch. Domain-specific rules live in each agent's .md file.
Open agent - communication-patterns
**Scope**: Failure modes in agent output style — over-reporting, self-congratulation, verbose narration, and hedging. Covers what to detect and how to fix each. **Version range**: all versions **Generated**: 2026-05-11
Open agent - combat-effects-upgrade
Zero-dependency combat visual upgrades: CSS particle replacement, Framer Motion combat juice, CSS 3D card transforms.
Open agent

