Install any skill in seconds. Free to start, no credit card required.
Get Started Free →This skill should be used when the user asks to "validate a finding", "check if a vulnerability is real", "triage a security finding", "confirm a vulnerability", "determine if a finding is a true positive or false positive", or provides a security finding for review. It validates security vulnerability findings by tracing data flows, verifying exploit conditions, analyzing security controls, and optionally testing attack vectors against a live application.
.claude/skills/ghostsecurity-ghost-validate/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | -15% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-15 | ✗→✓ | ▲ Improved | -16% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-04 | ✓→✗ | ▼ Worse | -19% | 0% |
Determine whether a security finding is a true positive or false positive. Produce a determination with supporting evidence.
The user provides a finding as a file path or pasted text. If neither is provided, ask for one.
Extract: vulnerability class, specific claim, affected endpoint, code location, and any existing validation evidence.
Identify:
If a live instance of the application is accessible and the vulnerability can be confirmed through live interaction, use the proxy skill to confirm exploitability:
reaper get <id>Classify the finding as one of:
Output a summary in the following format:
Example:
## Validation Result
- **Determination**: True Positive
- **Confidence**: High
- **Evidence**: Handler at routes/transfers.go:142 queries transfers by ID without checking ownership. No middleware or ORM-level constraint enforces user scoping.
- **Recommendation**: Add ownership check — include user_id in the WHERE clause.If the finding was provided as a file path, ask the user if they would like to append the validation details to the original finding file. If they agree, append a ## Validation section to the file containing the determination, confidence, evidence summary, and recommendation.
See VULNERABILITY_PATTERNS.md in this skill directory for patterns to look for when validating authorization flaws (BFLA/BOLA/IDOR), injection (SQLi/XSS), and authentication flaws.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→fail | 9,850 | 8,507 | -14% | 1 | 1 | 0% | 1,005 | 1,541 | +53% | 0 | 0 | — |
case-01 | fail→fail | 8,892 | 8,601 | -3% | 1 | 1 | 0% | 1,547 | 2,218 | +43% | 0 | 0 | — |
case-03 | fail→fail | 9,916 | 9,441 | -5% | 1 | 1 | 0% | 1,388 | 1,352 | -3% | 0 | 0 | — |
case-04 | pass→fail | 7,636 | 5,737 | -25% | 1 | 1 | 0% | 1,437 | 1,162 | -19% | 0 | 0 | — |
case-05 | pass→pass | 14,550 | 12,556 | -14% | 1 | 1 | 0% | 2,788 | 3,202 | +15% | 0 | 0 | — |
case-06 | fail→fail | 6,000 | 8,423 | +40% | 1 | 1 | 0% | 492 | 1,505 | +206% | 0 | 0 | — |
case-07 | pass→fail | 10,019 | 12,660 | +26% | 1 | 1 | 0% | 574 | 2,011 | +250% | 0 | 0 | — |
case-08 | fail→pass | 8,470 | 2,656 | -69% | 1 | 1 | 0% | 1,470 | 1,250 | -15% | 0 | 0 | — |
case-09 | fail→pass | 8,863 | 12,564 | +42% | 1 | 1 | 0% | 1,487 | 1,746 | +17% | 0 | 0 | — |
case-10 | pass→pass | 8,507 | 11,326 | +33% | 1 | 1 | 0% | 1,301 | 1,460 | +12% | 0 | 0 | — |
case-11 | pass→pass | 6,701 | 1,690 | -75% | 1 | 1 | 0% | 1,095 | 1,074 | -2% | 0 | 0 | — |
case-12 | fail→fail | 11,425 | 10,255 | -10% | 1 | 1 | 0% | 1,774 | 2,542 | +43% | 0 | 0 | — |
case-13 | fail→fail | 10,111 | 3,527 | -65% | 1 | 1 | 0% | 1,583 | 1,421 | -10% | 0 | 0 | — |
case-14 | pass→pass | 14,293 | 7,044 | -51% | 1 | 1 | 0% | 2,237 | 1,988 | -11% | 0 | 0 | — |
case-15 | fail→pass | 9,767 | 2,720 | -72% | 1 | 1 | 0% | 1,548 | 1,300 | -16% | 0 | 0 | — |
case-16 | fail→fail | 5,820 | 1,734 | -70% | 1 | 1 | 0% | 941 | 1,050 | +12% | 0 | 0 | — |
case-17 | pass→pass | 12,243 | 3,179 | -74% | 1 | 1 | 0% | 2,129 | 1,293 | -39% | 0 | 0 | — |
case-18 | pass→pass | 6,524 | 4,605 | -29% | 1 | 1 | 0% | 1,046 | 1,527 | +46% | 0 | 0 | — |
case-19 | fail→pass | 6,214 | 3,186 | -49% | 1 | 1 | 0% | 942 | 1,281 | +36% | 0 | 0 | — |
case-20 | pass→pass | 7,808 | 12,401 | +59% | 1 | 1 | 0% | 1,238 | 1,239 | +0% | 0 | 0 | — |
case-21 | pass→pass | 6,138 | 3,396 | -45% | 1 | 1 | 0% | 904 | 1,336 | +48% | 0 | 0 | — |
case-22 | pass→pass | 10,470 | 10,364 | -1% | 1 | 1 | 0% | 1,611 | 1,634 | +1% | 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 21 counted toward the lift figure. The other 1 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 +9 percentage points is the difference between those two pass rates over the 21 comparable cases. 2 cases got worse with the skill loaded, and they are 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.