demokiller
v0.7.7
Published
AI agent production gate: kill demos and turn them into production-deliverable systems
Downloads
2,624
Maintainers
Readme
Demo Killer
问题
你花了三个月打磨项目,用 AI 工具加速开发,功能测试都过了,准备上线。
但你心里清楚:生产环境比 demo 严酷得多。
- API Key 硬编码在源码里
- 任何接口都没有输入校验
- Webhook 签名从未验证
- Admin 路由对所有人开放
- CORS 全开,没有 CSP,没有 HTTPS 重定向
- 零测试、零错误处理
你的 linter 给了 87 分。Demo Killer 给你:Launch Blocked。
一条命令
npx demokiller inspect . --markdown不用安装,不用配置。指向任何项目,直接给结论。
verdict: Launch Blocked
DK-AI-001 blocker 检测到硬编码 API Key
文件: src/lib/openai.ts
后果: API Key 暴露在源码中,任何有仓库访问权限的人都能看到
修复: 将 Key 移到环境变量,.env 加入 .gitignore
DK-CORS-001 high CORS 允许所有来源
文件: src/server.ts
后果: 任何网站都可以向你的 API 发起认证请求
修复: 限制 origins 为你的实际域名每个发现告诉你 什么问题、在哪里、为什么重要、怎么修。
它检查什么
Demo Killer 不只是 lint — 它跑的是生产就绪审计。
| 检查维度 | 发现什么 | |---------|---------| | 安全 | 硬编码密钥、SQL 注入、XSS、SSRF、命令注入、路径穿越 | | 认证 | 路由缺认证、弱会话配置、Webhook 未签名 | | 输入校验 | 未清洗的请求体、缺少参数检查、无类型安全 | | 错误处理 | 吞异常、缺 try/catch、暴露堆栈 | | 可观测性 | 无日志、无健康检查、无优雅关闭 | | 性能 | N+1 查询、缺超时、无连接池 | | Agent 安全 | Prompt 注入、未检查的工具执行、上下文泄露 | | 业务逻辑 | 支付缺幂等、无事务安全、竞态条件 | | TypeScript | strict 关闭、缺类型声明 | | 测试 | 零测试文件、无 CI | | 依赖 | 已知漏洞、未使用包、缺 lockfile | | 部署 | Docker 缺健康检查、无优雅关闭、无环境变量文档 |
Demo Killer 还会针对 26 种项目类型 跑专属规则 — Python API 和区块链合约检查的完全不同。
结果怎么看
| 判定 | 含义 | |------|------| | Launch Blocked | 有 blocker,不要上线 | | Hardening Required | 有 high 级别问题,上线需风险评估 | | Minor Issues | 有 medium 级别问题,可以上线但要跟踪 | | Production Ready | 无显著问题,可以上线 |
每个发现包含:
- 文件和行号 — 问题在哪
- 严重级别 — blocker / high / medium / advisory
- 后果 — 忽略这个问题在生产环境会发生什么
- 验收标准 — "修好了"具体长什么样
快速开始
# 全局安装
npm install -g demokiller
# 检查任何项目
demokiller inspect .
# 输出 Markdown(适合 PR 和文档)
demokiller inspect . --format markdown
# 输出 SARIF(接 GitHub Code Scanning)
demokiller inspect . --format sarif > results.sarif
# 只看 blocker
demokiller inspect . --severity blocker
# 保存基线,下次只看新增问题
demokiller inspect . --save-baseline .dk-baseline.json
demokiller recheck .
# 脚手架生成 Agent 集成文件
demokiller init .或者完全不装:
npx demokiller inspect . --markdown给 Agent 使用
Demo Killer 是 Agent 原生的。支持 MCP、结构化 JSON、SARIF,能直接生成 Agent 指导文件。
Claude Code
// .claude/settings.json
{
"mcpServers": {
"demokiller": {
"command": "npx",
"args": ["demokiller-mcp"]
}
}
}然后跟 Claude 说:"跑一下 Demo Killer 检查,把 blocker 全部修掉。"
Cursor / Windsurf / Claude Desktop
{
"mcpServers": {
"demokiller": {
"command": "npx",
"args": ["demokiller-mcp"]
}
}
}GitHub Actions
- name: Production Gate
run: npx demokiller inspect . --format sarif > results.sarif
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarifAgent Skill
运行 demokiller init . 后,支持 Skill 的 Agent 会获得 /demokiller 命令 — 自动触发生产就绪检查,优先处理 blocker,生成可执行的修复计划。
支持的项目类型
Demo Killer 检测 26 种项目类型,每种都有专属深度规则。
支持的语言
Demo Killer 能分析 17 种语言,其中 16 种有专属语言规则。
完整规则覆盖 — 专属语言规则 + 路由检测 + 调用图:
| 语言 | 专属规则 | 路由检测 | 调用图 | 污点分析 | |------|---------|---------|--------|---------| | TypeScript | 通用规则 (DK-AGENT, DK-ERR, DK-PERF 等) | ✅ | ✅ | ✅ | | JavaScript | 通用规则 | ✅ | ✅ | ✅ | | Python | 7 条专属 (DK-PY-001~007) | ✅ | ✅ BFS | ✅ | | Go | 20 条专属 (DK-GO-001~020) | ✅ | ⚠️ 正则 | — | | Rust | 15 条专属 (DK-RS-001~015) | ✅ | — | — | | Java | 10 条专属 (DK-JAVA-001~010) | ✅ | — | — | | C / C++ | 10 条专属 (DK-C-001~010) | ✅ | — | — | | Kotlin | 8 条专属 (DK-KT-001~008) | ✅ | — | — | | C# | 8 条专属 (DK-CS-001~008) | ✅ | — | — | | PHP | 8 条专属 (DK-PHP-001~008) | ✅ | — | — | | Ruby | 8 条专属 (DK-RB-001~008) | ✅ | — | — | | Swift | 6 条专属 (DK-SW-001~006) | ✅ | — | — | | Dart | 5 条专属 (DK-DART-001~005) | ✅ | — | — | | Scala | 5 条专属 (DK-SCALA-001~005) | ✅ | — | — | | Shell | 5 条专属 (DK-SHELL-001~005) | ✅ | — | — |
文件级检测 — 通过文件扩展名识别,可运行项目级规则(依赖、Docker、CI/CD 等):
| 语言 | 说明 | |------|------| | Lua | 路由检测 (Lapis) | | Zig | 路由检测 | | Vue | 通过 tree-sitter 解析 |
检测引擎说明: TypeScript/JavaScript 使用 tree-sitter AST 解析 + 完整调用图 + 污点分析。Python 使用 tree-sitter AST + BFS 调用图。Go 使用 tree-sitter AST + 正则调用图。其他语言各有 5-15 条语言专属规则(正则模式匹配)。通用规则(硬编码密钥、CORS、CSP 等)对所有检测到路由的语言均有效。
MCP Server
Demo Killer 作为 MCP 服务器运行,提供 3 个工具给 Agent:
| 工具 | 功能 |
|------|------|
| inspect_project | 完整审计,JSON 或 Markdown 输出 |
| list_launch_blockers | 只返回 blocker 级别发现 |
| generate_hardening_plan | 三阶段修复计划:blocker → 加固 → 改进 |
启动服务器:
npx demokiller-mcpCLI 命令
| 命令 | 用途 |
|------|------|
| demokiller inspect . | 完整生产就绪审计 |
| demokiller inspect . --format markdown | Markdown 输出,适合 PR |
| demokiller inspect . --format sarif | SARIF 输出,接 GitHub Code Scanning |
| demokiller inspect . --severity blocker | 只看上线阻塞项 |
| demokiller inspect . --save-baseline .dk.json | 保存当前状态为基线 |
| demokiller recheck . | 对比基线,只看新增问题 |
| demokiller init . | 脚手架生成 Agent 集成文件 |
| demokiller benchmark benchmarks/list.json | 跑 benchmark 套件 |
自定义规则
Demo Killer 支持通过 .demokiller/plugins/ 目录添加自定义规则。
// .demokiller/plugins/my-rules.json
[
{
"ruleId": "CUSTOM-NO-TODO",
"title": "生产代码中不允许 TODO",
"severity": "low",
"confidence": "high",
"patterns": ["//\\s*TODO"],
"fileGlobs": [".ts", ".tsx", ".js", ".jsx"],
"consequence": "TODO 注释表示未完成的工作,不应上线。",
"acceptanceCriteria": ["上线前解决所有 TODO 注释。"]
}
]支持两种检测方式:
- patterns — 正则匹配(适合简单模式)
- detect — JavaScript 函数字符串(适合复杂逻辑,如计数、上下文判断)
详见 examples/custom-rule-example.json。
vs. 其他工具
| | CodeQL | SonarQube | Semgrep | Snyk | Demo Killer | |---|---|---|---|---|---| | 目的 | 找漏洞 | 找代码坏味道 | 找模式 | 找依赖漏洞 | 找上线阻塞项 | | 输出 | "47 个中等问题" | "D 评级" | "12 个发现" | "3 个高危" | "Launch Blocked" | | 项目类型 | 通用 | 通用 | 通用 | 通用 | 26 种,类型专属规则 | | Agent 原生 | ❌ | ❌ | ❌ | ❌ | ✅ MCP, Skills, JSON, SARIF | | 结论 | 无 | 分数 | 无 | 无 | 4 级结论 | | 后果说明 | 无 | 无 | 无 | 无 | "忽略这个会怎样" | | 验收标准 | 无 | 无 | 无 | 无 | "修好了长什么样" |
CodeQL 告诉你代码有什么问题。Demo Killer 告诉你项目能不能上线。
Roadmap
- 100+ 真实项目的系统性误报率测量
- 逐文件分析替换内容拼接(减少跨文件误报)
- Kotlin、C#、PHP、Ruby、Swift、Scala、Dart、Shell 专属规则 — 已完成
- VS Code 扩展
License
MIT — 随便用。
