Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Ghost Security — combined security report. Aggregates findings from all scan skills (scan-deps, scan-secrets, scan-code) into a single prioritized report focused on the highest risk, highest confidence issues. Use when the user requests a security overview, vulnerability summary, full security audit, or combined scan results.
.claude/skills/ghostsecurity-ghost-report/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 40% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -1% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 43% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -1% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 21% | 0% |
You aggregate findings from all scan skills (scan-deps, scan-secrets, scan-code) into a single prioritized report. Do all work yourself — do not spawn subagents or delegate.
$ARGUMENTS
Run this Bash command to compute paths:
bashrepo_name=$(basename "$(pwd)") && remote_url=$(git remote get-url origin 2>/dev/null || pwd) && short_hash=$(printf '%s' "$remote_url" | git hash-object --stdin | cut -c1-8) && repo_id="${repo_name}-${short_hash}" && short_sha=$(git rev-parse --short HEAD 2>/dev/null || date +%Y%m%d) && ghost_repo_dir="$HOME/.ghost/repos/${repo_id}" && scans_dir="${ghost_repo_dir}/scans/${short_sha}" && cache_dir="${ghost_repo_dir}/cache" && skill_dir=$(find . -path '*/skills/report/SKILL.md' 2>/dev/null | head -1 | xargs dirname) && echo "scans_dir=$scans_dir cache_dir=$cache_dir skill_dir=$skill_dir"
Store scans_dir (commit-level scan directory), cache_dir, and skill_dir.
If <scans_dir>/report.md already exists, show:
Combined security report is at: <scans_dir>/report.mdAnd stop. Do not regenerate it.
Read <cache_dir>/repo.md if it exists. Extract:
If it does not exist, continue without it — this is not an error.
List the contents of <scans_dir> to see which scan-type directories exist. Recognized types:
deps/ — SCA / dependency vulnerability scansecrets/ — secrets and credentials scancode/ — code security scan (SAST)If none of these directories exist, report an error:
No scan results found in <scans_dir>. Run one or more scan skills first:
/ghost-scan-deps
/ghost-scan-secrets
/ghost-scan-codeAnd stop.
For each scan type that exists, glob <scans_dir>/<type>/findings/*.md and read each finding file in full. Retain the complete markdown body of every finding — the report will inline this content directly so readers never need to open individual finding files.
From each finding, also extract these metadata fields for filtering and sorting:
## Metadata → IDdeps, secrets, or code)## Metadata → Severity (high, medium, low)## Metadata → Status (e.g., confirmed-exploitable, unverified, verified, rejected, clean)Filter: Keep only high-confidence findings:
deps findings: status is confirmed-exploitablesecrets findings: status is NOT clean and NOT rejectedcode findings: status is verified or unverified (NOT rejected)Exclude any finding with status clean, rejected, or false-positive.
Sort the remaining findings:
For deps and secrets scan types, read <scans_dir>/<type>/report.md if present. Extract:
Note: code does not produce a report.md. For code scan coverage, count the finding files in <scans_dir>/code/findings/ directly. The "Candidates Scanned" count is the total number of finding files (all statuses). "Confirmed Findings" is the count with status verified, confirmed, or unverified. "False Positives Filtered" is the count with status rejected. Do NOT count clean file analyses from the nomination/analysis funnel — those never became findings.
If a per-scan report does not exist for deps or secrets, note it as unavailable.
<skill_dir>/report-template.md<scans_dir>/report.mdCombined security report is at: <scans_dir>/report.md| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-07 | pass→pass | 8,762 | 2,298 | -74% | 1 | 1 | 0% | 1,367 | 1,744 | +28% | 0 | 0 | — |
case-01 | fail→fail | 5,853 | 9,471 | +62% | 1 | 1 | 0% | 887 | 1,701 | +92% | 0 | 0 | — |
case-02 | fail→fail | 28,763 | 8,897 | -69% | 1 | 1 | 0% | 5,565 | 1,713 | -69% | 0 | 0 | — |
case-03 | fail→fail | 29,802 | 12,129 | -59% | 1 | 1 | 0% | 5,203 | 1,707 | -67% | 0 | 0 | — |
case-04 | fail→pass | 7,452 | 5,887 | -21% | 1 | 1 | 0% | 1,198 | 1,681 | +40% | 0 | 0 | — |
case-05 | fail→pass | 11,247 | 2,140 | -81% | 1 | 1 | 0% | 1,745 | 1,721 | -1% | 0 | 0 | — |
case-06 | fail→pass | 8,030 | 5,827 | -27% | 1 | 1 | 0% | 1,303 | 1,861 | +43% | 0 | 0 | — |
case-08 | pass→pass | 10,694 | 2,671 | -75% | 1 | 1 | 0% | 1,664 | 1,807 | +9% | 0 | 0 | — |
case-09 | pass→pass | 6,582 | 2,169 | -67% | 1 | 1 | 0% | 990 | 1,686 | +70% | 0 | 0 | — |
case-10 | fail→pass | 10,650 | 2,291 | -78% | 1 | 1 | 0% | 1,700 | 1,686 | -1% | 0 | 0 | — |
case-11 | fail→pass | 8,456 | 1,795 | -79% | 1 | 1 | 0% | 1,331 | 1,613 | +21% | 0 | 0 | — |
case-12 | fail→fail | 10,400 | 3,418 | -67% | 1 | 1 | 0% | 1,618 | 1,716 | +6% | 0 | 0 | — |
case-13 | fail→fail | 13,391 | 2,955 | -78% | 1 | 1 | 0% | 2,115 | 1,800 | -15% | 0 | 0 | — |
case-14 | fail→pass | 12,048 | 2,211 | -82% | 1 | 1 | 0% | 1,971 | 1,664 | -16% | 0 | 0 | — |
case-15 | fail→pass | 11,779 | 2,466 | -79% | 1 | 1 | 0% | 1,809 | 1,783 | -1% | 0 | 0 | — |
case-16 | fail→pass | 13,336 | 4,130 | -69% | 1 | 1 | 0% | 2,284 | 1,699 | -26% | 0 | 0 | — |
case-17 | fail→pass | 14,351 | 2,658 | -81% | 1 | 1 | 0% | 2,368 | 1,803 | -24% | 0 | 0 | — |
case-18 | fail→fail | 10,144 | 1,634 | -84% | 1 | 1 | 0% | 1,677 | 1,621 | -3% | 0 | 0 | — |
case-19 | pass→pass | 9,515 | 4,299 | -55% | 1 | 1 | 0% | 1,598 | 1,783 | +12% | 0 | 0 | — |
case-20 | fail→pass | 14,907 | 8,086 | -46% | 1 | 1 | 0% | 2,493 | 1,929 | -23% | 0 | 0 | — |
case-21 | pass→pass | 12,538 | 9,638 | -23% | 1 | 1 | 0% | 1,693 | 2,191 | +29% | 0 | 0 | — |
case-22 | fail→fail | 6,519 | 31,915 | +390% | 1 | 1 | 0% | 1,195 | 4,515 | +278% | 0 | 0 | — |
case-23 | fail→fail | 5,235 | 7,155 | +37% | 1 | 1 | 0% | 216 | 1,756 | +713% | 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. 23 cases were attempted, and 19 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 +43 percentage points is the difference between those two pass rates over the 19 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.