From command to fix,
step by step
Here's exactly what happens when you run vibeguard scan .
No magic. No black boxes. Just a straightforward pipeline that turns your code into a prioritized list of things to fix.
The pipeline
Six stages transform your codebase into actionable security insights. Each stage has one job, and does it well.
Scan
Run 11 security tools against your codebase. Secrets, dependencies, code patterns, IaC configs - all checked in one command.
Normalize
Convert outputs from different tools into a consistent format. Every finding gets the same structure, regardless of which scanner found it.
Triage
Suppress noise, deduplicate, and surface only findings that matter. This is where 500 warnings become 5 real problems.
Report
Generate a score (0-100), a grade (A-F), and output in your format of choice: terminal, JSON, HTML, or SARIF.
Patch
Generate a unified diff for each finding using your LLM provider. The diff is saved locally for you to review before anything changes.
Apply
Apply the diff with git safety checks. Dry-run first, revert if needed. No auto-merges, no surprise commits.
Scan
Run 11 security tools against your codebase. Secrets, dependencies, code patterns, IaC configs - all checked in one command.
Normalize
Convert outputs from different tools into a consistent format. Every finding gets the same structure, regardless of which scanner found it.
Triage
Suppress noise, deduplicate, and surface only findings that matter. This is where 500 warnings become 5 real problems.
Report
Generate a score (0-100), a grade (A-F), and output in your format of choice: terminal, JSON, HTML, or SARIF.
Patch
Generate a unified diff for each finding using your LLM provider. The diff is saved locally for you to review before anything changes.
Apply
Apply the diff with git safety checks. Dry-run first, revert if needed. No auto-merges, no surprise commits.
What is a "finding"?
A finding is when a scanner detected something worth your attention: a risky pattern, a vulnerable dependency, a misconfiguration, or an exposed secret.
Every finding includes the same information, no matter which tool discovered it:
File path and line number
Critical, High, Medium, or Low
Plain-English explanation of the issue
Which scanner found it
Examples of findings
AWS access key hardcoded in config.py
pyyaml 5.3.1 has a known deserialization bug
SQL query built with string concatenation
Dockerfile runs as root user
How triage works
Running 11 scanners can produce hundreds of results. Triage filters that down to what actually matters.
You don't need 500 warnings.
You need 5 real problems.
What triage does:
From finding to fix
Once triage surfaces the real problems, two commands handle the rest: patch generates a fix, and apply puts it into action. Neither changes anything without your say-so.
What patch does
- •Generates a unified diff you can review
- •Uses your LLM provider with your API key
- •Validates the diff syntax before saving
- •Adds "manual review required" markers when uncertain
What patch doesn't do
- •Does not auto-merge or auto-commit
- •Does not open pull requests
- •Does not run tests automatically
- •Does not change your files without explicit apply
@@ -12,7 +12,7 @@ config.py
- API_KEY = 'sk-live-abc123xyz789'
+ API_KEY = os.environ.get('API_KEY')
@@ -1,4 +1,5 @@
+ import os
from flask import Flask
How apply works
Git safety check
Verifies you have a clean working tree and the file hasn't changed since the scan.
Dry-run preview
Shows exactly what will change before applying. You can abort here if something looks wrong.
Apply patch
Applies the diff using standard patch tooling. Creates a backup automatically.
Verification
Confirms the patch was applied correctly. If not, suggests next steps.
Need to undo? Run vibeguard apply --revert to roll back the last applied patch.