防御性代码参考框架
基于自 Claude Mythos 预览版发布以来与多家机构安全团队合作的经验,我们构建了这套用于自主漏洞发现与修复的参考实现。关于这些经验总结及最佳实践,请参阅随附的博客文章(同样收录于 blog-post.md 文件)。如需轻量级 SDK 操作指南,了解相同的“侦察→发现→分类→报告→修复”流程,请参见配套的实践手册。
本仓库不再维护,且不接受外部贡献。
🔒 需要托管方案?Anthropic 提供 Claude Security 托管产品,可在多个项目中自动发现并修复源代码漏洞。Claude Security 会扫描仓库中的漏洞,通过多阶段验证流程降低误报率,并支持对发现结果进行全生命周期管理:分类、修复验证及快速补丁生成。
本仓库是基于使用 Claude 发现漏洞的通用最佳实践构建的开源参考实现。您可借此搭建自己的漏洞发现流程、自定义逻辑,并可通过任何 Claude API 访问渠道(包括 Bedrock、Vertex 或 Azure)使用。
目录
- Claude Code 技能:/quickstart、/threat-model、/vuln-scan、/triage、/patch、/customize:交互式范围界定、扫描、分类与补丁生成。在 Claude Code 中打开本仓库并运行 /quickstart 即可快速上手。
- harness/:自主参考流程(侦察→发现→验证→报告→修复),配置为使用 Docker 和 ASAN 查找 C/C++ 内存漏洞。该框架为参考实现,非正式产品。其整体架构、提示词和沙箱机制可复用,但该框架无法直接适用于所有代码库。运行 /customize 可将其移植至您的语言、检测器或漏洞类型。
⚠️ 安全说明:/quickstart、/threat-model、/vuln-scan 和 /triage 仅执行文件读写操作。对静态发现结果(TRIAGE.json 或 VULN-FINDINGS.json)运行 /patch 同样仅涉及读写操作。/customize 会编辑 harness 代码并运行验证命令。只要你在 Claude Code 中审查并批准每次工具调用,这些技能都可以在无沙箱环境下安全运行。自主参考流水线(包括对流水线结果运行 /patch)会执行目标代码,因此除非明确覆盖,否则它拒绝在 gVisor 沙箱之外运行。要进行设置,请先运行 `scripts/setup_sandbox.sh`,然后通过 `bin/vp-sandboxed` 调用流水线。更多详情请参阅 `docs/security.md` 和 `docs/agent-sandbox.md`。
快速上手
git clone https://github.com/anthropics/defending-code-reference-harness cd defending-code-reference-harness claude # 30-sec intro + guided first run on the canary target > /quickstart > /quickstart how do I port the pipeline to Java? > /quickstart how do I triage all these bugs?
延伸阅读
- 博客文章 · 附有经验总结与最佳实践的配套博客文章
- 流水线 · 工作原理:示意图、阶段、CLI 参数
- 安全 · 沙箱机制、不应挂载的内容
- 智能体沙箱 · 每个智能体的 gVisor 隔离机制与出站白名单
- 自定义 · 移植到我的技术栈;哪些文件会变更及原因
- 补丁 · 针对已验证的崩溃生成并验证修复方案
- 故障排查 · 重复项、速率限制、子智能体模型固定
- 安全防护 · 阻止危险网络攻击行为
逐步推进
与我们合作过的最成功的安全团队,都是那些最快上手实践的团队。虽然花数月时间设计完美流水线很诱人,但我们建议从第一天起从小处着手,随着经验积累逐步构建。以下步骤遵循这一模式,并根据我们的观察设定了一个雄心勃勃(但合理)的推进节奏。
| 第一步 | 第一天 | 构建威胁模型,并运行首次静态扫描与分类 |
| 第二步 | 第二天 | 在 C/C++ 库上运行参考流水线 |
| 第三步 | 第 3-5 天 | 针对你的目标自定义流水线 |
| 第四步 | 第二周 | 启动自主扫描、分类与补丁修复 |
第一步(第一天):构建威胁模型,并运行首次静态扫描与分类
第一天的重点是完整走通整个流程。仅使用交互式技能,你将构建威胁模型、运行基于该模型范围的静态扫描、对返回结果进行分类,并草拟候选修复方案。当天结束时,你将获得一个威胁模型、一份按优先级排序的静态发现结果列表,以及候选补丁。
相关技能仅能读取和写入你仓库中的文件。只要你以交互方式运行 Claude Code 并批准每次工具使用,就无需沙箱。
# Pin every subagent to the model you want export CLAUDE_CODE_SUBAGENT_MODEL=<model-id> claude # 0. intro + guided first run > /quickstart # 1. Build a threat model (aim before you shoot) > /threat-model bootstrap targets/canary # 2. Run a static scan, scoped by that threat model > /vuln-scan targets/canary # 3. Verify, dedupe, and rank what came back > /triage targets/canary/VULN-FINDINGS.json # 4. Generate candidate fixes for the verified findings > /patch ./TRIAGE.json --repo targets/canary
此流程会生成 THREAT_MODEL.md、VULN-FINDINGS.{json,md}、TRIAGE.{json,md} 以及 PATCHES/ 目录。
步骤 1 中产生的漏洞候选来自 Claude 对源代码的静态审查(不进行任何构建或运行),因此在非测试目标上预期会有更多误报。在步骤 2 中,你将生成经过执行验证的发现结果。
注意:在测试目标上,/triage 可能会将扫描结果判定为误报。entry.c 明确声明自身为故意存在漏洞的演示代码,而 /triage 会正确排除测试/固定代码中的错误。要查看完整的确认/去重/误报处理流程,请改为在精心设计的固定代码上运行(/triage .claude/skills/triage/fixtures/canary-findings.json --repo targets/canary),或者将步骤 1 的技能指向你自己的代码。
步骤 2(第 2 天):在 C/C++ 库上运行参考流水线
在第 2 天,你将交互式技能升级为首次自主运行,使用参考流水线。你将在自己的环境中,针对一个已知存在漏洞的开源库,运行完整的侦察→发现→验证→报告循环,然后为其发现的问题生成候选补丁。最终你将获得一组可复现的崩溃、可利用性报告和候选补丁,同时了解该流水线的工作方式。
运行流水线很简单:
# One-time setup python3 -m venv .venv && .venv/bin/pip install -e . ./scripts/setup_sandbox.sh # installs gVisor, builds the agent images, and verifies isolation; note: requires Docker export ANTHROPIC_API_KEY=sk-ant-... # or CLAUDE_CODE_OAUTH_TOKEN; the pipeline requires one in env # Run the recon → find → verify → report loop bin/vp-sandboxed run drlibs --model <model-id> --runs 3 --parallel --stream --auto-focus # Generate a candidate patch for each finding bin/vp-sandboxed patch results/drlibs/<timestamp>/ --model <model-id> # Or, ask Claude Code to launch the pipeline and watch the run for you claude > run the pipeline on drlibs and explain findings as they come
循环的结果会存放在 results/drlibs/<时间戳>/ 目录下。使用 --stream 标志,第一份报告将在几分钟内出现在 reports/bug_NN/ 目录下。
⚠️ run 命令会生成自主智能体。流水线会在 gVisor 容器内运行每个智能体,并将出站流量限制为仅能访问 Claude API。除非显式覆盖,否则生成智能体的子命令拒绝在容器外启动。更多信息请参阅 docs/security.md 和 docs/agent-sandbox.md。
在底层,该流水线会经历七个阶段:
- 构建:将目标编译为包含 ASAN(C 和 C++ 的内存错误检测器)的 Docker 镜像。流水线在首次运行时,会使用目标的 Dockerfile 自动构建此镜像。
- Recon(侦察):一个轻量级智能体读取网络隔离容器内的源代码,并提出分区方案,例如“这里有 N 个不同的输入解析子系统,值得分别攻击”,这样并行的 Find(查找)智能体就能探索不同区域,而不会集中到同一个漏洞上。如果没有 `--auto-focus` 标志,流程会使用目标 `config.yaml` 中的 `focus_areas` 列表。
- Find(查找):N 个智能体并行运行,每个都在自己独立的隔离容器中。每个智能体读取源代码,构造畸形输入,并运行 ASAN 二进制文件,直到某个输入连续三次导致崩溃。
- Verify(验证):一个独立的评分智能体在一个全新的、Find 智能体从未接触过的容器中复现每次崩溃。从 Find 智能体传递到评分智能体的唯一内容就是它生成的漏洞验证概念(PoC)。
- Dedupe(去重):一个裁决智能体将已验证的崩溃与已报告的漏洞进行比较,判断每个崩溃是新漏洞、已知漏洞的更优示例,还是需要跳过的重复项。
- Report(报告):一个报告智能体针对每个独特漏洞编写结构化的可利用性分析,包括原语类型、可达性、利用升级路径和严重性等细节。
- Patch(补丁,即上述独立的 patch 命令):一个补丁智能体编写建议的修复方案,然后一个评分智能体确认新代码能编译通过、原始漏洞验证输入不再导致崩溃、目标的测试套件仍然通过,并且一个新的 Find 智能体无法绕过该修复。
更多详情,请参阅 docs/pipeline.md。
第 3 步(第 3-5 天):为你的目标定制流程
在第 3-5 天,你将为自己的目标定制测试框架。首先,将第 1 步的技能指向你的代码,然后使用 `/customize` 将流程移植到你的技术栈。到本周末,你将拥有一个 `targets/<your-service>/` 目录,流程可以针对该目录运行,并通过一次简单的冒烟测试验证,为第 4 步的规模化扩展做好准备。
虽然参考流程是为在 C 和 C++ 代码中查找内存漏洞而设计的,但其结构是通用的。将其移植到新的漏洞类型或语言,只需针对你的目标技术栈回答以下问题:
| 问题 | C/C++ 参考 | 你的目标(示例) |
|---|---|---|
| 什么信号表明发现了一个结果? | ASAN 崩溃特征 | 异常 / 金丝雀文件 / DNS 回调 |
| 概念验证是什么样的? | 导致崩溃的输入文件 | HTTP 请求序列 / 事务列表 / 测试框架 |
| 目标程序是如何构建和运行的? | Dockerfile(使用 clang + ASAN) | 在容器中构建你的语言环境 |
在自定义之前,先将步骤 1 中的技能指向你自己的代码。提醒一下,这些技能是只读和只写的,因此可以在无沙箱环境下运行。
claude > /quickstart how do I customize this for ~/code/my-service? > /threat-model bootstrap-then-interview ~/code/my-service > /vuln-scan ~/code/my-service > /triage ~/code/my-service/VULN-FINDINGS.json --repo ~/code/my-service
然后,在 /customize 技能中使用这些技能生成的产物,该技能会根据你的代码库修改测试框架。
> /customize use ~/code/my-service/{THREAT_MODEL.md,VULN-FINDINGS.json} and ./TRIAGE.md
当 /customize 完成后,你将得到一个 targets/my-service/ 目录。在扩大规模之前,先通过一次冒烟测试运行来验证该管道。
bin/vp-sandboxed run my-service --model <model-id> --runs 1
更多详情,请参阅 docs/customizing.md。
步骤 4(第 2 周):启动自主扫描、分类和修复
在第 2 周,你将在自己的目标上使用步骤 3 中自定义的管道,为内部管道循环添加一个外层循环——运行多次管道扫描,对多次运行的结果进行分类,根据优先级进行修复,然后重复此过程。
# Scan - run a wave of parallel runs against your target bin/vp-sandboxed run my-service --model <model-id> --runs 5 --parallel --stream --auto-focus # Triage - dedupe and rank every finding across all waves using your threat model > /triage results/my-service/ --repo ~/code/my-service --auto --votes 5 # Patch - generate and validate fixes, starting with what triage ranked the highest > /patch results/my-service/<timestamp>/ --model <model-id>
⚠️ 遵循与步骤 2 相同的沙箱化指南
单次管道运行已经会验证并去重其自身的发现结果。/triage 功能则跨多次管道运行工作。当指向 results/ 目录时,它会合并所有运行中的重复项(以及 /vuln-scan 中存在的任何静态发现结果),根据你的威胁模型重新校准严重性评级,并尝试将每个发现结果路由给对应的组件负责人。
在可能的情况下,快速修复发现结果有助于保持外层循环尽可能高效。当发现结果被修复后,模型无法再次发现它们,而是会暴露出全新的、通常更深层的问题。随着你运行更多轮次的管道,发现结果的数量可能会下降,但复杂度也可能会上升。如果无法快速修复,即使只是将之前的发现结果记录到目标的 known_bugs 中,也有助于引导未来的运行去发现更新的漏洞。
自主分类与自动补丁仍是悬而未决的问题,该参考工具链并未完全解决它们。`/patch` 中的验证策略有助于提高门槛,但严重性和优先级划分最终取决于你对自身环境的判断,且经过验证的补丁并非总能向上游提交。许多合作伙伴已将这些步骤报告为当前的瓶颈,你需要为此预留实际的工程时间。
更多详情请参阅 `docs/triage.md` 和 `docs/patching.md`。
未来展望
在初始阶段之后,与我们合作的团队通常会向以下几个方向投入资源:
- 审查所有内部仓库和关键开源依赖项,按重要性排序确定最需要扫描的对象(例如,基于其暴露面、CVE 历史记录、业务关键性),然后按优先级顺序逐一扫描。
- 搭建专用的扫描基础设施,将扫描任务从笔记本电脑或一次性虚拟机上迁移出来。最成功的团队会克制住先构建完美扫描平台再扩大规模的冲动。
- 将扫描纳入软件开发生命周期。部分团队已设置定期扫描(例如每日或每周),或已将扫描集成到 CI 流水线中。
- 测试并实验各类模型,以找到最适合自身需求的方案。
关于
涵盖威胁建模、扫描、分类、补丁的技能,以及一个可自定义的自主扫描工具链
claude.com/blog/using-llms-to-secure-source-code
贡献者
编程语言
- Python 93.0%
- Shell 3.4%
- C 2.4%
- Dockerfile 1.2%
Defending Code Reference Harness
A reference implementation for autonomous vulnerability discovery and remediation with Claude, based on our learnings from partnering with security teams at several organizations since launching Claude Mythos Preview. For a write up of these learnings along with best practices, see the accompanying blog post (also available in blog-post.md). For a lightweight SDK-only walkthrough of the same recon → find → triage → report → patch loop, see the companion cookbook.
This repo is not maintained and is not accepting contributions.
🔒 Want a managed option? Anthropic offers Claude Security, a hosted product that finds and fixes vulnerabilities in your source code across multiple projects. Claude Security scans your repository for vulnerabilities, applies a multi-stage verification pipeline to reduce false positives, and lets you manage findings through their lifecycle: triage, fix validation, and rapid fix generation.
This repository is an open-source reference implementation based on general best practices for finding vulnerabilities using Claude. You can use it to build your own vulnerability finding pipeline, customize the logic, and it can be used with whatever access you have to Claude APIs (including Bedrock, Vertex, or Azure).
Contents
- Claude Code skills:
/quickstart,/threat-model,/vuln-scan,/triage,/patch,/customize: interactive scoping, scanning, triage, and patching. Open this repo in Claude Code and run/quickstartto get oriented. harness/: the autonomous reference pipeline (recon → find → verify → report → patch), configured for finding C/C++ memory vulnerabilities using Docker and ASAN. This harness is a reference, not a product. The general shape, prompts, and sandboxing are reusable, but the harness will not work on every codebase out of the box. Run/customizeto port it to your language, detector, or vuln class.
⚠️ Security:
/quickstart,/threat-model,/vuln-scan, and/triageonly read and write files. Running/patchon static findings (TRIAGE.jsonorVULN-FINDINGS.json) is likewise read- and write-only./customizeedits the harness code and runs validation commands. Any of these skills are safe to run unsandboxed, as long as you review and approve each tool use in Claude Code. The autonomous reference pipeline (including/patchon pipeline results) executes target code, so it refuses to run outside of a gVisor sandbox unless explicitly overridden. To get set up, runscripts/setup_sandbox.shonce, then invoke the pipeline viabin/vp-sandboxed. See docs/security.md and docs/agent-sandbox.md for more details.
Getting Started
git clone https://github.com/anthropics/defending-code-reference-harness cd defending-code-reference-harness claude # 30-sec intro + guided first run on the canary target > /quickstart > /quickstart how do I port the pipeline to Java? > /quickstart how do I triage all these bugs?
Further Reading
- Blog Post · The accompanying blog post with learnings + best practices
- Pipeline · How it works: diagram, stages, CLI flags
- Security · Sandboxing, what not to mount
- Agent sandbox · gVisor isolation + egress allowlist for every agent
- Customize · Port to my stack; which files change and why
- Patching · Generate and verify fixes for verified crashes
- Troubleshooting · Duplicates, rate limits, subagent model pinning
- Safeguards · Block for dangerous cyber work
Ramp Up
The most successful security teams we've partnered with are those that have gotten hands-on the fastest. Though it's tempting to spend months designing the perfect pipeline, we recommend starting small on Day 1 and building from there as learnings come. The steps below follow that pattern and set an ambitious (but reasonable) pace based on what we've seen.
| Step 1 | Day 1 | Build a threat model and run your first static scan + triage |
| Step 2 | Day 2 | Run the reference pipeline on a C/C++ library |
| Step 3 | Days 3-5 | Customize the pipeline for your target |
| Step 4 | Week 2 | Start autonomous scanning, triage, and patching |
Step 1 (Day 1): Build a threat model and run your first static scan + triage
Day 1 is focused on seeing the whole loop end-to-end. Using only the interactive skills, you'll build a threat model, run a static scan scoped by it, triage what comes back, and draft candidate fixes. You'll finish the day with a threat model, a ranked list of static findings, and candidate patches.
The relevant skills only read and write files in your repo. As long as you run Claude Code interactively and approve each tool use, no sandbox is needed.
# Pin every subagent to the model you want export CLAUDE_CODE_SUBAGENT_MODEL=<model-id> claude # 0. intro + guided first run > /quickstart # 1. Build a threat model (aim before you shoot) > /threat-model bootstrap targets/canary # 2. Run a static scan, scoped by that threat model > /vuln-scan targets/canary # 3. Verify, dedupe, and rank what came back > /triage targets/canary/VULN-FINDINGS.json # 4. Generate candidate fixes for the verified findings > /patch ./TRIAGE.json --repo targets/canary
This flow produces THREAT_MODEL.md, VULN-FINDINGS.{json,md}, TRIAGE.{json,md}, and PATCHES/.
The vulnerability candidates produced in Step 1 come from Claude's static review of the source (nothing is built or run), so expect more false positives on any non-canary targets. In Step 2, you'll produce execution-verified findings.
Note: on the canary target,
/triagemay dismiss the scan's findings as false positives.entry.cannounces itself as deliberately vulnerable demo code, and/triagecorrectly excludes bugs in test / fixture code. To see the full confirm / dedupe / false positive flow, run it on the curated fixture instead (/triage .claude/skills/triage/fixtures/canary-findings.json --repo targets/canary) or point the Step 1 skills at your own code.
Step 2 (Day 2): Run the reference pipeline on a C/C++ library
On Day 2, you'll move from interactive skills to your first autonomous run using the reference pipeline. You'll run the full recon → find → verify → report loop in your environment on a known-vulnerable open-source library, then generate a candidate patch for what it finds. You'll finish with a set of reproducible crashes, exploitability reports, and candidate patches, along with a feel for how the pipeline works.
Running the pipeline is simple:
# One-time setup python3 -m venv .venv && .venv/bin/pip install -e . ./scripts/setup_sandbox.sh # installs gVisor, builds the agent images, and verifies isolation; note: requires Docker export ANTHROPIC_API_KEY=sk-ant-... # or CLAUDE_CODE_OAUTH_TOKEN; the pipeline requires one in env # Run the recon → find → verify → report loop bin/vp-sandboxed run drlibs --model <model-id> --runs 3 --parallel --stream --auto-focus # Generate a candidate patch for each finding bin/vp-sandboxed patch results/drlibs/<timestamp>/ --model <model-id> # Or, ask Claude Code to launch the pipeline and watch the run for you claude > run the pipeline on drlibs and explain findings as they come
Results from the loop land in a results/drlibs/<timestamp>/ directory. With the --stream flag, the first report will appear in minutes under reports/bug_NN/.
⚠️
runspawns autonomous agents. The pipeline runs each agent inside a gVisor container with egress restricted to the Claude API. Agent-spawning subcommands refuse to start outside it unless explicitly overridden. For more information, see docs/security.md and docs/agent-sandbox.md.
Under the hood, the pipeline walks through seven stages:
- Build: Compiles the target into a Docker image with ASAN (the memory error detector for C and C++). The pipeline builds this image automatically on first run using the target's
Dockerfile. - Recon: A lightweight agent reads the source inside a network-isolated container and proposes a partition, i.e., "here are N distinct input-parsing subsystems worth attacking separately", so that parallel find agents explore different areas instead of converging on the same bug. Without the
--auto-focusflag, the pipeline uses thefocus_areaslist from the target'sconfig.yaml. - Find: N agents run in parallel, each in its own isolated container. Each agent reads the source, crafts malformed inputs, and runs the ASAN binary until a given input produces a crash 3 out of 3 times.
- Verify: A separate grader agent reproduces each crash in a fresh container that the find agent hasn't touched. The only thing that crosses over from the find agent to the grader is the proof of concept it produced.
- Dedupe: A judge agent compares verified crashes against bugs already reported and decides whether each is a new bug, a better example of a known bug, or a duplicate to skip.
- Report: A report agent writes a structured exploitability analysis per unique bug, including details on primitive class, reachability, escalation path, and severity.
- Patch (the separate patch command above): A patch agent writes a proposed fix, and a grader agent confirms that the new code builds, that the original proof of concept input no longer crashes, that the target's test suite still passes, and that a fresh find agent can't find a way around the fix.
For more details, see docs/pipeline.md.
Step 3 (Days 3-5): Customize the pipeline for your target
On Days 3-5, you'll customize the harness for your own target. First, you'll point the Step 1 skills at your code, then you'll use /customize to port the pipeline to your stack. By the end of the week, you'll have a targets/<your-service>/ directory that the pipeline can run against, validated with a single smoke run of the pipeline, and ready to scale up in Step 4.
While the reference pipeline is designed for finding memory vulnerabilities in C and C++ code, its shape is generic. Porting it to a new vuln class or language just means answering the following questions for your target stack:
| Question | C/C++ Reference | Your target (examples) |
|---|---|---|
| What signals a finding? | ASAN crash signature | exception / canary file / DNS callback |
| What does a proof of concept look like? | crashing input file | HTTP request sequence / tx list / test harness |
| How is the target built and run? | Dockerfile (using clang + ASAN) | your language's build in a container |
Before customizing, point the Step 1 skills at your own code. As a reminder, they're read- and write-only, so they can run unsandboxed.
claude > /quickstart how do I customize this for ~/code/my-service? > /threat-model bootstrap-then-interview ~/code/my-service > /vuln-scan ~/code/my-service > /triage ~/code/my-service/VULN-FINDINGS.json --repo ~/code/my-service
Then, use the artifacts produced by those skills in the /customize skill, which modifies the harness for your codebase.
> /customize use ~/code/my-service/{THREAT_MODEL.md,VULN-FINDINGS.json} and ./TRIAGE.md
When /customize is done, you'll have a targets/my-service/ directory set up. Validate it with a smoke run of the pipeline before scaling up.
bin/vp-sandboxed run my-service --model <model-id> --runs 1
For more details, see docs/customizing.md.
Step 4 (Week 2): Start autonomous scanning, triage, and patching
In Week 2, you'll use the pipeline you customized in Step 3 on your own targets, adding an outer loop to the inner pipeline loop - run multiple pipeline scans, triage the findings from across those runs, patch based on prioritization, and repeat.
# Scan - run a wave of parallel runs against your target bin/vp-sandboxed run my-service --model <model-id> --runs 5 --parallel --stream --auto-focus # Triage - dedupe and rank every finding across all waves using your threat model > /triage results/my-service/ --repo ~/code/my-service --auto --votes 5 # Patch - generate and validate fixes, starting with what triage ranked the highest > /patch results/my-service/<timestamp>/ --model <model-id>
⚠️ Follow the same sandboxing guidelines as in Step 2
A given pipeline run already verifies and deduplicates its own findings. /triage works across many pipeline runs. When pointed at the results/ directory, it collapses duplicates across all runs (and any static findings from /vuln-scan if present), recalibrates severity ratings against your threat model, and attempts to route every finding to the component owner.
When possible, patching findings quickly helps keep the outer loop as productive as possible. When findings are fixed, the model can't re-find them, and instead will surface net new, typically deeper issues. As you run more pipeline waves, the number of findings will likely go down, but the complexity will likely also go up. If quick patching isn't possible, even just recording prior findings in the target's known_bugs can help steer future runs toward newer bugs.
Autonomous triage and patching are still open issues, and this reference harness doesn't fully solve them. The verification strategies in /patch help raise the bar, but severity and prioritization are ultimately judgments about your environment, and verified patches are not always upstreamable. Many partners have reported these steps as their current bottlenecks, and you should budget real engineering time for them.
For more details, see docs/triage.md and docs/patching.md.
Looking Forward
After the initial ramp up, the teams we've worked with have tended to invest in a few directions:
- Reviewing all their internal repos and key open-source dependencies, ranking which are the most important to scan (e.g., based on their exposure, history of CVEs, business-criticality), then working through scanning the list in priority order.
- Setting up bespoke infrastructure for scanning to move scans off of laptops or one-off VMs. The most successful teams resist the urge to build the perfect scanning platform before scaling up.
- Incorporating scans into their SDLC. Some teams have set up recurring scans (e.g., daily, weekly) or have added scanning into their CI pipelines.
- Testing and experimenting with the models to find what works best for them.
About
Skills for threat modeling, scanning, triage, patching, plus an autonomous scanning harness you can /customize
claude.com/blog/using-llms-to-secure-source-code