Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Review AI agent skills before installation using NVIDIA SkillSpector and source-aware semantic review. Use when asked whether a skill or downloaded skill folder is safe, trustworthy, installable, over-permissioned, or malicious.
.claude/skills/nvidia-skill-inspector/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 34% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 102% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 107% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 53% | 0% |
Decide whether an AI agent skill is safe to install, keep installed, or submit for review.
Use two independent review lines:
Do not rely on the numeric score alone. A low score can miss semantic risk, and a high score can be justified when sensitive behavior is clearly documented, necessary, and bounded.
skillspector CLI is available.skillspector is missing, say so clearly and continue with manual source review.find, rg, sed, jq, file, and git diff.APPROVE, CAUTION, or REJECT.Accept a local skill directory, downloaded archive, or repository URL. If the user provides a URL, clone or download it into a temporary directory before review. Do not run installer scripts from the target.
bash skillspector scan "$TARGET" --no-llm --format json --output /tmp/skill-inspector-report.json
If the command exits non-zero, inspect any partial report and continue manually. Record that the static line was incomplete.
Extract:
Always inspect:
SKILL.mdAlso inspect MEDIUM findings when they involve network access, credentials, environment variables, file writes, shell execution, MCP permissions, persistence, obfuscation, or user/context leakage.
Check whether the implementation matches the stated purpose:
eval, exec, decoded payloads, or downloaded code?Use this rubric:
APPROVE: no HIGH or CRITICAL findings, no unexplained sensitive behavior, and the source matches the stated purpose.CAUTION: sensitive behavior exists, but it is documented, necessary, bounded, and controllable by the user.REJECT: malicious or deceptive behavior, unexplained HIGH or CRITICAL findings, hidden prompt injection, credential theft, unknown exfiltration, obfuscated execution, persistence, or a clear mismatch between description and behavior.Use the SkillSpector score as risk posture, not as the verdict:
| Score | Default posture | |---:|---| | 0-20 | Usually acceptable after quick source review. | | 21-35 | Acceptable only when findings are clearly explained. | | 36-50 | Manual review required; default to CAUTION unless every concern is explained. | | 51-80 | Default to REJECT unless the source is trusted and every sensitive behavior is necessary. | | 81-100 | Default to REJECT. |
Write a concise security triage report, not a raw scanner dump.
Language policy:
APPROVE, CAUTION, and REJECT.Tone and formatting:
Recommended report shape:
text## 🛡️ Skill Inspector: `{skill-name}` **Source:** {path-or-url} **Verdict:** {APPROVE | CAUTION | REJECT} {short meaning} **Risk:** {score}/100 · {severity} · {SkillSpector recommendation} **Install posture:** {one sentence about suitable and unsuitable use} ### Bottom Line {2-3 sentences explaining whether to install or use it, the main risk, and why the score alone is not enough.} ### Signal Overview | Source | Result | Interpretation | |---|---|---| | SkillSpector static scan | {summary} | {meaning} | | Agent semantic review | {summary} | {meaning} | | Sensitive surface | {network/env/files/shell/MCP/git/etc.} | {meaning} | ### Key Evidence | Rule | Severity | Location | Review judgment | |---|---|---|---| | {rule id} | {severity} | {file}:{line} | {why acceptable, suspicious, or rejecting} | ### Diagnosis {2-4 sentences connecting static evidence with semantic review and explaining the final verdict.} ### Guardrails 1. {condition 1} 2. {condition 2}
Translate section names naturally when the user's language is not English. Keep technical identifiers unchanged.
If SkillSpector is unavailable, still inspect:
SKILL.md frontmatter and bodyState clearly that no SkillSpector scan ran, then give a semantic-only verdict with lower confidence.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 26,144 | 16,651 | -36% | 1 | 1 | 0% | 2,624 | 2,040 | -22% | 0 | 0 | — |
case-02 | fail→fail | 17,768 | 17,198 | -3% | 1 | 1 | 0% | 1,529 | 1,982 | +30% | 0 | 0 | — |
case-03 | fail→fail | 14,165 | 16,961 | +20% | 1 | 1 | 0% | 1,132 | 2,070 | +83% | 0 | 0 | — |
case-04 | pass→pass | 15,334 | 7,864 | -49% | 1 | 1 | 0% | 1,695 | 2,170 | +28% | 0 | 0 | — |
case-05 | pass→pass | 17,246 | 14,122 | -18% | 1 | 1 | 0% | 1,833 | 3,099 | +69% | 0 | 0 | — |
case-06 | fail→pass | 18,790 | 13,326 | -29% | 1 | 1 | 0% | 2,214 | 2,970 | +34% | 0 | 0 | — |
case-07 | fail→pass | 15,234 | 14,815 | -3% | 1 | 1 | 0% | 1,612 | 3,253 | +102% | 0 | 0 | — |
case-08 | fail→pass | 13,820 | 12,160 | -12% | 1 | 1 | 0% | 1,327 | 2,751 | +107% | 0 | 0 | — |
case-09 | pass→fail | 20,113 | 17,328 | -14% | 1 | 1 | 0% | 2,212 | 2,138 | -3% | 0 | 0 | — |
case-10 | pass→pass | 13,188 | 11,669 | -12% | 1 | 1 | 0% | 1,269 | 2,776 | +119% | 0 | 0 | — |
case-11 | fail→fail | 10,249 | 17,854 | +74% | 1 | 1 | 0% | 794 | 3,783 | +376% | 0 | 0 | — |
case-12 | pass→pass | 10,848 | 9,859 | -9% | 1 | 1 | 0% | 862 | 2,358 | +174% | 0 | 0 | — |
case-13 | fail→pass | 15,021 | 7,411 | -51% | 1 | 1 | 0% | 1,527 | 1,947 | +28% | 0 | 0 | — |
case-14 | pass→pass | 22,972 | 18,903 | -18% | 1 | 1 | 0% | 2,967 | 3,917 | +32% | 0 | 0 | — |
case-15 | fail→pass | 14,850 | 9,689 | -35% | 1 | 1 | 0% | 1,523 | 2,329 | +53% | 0 | 0 | — |
case-16 | pass→pass | 16,355 | 12,824 | -22% | 1 | 1 | 0% | 1,813 | 2,844 | +57% | 0 | 0 | — |
case-17 | pass→pass | 9,957 | 9,185 | -8% | 1 | 1 | 0% | 742 | 2,305 | +211% | 0 | 0 | — |
case-18 | fail→pass | 21,040 | 14,570 | -31% | 1 | 1 | 0% | 2,586 | 3,362 | +30% | 0 | 0 | — |
case-19 | pass→pass | 25,472 | 8,914 | -65% | 1 | 1 | 0% | 2,973 | 2,240 | -25% | 0 | 0 | — |
case-20 | pass→pass | 18,370 | 22,261 | +21% | 1 | 1 | 0% | 2,220 | 4,750 | +114% | 0 | 0 | — |
case-21 | pass→pass | 11,283 | 10,987 | -3% | 1 | 1 | 0% | 576 | 2,145 | +272% | 0 | 0 | — |
case-22 | pass→pass | 23,498 | 30,710 | +31% | 1 | 1 | 0% | 3,564 | 6,514 | +83% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 18 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.