fix-plugin-paths — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited fix-plugin-paths (Agent Skill) and scored it 87/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 3 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 3 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You audit, fix, and continuously improve plugin path portability in skill and agent files. You ensure they work correctly when installed via npx skills add, the plugin installer, or uvx.
The core rule: When a skill is installed, only its own directory exists:
.agents/skills/<skill-name>/
SKILL.md
scripts/
./assets/
references/No plugins/ folder. No CLAUDE_PLUGIN_ROOT. No source repo structure.
This applies equally to Python scripts called by skills — a script must not use PROJECT_ROOT / "plugins/other-plugin/..." at runtime. Cross-plugin script references must use .agents/skills/<skill>/scripts/<script> or a self-contained copy.
The full ruleset is in references/fix-plugin-paths.prompt.md.
If the user specifies a file or directory, confirm and proceed. Otherwise ask one question:
Scope: <single file | plugin directory | full repository>
Mode: A) Single audit — fix one file now
B) Repository audit — generate task tracker, fix all flagged files
C) In-session evolve — continuously score SKILL.md after each editAuto-detect the scope if inferable from context. If mode is clear from the request, skip the question.
For each target file, check which rules from references/fix-plugin-paths.prompt.md apply using the auditor script:
python ./scripts/audit_plugin_paths.py <directory-or-file>The auditor runs two passes:
plugins/<name> and /Users/ references in .md and .py files. False positives can be suppressed via scripts/plugin_paths_whitelist.json.Path() constructions in .py files where PROJECT_ROOT, ROOT, SCRIPT_DIR, or Path(__file__) is used to build a path into plugins/<name>. These cannot be whitelisted and must always be fixed.For CRITICAL violations the correct fix is always one of:
scripts/<script>.py path (self-contained, portable).agents/skills/<skill-name>/scripts/<script>.py (cross-skill installed reference)uvx / subprocess calling the GitHub-native installer (for installer bootstrapping)If the standard pass flags an issue that is functionally required (like a structural diagram or explicit documentation reference), DO NOT MUTATE THE FILE. Instead, update scripts/plugin_paths_whitelist.json using the Edit tool to include a targeted pattern that squashes the false positive, then re-run the auditor to confirm it cleanly skips that item.
Apply each rule from references/fix-plugin-paths.prompt.md manually using the Edit tool. Verify with diff after each change.
⚠️ Always verify the diff before applying. Apply only after confirming the diff is correct.
After fixing, confirm no broken references remain by rerunning the auditor:
python ./scripts/audit_plugin_paths.py <directory-or-file>Zero results = clean.
For repository-wide remediation, always follow this three-step cycle.
Initialize the scripts/portability-audit-report.md artifact to act as the source of truth by running the auditor script:
python ./scripts/audit_plugin_paths.py .This script will automatically generate the scripts/portability-audit-report.md formatted with a checkbox per file, itemizing exactly what line contains the issue.
scripts/portability-audit-report.md file to identify the next unchecked rule violation.scripts/plugin_paths_whitelist.json and add a targeted global regex or file-specific string pattern to exempt it.python ./scripts/audit_plugin_paths.py . to update the report. Prove your fix worked by confirming that the issue dropped off the active report.The loop finishes strictly only when running the auditor returns a completely clean scan:
python ./scripts/audit_plugin_paths.py .Goal: Zero results found.
Use when evolving this skill's own SKILL.md as a background thread during an active session. No worktree. No external repo. The agent itself is the proposer.
ls evals/evals.json 2>/dev/null || echo "MISSING"If missing: draft 8 should_trigger: true + 4 should_trigger: false cases from the description and <example> blocks. Write to evals/evals.json, evals/results.tsv (header), and references/program.md.
python <APS_ROOT>/plugins/agent-agentic-os/skills/os-eval-runner/scripts/evaluate.py \
--skill . \
--baseline --desc "initial baseline"
git add evals/ && git commit -m "baseline: fix-plugin-paths eval start"Report the baseline score before continuing main work.
After each modification to SKILL.md:
python <APS_ROOT>/plugins/agent-agentic-os/skills/os-eval-runner/scripts/evaluate.py \
--skill . \
--desc "<what changed>"git add SKILL.md && git commit -m "keep: score=<X> <desc>"📊 score: <prev> → <new> (<delta>) KEEP|DISCARDWhen done or when the user says "stop":
evals/results.tsvAfter completing a full repository audit or a significant in-session evolution batch, record:
Write to: temp/retrospectives/audit_<YYYYMMDD>_fix-plugin-paths.md
grep confirms zero violations.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.