plugins/agent-plugin-analyzer/skills/path-reference-auditor/SKILL.md
Audit file path references in plugins and skills. Trigger with "audit path references", "check file references", "find broken references", "path reference audit", "verify paths", or when you need to validate that all ./references in code actually exist in the skill/plugin. Three-phase audit: (1) SCAN all files for references, (2) VERIFY each exists, (3) REPORT issues. Generates inventory.json for reuse across multiple checks.
npx skillsauth add richfrem/agent-plugins-skills path-reference-auditorInstall 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.
This skill requires Python 3.8+ and standard library only. No external packages needed.
To install this skill's dependencies:
pip-compile ./requirements.in
pip install -r ./requirements.txt
See requirements.txt for the dependency lockfile (currently empty — standard library only).
Complete path reference audit system for plugins and skills. Ensures all ./file references in code actually exist.
Validates that file references in plugins and skills are:
.agents/skills/Y/ stay within Y/plugins/X/ (root level) stay within X/./ paths point to actual files (or symlinks)Generates an inventory.json database of all references for reuse in multiple checks.
Find all ./reference patterns in .py, .md, .mmd, .json, .sh files.
Populates temp/inventory.json with raw reference data.
python ./scripts/path_reference_auditor.py --project . --phase scan
Output: temp/inventory.json with all references found
Read inventory.json and check if each reference exists in the skill/plugin. Updates inventory with status: exists/missing/symlink/broken.
python ./scripts/path_reference_auditor.py --project . --phase verify
Output: temp/inventory.json with status information
Generate analysis reports from verified inventory (no rescanning needed).
# Summary
python ./scripts/path_reference_auditor.py --project . --phase report --report summary
# Missing files
python ./scripts/path_reference_auditor.py --project . --phase report --report missing
# Broken symlinks
python ./scripts/path_reference_auditor.py --project . --phase report --report broken_symlinks
Inventory location: All reports read from temp/inventory.json (generated by Phase 1 & 2)
Flags references that point OUTSIDE a skill directory.
# All skills
python ./scripts/check_skill_boundaries.py temp/inventory.json --batch all
# Single skill (fast testing)
python ./scripts/check_skill_boundaries.py temp/inventory.json --skill adr-management
Example violation:
FILE: .agents/skills/adr-management/SKILL.md:45
REF: ../../templates/adr-template.md ❌ OUTSIDE SKILL
FIX: Create symlink inside skill
Flags references in plugin root level that point OUTSIDE the plugin.
# All plugins
python ./scripts/check_plugin_boundaries.py temp/inventory.json --batch all
# Single plugin (fast testing)
python ./scripts/check_plugin_boundaries.py temp/inventory.json --plugin plugin-installer
Example violation:
FILE: plugins/adr-manager/commands/adr-management.md:8
REF: ../../../docs/guide.md ❌ OUTSIDE PLUGIN
FIX: Copy/symlink file into plugin
# Step 1: Generate inventory (from project root)
python ./scripts/path_reference_auditor.py --project . --phase scan
# Step 2: Verify all references exist
python ./scripts/path_reference_auditor.py --project . --phase verify
# Step 3: Check skill boundaries
python ./scripts/check_skill_boundaries.py temp/inventory.json --batch all
# Step 4: Check plugin boundaries
python ./scripts/check_plugin_boundaries.py temp/inventory.json --batch all
# Step 5: Review violations and fix
# Test one skill during development
python ./scripts/check_skill_boundaries.py temp/inventory.json --skill my-skill
# Test one plugin after changes
python ./scripts/check_plugin_boundaries.py temp/inventory.json --plugin my-plugin
path_reference_auditor.py: Three-phase audit (scan → verify → report)check_skill_boundaries.py: Validate skill-level references stay internalcheck_plugin_boundaries.py: Validate plugin-level references stay internalSee references/ for detailed usage guide.
✅ Inventory-based: Scan once, analyze multiple times ✅ Filtered testing: Test single skill/plugin without scanning all ✅ Boundary validation: Skill and plugin scope checks ✅ Portable: All paths relative to project root ✅ JSON output: Machine-parseable inventory for automation
For end users who want just this skill, consult the authoritative installation hub for current deployment logic:
👉 INSTALL.md
Then run from the skill directory:
python ./scripts/path_reference_auditor.py --project . --phase scan
For developers who want all agent-plugin-analyzer skills + commands + hooks:
# From project root, use the bridge installer
python ./scripts/bridge_installer.py plugins/agent-plugin-analyzer
# Or manually
cp -r plugins/agent-plugin-analyzer /path/to/target/plugins/
Then run from project root:
python .agents/skills/path-reference-auditor/./path_reference_auditor.py --project . --phase scan
All file references inside .agents/skills/Y/ must resolve within Y/.
Valid:
./scripts/tool.py → .agents/skills/Y/scripts/tool.py ✅./references/guide.md → .agents/skills/Y/references/guide.md ✅Invalid:
../../templates/file.md → plugins/X/templates/file.md (outside skill) ❌../other-skill/file.md → .agents/skills/other-skill/file.md (sibling skill) ❌Fix: Create symlink inside the skill:
cd plugins/X/skills/Y
ln -s ../../templates templates
All file references inside plugins/X/ (root level, non-skill files) must resolve within X/.
Valid:
./commands/file.md → plugins/X/commands/file.md ✅./skills/Y/SKILL.md → .agents/skills/Y/SKILL.md ✅Invalid:
../other-plugin/file.md → plugins/other-plugin/file.md (sibling plugin) ❌../../docs/guide.md → docs/guide.md (project root) ❌Fix: Copy or symlink into plugin:
cd plugins/X
cp -r ../../docs ./docs
# or symlink
ln -s ../../docs ./docs
Prefer symlinks over duplicating files:
Good:
# Inside skill, link to plugin-level resource
ln -s ../../templates ./templates
Avoid:
# Copying creates duplication
cp -r ../../templates ./templates
inventory.json once (30-60 seconds)Never rescan unnecessarily. Reuse inventory.json across multiple checks.
tools
Ingests repository files into the ChromaDB vector store. Builds or updates the vector index from a manifest or directory scan using ingest.py. Use when new files need to be indexed or the vector store is out of date. <example> user: "Index these new plugin files into the vector database" assistant: "I'll use vector-db-ingest to add them to the vector store." </example> <example> user: "The vector store is missing recent files -- update it" assistant: "I'll use vector-db-ingest to re-index the changes." </example>
data-ai
Removes stale and orphaned chunks from the ChromaDB vector store for files that have been deleted or renamed. Use after files are removed or moved to keep the vector index in sync with the filesystem. <example> user: "Clean up the vector store after I deleted some files" assistant: "I'll use vector-db-cleanup to remove orphaned chunks." </example> <example> user: "The vector database has chunks for files that no longer exist" assistant: "I'll run vector-db-cleanup to prune them." </example>
testing
Audit Vector DB coverage -- compares the live filesystem manifest against the ChromaDB index to identify coverage gaps.
development
3-Phase Knowledge Search strategy for the RLM Factory ecosystem. Auto-invoked when tasks involve finding code, documentation, or architecture context in the repository. Enforces the optimal search order: RLM Summary Scan (O(1)) -> Vector DB Semantic Search -> Grep/Exact Match. Never skip phases.