May 14, 2026 Claude Code

Claude Code 如何在大型代码库中工作:最佳实践与入门方向

最成功的 Claude Code 落地案例,在配置、工具和组织结构上都有一组可识别的共同模式。本文属于“规模化使用 Claude Code”系列,这个新系列会介绍工程组织在企业级规模下使用 Claude Code 构建时的最佳实践。

Claude Code 已经在多种生产环境中运行,包括数百万行代码的 monorepo、有几十年历史的遗留系统、横跨数十个仓库的分布式架构,以及拥有数千名开发者的组织。这些环境会带来小型、简单代码库不会遇到的挑战,比如每个子目录的构建命令都不同,或者遗留代码散布在多个文件夹中,没有共同的根目录。

本文介绍我们观察到的、能够推动 Claude Code 在规模化场景中成功采用的模式。我们用“大型代码库”指代很广的一类部署:数百万行代码的 monorepo、历经几十年构建的遗留系统、分布在独立仓库中的数十个微服务,或者以上几种情况的任意组合。这也包括一些团队不一定会联想到 AI 编码工具的语言代码库,例如 C、C++、C#、Java、PHP。(尤其是在近期模型发布之后,Claude Code 在这些场景中的表现通常会比大多数团队预期的更好。)虽然每个大型代码库部署都会受到具体版本控制方式、团队结构和长期积累约定的影响,但本文中的模式可以在这些场景中泛化,也适合作为团队评估采用 Claude Code 的起点。

Claude Code 如何浏览大型代码库

Claude Code 浏览代码库的方式类似软件工程师:它会遍历文件系统、读取文件、使用 grep 精确查找所需内容,并沿着引用关系在代码库中追踪。它在开发者本机本地运行,不需要构建、维护代码库索引,也不需要把索引上传到服务器。

由 RAG 驱动的 AI 编码工具,会通过对整个代码库做 embedding,并在查询时检索相关片段来工作。在大规模场景下,这类系统可能会失败,因为 embedding 流水线跟不上活跃工程团队的代码变更速度。等开发者查询索引时,索引反映的可能是几周、几天,甚至几小时前的代码库状态。于是检索结果可能返回一个团队两周前已经改名的函数,或者引用一个上个 sprint 已经删除的模块,而且不会提示这些内容已经过时。

Agentic search 可以避开这些失败模式。它不需要维护 embedding 流水线或集中式索引,也不会因为数千名工程师持续提交新代码而产生同步压力。每个开发者的实例都基于实时的代码库工作。

但这种方式也有取舍:当 Claude 拥有足够的起始上下文,知道该去哪里查找时,它效果最好。这意味着 Claude 的导航质量取决于代码库设置得是否足够好,包括通过 CLAUDE.md 文件和 skills 分层提供上下文。如果你要求它在十亿行代码库中找出某个模糊模式的所有实例,还没真正开始工作,就会先撞上上下文窗口限制。愿意投入代码库设置的团队,通常会得到更好的结果。

运行框架和模型同样重要

关于 Claude Code,最常见的误解之一是认为它的能力完全由所使用的模型决定。团队会关注模型 benchmark,以及它在测试任务上的表现。但在实践中,围绕模型构建的生态,也就是运行框架,比单独的模型本身更能决定 Claude Code 的表现。

这个运行框架由五个扩展点构成:CLAUDE.md 文件、hooks、skills、plugins 和 MCP servers。每个扩展点承担不同功能。团队构建它们的顺序也很重要,因为每一层都会建立在前一层之上。另外还有两个能力:LSP integrations 和 子Agent,用来补全整体设置。下面我们会解释这些组件和能力分别做什么:

CLAUDE.md 文件应该最先建立。这些是 Claude 在每次会话开始时自动读取的上下文文件:根目录文件提供全局视角,子目录文件提供局部约定。它们为 Claude 提供完成任务所需的代码库知识。因为无论任务是什么,它们都会在每次会话中加载,所以应让它们聚焦于广泛适用的内容,避免变成性能负担。

Hooks 让设置能够自我改进。大多数团队会把 hooks 理解为防止 Claude 做错事的脚本,但它们更有价值的用途是持续改进。stop hook 可以在一次会话结束时回顾发生了什么,并在上下文仍然新鲜时建议更新 CLAUDE.md。start hook 可以动态加载团队特定上下文,让每个开发者无需手动配置,就能为自己的模块获得正确设置。对于 linting 和 formatting 这类自动检查,hooks 可以以确定性的方式强制执行规则,比依赖 Claude 记住某条指令更稳定,结果也更一致。

Skills 可以按需提供正确的专业知识,而不会让每次会话都变得臃肿。在拥有数十种任务类型的大型代码库中,并不是所有专业知识都需要出现在每次会话里。Skills 通过 progressive disclosure 解决这个问题,把专门的工作流和领域知识卸载出去,避免它们争抢上下文空间,只在任务需要时加载。例如,当 Claude 评估代码漏洞时加载 security 审查 skill;当代码变更后需要更新文档时加载 document processing skill。

Skills 也可以限定到特定路径,这样它们只会在代码库的相关部分激活。拥有 payments service 的团队可以把部署 skill 绑定到该目录,这样当有人在 monorepo 的其他位置工作时,它就不会自动加载。

Plugins 用来分发有效的配置。大型代码库的一个挑战是,好的设置可能只停留在少数人的经验里。plugin 可以把 skills、hooks 和 MCP 配置打包成一个可安装包。因此,新工程师第一天安装这个 plugin 后,就会立即拥有和已经使用 Claude 的同事相同的上下文和能力。plugin 更新也可以通过托管 marketplaces 在组织内分发。

例如,我们合作过的一家大型零售组织构建了一个 skill,把 Claude 连接到他们的内部 analytics 平台,让业务分析师无需离开自己的工作流就能拉取性能数据。他们在面向业务侧大规模推广之前,先把它作为 plugin 分发。

Language server protocol(LSP)integrations 让 Claude 拥有和开发者在 IDE 中一样的导航能力。大多数大型代码库的 IDE 中已经运行着 LSP,用来支持“go to definition”和“find all references”。把这个能力暴露给 Claude 后,它就能获得符号级精度:可以沿着函数调用跳到定义,跨文件追踪引用,并区分不同语言中同名的函数。没有它时,Claude 只能基于文本做模式匹配,可能会落到错误的符号上。我们合作过的一家企业软件公司,在推广 Claude Code 之前,就先在全组织部署了 LSP integrations,专门用于让 C 和 C++ 的导航在规模化场景下可靠运行。对于多语言代码库,这是最有价值的投入之一。

MCP servers 扩展了一切。MCP servers 是 Claude 连接内部工具、数据源和 API 的方式,这些资源通常是它无法直接访问的。最成熟的团队会构建 MCP servers,把结构化搜索暴露成 Claude 可以直接调用的工具。其他团队则把 Claude 连接到内部文档、ticketing systems 或 analytics platforms。

子Agent 把探索和编辑拆开。子Agent 是一个隔离的 Claude 实例,拥有自己的上下文窗口。它接收一个任务,完成工作,然后只把最终结果返回给父级实例。当运行框架搭好后,一些团队会启动一个只读 子Agent 来梳理某个子系统,并把发现写入文件,然后让主 Agent 在掌握完整图景后再进行编辑。

下表总结了每个组件的作用、加载时机,以及我们看到的最常见错误:

成功部署中的三种配置模式

如何为大型代码库配置 Claude Code,很大程度上取决于代码库本身的结构。不过,在我们观察到的部署中,有三种模式反复出现。

让代码库在规模化场景下可导航

Claude 在大型代码库中能提供多少帮助,受限于它能否找到正确上下文。每次会话加载太多上下文会降低性能,而上下文太少又会让 Claude 盲目摸索。最有效的部署会提前投入,让代码库对 Claude 来说更易读。以下几种模式反复出现:

• 保持 CLAUDE.md 文件精简并分层。Claude 在代码库中移动时,会累加加载这些文件:根目录文件提供全局视角,子目录文件提供局部约定。根目录文件应该只放指引和关键注意事项;其他内容很容易变成噪音。

• 在子目录中初始化,而不是在 repo 根目录中初始化。当 Claude 被限定在与任务真正相关的代码库部分时,效果最好。在 monorepo 中,这可能有点反直觉,因为工具链通常假设从根目录访问。但 Claude 会自动沿目录树向上查找,并加载沿途发现的每个 CLAUDE.md 文件,所以根级上下文不会丢失。

• 按子目录限定 test 和 lint 命令。当 Claude 只改了一个服务,却运行完整套件时,容易超时,并把上下文浪费在无关输出上。子目录级别的 CLAUDE.md 文件应该指定适用于该部分代码库的命令。这对面向服务的代码库很有效,因为每个目录都有自己的 test 和 build 命令。在有深层跨目录依赖的编译型语言 monorepo 中,按子目录限定会更难,可能需要项目特定的构建配置。

• 使用 .ignore 文件排除生成文件、构建产物和第三方代码。把 permissions.deny 规则提交到 .claude/settings.json 中,意味着这些排除项会纳入版本控制,所以团队中的每个开发者都能获得相同的降噪效果,而无需自己配置。在某些代码库中,生成文件本身就是开发工作的对象。负责代码生成器的开发者可以在本地设置中覆盖项目级排除规则,而不会影响团队其他成员。

• 当目录结构本身无法说明问题时,构建代码库地图。对于代码没有按常规目录结构集中组织的团队,可以在 repo 根目录放一个轻量级 Markdown 文件,列出每个顶层文件夹,并用一句话说明里面放了什么。这样 Claude 在打开文件之前,就有一个可以扫描的目录表。对于拥有数百个顶层文件夹的代码库,这种方式最好做成分层结构:根文件只描述最高层结构,子目录 CLAUDE.md 文件提供下一层细节,并在 Claude 沿目录树移动时按需加载。对于更简单的情况,使用 @-mention 指定 Claude 应该参考的具体文件或目录,也能起到同样作用。

• 运行 LSP servers,让 Claude 按符号搜索,而不是按字符串搜索。在大型代码库中 grep 一个常见函数名,可能返回成千上万个匹配项,Claude 会消耗上下文去打开文件判断哪些重要。LSP 只返回指向同一符号的引用,所以过滤会在 Claude 读取任何内容之前完成。要完成这项设置,需要安装对应语言的 code intelligence plugin 和相应的 language server binary;Claude Code 文档覆盖了可用 plugins 和故障排查。

一个注意点:确实存在一些边界情况,即使是分层 CLAUDE.md 方法也会失效。例如,拥有数十万个文件夹和数百万个文件的代码库,或者使用非 Git 版本控制的遗留系统。我们会在本系列后续文章中讨论这些挑战。

随着模型智能演进,主动维护 CLAUDE.md 文件

随着模型演进,为当前模型编写的指令可能会反过来妨碍未来模型。那些曾经引导 Claude 处理其不擅长模式的 CLAUDE.md 文件,在下一个模型发布后,可能变得不再必要,甚至成为限制。例如,一条 CLAUDE.md 规则要求 Claude 把每次 refactor 都拆成单文件变更,这可能曾经帮助早期模型保持方向,但会阻止更新模型进行它已经能很好处理的跨文件协同编辑。

为弥补特定模型限制而构建的 skills 和 hooks,不管限制来自模型推理能力,还是 Claude Code 自身工具能力,一旦这些限制不再存在,就会变成额外负担。例如,在 Perforce 代码库中,一个拦截文件写入以强制执行 p4 edit 的 hook,在 Claude Code 增加原生 Perforce mode 后就变得多余了。

团队应该预期每三到六个月做一次有意义的配置审查;但如果在重大模型发布后感觉性能进入平台期,也值得做一次审查。

为 Claude Code 管理和采用指定负责人

单靠技术配置无法推动采用。那些做对了的组织,也投入了组织层面的建设。

推广速度最快的 rollout,都是在开放大范围访问之前,就先投入了专门的基础设施建设。一个小团队,有时甚至只有一个人,会先把工具链打通,让开发者第一次接触 Claude 时,它就已经能融入现有开发流程。在一家公司里,几位工程师提前构建了一整套插件和 MCP,第一天就能使用。在另一家公司里,一个专门负责管理 AI 编程工具的完整团队,在 rollout 开始前就把基础设施准备好了。这两种情况下,开发者的第一次体验都是高效的,而不是令人沮丧的,后续采用也就自然扩散开来。

现在负责这类工作的团队,通常归在 developer experience 或 developer productivity 下面,这类职能一般负责新工程师入职和开发者工具建设。多个组织里正在出现一种新角色:Agent manager,也就是一种 PM/工程师混合型岗位,专门负责管理 Claude Code 生态。对于没有专门团队的组织,最低可行版本是设置一个 DRI:由一个人负责 Claude Code 配置,并有权决定 settings、permissions policy、plugin marketplace、CLAUDE.md 规范,同时负责持续保持这些内容更新。

自下而上的采用会带来热情,但如果没人集中沉淀有效做法,就容易变得碎片化。你需要有一个人或一个团队来整理并推广合适的 Claude Code 规范,例如标准化的 CLAUDE.md 层级,或精选的一组 skills 和 plugins。没有这项工作,知识就会停留在小圈子经验里,采用规模也会很快遇到瓶颈。

在大型组织里,尤其是受监管行业,治理问题会很早出现,例如:谁来控制哪些 skills 和 plugins 可用,如何避免成千上万名工程师各自重复构建同样的东西,如何确保 AI 生成的代码经过和人类编写代码相同的 审查 流程?为尽早解决这些问题,我们建议先从一组明确批准的 skills、必需的 code 审查 流程、以及受限的初始访问范围开始,等信心建立后再逐步扩大。

我们观察到,部署最顺畅的组织,都会很早建立跨职能工作组,把工程、信息安全和治理代表聚在一起,共同定义需求,并制定 rollout 路线图。

把这些模式应用到你的组织中

Claude Code 是围绕常规软件工程环境设计的:工程师是代码库的主要贡献者,repo 使用 Git,代码遵循标准目录结构。大多数大型代码库都符合这种模式,但非传统设置需要额外配置工作,例如包含大量二进制资源的游戏引擎、使用非常规版本控制的环境,或由非工程师参与贡献代码的代码库。我们的建议基于常规设置,上面描述的模式已经在许多客户中验证有效。剩余的复杂性,需要结合你的代码库、工具链和组织情况做具体判断。这也是 Anthropic 的 Applied AI 团队会直接与工程团队合作的地方:把这些模式转化为适合你们组织具体需求的实践。

开始使用 Claude Code for Enterprise。

致谢:特别感谢 Anthropic Applied AI 团队的 Alon Krifcher、Charmaine Lee、Chris Concannon、Harsh Patel、Henrique Savelli、Jason Schwartz、Jonah Dueck 和 Kirby Kohlmorgen,感谢他们分享大规模部署 Claude Code 的经验;也感谢 Zoox 的 Amit Navindgi 对本文提供反馈。

来源:https://claude.com/blog/how-claude-code-works-in-large-代码库s-best-practices-and-where-to-start