ghost-scan-secrets — Claude Code skill: what it does, how to install
Scans repositories for leaked API keys, tokens, and hardcoded credentials. Useful for pre-commit checks or auditing codebases for exposed secrets.
npx skills add ghostsecurity/skills --skill ghost-scan-secrets -a claude-code
npx skills add ghostsecurity/skills --skill scan-secrets -a claude-codeWhat ghost-scan-secrets does
This skill acts as an orchestrator that checks a codebase for leaked API keys, passwords, and tokens. During setup, it computes repository identifiers and prepares output folders under ~/.ghost/repos/. An initialization subagent then sets up the poltergeist binary in ~/.ghost/bin/poltergeist (or poltergeist.exe on Windows).
After installation, a scan subagent runs Poltergeist and writes matches into candidates.json. If no secrets are found, the scan finishes immediately. Otherwise, parallel subagents analyze each candidate to verify findings, assign severities, and generate remediation guidance. If any task fails, the orchestrator retries it once before stopping.
Because setup relies on git hash-object to derive repository hashes, a functioning Git binary in PATH is necessary.
What it helps with
- detect hardcoded API keys and passwords in source code
- locate exposed credentials and environment values
- assess severity levels for discovered secret candidates
- generate remediation guidance for exposed credentials
Example prompts for the agent
- Scan the repository for leaked API keys and credentials
- Check the src folder for hardcoded passwords
- Run ghost-scan-secrets on the current codebase
How to install ghost-scan-secrets
1Skills CLI (Vercel)
npx skills add ghostsecurity/skills --skill ghost-scan-secrets -a claude-codenpx skills add ghostsecurity/skills --skill scan-secrets -a claude-code2Manually: put the files in place
~/.claude/skills/scan-secrets/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/scan-secrets/
1Skills CLI (Vercel)
npx skills add ghostsecurity/skills --skill scan-secrets -a codex2Manually: put the files in place
.agents/skills/scan-secrets/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add ghostsecurity/skills --skill scan-secrets -a cursor2Manually: put the files in place
.cursor/skills/scan-secrets/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install ghostsecurity/skills scan-secrets2Manually: put the files in place
.github/skills/scan-secrets/SKILL.md1Skills CLI (Vercel)
npx skills add ghostsecurity/skills --skill scan-secrets -a gemini-cli2Platform CLI
gemini skills install https://github.com/ghostsecurity/skills --path plugins/ghost/skills/scan-secretsManually: put the files in place
.devin/skills/scan-secrets/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add ghostsecurity/skills --skill scan-secrets -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about ghost-scan-secrets
How do I install ghost-scan-secrets in Claude Code?
Install the skill by running npx skills add ghostsecurity/skills --skill ghost-scan-secrets -a claude-code in your terminal.
What does ghost-scan-secrets do?
It scans the codebase using the Poltergeist binary and specialized subagents to locate exposed keys, tokens, and passwords. It then evaluates severity levels and provides remediation steps in a final report.
Where does the skill store the Poltergeist binary and scan results?
The binary is placed in ~/.ghost/bin/poltergeist (poltergeist.exe on Windows). Intermediate candidates and final findings are saved under ~/.ghost/repos/<repo_id>/scans/<short_sha>/secrets/.
Source text
SKILL.md · Apache-2.0
---
name: "ghost-scan-secrets"
description: |
Ghost Security - Secrets and credentials scanner. Scans codebase for leaked API keys, tokens, passwords, and sensitive data. Detects hardcoded secrets and generates findings with severity and remediation guidance. Use when the user asks to check for leaked secrets, scan for credentials, find hardcoded API keys or passwords, detect exposed .env values, or audit code for sensitive data exposure.
allowed-tools: Read, Glob, Grep, Bash, Task, TodoRead, TodoWrite
argument-hint: "[path-to-scan]"
license: apache-2.0
metadata:
version: 1.1.0
---
# Ghost Security Secrets Scanner — Orchestrator
You are the top-level orchestrator for secrets scanning. Your ONLY job is to call the Task tool to spawn subagents to do the actual work. Each step below gives you the exact Task tool parameters to use. Do not do the work yourself.
## Defaults
- **repo_path**: the current working directory
- **scan_dir**: `~/.ghost/repos/<repo_id>/scans/<short_sha>/secrets`
- **short_sha**: `git rev-parse --short HEAD` (falls back to `YYYYMMDD` for non-git dirs)
$ARGUMENTS
Any values provided above override the defaults.
---
## Execution
1. **Setup** — compute paths and create output directories
2. **Initialize Poltergeist** — install the poltergeist binary
3. **Scan for Secrets** — run poltergeist against the codebase
4. **Analyze Candidates** — assess each candidate for confirmation
5. **Summarize Results** — generate the final scan report
### Step 0: Setup
Run this Bash command to compute the repo-specific output directory, create it, and locate the skill files:
```
repo_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}" && scan_dir="${ghost_repo_dir}/scans/${short_sha}/secrets" && cache_dir="${ghost_repo_dir}/cache" && mkdir -p "$scan_dir/findings" && skill_dir=$(find . -path '*skills/scan-secrets/SKILL.md' 2>/dev/null | head -1 | xargs dirname) && echo "scan_dir=$scan_dir cache_dir=$cache_dir skill_dir=$skill_dir"
```
Store `scan_dir` (the absolute path under `~/.ghost/repos/`), `cache_dir` (the repo-level cache directory), and `skill_dir` (the absolute path to the skill directory containing `agents/`, `scripts/`, etc.).
After this step, your only remaining tool is Task. Do not use Bash, Read, Grep, Glob, or any other tool for Steps 1–4.
### Step 1: Initialize Poltergeist
Call the Task tool to initialize the poltergeist binary:
```json
{
"description": "Initialize poltergeist binary",
"subagent_type": "general-purpose",
"prompt": "You are the init agent. Read and follow the instructions in <skill_dir>/agents/init/agent.md.\n\n## Inputs\n- skill_dir: <skill_dir>"
}
```
The init agent installs poltergeist to `~/.ghost/bin/poltergeist` (or `poltergeist.exe` on Windows).
### Step 2: Scan for Secrets
Call the Task tool to run the poltergeist scanner:
```json
{
"description": "Scan for secret candidates",
"subagent_type": "general-purpose",
"prompt": "You are the scan agent. Read and follow the instructions in <skill_dir>/agents/scan/agent.md.\n\n## Inputs\n- repo_path: <repo_path>\n- scan_dir: <scan_dir>"
}
```
The scan agent returns the candidate count and writes `<scan_dir>/candidates.json`.
**If candidate count is 0**: Skip to Step 4 (Summarize) with no findings.
### Step 3: Analyze Candidates
Call the Task tool to analyze the candidates:
```json
{
"description": "Analyze secret candidates",
"subagent_type": "general-purpose",
"prompt": "You are the analysis agent. Read and follow the instructions in <skill_dir>/agents/analyze/agent.md.\n\n## Inputs\n- repo_path: <repo_path>\n- scan_dir: <scan_dir>\n- skill_dir: <skill_dir>\n- cache_dir: <cache_dir>"
}
```
The analysis agent spawns parallel analyzers for each candidate and writes finding files to `<scan_dir>/findings/`.
### Step 4: Summarize Results
Call the Task tool to summarize the findings:
```json
{
"description": "Summarize scan results",
"subagent_type": "general-purpose",
"prompt": "You are the summarize agent. Read and follow the instructions in <skill_dir>/agents/summarize/agent.md.\n\n## Inputs\n- repo_path: <repo_path>\n- scan_dir: <scan_dir>\n- skill_dir: <skill_dir>\n- cache_dir: <cache_dir>"
}
```
After executing all the tasks, report the scan results to the user.
---
## Error Handling
If any Task call fails, retry it **once**. If it fails again, stop and report the failure.
© ghostsecurity · Apache-2.0 · ghostsecurity/skills