AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Skill Audit Router

skill-rushindrasinha-skill-audit-router-skill-audit-router · by rushindrasinha

|

No reviews yet
0 installs
18 views
0.0% view→install

Install

$ agentstack add skill-rushindrasinha-skill-audit-router-skill-audit-router

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-rushindrasinha-skill-audit-router-skill-audit-router)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
10d ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Skill Audit Router? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Skill audit and router

Two stages, in this order, because the second is worthless without the first. Scanning for SKILL.md and calling the result your catalog produces a number that has nothing to do with what the model can actually invoke.

Stage 1 — audit (always run this first)

python3 skill_audit.py --json catalog.json --fix-plan rewrites.md

Resolves the real load path and excludes what was never routable: cross-tool mirrors (.cursor/, .opencode/, .kiro/), marketplace clones, uninstalled plugins, dev checkouts outside the load path, byte duplicates, and name-shadowed skills. Plugin liveness comes from installed_plugins.json, the only authoritative source.

Then scores each description on static signals (length band, trigger phrasing, negative scoping, concrete anchors, filler penalties) plus three corpus-aware signals that are the ones that actually predict misrouting:

  • Self-retrieval — query the index with a skill's own description. If it does

not rank itself first, no router will ever pick it correctly.

  • Distinctiveness — mean idf of its top terms.
  • Margin — lead over its nearest neighbour.

Stage 2 — route

python3 skill_router.py --catalog catalog.json "our cancel flow is leaking subscribers"
python3 skill_router.py --catalog catalog.json --eval evals.jsonl
python3 skill_router.py --catalog catalog.json --for-query "..."   # shortlist card

BM25 over a weighted bag (name ×3, triggers ×2, keywords ×2, description ×1), with hapax damping (a term in exactly one document is damped to 35%, so an incidental rare word cannot rocket a skill to the top) and negative triggers (terms a description disclaims are subtracted, not merely un-added).

The decision policy is the product. Four gates must pass before invoke: query mass, raw floor, coverage ≥0.30, and ≥2 matched terms. The floors are multiples of mean idf, not constants, so they scale with catalog size.

The fix loop

  1. skill_audit.py --json catalog.json --fix-plan rewrites.md
  2. Rewrite flagged descriptions in this shape:

what it produces. Use when `. Do NOT use for `.

  1. Re-run the audit, confirm the score moved.
  2. skill_router.py --eval evals.jsonl before and after.

Read the eval numbers correctly

top-1 accuracy : ranked first
auto-invoked   : ranked first AND confident   (rank ≠ fire)
top-3 recall   : reachable via shortlist
NONE (clean)   : returned NONE outright
NONE (safe)    : never auto-invoked           <- DEFEND THIS AT 100%

Auto-invoking on small talk hijacks the turn; returning ambiguous costs a few hundred tokens. Those failures differ in cost by an order of magnitude. Chasing clean-NONE to 100% pushes thresholds conservative enough to suppress real matches.

Hard-won cautions

  • Descriptions may not be the problem. Check for an AUTO-GENERATED banner and

a sibling SKILL.md.tmpl or a second copy of the tree first — a stale copy looks exactly like bad writing. Recovering one recovered 16k chars in a real case.

  • Enriching descriptions changes every other skill's score. BM25 floors are

multiples of mean idf. Re-run the eval after bulk edits; a real case saw safe-NONE drop 100%→86% from improvements alone. Fix over-triggering at the source with negative scoping, not by loosening constants.

  • Never put a backup inside the skills tree — the audit (and the runtime) will

scan it as real skills.

  • Use it as a shortlister, not a prompt card. --card renders the whole catalog;

--for-query retrieves first and describes only survivors, at ~3% of the tokens. Let the model make the final call — it is better at intent than any lexical scorer.

Full design notes, scoring detail and the list of traps already handled: REFERENCE.md in this directory.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.