Layne 是一个自托管的 GitHub App,用于集中管理我们仓库中的安全扫描。由于我们不使用商业的 SAST/密钥扫描工具,也无法使用 GitHub Enterprise,因此在不同仓库中维护不同的 GitHub Actions 工作流文件变得困难——尤其是在仓库数量增长的情况下。我们只需要安装一次 Layne,它就会监听拉取请求事件,在服务端运行我们的安全工具,将结果以原生 GitHub Check Run 注释的形式回传,并通知我们安全团队的安全通知频道。
该工具基于 Reddit 的实现。
┌─────────────────────────────────┐
│ GITHUB PULL REQUEST │◀────────────────────────┐
│ (OPEN, SYNC, REOPEN) │ │
└─────────────────────────────────┘ │
│ Check run │
HTTP Post /webhook │
│ │
┌──────────────────────────────────────────────────────────────────────────────────────────┐
│ EC2 Instance (Docker) │ │ │
│ ┌───────▼────────┐ │ │
│ │ NGINX + TLS │ │ │
│ └───────┬────────┘ │ │
│ │ │ │
│ ┌─────────────────────┘ │ │
│ │ │ │
│┌─────────────┐ │ Schedules job ┌────────────────┐ ┌────────────┐ │ │
││ LAYNE │◀─┘ ─────────────────▶│ REDIS │───▶│ TRUFFLEHOG │──┐ │ │
││ SERVER │ │ (BULLMQ) │ │ └────────────┘ │ │ │
│└─────────────┘ └────────────────┘ │ ┌────────────┐ │ │ │
│ │─▶│ SEMGREP │──┤ │ │
│ │ └────────────┘ │ │ │
│ │ ┌────────────┐ │ ┌──────────┐│
│ ├─▶│ CLAUDE │──┼─▶│ REPORTER ││
│ │ └────────────┘ │ └──────────┘│
│ │ ┌────────────┐ │ │
│ ├─▶│ SPECTRE │──┤ │
│ │ └────────────┘ │ │
│ │ ┌────────────┐ │ │
│ └─▶│ DEP DOCTOR │──┘ │
│ └────────────┘ │
└──────────────────────────────────────────────────────────────────────────────────────────┘
当 PR 被创建或更新——或者工作流/作业运行后(取决于你配置的触发条件)——GitHub 会向 Layne 发送一个 webhook。服务器立即将扫描任务加入队列,并向 GitHub 返回 200 OK。一个 worker 会拾取该任务,克隆触发事件的精确提交,将变更过的文件传递给每个已配置的扫描器(Semgrep、Trufflehog、Claude、Spectre、Dep Doctor),收集它们的发现结果,并以内联注释的形式将结果发布到 Check Run 上。
只有 PR 中修改的文件会被传递给每个扫描器。未修改的文件中的发现不会被报告。
Layne 内置了五个扫描器。你可以在 config/layne.json 中为每个仓库启用、禁用或配置每个扫描器。
你也可以添加自己的扫描器。请参阅 扩展 Layne。
一切配置正确后,Layne 会在 PR 中添加一个 run 并运行已配置的扫描工具。当扫描失败时,效果如下所示。

Layne 的发现结果会以内联注释的形式写入 PR,标记出发现安全问题的那几行代码。

你也可以通过点击检查本身来查看 Layne 的发现结果及其摘要。

并且你可以配置 Layne 通过 webhook 向 Rocket.Chat 频道发送通知——你也可以配置 Slack,并且如果你使用不同的聊天平台,添加新的通知器也很容易。

在本地运行文档站点:
npm run docs:dev
然后打开 http://localhost:3000。
完整文档涵盖了部署、配置、扫描器、通知器、PR 评论、发现抑制、指标、安全架构等内容。
Layne 遵循 Apache License 2.0(Apache-2.0)许可。完整文本请参见 LICENSE。
版权所有 2026 Rocket.Chat Technologies Corp.
| 扫描器 | 检测内容 | 备注 |
|---|
| Semgrep | SAST - 漏洞、不安全模式 | 默认运行 semgrep scan --config auto;可通过 extraArgs 完全配置 |
| Trufflehog | 密钥、API 密钥和凭证 | 运行 trufflehog filesystem;使用 --only-verified 减少噪声 |
| Claude | 恶意意图、后门、混淆载荷、供应链攻击 | 默认禁用;按仓库选择加入;需要 ANTHROPIC_API_KEY |
| Spectre | 通过每文件单次 LLM 调用检测恶意意图 | 默认禁用;按仓库选择加入;支持 Anthropic、OpenAI、Google、Mistral、Bedrock |
| Dep Doctor | CVE、废弃和已弃用的依赖 | 默认禁用;按仓库选择加入;需要 osv-scanner 在 PATH 中 |