桃子桃子快讯
返回首页
工具

AI Shipcheck:本地静态扫描 AI 生成代码的 CLI 工具

开源工具 AI Shipcheck 通过 63 条规则对 AI 生成代码做 9 类静态检查,本地运行、可接入 CI。

2026.08.29 · 周六5 分钟阅读

Show HN 项目 AI Shipcheck 是一款面向「AI 写出来的代码」的本地静态扫描工具,由 sinceaihq 开源发布。它不依赖云端 API,不上传源代码,可在数毫秒内对项目目录进行 63 项规则检查,覆盖安全、鉴权、数据库、可靠性、测试、可观测性、性能、可访问性以及 AI 成本与滥用控制共 9 个类别,并按类别独立打分。

为什么要做这个工具

AI 编程助手已经能稳定产出「能跑」的代码,但在生产环境中能否存活是另一回事。常见缺口高度集中:未启用 RLS 的 Supabase 表、写操作前不校验调用者身份的路由处理器、把密钥放进 NEXT_PUBLIC_ 前缀的变量、没有限流也没有 token 上限的 LLM 端点。AI Shipcheck 把这些「乏味但致命」的模板化漏洞做成了可复现的静态规则。

检查范围与规则示例

工具内置 63 条规则,每条都附带说明文档、易受攻击的 fixture、安全的 fixture 与单元测试。覆盖示例包括:

  • 安全:硬编码凭据、NEXT_PUBLIC_ 后面的密钥、eval、Shell 注入、放行式重定向、过宽的 CORS、关闭 TLS 校验、弱加密算法。
  • 鉴权:写操作无授权检查的服务端 action、仅在浏览器侧做的权限判断、未校验的 Webhook、未签名的 JWT、暴露的 service-role key。
  • 数据库:未启用行级安全的表、USING (true) 策略、字符串拼接的 SQL、无过滤的删除、破坏性迁移。
  • 可靠性:被吞掉的错误、请求路径缺少超时、未处理的 Promise 拒绝、无退避的重试、ignoreBuildErrors
  • 测试与可观测性:缺失测试、CI 未跑 typecheck、.only 提交、纯 console 的服务端日志、缺少 React 错误边界。
  • 性能:无界查询、请求处理器中的同步 I/O、N+1 查询结构、过重的客户端 import。
  • AI 成本与滥用控制:LLM 端点无鉴权或限流、无 token 上限、由请求控制的模型选择、暴露在浏览器侧的 provider key。

支持的栈包括 Next.js(两种路由)、React、Vite、Express、Fastify、Hono、NestJS、Remix、Astro、SvelteKit、Nuxt、Supabase、Firebase、Prisma、Drizzle、Mongoose、Stripe、OpenAI、Anthropic、Vercel AI SDK、LangChain、tRPC 以及常见测试框架,框架专属规则仅在检测到对应依赖时触发,monorepo 也可识别。

使用方式

常见命令如下:

  • npx ai-shipcheck .:扫描当前目录。
  • npx ai-shipcheck . --fail-on critical:存在关键发现时退出码为 1。
  • npx ai-shipcheck . --format sarif:输出 SARIF 报告,也支持 jsonmarkdown
  • npx ai-shipcheck explain <rule-id>:查看某条规则的存在原因与修复方式。

默认情况下「仅输出发现但不失败命令」,需要通过 --fail-on--min-score 显式开启门槛,因此可以无风险地接入既有流水线。要求 Node.js 22 及以上;可选的 shipcheck.config.json 可用于排除路径、关闭规则或设定阈值。

GitHub Action 与结果呈现

工具提供官方 GitHub Action,可在 PR 差异中内联标注发现、写入 Markdown 报告,并产出 SARIF 接入代码扫描。Action 输出 scoreverdictcritical-counthigh-count 等字段,动作被打包为单文件并按 tag 锁定,运行时不联网拉取额外代码。退出码语义清晰:0 满足阈值、1 未满足、2 用法错误、3 内部错误。

隐私与可信边界

项目强调以下几点:

  • 全部在本地运行:无遥测、无网络调用、无上传。
  • 扫描过程不执行任何仓库代码:不 import、不 eval、不运行 install 脚本,仅按字节读取并做词法分析。
  • 密钥在所有可能打印的位置自动遮蔽。
  • 扫描有界,被截断时会显式提示,不会悄悄只报告项目的一部分。
  • 仅一个运行时依赖。

每条发现都会标注文件、行号、规则 ID、严重程度与置信度——二者刻意分离,便于区分「启发式但严重」与「确切命中」。项目自身声明这是「静态分析,而非安全认证」,定位更接近 CI 中的快速体检,而非合规意义上的安全审计。

信源