Install
openclaw skills install securevibes-scannerRun AI-powered application security scans on codebases. Use when asked to scan code for security vulnerabilities, generate threat models, review code for sec...
openclaw skills install securevibes-scannerAI-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.
pipx install securevibes (preferred) or uv tool install securevibes. Avoid pip install — it can create stale shims if you have multiple Python environments.ANTHROPIC_API_KEY unset or blank — the SDK handles auth.export ANTHROPIC_API_KEY=your-key-here (from console.anthropic.com)scripts/scan.sh wrapper for full scans — it validates paths and rejects shell metacharacters before invoking securevibes.realpath to resolve paths safely and rejects any path containing ;, |, &, $, backticks, or other metacharacters.--target-url you provide. Only use against apps you own or have permission to test.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.
bash scripts/scan.sh /path/to/repo --force --debug/path/to/repo/.securevibes/For OpenClaw users, schedule scans as cron jobs:
sessionTarget: "isolated" with payload.kind: "agentTurn"payload.timeoutSeconds: 2700 (45 minutes) to allow all phases to completedelivery.mode: "announce" to get notified when doneThe agentTurn message should instruct the subagent to:
cd into the repo and git pull for latest code.securevibes/ artifactssecurevibes scan . --force via the wrapper script.securevibes/scan_report.mdThe incremental scanner (ops/incremental_scan.py) tracks the last-scanned commit and only scans new commits. Designed for cron-driven continuous security monitoring.
.securevibes/incremental_state.jsonsecurevibes pr-review on the diffThe 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.
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".
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.
# 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
python3 ops/incremental_scan.py [options]
| Option | Description |
|---|---|
--repo | Repository path (default: .) |
--branch | Branch to track (default: main) |
--remote | Git remote (default: origin) |
--model | Claude model: sonnet, haiku (default: sonnet) |
--severity | Minimum severity: critical, high, medium, low |
--scan-timeout-seconds | Timeout per scan command (default: 900) |
--git-timeout-seconds | Timeout for git operations (default: 60) |
--rewrite-policy | History rewrite handling: reset_warn, strict_fail, since_date |
--since | Override: scan commits since this date (ISO or YYYY-MM-DD) |
.securevibes/.incremental_scan.lock prevents overlapping runsfsync + os.replace) prevent corruption.securevibes/incremental_scan.log.securevibes/incremental_runs/ (one JSON per run)When last_seen_sha is not an ancestor of the new remote HEAD (e.g., force push):
| Policy | Behavior |
|---|---|
reset_warn | Reset anchor to new HEAD, continue |
strict_fail | Fail and keep current anchor |
since_date | Run a --since <today> scan for visibility, keep previous anchor |
securevibes scan <path> [options]
| Option | Description |
|---|---|
-f, --format | markdown (default), json, text, table |
-o, --output | Custom output path |
-s, --severity | Filter: critical, high, medium, low |
-m, --model | Claude model (e.g., sonnet, haiku) |
--subagent | Run one phase: assessment, threat-modeling, code-review, report-generator, dast |
--resume-from | Resume from a specific phase onwards |
--dast | Enable dynamic testing (requires --target-url) |
--target-url | URL for DAST (e.g., http://localhost:3000) |
--force | Skip prompts, overwrite existing artifacts |
--quiet | Minimal output |
--debug | Verbose diagnostics |
securevibes report <path> — Display a previously saved scan report.
| User Says | Action |
|---|---|
| "Scan this for security issues" | Full scan: bash scripts/scan.sh <path> --force |
| "Quick security check" | Full scan: bash scripts/scan.sh <path> -m haiku --force |
| "Threat model this project" | bash scripts/scan.sh <path> --subagent threat-modeling --force |
| "Just review the code" | bash scripts/scan.sh <path> --subagent code-review --force |
| "Show only critical/high findings" | bash scripts/scan.sh <path> -s high --force |
| "Full audit with DAST" | bash scripts/scan.sh <path> --dast --target-url <url> --force |
| "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" | securevibes report <path> |
Runs sequentially. Each phase builds on the previous:
.securevibes/SECURITY.md.securevibes/THREAT_MODEL.json.securevibes/VULNERABILITIES.json.securevibes/scan_report.mdAfter a scan completes:
.securevibes/scan_report.md (or .securevibes/scan_results.json for structured data)