返回 FEED
AGENT2026-05-15

Claude Code 大型代码库最佳实践:Agentic Search 与五层 Harness

Claude Code 正在生产环境中运行:数百万行的 monorepo、数十年的遗留系统、跨几十个仓库的分布式架构、拥有数千开发者的组织。这些环境呈现 smaller、更简单代码库没有的挑战——无论是每个子目录不同的构建命令,还是没有共享根的遗留代码。

这篇文章涵盖 Anthropic 观察到的成功规模化采用 Claude Code 的模式。

Claude Code 如何导航大型代码库

Claude Code 像软件工程师一样导航代码库:遍历文件系统、读取文件、用 grep 精确查找所需、跟随跨代码库的引用。它在开发者机器上本地操作,不需要构建、维护或上传代码库索引到服务器。

AI 编码工具曾依赖基于 RAG 的检索——嵌入整个代码库并在查询时检索相关块。大规模时,这些系统会失败,因为嵌入 pipeline 跟不上活跃的工程团队。开发者查询索引时,它反映的是代码库数天、数周甚至数小时前的状态。检索返回团队两周前重命名的函数,或引用上个 sprint 删除的模块,没有任何指示表明它们已过时。

Agentic Search 避免了这些失败模式。 没有嵌入 pipeline 或中央索引需要维护,因为数千工程师提交新代码。每个开发者的实例从 live codebase 工作。

但这种方法有 tradeoff:Claude 有足够 starting context 知道往哪看时效果最好。这意味着 Claude 导航的质量取决于代码库设置得如何,用 CLAUDE.md 文件和 Skills 分层上下文。如果让它在十亿行代码库中查找模糊模式的所有实例,你会在工作开始前就 hit 上下文窗口限制。投资代码库设置的团队看到更好结果。

Harness 与模型同等重要

关于 Claude Code 最常见的误解是其能力仅由使用的模型定义。团队关注模型的 benchmark 和测试任务表现。实践中,围绕模型构建的生态系统——harness——比模型单独决定 Claude Code 的表现。

Harness 由五个扩展点构建,每个服务不同功能。团队构建它们的顺序很重要,因为每一层建立在之前的基础上。两个额外能力——LSP 集成和子代理——完善了设置。

五层 Harness

CLAUDE.md 文件先来。 这些是 Claude 在每个会话开始时自动读取的上下文文件:根文件给 big picture,子目录文件给本地约定。它们给 Claude 做好任何事所需的代码库知识。因为它们在每个会话中加载无论任务是什么,保持它们专注于广泛适用的内容可防止它们成为性能拖累。

Hooks 让设置自改进。 大多数团队认为 hooks 是阻止 Claude 做错事的脚本,但它们更有价值的用途是持续改进。Stop hook 可以在上下文 fresh 时反思会话中发生了什么并提议 CLAUDE.md 更新。Start hook 可以动态加载团队特定上下文,让每个开发者无需手动配置就获得其模块的正确设置。对于 linting 和 formatting 等自动化检查,hooks 确定性地强制执行规则,产生比依赖 Claude 记住指令更一致的结果。

Skills 让正确的 expertise 按需可用而不膨胀每个会话。 大型代码库中有数十种任务类型,不是所有 expertise 都需要在每个会话中出现。Skills 通过 progressive disclosure 解决这个问题,卸载否则会在上下文空间中竞争的专业工作流和领域知识,仅在任务调用时加载。例如,security review skill 在 Claude 评估代码漏洞时加载,document processing skill 在代码变更需要更新文档时加载。

Skills 还可以限定到特定路径,只在代码库的相关部分激活。拥有支付服务的团队可以将 deployment skill 绑定到该目录,这样当有人在 monorepo 的其他地方工作时它永远不会自动加载。

Plugins 分发有效的设置。 大型代码库的一个挑战是好的设置可能保持 tribal。Plugin 将 skills、hooks 和 MCP 配置打包成单一可安装包,新工程师第一天安装时就立即拥有与已使用 Claude 的人相同的上下文和能力。Plugin 更新可以通过 managed marketplaces 在整个组织分发。

例如,Anthropic 合作的一家大型零售组织构建了连接 Claude 到内部分析平台的 skill,业务分析师可以在不离开工作流的情况下拉取性能数据。他们在向业务广泛推广前将其作为 plugin 分发。

LSP 集成给 Claude 开发者在 IDE 中拥有的相同导航能力。 大多数大型代码库 IDE 已经运行 LSP,驱动"跳转到定义"和"查找所有引用"。将其暴露给 Claude 给它符号级精度:可以跟随函数调用到定义、跨文件跟踪引用、区分不同语言中同名函数。没有它,Claude 在文本上模式匹配,可能落在错误符号上。

一家 Anthropic 合作的企业软件公司在 Claude Code 推广前 org-wide 部署了 LSP 集成,专门为了让 C 和 C++ 导航在大规模可靠。对于多语言代码库,这是最高价值投资之一。

MCP 服务器扩展一切。 MCP 服务器是 Claude 连接到无法触及的内部工具、数据源和 API 的方式。最复杂的团队构建了暴露结构化搜索作为 Claude 可以直接调用的工具的 MCP 服务器。其他将 Claude 连接到内部文档、工单系统或分析平台。

子代理隔离探索与编辑。 子代理是具有自己上下文窗口的隔离 Claude 实例,接受任务、完成工作,只将最终结果返回给父代理。Harness 就位后,一些团队启动 read-only 子代理来映射子系统并将发现写入文件,然后让主代理在完整 picture 下编辑。

组件是什么何时加载最适合常见误区
CLAUDE.mdClaude 自动读取的上下文文件每个会话项目特定约定、代码库知识把可重用 expertise 放在这里而非 skill
Hooks关键时刻运行的脚本事件触发自动化一致行为、捕获会话学习用 prompts 做应该自动运行的事
Skills特定任务类型的打包指令按需,相关时跨会话和项目的可重用 expertise把所有东西加载到 CLAUDE.md 中
Plugins打包的 skills、hooks、MCP 配置配置后始终可用跨组织分发工作设置让好的设置保持 tribal
LSP通过语言特定服务器的实时代码智能配置后始终可用符号级导航和自动错误检测假设它是自动的
MCP 服务器连接到外部工具和数据配置后始终可用给 Claude 访问无法触及的内部工具在基础工作前构建 MCP 连接
子代理特定任务的独立 Claude 实例调用时分离探索与编辑、并行工作在同一会话中运行探索和编辑

成功部署的三个配置模式

让代码库在规模上可导航

Claude 在大型代码库中帮助的能力受其找到正确上下文的能力限制。太多上下文加载到每个会话降低性能,太少上下文让 Claude 盲目导航。最有效的部署 upfront 投资让代码库对 Claude legible。

  • 保持 CLAUDE.md 文件精简分层。 Claude 在代码库中移动时 additive 加载它们:根文件给 big picture,子目录文件给本地约定。根文件应只放指针和关键 gotchas;其他一切 drift 成噪音。
  • 在子目录初始化,不在 repo 根。 Claude 在范围限定到与任务实际相关的代码库部分时工作最好。在 monorepos 中这可能感觉 counterintuitive,因为工具通常假设根访问,但 Claude 自动向上遍历目录树并加载找到的每个 CLAUDE.md 文件,所以根级上下文永远不会丢失。
  • 每个子目录限定测试和 lint 命令。 Claude 改变一个服务时运行完整套件导致超时,浪费上下文在无关输出上。子目录级别的 CLAUDE.md 文件应指定适用于代码库该部分的命令。这对每个目录有自己的测试和构建命令的服务导向代码库工作良好。编译语言 monorepos 有深层跨目录依赖时,每子目录限定更难实现,可能需要项目特定构建配置。
  • .ignore 文件排除生成文件、构建产物和第三方代码。.claude/settings.json 中提交 permissions.deny 规则意味着排除是版本控制的,团队每个开发者获得相同的 noise reduction 而无需自己配置。某些代码库中生成文件本身是开发工作的主题。开发代码生成器的开发者可以在本地设置中覆盖项目级排除而不影响团队其他人。
  • 目录结构不工作时构建代码库地图。 对于代码未整合在常规目录结构中的组织,repo 根部的轻量 markdown 文件列出每个顶级文件夹并一行描述其中内容,给 Claude 一个可以扫描的目录表。对于数百个顶级文件夹的代码库,这最好作为分层方法:根文件只描述最高级结构,子目录 CLAUDE.md 文件提供下一级细节,Claude 在树中移动时按需加载。更简单的情况,@-mention 特定文件或目录可以达到同样效果。
  • 运行 LSP 服务器让 Claude 按符号而非字符串搜索。 在大型代码库中 grep 常见函数名返回数千匹配,Claude burn 上下文打开文件 figuring out 哪个重要。LSP 只返回指向同一符号的引用,所以过滤在 Claude 读取任何内容前发生。设置需要安装语言的 code intelligence plugin 和对应语言服务器二进制文件;Claude Code 文档涵盖可用插件和故障排除。

主动维护 CLAUDE.md 文件随模型智能进化

模型进化时,为当前模型写的指令可能对未来的模型起反作用。引导 Claude 通过它过去 struggle 的模式的 CLAUDE.md 规则,在下个模型发布时可能变得不必要或 actively constraining。例如,告诉 Claude 将每次重构拆分为单文件变更的规则可能帮助早期模型保持正轨,但会阻止新版本进行它处理良好的协调跨文件编辑。

为补偿特定模型限制(无论是模型推理还是 Claude Code 自身工具)而构建的 Skills 和 Hooks,一旦限制不再存在就变成 overhead。例如,在 Perforce 代码库中拦截文件写入以强制执行 p4 edit 的 hook,在 Claude Code 添加原生 Perforce 模式后变得冗余。

团队应预期每三到六个月做一次有意义的配置审查, 但 major model releases 后性能感觉 plateaued 时也值得做一次。

为 Claude Code 管理和采用分配所有权

技术配置 alone 不驱动采用。做对的组织也投资了组织层。

推广最快的有广泛访问前的专门基础设施投资。小团队——有时甚至一个人——在开发者首次接触前就接好工具让 Claude fit 开发者工作流。一家公司,几个工程师构建了第一天就可用的 plugin 和 MCP 套件。另一家,整个专注管理 AI 编码工具的团队在推广开始前就拥有基础设施。两种情况下,开发者的首次体验都是 productive 而非 frustrating,采用从此 spread。

今天做这项工作的团队倾向于坐在 developer experience 或 developer productivity 下——通常负责 onboarding 新工程师和构建开发者工具的职能。几个组织中 emerging 的角色是 Agent Manager:混合 PM/工程师职能,专门管理 Claude Code 生态系统。没有专门团队的组织,最小可行版本是 DRI:一个人拥有 Claude Code 配置的所有权、对设置/权限政策/plugin marketplace/CLAUDE.md 约定的决策权、以及保持它们 current 的责任。

Bottoms-up 采用产生热情,但没有 centralize what works 的人时会 fragment。你需要个人或团队组装和 evangelize 正确的 Claude Code 约定(如标准化的 CLAUDE.md 层次结构或 curated skills 和 plugins 集)。没有这项工作,知识将保持 tribal,采用将 plateau。

大型组织中,特别是监管行业,治理问题 early 出现:谁控制哪些 skills 和 plugins 可用、如何防止数千工程师独立重建相同的东西、如何确保 AI 生成代码通过与人类生成代码相同的 review 流程?建议 early on 从预定义的 approved skills 集、强制 code review 流程和有限初始访问开始,随信心建立而扩展。

Anthropic 观察到最顺利的部署发生在组织 early 建立跨职能工作组——将工程、信息安全和治理代表聚集在一起共同定义需求并构建推广路线图。

应用到你的组织

Claude Code 围绕 conventional 软件工程环境设计:工程师是主要代码库贡献者、repo 使用 Git、代码遵循标准目录结构。大多数大型代码库 fit 这个模式,但非传统设置如带大型二进制资产的游戏引擎、非常规版本控制的环境、或非工程师贡献代码库需要额外配置工作。指导假设 conventional 设置,描述的模式在 Anthropic 的许多客户中有效。任何剩余复杂性需要特定于代码库、工具和组织判断。Anthropic 的 Applied AI 团队直接与工程团队合作将这些模式转化为组织的特定需求。