Claude Code 的底层运行机制
引言 在《Claude Code 高效使用指南》里,讲了 CLAUDE.md、Skills、Hooks、Subagents 这些上层扩展能力怎么配置和组合。 但你有没有想过一个问题:这些东西底下,Claude Code 到底是怎么跑起来的? 一个几百万行的 monorepo,Claude Code 怎么知道该读哪个文件?一个长会话跑了几百轮,为什么不会越来越慢、越来越贵?为什么 Claude Code、Codex 这些最火的 Agent 产品,不约而同都选了命令行? 这三个问题,指向同一个答案:Agent 的底层工程,才是真正拉开差距的地方。 这篇文章就把这三层机制拆开讲清楚。 一、大代码库:Claude Code 不靠索引,靠 Agentic Search 很多人第一反应是:大代码库是不是要先建索引、做向量化、上 RAG? Anthropic 给了一个很明确的答案:不是。 为什么索引方案在大代码库里容易失效 索引方案有一个致命的假设——代码是静态的。但大规模活跃代码库里,几千个工程师每天都在改代码:函数今天改名,模块明天迁移,旧服务后天删掉。如果索引管线跟不上,模型拿到的是旧世界的地图——它可能引用一个两周前已经改名的函数,也可能调一个上个 sprint 已经删掉的模块。 更麻烦的是,召回结果本身不会告诉你:“我过期了。” Agentic Search:像工程师一样边搜边读 Claude Code 的思路更像一个真实工程师的工作方式: 先看报错关键词 用 grep 找相关接口 读调用链上的关键文件 找到核心逻辑 看测试怎么覆盖 修改最小范围 跑对应测试 它不是在某个中心索引里检索答案,而是在开发者机器上的实时代码库里工作。用 Anthropic 的话说,这叫 Agentic Search——不是"先把答案搜出来给模型",而是让 Agent 自己根据当前任务,一步一步决定下一步该搜什么、读什么、验证什么。 大代码库的关键不是"看更多",而是"找得准" 很多人觉得大代码库需要更大的上下文窗口。窗口大当然有用,但真正的问题不是"放不下全部代码"——因为无论窗口多大,你都不应该把整个仓库塞进去。 真正的问题是:Claude Code 能不能在读很少文件的情况下,找到真正相关的那几个文件? 所以大代码库要做的是上下文治理: 该加载的规则提前加载 不相关的目录不要读 生成代码和构建产物要排除 测试命令要按子目录收敛 同名函数要靠 LSP 区分 大范围探索交给 subagent 太多上下文会降低性能,太少上下文会让 Claude 盲搜。 这句话很适合放到团队规范里。 ...