Skills securevibes-scanner
Run AI-powered application security scans on codebases. Use when asked to scan code for security vulnerabilities, generate threat models, review code for security issues, run incremental security scans, or set up continuous security monitoring via cron. Supports full scans (one-shot) and incremental scans (cron-driven, only new commits).
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/anshumanbh/securevibes-scanner" ~/.claude/skills/openclaw-skills-securevibes-scanner && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/anshumanbh/securevibes-scanner" ~/.openclaw/skills/openclaw-skills-securevibes-scanner && rm -rf "$T"
skills/anshumanbh/securevibes-scanner/SKILL.mdSecureVibes Scanner
AI-native security platform that detects vulnerabilities using Claude AI. Multi-subagent pipeline: assessment → threat modeling → code review → report generation → optional DAST. Supports incremental scanning for continuous monitoring.
Prerequisites
- Install the CLI:
(preferred) orpipx install securevibes
. Avoiduv tool install securevibes
— it can create stale shims if you have multiple Python environments.pip install - Authenticate with Anthropic (one of):
- Max/Pro subscription (recommended): If you're authenticated via Claude Code or Claude CLI OAuth, no API key is needed. The Claude Agent SDK picks up your OAuth session automatically. When running inside OpenClaw, leave
unset or blank — the SDK handles auth.ANTHROPIC_API_KEY - API key:
(from console.anthropic.com)export ANTHROPIC_API_KEY=your-key-here
- Max/Pro subscription (recommended): If you're authenticated via Claude Code or Claude CLI OAuth, no API key is needed. The Claude Agent SDK picks up your OAuth session automatically. When running inside OpenClaw, leave
Security Notes
- Always use the
wrapper for full scans — it validates paths and rejects shell metacharacters before invokingscripts/scan.sh
.securevibes - Never interpolate unsanitized user input into shell commands.
- The wrapper uses
to resolve paths safely and rejects any path containingrealpath
,;
,|
,&
, backticks, or other metacharacters.$ - Scan targets must be local directories. Clone remote repos to a known safe location first, then pass the resolved path to the wrapper.
- DAST scans make network requests to the
you provide. Only use against apps you own or have permission to test.--target-url
Execution Model
Full scans take 10-30 minutes across 4 phases. Run them as background jobs (cron or subagent), not inline.
Incremental scans take 2-10 minutes — they only scan commits since the last run.
Full Scan (One-Shot)
Running a Scan
- Clone the target repo to a local directory
- Run the wrapper script:
bash scripts/scan.sh /path/to/repo --force --debug - Results appear in
/path/to/repo/.securevibes/
Background Execution (Recommended)
For OpenClaw users, schedule scans as cron jobs:
- Use
withsessionTarget: "isolated"payload.kind: "agentTurn" - Set
(45 minutes) to allow all phases to completepayload.timeoutSeconds: 2700 - Use
to get notified when donedelivery.mode: "announce"
The agentTurn message should instruct the subagent to:
into the repo andcd
for latest codegit pull- Clean previous
artifacts.securevibes/ - Run
via the wrapper scriptsecurevibes scan . --force - Read and summarize the results from
.securevibes/scan_report.md
Incremental Scan (Continuous Monitoring)
The incremental scanner (
ops/incremental_scan.py) tracks the last-scanned commit and only scans new commits. Designed for cron-driven continuous security monitoring.
How It Works
- Tracks an anchor commit in
.securevibes/incremental_state.json - On each run: fetches remote, compares HEAD to anchor
- If new commits exist: runs
on the diffsecurevibes pr-review - Updates anchor to new HEAD after successful scan
- If no new commits: exits cleanly (no scan, no cost)
Setup
Step 1: Run an initial full scan (if not already done)
The incremental scanner requires
.securevibes/SECURITY.md and .securevibes/THREAT_MODEL.json to exist. These come from an initial full scan:
securevibes scan <repo-path> --model sonnet
Skip this step if the repo already has a
.securevibes/ directory with these files.
Step 2: Bootstrap incremental state
Run the wrapper once to seed the anchor commit (no scan runs, just records current HEAD):
python3 ops/incremental_scan.py --repo <repo-path> --remote origin --branch main
This creates
.securevibes/incremental_state.json with status: "bootstrap".
Step 3: Configure the cron
For OpenClaw users, create a cron job:
openclaw cron create \ --name "securevibes-incremental" \ --cron "*/30 * * * *" \ --tz "America/Los_Angeles" \ --agent main \ --session isolated \ --timeout-seconds 900 \ --announce \ --message "Run incremental security scan: python3 <skill-path>/ops/incremental_scan.py --repo <repo-path> --remote origin --branch main --model sonnet --severity medium --scan-timeout-seconds 600. Read .securevibes/incremental_scan.log for results. If new findings, summarize them."
Replace
<skill-path> with the installed skill path and <repo-path> with the target repo.
Step 4: Verify
# Check state cat <repo-path>/.securevibes/incremental_state.json # After first scheduled run, check logs tail -10 <repo-path>/.securevibes/incremental_scan.log # Check findings cat <repo-path>/.securevibes/PR_VULNERABILITIES.json
Incremental Scanner Options
python3 ops/incremental_scan.py [options]
| Option | Description |
|---|---|
| Repository path (default: ) |
| Branch to track (default: ) |
| Git remote (default: ) |
| Claude model: , (default: ) |
| Minimum severity: , , , |
| Timeout per scan command (default: ) |
| Timeout for git operations (default: ) |
| History rewrite handling: , , |
| Override: scan commits since this date (ISO or YYYY-MM-DD) |
Operational Guarantees
- File lock at
prevents overlapping runs.securevibes/.incremental_scan.lock - Atomic state writes (
+fsync
) prevent corruptionos.replace - Structured logging at
.securevibes/incremental_scan.log - Run records saved to
(one JSON per run).securevibes/incremental_runs/
Rewrite Policy
When
last_seen_sha is not an ancestor of the new remote HEAD (e.g., force push):
| Policy | Behavior |
|---|---|
| Reset anchor to new HEAD, continue |
| Fail and keep current anchor |
| Run a scan for visibility, keep previous anchor |
Full Scan Commands Reference
Scan
securevibes scan <path> [options]
| Option | Description |
|---|---|
| (default), , , |
| Custom output path |
| Filter: , , , |
| Claude model (e.g., , ) |
| Run one phase: , , , , |
| Resume from a specific phase onwards |
| Enable dynamic testing (requires ) |
| URL for DAST (e.g., ) |
| Skip prompts, overwrite existing artifacts |
| Minimal output |
| Verbose diagnostics |
Report
securevibes report <path> — Display a previously saved scan report.
Mapping Requests to Actions
| User Says | Action |
|---|---|
| "Scan this for security issues" | Full scan: |
| "Quick security check" | Full scan: |
| "Threat model this project" | |
| "Just review the code" | |
| "Show only critical/high findings" | |
| "Full audit with DAST" | |
| "Set up continuous scanning" | Incremental setup: Steps 1-4 above |
| "Monitor this repo for security issues" | Incremental setup: Steps 1-4 above |
| "Show last scan results" | |
Subagent Pipeline
Runs sequentially. Each phase builds on the previous:
- assessment → Architecture & attack surface →
.securevibes/SECURITY.md - threat-modeling → STRIDE-based analysis →
.securevibes/THREAT_MODEL.json - code-review → Vulnerability detection →
.securevibes/VULNERABILITIES.json - report-generator → Consolidated report →
.securevibes/scan_report.md - dast (optional) → Dynamic validation against running app
Presenting Results
After a scan completes:
- Read
(or.securevibes/scan_report.md
for structured data).securevibes/scan_results.json - Summarize: total findings by severity (Critical > High > Medium > Low)
- Highlight top 3 most critical with file locations and remediation
- Offer next steps: run DAST, fix specific issues, re-scan after changes
Links
- Website: https://securevibes.ai
- PyPI: https://pypi.org/project/securevibes/
- GitHub: https://github.com/anshumanbh/securevibes