agentic/code/addons/aiwg-dev/skills/validate-component/SKILL.md
Validate a single AIWG component (skill, agent, or command) for completeness and correctness
npx skillsauth add jmagly/aiwg validate-componentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You check a single AIWG component — a skill, agent, or CLI command — for completeness and correctness, then produce a structured pass/fail report with specific gaps listed.
| Pattern | Example | Action | |---------|---------|--------| | Validate skill | "validate this skill" | Run skill completeness checks | | Validate agent | "check this agent definition" | Run agent completeness checks | | Validate command | "is this command wired up" | Run command completeness checks | | Path-specific | "validate component at agentic/code/addons/my-addon/skills/my-skill" | Validate at given path | | Pre-PR | "pre-PR check on this component" | Run all applicable checks |
Identify component type and path:
skills/<name>/SKILL.md → skillagents/<name>.md or agents/<name>/ → agentsrc/extensions/commands/definitions.ts → commandRun type-appropriate checks:
For a Skill:
SKILL.md filedescription: field present in YAML frontmatter# Title section present## Behavior or ## Process section present## Examples entrymanifest.json (walk up directory tree)manifest.json skills arrayagentic/code/ (not in a provider deployment directory)executedViaSkillRunner: true reference: check for circular CLI call patternFor an Agent:
.md filename: field in frontmatterdescription: field in frontmattermodel: field in frontmattertools: field in frontmattermanifest.jsonmanifest.json agents arrayagentic/code/Link Classification (applies to all component types):
Extract every @<path> reference from the file and classify:
| Pattern | Result | Message |
|---------|--------|---------|
| @$AIWG_ROOT/<path> | PASS | AIWG core ref (install-relative) |
| @$TOKEN/<path> — TOKEN set in env | PASS | Registered corpus token |
| @$TOKEN/<path> — TOKEN NOT in env | WARN | env var TOKEN not set; add to .env or export |
| @.aiwg/<path> — path in Tier 1/2 allowlist | PASS | Normalized project memory |
| @.aiwg/<path> — not in any memory.creates | FAIL | non-normalized .aiwg/ path — repo-local only |
| @.claude/<path> | FAIL | deployment target — forbidden in distributable source |
| @agentic/code/<path> | WARN | legacy bare ref — migrate to @$AIWG_ROOT/agentic/code/ |
| @src/<path> | WARN | legacy bare ref — migrate to @$AIWG_ROOT/src/ |
| @docs/<path> | WARN | legacy bare ref — migrate to @$AIWG_ROOT/docs/ |
| @tools/<path> | WARN | legacy bare ref — migrate to @$AIWG_ROOT/tools/ |
| Relative path within component | PASS | Local ref |
Build the Tier 2 allowlist by reading all manifest.json files in agentic/code/ and collecting memory.creates[*].path values. Combine with Tier 1 (.aiwg/AIWG.md, .aiwg/frameworks/).
For a CLI Command:
src/extensions/commands/definitions.tsexecutedViaSkillRunner: true OR a handler entryexecutedViaSkillRunner: true: find the associated SKILL.md and verify it does not contain aiwg <command-name> in any bash blocksrc/cli/handlers/ for the handler file and registration in allHandlersCompile report:
Format results as a structured report:
Component Validation: <component-name> (<type>)
Path: <absolute-or-relative-path>
Checks:
PASS description frontmatter present
PASS title section present
PASS behavior section present
FAIL no examples section found
PASS listed in manifest.json
FAIL not in agentic/code/ (found in .claude/skills/ — placement violation)
WARN @.aiwg/planning/my-design.md is not a normalized path (repo-local only)
Result: FAIL — 2 issues found
Required actions:
1. Add ## Examples section to SKILL.md
2. Move SKILL.md to agentic/code/addons/<addon>/skills/<name>/SKILL.md
then re-deploy with: aiwg use <addon>
Surface the report to the user with the result line prominent.
User: "Validate the doctor skill"
Action: Read agentic/code/addons/aiwg-utils/skills/doctor/SKILL.md, find parent manifest, run all checks.
Output:
Component Validation: doctor (skill)
Path: agentic/code/addons/aiwg-utils/skills/doctor/SKILL.md
Checks:
PASS description frontmatter present
PASS title section present
PASS behavior section present
PASS examples section present
PASS listed in aiwg-utils manifest.json
PASS lives in agentic/code/
Result: PASS — all checks passed
User: "validate component at .claude/skills/my-new-skill"
Action: Read SKILL.md, check for completeness, check placement.
Output:
Component Validation: my-new-skill (skill)
Path: .claude/skills/my-new-skill/SKILL.md
Checks:
PASS description frontmatter present
FAIL no ## Behavior or ## Process section
FAIL no ## Examples section
FAIL placement violation: .claude/skills/ is a deployment target
FAIL not found in any manifest.json
Result: FAIL — 4 issues found
Required actions:
1. Add ## Behavior section to SKILL.md
2. Add ## Examples section to SKILL.md
3. Move to agentic/code/addons/<your-addon>/skills/my-new-skill/SKILL.md
4. Add "my-new-skill" to your addon's manifest.json skills array
5. Run `aiwg use <addon>` to deploy
User: "check the my-command command"
Action: Read definitions.ts, find executedViaSkillRunner: true, read associated SKILL.md, search for aiwg my-command.
Output:
Component Validation: my-command (command)
Path: src/extensions/commands/definitions.ts
Checks:
PASS definition entry present in definitions.ts
PASS executedViaSkillRunner: true (no TypeScript handler required)
FAIL circular call detected: SKILL.md contains "aiwg my-command" in bash block (line 47)
Result: FAIL — 1 issue found
Required actions:
1. Rewrite SKILL.md to perform work directly via Read/Write/Bash/Task tools
without calling back into `aiwg my-command`
See: agentic/code/addons/aiwg-dev/rules/no-circular-skill-calls.md
data-ai
Report which research-corpus radar sidecars are overdue for refresh. Computes staleness (days since last refresh vs the cadence window) for every radar, sorted most-overdue-first. Runs via `aiwg corpus radar-status`.
data-ai
Aggregate research-corpus radar sidecars into a corpus or per-cluster freshness report — totals, overdue count, per-cluster / per-GRADE / per-trajectory breakdowns, an overdue table, and per-radar rationale snippets. Runs via `aiwg corpus radar-report`.
testing
Scaffold radar/freshness sidecars for research-corpus REFs. Pulls title/authors from the citation sidecar and GRADE from the analysis doc, defaults the refresh cadence from GRADE and the cluster from a corpus-local map, and stamps documentation/radar/REF-XXX-radar.md. Runs via `aiwg corpus radar-init`.
data-ai
Compute an entity's publication trajectory — per-year paper counts, topic drift, hot-streak detection (≥3 consecutive A-grade years), and career phase. Runs via `aiwg corpus profile-temporal`.