Ubon
Peace of mind for vibe-coded apps
Ask AI about Ubon
Powered by Claude Β· Grounded in docs
I know everything about Ubon. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
πͺ· Ubon
Security scanner for AI-generated apps. Catches the bugs Cursor, Lovable, Windsurf, v0, and Claude routinely ship: hardcoded LLM keys, prompt-injection sinks, leaked Server Actions, hallucinated imports, missing auth on streaming endpoints, and the other "looks fine to a linter" issues that traditional tools miss.
Quick start
# One-shot, no install
npx ubon@latest check
# Or install globally
npm install -g ubon
ubon check
ubon check # fast static scan, exit 1 on errors
ubon scan --interactive # walk through findings one by one
ubon check --json # deterministic JSON for agents/CI
ubon check --sarif out.sarif # SARIF 2.1.0 for GitHub code scanning
ubon mcp # serve as an MCP tool to your AI assistant
ubon doctor # check environment and optional deps
Why Ubon?
Modern AI coding assistants are great at producing code that runs. They are routinely careless about code that's safe to deploy:
- Hardcoded LLM API keys in client bundles
- Server Actions with no auth check
- Streaming routes with no rate limit
- MCP server configs with literal secrets
import.meta.env.PUBLIC_*reading server-only values'use client'files importing fromactions/- Edge runtime routes calling Node-only APIs
- Hallucinated imports that pass the type checker because the package never gets installed
Ubon's job is to catch those, fast, with high confidence and file:line
context β and to expose them to the agent itself via JSON / NDJSON / MCP
so the AI can fix what it broke.
v3.0.0 β what's new
v3.0.0 is a focused, breaking release. Node 20+ is required and the Python / Rails / Vue profiles are gone β see MIGRATION-v3.md for the upgrade checklist.
- AI-era rule pack (
AI001βAI008): hardcoded LLM keys, prompt injection, system-prompt leaks to client, vector-DB credentials, MCP secrets, unsafe tool calls, unauthenticated streaming, unbounded generation calls. - Modern framework rules: Next 14/15 Server Actions
(
NEXT212βNEXT215), Edge runtime (EDGE001βEDGE003), SvelteKit, Astro, Remix, Hono, Drizzle, Prisma. ubon mcp: ship Ubon as a Model Context Protocol server so Cursor / Claude Desktop / Windsurf can callubon.scan,ubon.explain,ubon.preview-fixes, andubon.apply-fixesdirectly. See docs/MCP.md.ubon hooks install --cursor: drop-in.cursor/hooks.jsonforafterFileEditandbeforeSubmitPrompt.- Deterministic output:
--jsonand--ndjsonare byte-for-byte identical across runs (sorted keys, stable severity order). The JSON Schema is published atdocs/schema/ubon-finding.schema.jsonand reachable viaubon check --schema. ubon doctorfor fast environment debugging.- CLI cleanup:
--quietfor CI,--ndjsonfor streaming agents,--allow-config-jsto gateubon.config.js(which executes user code). - Toolchain: Node 20+, ESLint 9 flat config, picocolors instead of chalk, glob 11, commander 13.
- Scope cut (breaking): removed
--profile python,--profile rails, and--profile vueand their scanners. Selecting them now exits with code 2 and points at MIGRATION-v3.md. Use Bandit, Brakeman, oreslint-plugin-vuefor those ecosystems. - Deprecations: Puppeteer crawler (
--crawl-internal),ubon.config.jswithout--allow-config-jsβ both removed in v3.1.
How it compares
| Capability | Ubon | ESLint | npm audit | Lovable scanner |
|---|---|---|---|---|
| LLM / vector-DB hardcoded secrets | β | β | β | β οΈ Partial |
| Prompt-injection sinks | β | β | β | β |
| Server Actions / Edge runtime checks | β | β | β | β |
| Supabase RLS validation | β | β | β | β οΈ Existence |
| Insecure cookies / CORS / redirects | β | β | β | β |
| Client env-var leaks (Next/Vite) | β | β | β | β |
| Accessibility basics | β | β οΈ Plugins | β | β |
| Dependency advisories (OSV) | β | β | β | β |
| MCP server for AI agents | β | β | β | β |
| Code style / formatting | β | β | β | β |
Use them together. ESLint covers code style; npm audit covers CVEs in your dependency tree; Ubon covers the gap that AI assistants regularly leave behind.
Cursor integration
ubon hooks install --cursor # writes .cursor/hooks.json + scripts
Then point Cursor at the MCP server:
// ~/.cursor/mcp.json
{
"mcpServers": {
"ubon": { "command": "npx", "args": ["-y", "ubon@latest", "mcp"] }
}
}
Full Cursor + Lovable + comparison details in docs/INTEGRATIONS.md.
Configuration
ubon init # writes ubon.config.json
ubon check --update-baseline # accept current findings as baseline
ubon check --baseline .ubon-baseline.json --focus-new --fail-on error
// ubon.config.json
{
"profile": "next",
"minConfidence": 0.85,
"failOn": "error",
"disabledRules": ["VIBE003"],
"exclude": ["legacy/**"]
}
For the JS variant (executes user code), pass --allow-config-js or
set UBON_ALLOW_CONFIG_JS=1.
Documentation
- docs/CLI.md β every command and flag
- docs/RULES.md β full rule glossary
- docs/CONFIG.md β config file schema
- docs/INTEGRATIONS.md β Cursor / Lovable / comparison
- docs/MCP.md β Model Context Protocol server
- docs/ADVANCED.md β profiles, suppressions, baselines, output schemas, release policy
- MIGRATION-v3.md β upgrading from v2.x
- CHANGELOG.md β release history
Requirements
- Node.js 20 or newer (v3 dropped Node 16/18)
- Git (for
--git-changed-sinceand thegit-historyscanner) - Optional:
@modelcontextprotocol/sdkforubon mcpβ installed automatically as anoptionalDependencyofubon. If your install flags skipped it, seedocs/MCP.md.
Run ubon doctor to verify.
About
I'm Luisfer Romero Calero. I built Ubon because the gap between "AI shipped this" and "this is safe to deploy" keeps widening. The tool's name comes from the lotus (ΰΈΰΈΈΰΈΰΈ₯) in Thai β clarity in the middle of vibe-coded chaos.
If Ubon helps you ship safer apps, the highest praise is to wire it into your CI and your AI assistant β and tell me what it caught.
License
MIT β see LICENSE.
