Skip to content
KONDO YUTA edited this page Jul 29, 2026 · 1 revision

Welcome to the VibeGuard wiki.

VibeGuard is a security scanner for AI-generated code. It catches what "looks fine, ships fine" code tends to hide: missing input checks, hard-coded credentials, skipped login checks, silently swallowed exceptions, and the stub/placeholder patterns that AI assistants leave behind.

Current release: tool 0.3.3 / engine 0.3.1 (see Versioning).

Where it runs

Surface Use it Default mode
VS Code Marketplace While you write — inline diagnostics on save fast
Open VSX Same extension for VSCodium / Cursor / Gitpod / code-server fast
Chrome Web Store While you read — scan snippets on any page, or a GitHub PR diff standard
GitHub Action Before you merge — block risky PRs in CI standard

All four run the same analysis engine. Given the same engine version, the same input, and the same mode, the verdict is identical everywhere.

Two things still make one surface report differently from another, and neither is a bug:

  • Mode defaults differ. VS Code's on-save scan is fast; every other surface is standard, which runs rules fast skips. A file can be clean on save and flag in CI. Set vibeguard.mode to standard, or use VibeGuard: Scan File (always standard).
  • What reaches the engine differs. VS Code passes a file, the CLI walks a directory, the Chrome extension joins the code blocks it extracted from a page. Same engine, different text in.

Quick start

# .github/workflows/vibeguard.yml
- uses: actions/checkout@v4
  with:
    fetch-depth: 0          # required for diff scan
- uses: YUTAKONDO1205/VibeGuard@v0
  with:
    path: .
    mode: standard
    format: sarif
    out: vibeguard.sarif
    fail-on: high
- uses: github/codeql-action/upload-sarif@v3
  if: always()
  with:
    sarif_file: vibeguard.sarif
    category: vibeguard

Locally (the CLI is not published to npm — clone the repo):

npm install && npm run build
node apps/cli/dist/index.js ./test_problem/test_problem.py

test_problem/ is one Python file that intentionally trips most rule families at once — the fastest way to see VibeGuard react.

What it detects

71 single-file rules across 10 languages (including a C/C++/Arduino embedded layer), plus 4 cross-file rules behind --include-design-smells.

Prefix Coverage
VG-INJ Injection — eval / SQL concatenation / innerHTML / pickle
VG-AUTH Auth / TLS / placeholder auth — DEBUG bypass, verify=False, dummy_token
VG-SEC Hard-coded secrets — AWS keys, PEM, GitHub PAT, high-entropy strings
VG-CRYPTO MD5/SHA1, Math.random, http://
VG-QUAL-001..004 General quality — CORS, swallowed exceptions, open redirect
VG-QUAL-005..010 AI-trace heuristics — stubs, placeholder emails, mock data, debug=true, "for now" comments
VG-FW Framework misconfiguration — Django DEBUG=True, app.run(debug=True)
VG-MEM C/C++ memory — gets, strcpy, memcpy sized from strlen
VG-EMB AI-generated embedded — hard-coded Wi-Fi/BLE creds, setInsecure(), auth-bypass flags
VG-RTOS Interrupt / RTOS — forbidden calls in an ISR, shared ISR variable missing volatile
VG-SMELL / VG-AISC Design smells and hallucinated APIs (cross-file, opt-in)

The embedded layer is regex-and-lexical only — no tree-sitter — so it ships to all four channels. VG-EMB is the intended focus: valid C that is a security problem because of how AI writes firmware (a hard-coded SSID is legal C, so conventional embedded analyzers stay silent).

The README documents what is deliberately not detected and why — worth reading before filing a "why didn't it catch X" issue.

Confidence and severity

Every rule declares a default confidence, then the analyzer applies a context-window correction: a match inside a comment, docstring, or on a test/fixture path is down-ranked (never up-ranked; severity is untouched).

The correction is severity-gatedcritical/high keep their declared confidence even in those contexts, and medium never drops below medium. Down-ranking is triage-noise reduction, not a security verdict, and anyone who can write the file can also choose where a pattern sits. See SEVERITY_CONFIDENCE_FLOOR in packages/rules/src/confidence.ts, and run node scripts/e6-confidence-eval.mjs for a side-by-side demonstration of both arms.

Versioning

VibeGuard tracks two independent numbers. Reference the right one when reporting issues.

Version Bumps when Current
Tool versionpackage.json, CLI --version, SARIF tool.version Any release: packaging, UX, docs, or detection 0.3.3
Engine versionENGINE_VERSION, every result as engineVersions.core Only when detection behavior changes 0.3.1

A third number, engineVersions['analysis-graph'] (0.3.0-alpha.1), appears only on scans that ran --include-design-smells.

Rule of thumb: compare two runs by engine version; report which build you installed by tool version. 0.3.1 is the first engine bump that is not purely additive — it corrects existing rules in both directions after a deep audit, so a file's verdict may differ from 0.3.0. Details in CHANGELOG.md.

Privacy

VibeGuard never sends your code anywhere — all analysis is local. One caveat worth knowing: the Chrome extension's History stores the first 200 characters of each scanned snippet verbatim in chrome.storage.local, so a credential in those first 200 characters is stored as written. Clear wipes it. Full policy: PRIVACY.md.

Reference


MIT © 2026 KONDO YUTA (近藤 悠太)