Vibecheck— 为AI构建的应用提供上线前安全审计
Show HN: Vibecheck – a pre-launch security audit for AI-built apps
我们发现了什么
Show HN:Vibecheck— 为AI构建的应用提供上线前安全审计。main 分支 标签 转到文件 代码 打开更多操作菜单 最新提交 历史 9次提交 9次提交 文件夹和文件 名称 名称 最后提交信息 最后提交日期 .claude-plugin .claude-plugin .github .github assets assets examples examples hooks hooks skills skills test test .gitattributes .
- 来源:Hacker News(发现于 2026-10-30)
- 证据等级:D · 发现产品或需求信号,暂未获得可核验的商业证据。
- 商业模式:待核验
- 主题:独立产品
- 初筛评分:17.1/100 · 收录 1 次
证据,比故事更重要。
规则清洗与初筛,未经人工商业核验。原文语境、实际客户和付费情况仍需自行验证。
引用与数字披露
来源类型(原作者自述/第三方测算/媒体转引)需采集端标注,本版尚未落字段。
- 作者
- 未标注
- 抓取日期
- 来源类型
- 未标注
- 币种
- 未标注
- 口径
- 未标注
- 披露主体
- 未标注
- 披露日期
- 未标注
中文辅助译文(节选·触顶截断)
main
分支 标签
转到文件
代码 打开更多操作菜单
最新提交
历史
9 次提交
9 次提交
文件夹和文件
名称 名称 最后提交信息
最后提交日期
.claude-plugin
.claude-plugin
.github
.github
assets
assets
examples
examples
hooks
hooks
skills
skills
test
test
.gitattributes
.gitattributes
.gitignore
.gitignore
CHANGELOG.md
CHANGELOG.md
CODEOFCONDUCT.md
CODEOFCONDUCT.md
CONTRIBUTING.md
CONTRIBUTING.md
LICENSE
LICENSE
README.id.md
README.id.md
README.md
README.md
SECURITY.md
SECURITY.md
package.json
package.json
查看所有文件
仓库文件导航

图注:vibecheck 确保你发布的氛围编程应用不会泄露用户数据或钱包。
你的 AI 编写了应用。vibecheck 确保它不会泄露用户的数据或钱包。
安装 · 检测内容 · 命令 · 守卫 · CI · 🇮🇩 印度尼西亚语
2026 年 1 月,一个采用氛围编程的社交网络暴露了 150 万个 API 令牌和 35,000 个电子邮件地址。一个 Supabase 密钥留在前端中,且行级安全(Row Level Security)被关闭(Wiz、Infosecurity)。2025 年,170 多个 Lovable 应用带着同一个漏洞发布(CVE-2025-48757)。每周都有人通过查看账单,才发现自己的 OpenAI 密钥被打包进了 JavaScript。
AI 工具编写的代码可以运行。没人检查它是否安全。vibecheck 就像一位高级工程师,在你点击部署之前用通俗语言审查应用,并准备好可直接粘贴的修复方案。

图注:vibecheck 发现 3 个严重问题并给出 31/100、NO-GO 的结论;运行 /vibecheck:fix 后,得分提升至 92/100、结论变为 GO。
📄 查看完整报告示例
你会获得什么
🚦 发布评分和结论。0 到 100 分,并附有 🔴 NO-GO、🟡 FIX FIRST 或 🟢 GO,让你知道自己今天能否发布。
🔍 真正的审计,而非正则表达式拼盘。一款零依赖扫描器(60 多项检查)可以快速找出线索。随后,你的 AI 代理读取代码验证每项线索,追踪“用户 A 能否读取用户 B 的数据?”之类的攻击路径,并排除误报。
🗣️ 通俗语言。每项发现先说明可能发生什么(“任何人都能读取所有私信”),然后再给出技术细节。报告采用你撰写时使用的语言。
📋 可复制粘贴的修复提示词。每项发现都配有可直接用于 Claude Code、Cursor、Lovable、Bolt、v0 或 Replit 的提示词,因此即使应用位于无代码构建器中也能派上用场。
🛠️ /vibecheck:fix。逐项修复问题,优先处理严重问题,验证每一项,并且绝不通过削弱安全性来“修复”。
🛡️ 始终开启的守卫。在代理硬编码 API 密钥或提交 .env 之前,钩子会阻止它。
🚀 /vibecheck:deploy。在你部署之前发现“在我的机器上能运行,但在生产环境中损坏”的问题:主机上缺少环境变量、硬编码的 localhost URL、仅在 Mac 上大小写匹配的导入、package.json 中缺失的依赖包、服务器使用了错误端口、serverless 环境中的 SQLite,以及人们常忘记的仪表板步骤。
🧭 /vibecheck:unstuck。当同一个 bug 反复出现时,打破“AI 修复循环”。
检测内容
领域 示例
🔑 机密信息 代码中的 OpenAI / Anthropic / Stripe / AWS / Supabase 密钥;NEXTPUBLIC / VITE / EXPOPUBLIC_ 背后的机密信息;当前或 Git 历史中已提交的 .env
🗄️ 数据库 未启用 RLS 的 Supabase 表、使用 (true) 策略、允许用户编辑自己的 isadmin、信任 usermetadata 的策略;Firebase“测试模式”和开放规则;浏览器代码中的 service-role 密钥
🔐 身份验证 缺少服务端检查的 API 路由和服务器操作、IDOR(读取他人的记录)、由客户端标志判定管理员、仅依赖中间件的验证、未经验证即使用 jwt.decode
💸 费用 来自浏览器的 AI 调用(dangerouslyAllowBrowser)、没有速率限制的付费 API(“钱包拒绝服务”)、采用请求中提供的价格、未经验证的 Stripe / Midtrans / Xendit webhook、通过成功 URL 解锁高级功能
🧱 输入 SQL 注入、批量赋值、通过 dangerouslySetInnerHTML 和 AI 输出实施 XSS、SSRF、shell 注入、通过工具实施提示词注入
🚀 配置 允许凭据的 CORS *、调试模式、公开源映射、禁用 TLS 检查、缺少安全标头、虚构的 npm 包
🛟 可靠性 没有 git、没有备份、没有错误监控、架构未纳入迁移、没有锁文件
🌍 发布 隐私政策和服务条款、账户删除(App Store)、OG 标签、站点地图、robots、404、favicon、分析、邮件 DNS
🚀 部署 主机上未设置环境变量、localhost URL、导入 './button' 而非 Button.tsx(在 Linux 上会损坏)、未声明的依赖包、固定端口及容器中的 127.0.0.1、serverless 环境中的 SQLite 和磁盘写入、未生成 Prisma client、Node 版本与锁文件不匹配
覆盖最深:Next.js、React/Vite、Supabase、Firebase、Stripe、OpenAI/Anthropic/Gemini、Express、FastAPI/Flask/Django、Expo,并支持印度尼西亚支付服务 Midtrans 和 Xendit。通用检查适用于任何技术栈。
安装
Claude Code(推荐:包含守卫钩子)
/plugin marketplace add ribato22/vibecheck /plugin install vibecheck@vibecheck
Cursor、Codex、Gemini CLI、OpenCode、Windsurf 和其他代理(仅 skills)
npx skills add ribato22/vibecheck
手动安装
将 skills/ 中的文件夹复制到 ~/.claude/skills/(或你所用代理的 skills 文件夹)。
命令
命令 作用
/vibecheck:check 完整审计 → 评分、结论及包含修复提示词的 .vibecheck/report.md
/vibecheck:check quick 部署前 2 分钟检查:机密信息、数据库访问和严重问题
/vibecheck:check security 仅检查安全领域
/vibecheck:check launch 发布检查清单(法律、SEO、监控)以及所有严重问题
/vibecheck:fix 先修复严重问题,再修复高危问题,每次一项,并显示修复前 → 修复后的评分
/vibecheck:fix VC-DB-NO-RLS 修复一项特定发现
/vibecheck:deploy 能否在生产环境中运行?环境变量与主机的对应关系、localhost URL、大小写敏感的导入、端口、serverless 存储,以及主机检查清单 → .vibecheck/deploy.md
/vibecheck:deploy --host vercel 同上,并执行特定主机的检查(vercel、netlify、cloudflare、railway、render、fly、heroku、docker,或针对仅在你自己的机器上运行的应用使用 local)
/vibecheck:unstuck 停止修复循环:复现问题、找出根因、撤销堆积的修改
你不必记住这些命令。只需询问“我的应用准备好发布了吗?”“为什么它在本地可以运行,但在 Vercel 上不行?”或者说“它还是坏了,你们一直原地打转”,合适的 skill 就会启动。在其他代理中,按名称调用 skill(check、deploy、fix、unstuck)。
守卫(始终开启)
使用 Claude Code 插件时,vibecheck 会监视代理进行的每次文件写入以及每次 git commit / git push:
vibecheck guard blocked this: it would put secrets where they do not belong.
- src/lib/ai.ts:3 中的 OpenAI API 密钥 sk-p…9xQz
- NEXTPUBLICOPENAIAPIKEY 具有浏览器公开前缀,因此其值会发送给每位访问者(.env:2)
修复: 1. 将机密信息放在 .env 中(被 git 忽略),并在仅限服务器端运行的代码中使用 process.env.NAME 读取。 2. 对于可以安全发布的值,保留浏览器公开前缀(NEXTPUBLIC、VITE、EXPOPUBLIC_……)。
代理会读取该消息并自行修复。守卫仅阻止高置信度的密钥格式,允许在 .env 中存放机密信息,并检查每个尚未推送的提交(而非仅检查最后一个提交)。若要忽略误报,可在相关行添加 vibecheck-ignore 注释,或设置 VIBECHECK_GUARD=off 关闭守卫。
在 CI 中使用
扫描器是一个无依赖的单个 Node 文件:
node skills/check/scripts/scan.mjs ./my-app # 便于阅读的格式 node skills/check/scripts/scan.mjs ./my-app --json # 供工具和代理使用 node skills/check/scripts/scan.mjs . --fail-on critical # 遇到高置信度严重问题时退出码为 1
.github/workflows/vibecheck.yml
name : vibecheck on : [push, pull_request] jobs : scan : runs-on : ubuntu-latest steps : - uses : actions/checkout@v5 with : { fetch-depth: 0 } # 完整历史,以便发现过去提交的 .env 文件 - uses : actions/checkout@v5 with : { repository: ribato22/vibecheck, path: .vibecheck-tool } - uses : actions/setup-node@v5 with : { node-version: 22 } - run : node .vibecheck-tool/skills/check/scripts/scan.mjs . --fail-on critical
通过了?展示出来
获得 🟢 GO?将徽章添加到你的 README:
[ ![ vibecheck: GO 92/100 ] ( https://img.shields.io/badge/vibecheck-GO%2092%2F100-brightgreen )] ( https://github.com/ribato22/vibecheck )
只有获得 GO 的应用才能展示徽章。公开的“NO-GO”徽章会告诉攻击者应该从哪里寻找问题。
安全源于设计
安全工具不应成为安全问题本身。
审计是只读的。它只会写入 .vibecheck/,而该目录会在 Git 中忽略自身。只有在你同意后,才会通过 /vibecheck:fix 执行修复。
零依赖、零网络调用,并且绝不会运行你的项目代码。约 1,000 行纯 JavaScript,你可以在 15 分钟内读完:rules.mjs、scan.mjs、guard.mjs。
机密信息在输出、报告和守卫消息中始终会被遮蔽(sk-p…9xQz)。
守卫采用故障开放策略。如果它崩溃,你的工作仍可继续。
发现 vibecheck 自身存在漏洞?请私下报告:参见 SECURITY.md。
常见问题
它能替代渗透测试吗?不能。它会发现 AI 工具最常犯的错误,而这些错误也构成了现实世界中大多数氛围编程安全漏洞。如果你处理健康、财务或儿童数据,也应寻求专业审查。
它会把我的代码发送到其他地方吗?扫描器不会访问网络。这些 skill 会在你已在使用的 AI 代理中运行,与其他提示词无异。
它标记了某个实际上没有问题的地方。 在该行添加 // vibecheck-ignore(或 # vibecheck-ignore)。在文件开头几行放入 vibecheck-ignore-file 可跳过整个文件,例如测试夹具。然后提交 issue,以便改进规则。
我的应用是用 Lovable / Bolt / v0 / Replit 构建的。 将它导出或同步到 GitHub,用任何受支持的代理打开,然后运行检查。将修复提示词粘贴回你的构建器。
参与贡献
非常欢迎新增规则、技术栈指南和误报报告。参见 CONTRIBUTING.md。每条规则都会附带一项测试。使用 npm test 运行测试(Node 18+,无需安装)。
路线图
官方 GitHub Action
更多技术栈指南:Convex、Clerk、Auth.js、Better Auth、Laravel、Rails
实时检查(安全标头、开放的 Supabase 表),需明确选择加入
如果 vibecheck 在用户之前发现了问题,一个 ⭐ 能帮助其他开发者找到它。
MIT © vibecheck 贡献者 · 与 Anthropic、Supabase、Firebase、Stripe 或此处提及的任何其他厂商均无隶属关系。
关于
🚦 面向 AI 构建应用的上线前安全审计。发现泄露的 API 密钥、缺失的 Supabase RLS、开放的 Firebase 规则和账单滥用。提供发布评分 + GO/NO-GO、引导式修复和机密信息守卫。Claude Code 插件与 Agent Sk
……(正文超出本站单页篇幅上限,此处截断;完整表述请见下方原文入口。)
译文由上游机器翻译生成,可能有误;判断请以英文原文为准。
英文原文(来源本站未改写)
main
Branches Tags
Go to file
Code Open more actions menu
Latest commit
History
9 Commits
9 Commits
Folders and files
Name Name Last commit message
Last commit date
.claude-plugin
.claude-plugin
.github
.github
assets
assets
examples
examples
hooks
hooks
skills
skills
test
test
.gitattributes
.gitattributes
.gitignore
.gitignore
CHANGELOG.md
CHANGELOG.md
CODEOFCONDUCT.md
CODEOFCONDUCT.md
CONTRIBUTING.md
CONTRIBUTING.md
LICENSE
LICENSE
README.id.md
README.id.md
README.md
README.md
SECURITY.md
SECURITY.md
package.json
package.json
View all files
Repository files navigation

Your AI wrote the app. vibecheck makes sure it doesn't leak your users' data, or your wallet.
Install · What it catches · Commands · Guard · CI · 🇮🇩 Bahasa Indonesia
In January 2026, a vibe-coded social network exposed 1.5 million API tokens and 35,000 email addresses . One Supabase key sat in the front-end, and Row Level Security was off ( Wiz , Infosecurity ). In 2025, 170+ Lovable apps shipped with the same hole ( CVE-2025-48757 ). Every week, someone finds out their OpenAI key was in the JavaScript bundle by reading their bill.
AI tools write code that works . Nobody checks that it's safe . vibecheck is the senior engineer who reviews your app before you hit deploy, in plain language, with the fixes ready to paste.

📄 See a full sample report
What you get
🚦 A Launch Score and a verdict. 0 to 100, plus 🔴 NO-GO, 🟡 FIX FIRST or 🟢 GO, so you know if you can ship today.
🔍 A real audit, not regex soup. A zero-dependency scanner (60+ checks) finds the leads fast. Your AI agent then reads the code to verify each one, traces attack flows like "can user A read user B's data?", and drops the false positives.
🗣️ Plain language. Every finding starts with what can happen ("anyone can read every private message"), then the technical detail. Reports come in the language you write in.
📋 Copy-paste fix prompts. Every finding has a ready prompt for Claude Code, Cursor, Lovable, Bolt, v0 or Replit, so it helps even if your app lives in a no-code builder.
🛠️ /vibecheck:fix . Fixes issues one at a time, criticals first, verifies each one, and never "fixes" by weakening security.
🛡️ An always-on guard. A hook stops your agent from hardcoding API keys or committing .env before it happens.
🚀 /vibecheck:deploy . Catches "works on my machine, broken in production" before you deploy: env vars missing on the host, hardcoded localhost URLs, imports whose letter case only works on a Mac, packages missing from package.json, servers on the wrong port, SQLite on serverless, and the dashboard steps people forget.
🧭 /vibecheck:unstuck . Breaks the "AI fix loop" when the same bug keeps coming back.
What it catches
Area Examples
🔑 Secrets OpenAI / Anthropic / Stripe / AWS / Supabase keys in code; secrets behind NEXTPUBLIC / VITE / EXPOPUBLIC_ ; .env committed now or in git history
🗄️ Database Supabase tables without RLS, using (true) policies, users editing their own isadmin , policies trusting usermetadata ; Firebase "test mode" and open rules; the service-role key in browser code
🔐 Auth API routes and server actions without a server-side check, IDOR (reading other people's records), admin by client flag, middleware-only auth, jwt.decode without verify
💸 Money AI calls from the browser ( dangerouslyAllowBrowser ), paid APIs with no rate limit ("denial of wallet"), prices taken from the request, unverified Stripe / Midtrans / Xendit webhooks, premium unlocked from a success URL
🧱 Input SQL injection, mass assignment, XSS via dangerouslySetInnerHTML and AI output, SSRF, shell injection, prompt injection through tools
🚀 Config CORS * with credentials, debug mode, public source maps, disabled TLS checks, missing security headers, hallucinated npm packages
🛟 Reliability No git, no backups, no error monitoring, schema not in migrations, no lockfile
🌍 Launch Privacy policy and terms, account deletion (App Store), OG tags, sitemap, robots, 404, favicon, analytics, email DNS
🚀 Deploy Env vars not set on the host, localhost URLs, import './button' vs Button.tsx (breaks on Linux), undeclared packages, fixed ports and 127.0.0.1 in containers, SQLite and disk writes on serverless, Prisma client not generated, Node version and lockfile mismatches
Deepest coverage: Next.js, React/Vite, Supabase, Firebase, Stripe, OpenAI/Anthropic/Gemini, Express, FastAPI/Flask/Django, Expo , with Midtrans and Xendit for Indonesian payments. The generic checks work on any stack.
Install
Claude Code (recommended: includes the guard hook)
/plugin marketplace add ribato22/vibecheck /plugin install vibecheck@vibecheck
Cursor, Codex, Gemini CLI, OpenCode, Windsurf and other agents (skills only)
npx skills add ribato22/vibecheck
Manual
Copy the folders in skills/ into ~/.claude/skills/ (or your agent's skills folder).
Commands
Command What it does
/vibecheck:check Full audit → score, verdict and .vibecheck/report.md with fix prompts
/vibecheck:check quick 2-minute pre-deploy check: secrets, database access and criticals
/vibecheck:check security Security areas only
/vibecheck:check launch Launch checklist (legal, SEO, monitoring) plus any critical
/vibecheck:fix Fix criticals, then highs, one at a time, with before → after score
/vibecheck:fix VC-DB-NO-RLS Fix one specific finding
/vibecheck:deploy Will it run in production? Env vars vs the host, localhost URLs, case-sensitive imports, ports, serverless storage, plus the host checklist → .vibecheck/deploy.md
/vibecheck:deploy --host vercel Same, with host-specific checks (vercel, netlify, cloudflare, railway, render, fly, heroku, docker, or local for apps that only run on your machine)
/vibecheck:unstuck Stop the fix loop: reproduce, find the root cause, revert the pile
You don't have to remember them. Ask "is my app ready to launch?" , "why does it work locally but not on Vercel?" or say "it's still broken, you keep going in circles" and the right skill kicks in. In other agents, call the skill by name ( check , deploy , fix , unstuck ).
The guard (always on)
With the Claude Code plugin, vibecheck watches every file write and every git commit / git push your agent makes:
vibecheck guard blocked this: it would put secrets where they do not belong.
- OpenAI API key sk-p…9xQz in src/lib/ai.ts:3
- NEXTPUBLICOPENAIAPIKEY has a browser-public prefix, so its value ships to every visitor (.env:2)
Fix: 1. Put the secret in .env (gitignored) and read it with process.env.NAME in server-only code. 2. Keep browser-public prefixes (NEXTPUBLIC, VITE, EXPOPUBLIC_...) for values that are safe to publish.
The agent reads that message and fixes it itself. The guard blocks only high-confidence key formats, allows secrets in .env , and checks every unpushed commit (not just the last one). Silence a false positive with a vibecheck-ignore comment on the line, or turn the guard off with VIBECHECK_GUARD=off .
Use it in CI
The scanner is a single Node file with no dependencies:
node skills/check/scripts/scan.mjs ./my-app # human-readable node skills/check/scripts/scan.mjs ./my-app --json # for tools and agents node skills/check/scripts/scan.mjs . --fail-on critical # exit 1 on high-confidence criticals
.github/workflows/vibecheck.yml
name : vibecheck on : [push, pull_request] jobs : scan : runs-on : ubuntu-latest steps : - uses : actions/checkout@v5 with : { fetch-depth: 0 } # full history, so .env files committed in the past are caught - uses : actions/checkout@v5 with : { repository: ribato22/vibecheck, path: .vibecheck-tool } - uses : actions/setup-node@v5 with : { node-version: 22 } - run : node .vibecheck-tool/skills/check/scripts/scan.mjs . --fail-on critical
Passed? Show it
Got a 🟢 GO? Add the badge to your README:
[ ![ vibecheck: GO 92/100 ] ( https://img.shields.io/badge/vibecheck-GO%2092%2F100-brightgreen )] ( https://github.com/ribato22/vibecheck )
Only GO apps get a badge. A public "NO-GO" badge would tell attackers where to look.
Safe by design
A security tool should never be the security problem.
The audit is read-only. It writes only to .vibecheck/ , which ignores itself in git. Fixes happen only in /vibecheck:fix , after you agree.
Zero dependencies, zero network calls , and it never runs your project's code. About 1,000 lines of plain JavaScript you can read in 15 minutes: rules.mjs , scan.mjs , guard.mjs .
Secrets are always masked ( sk-p…9xQz ) in output, reports and guard messages.
The guard fails open. If it crashes, your work continues.
Found a vulnerability in vibecheck itself? Please report it privately: see SECURITY.md .
FAQ
Does this replace a penetration test? No. It catches the mistakes AI tools make most often, and that's most real-world vibe-coding breaches. If you handle health, financial or children's data, get a professional review too.
Does it send my code anywhere? The scanner doesn't touch the network. The skills run inside the AI agent you already use, like any other prompt.
It flagged something that's fine. Add // vibecheck-ignore (or # vibecheck-ignore ) on that line. Put vibecheck-ignore-file in the first lines to skip a whole file, such as test fixtures. Then open an issue so the rule gets better.
My app was built in Lovable / Bolt / v0 / Replit. Export or sync it to GitHub, open it with any supported agent, and run the check. Paste the fix prompts back into your builder.
Contributing
New rules, stack guides and false-positive reports are very welcome. See CONTRIBUTING.md . Each rule ships with a test. Run them with npm test (Node 18+, no install needed).
Roadmap
Official GitHub Action
More stack guides: Convex, Clerk, Auth.js, Better Auth, Laravel, Rails
Live checks (security headers, open Supabase tables) behind an explicit opt-in
If vibecheck caught something before your users did, a ⭐ helps other builders find it.
MIT © vibecheck contributors · Not affiliated with Anthropic, Supabase, Firebase, Stripe or any other vendor named here.
About
🚦 Pre-launch security audit for AI-built apps. Catches leaked API keys, missing Supabase RLS, open Firebase rules and billing abuse. Launch Score + GO/NO-GO, guided fixes, secret guard. Claude Code plugin & Agent Sk
... (truncated at the site's per-page length limit; see the source link below for the full text.)
这条还缺什么证据?
下面每条都由本条已有字段推出(等级、理由、商业模式、来源次数、是否演示), 本站不生成推测性结论;通用验证方法放在方法论页。
- 可核验的收入或付费证据查官网定价页与付费口径;第三方数据源(如 GetLatka)只作旁证,需标注来源与时点。
- 商业模式未定确认按席位/按用量/授权还是开源托管版收费;开源项目另查 LICENSE 与是否存在付费版。
- 只有单一来源找一手站点或其他渠道是否重复出现同一产品;社区热帖数量不等于商业进展。
通用验证清单(谁有这个问题/谁愿意付费/一个人能交付哪一小步)见我们的筛选方法。