credential-scanner — Claude Code skill: catch leaked secrets
Scans your project for exposed keys and passwords before a file-reading skill can pick them up.
npx skills add UseAI-pro/openclaw-skills-security --skill credential-scanner -a claude-codeWhat credential-scanner does
The skill checks the workspace for exposed credentials before you run any skill with fileRead access. Project files come first: .env and its variants, docker-compose.yml, config.json, secrets.json, plus *.pem, *.key, *.p12, *.pfx. Home directory files — ~/.aws/credentials, ~/.ssh/id_rsa, ~/.netrc, ~/.npmrc — get scanned only with explicit user consent.
Detection runs on regex patterns: AWS, OpenAI, Anthropic, GitHub, GitLab, Slack and SendGrid keys, private key blocks, database URLs with credentials, and generic password= or api_key: assignments. The scan skips node_modules/, vendor/, .git/, dist/, build/, binaries, lock files, and fixtures with example, test, mock or fixture in the path.
Findings are masked with ████████; raw secrets never reach the report. The skill also checks .gitignore and warns when sensitive files are missing from it, separates committed secrets from local-only files, and escalates every finding to CRITICAL if the next skill has network access. A .env.example holding real values shows up in the report too.
What it helps with
- check a workspace for exposed keys before running an unfamiliar skill
- find a database password sitting in
docker-compose.yml - confirm
.envnever made it into git - tell a committed secret apart from a local-only file
- get a report with masked values instead of raw keys in the log
Example prompts for the agent
- scan the project for secrets before I run this new skill
- check
.envanddocker-compose.ymlfor exposed keys - run a credential scan on the workspace and tell me what to fix
How to install credential-scanner
1Skills CLI (Vercel)
npx skills add UseAI-pro/openclaw-skills-security --skill credential-scanner -a claude-code2Manually: put the files in place
~/.claude/skills/credential-scanner/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/credential-scanner/
1Skills CLI (Vercel)
npx skills add UseAI-pro/openclaw-skills-security --skill credential-scanner -a codex2Manually: put the files in place
.agents/skills/credential-scanner/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add UseAI-pro/openclaw-skills-security --skill credential-scanner -a cursor2Manually: put the files in place
.cursor/skills/credential-scanner/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install UseAI-pro/openclaw-skills-security credential-scanner2Manually: put the files in place
.github/skills/credential-scanner/SKILL.md1Skills CLI (Vercel)
npx skills add UseAI-pro/openclaw-skills-security --skill credential-scanner -a gemini-cli2Platform CLI
gemini skills install https://github.com/UseAI-pro/openclaw-skills-security --path skills/credential-scannerManually: put the files in place
.devin/skills/credential-scanner/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add UseAI-pro/openclaw-skills-security --skill credential-scanner -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 credential-scanner
How do I install credential-scanner in Claude?
Run npx skills add UseAI-pro/openclaw-skills-security --skill credential-scanner -a claude-code. The skill lands in ~/.claude/skills/credential-scanner/SKILL.md.
What does credential-scanner do?
It scans a project for API keys, tokens, private keys and passwords in config files, then returns a report with masked values and a cleanup action for each finding.
Which files does it skip?
It skips node_modules/, vendor/, .git/, dist/, build/, binaries, lock files, and fixtures with example, test, mock or fixture in the path. Home directory files are scanned only with your consent.
Source text
SKILL.md · MIT
---
name: credential-scanner
description: Scan your project for exposed credentials, API keys, and secrets before running OpenClaw skills. Prevents accidental
exfiltration.
metadata:
short-description: Scan a workspace for exposed secrets before any skill gets file-read access.
why: Reduce accidental credential exposure before untrusted or newly added skills can inspect the filesystem.
what: Provides a secret-scanning module for common API keys, tokens, and private key patterns in a project.
how: Uses path-aware regex checks, skip rules, and sanitized reporting instead of printing raw secrets.
results: Produces a list of exposed-credential findings with masked output and cleanup actions.
version: 1.0.0
updated: '2026-03-10T03:42:30Z'
jtbd-1: When I need a fast preflight to confirm my workspace does not expose secrets to file-reading skills.
audit:
kind: module
author: useclawpro
category: Security
trust-score: 98
last-audited: '2026-02-01'
permissions:
file-read: true
file-write: false
network: false
shell: false
---
# Credential Scanner
You are a credential scanner for OpenClaw projects. Before the user runs any skill that has `fileRead` access, scan the workspace for exposed secrets that could be read and potentially exfiltrated.
## What to Scan
### High-Priority Files
**Default scope: current workspace only.** Scan project-level files first:
- `.env`, `.env.local`, `.env.production`, `.env.*`
- `docker-compose.yml` (environment sections)
- `config.json`, `settings.json`, `secrets.json`
- `*.pem`, `*.key`, `*.p12`, `*.pfx`
**Home directory files (scan only with explicit user consent):**
- `~/.aws/credentials`, `~/.aws/config`
- `~/.ssh/id_rsa`, `~/.ssh/id_ed25519`, `~/.ssh/config`
- `~/.netrc`, `~/.npmrc`, `~/.pypirc`
### Patterns to Detect
Scan all text files for these patterns:
```
# API Keys
AKIA[0-9A-Z]{16} # AWS Access Key
sk-[a-zA-Z0-9]{48} # OpenAI API Key
sk-ant-[a-zA-Z0-9-]{80,} # Anthropic API Key
ghp_[a-zA-Z0-9]{36} # GitHub Personal Token
gho_[a-zA-Z0-9]{36} # GitHub OAuth Token
glpat-[a-zA-Z0-9-_]{20} # GitLab Personal Token
xoxb-[0-9]{10,}-[a-zA-Z0-9]{24} # Slack Bot Token
SG\.[a-zA-Z0-9-_]{22}\.[a-zA-Z0-9-_]{43} # SendGrid API Key
# Private Keys
-----BEGIN (RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----
-----BEGIN PGP PRIVATE KEY BLOCK-----
# Database URLs
(postgres|mysql|mongodb)://[^\s'"]+:[^\s'"]+@
# Generic Secrets
(password|secret|token|api_key|apikey)\s*[:=]\s*['"][^\s'"]{8,}['"]
```
### Files to Skip
Do not scan:
- `node_modules/`, `vendor/`, `.git/`, `dist/`, `build/`
- Binary files (images, compiled code, archives)
- Lock files (`package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`)
- Test fixtures clearly marked as examples (`example`, `test`, `mock`, `fixture` in path)
## Output Format
```
CREDENTIAL SCAN REPORT
======================
Project: <directory>
Files scanned: <count>
Secrets found: <count>
[CRITICAL] .env:3
Type: API Key (OpenAI)
Value: sk-proj-...████████████
Action: Move to secret manager, add .env to .gitignore
[CRITICAL] src/config.ts:15
Type: Database URL with credentials
Value: postgres://admin:████████@db.example.com/prod
Action: Use environment variable instead
[WARNING] docker-compose.yml:22
Type: Hardcoded password in environment
Value: POSTGRES_PASSWORD=████████
Action: Use Docker secrets or .env file
RECOMMENDATIONS:
1. Add .env to .gitignore (if not already)
2. Rotate any exposed keys immediately
3. Consider using a secret manager (e.g., 1Password CLI, Vault, Doppler)
```
## Rules
1. Never display full secret values — always truncate with `████████`
2. Check `.gitignore` and warn if sensitive files are NOT ignored
3. Differentiate between committed secrets (critical) and local-only files (warning)
4. If running before a skill with `network` access — escalate all findings to CRITICAL
5. Suggest specific remediation for each finding
6. Check if the project has a `.env.example` that accidentally contains real values
© UseAI-pro · MIT · UseAI-pro/openclaw-skills-security