AIHero

    永远不要运行 Claude /init

    了解自动生成的 Claude.md 文件为何会损害编码智能体,以及如何用更好的方案提高性能并降低成本。

    Matt Pocock
    Matt Pocock
    本页目录

    如果正在使用 Claude Code 或其他编码智能体,可能会看到一个 init 命令,它承诺创建一个 CLAUDE.md or agents.md 文件,用来记录代码库相关文档。

    永远不要运行它。如果发现自动生成的文件,请删除。

    它创建的文件会消耗 token、分散智能体注意力,而且过时速度比炎热天气中的梨腐烂还快。 研究已经证实这一点:不必要的上下文文件会让任务更难,而不是更容易。

    智能体如何使用上下文

    智能体的 上下文窗口 会被划分为多个阶段:

    Context Window Allocation

    阶段用途灵活性
    系统提示词LLM 指令、MCP Server、系统工具、 CLAUDE.md content不灵活,启动时固定
    探索理解代码库中的内容非常灵活
    实现编写和修改文件非常灵活
    测试运行测试、调试、反馈循环非常灵活,遇到问题时可能急剧膨胀

    探索、实现和测试都是灵活的。简单任务只需少量探索,没有 bug 的实现也只需少量测试。

    但是, 系统提示词 is 会在智能体启动时立即固定。你的 CLAUDE.md 中的所有内容都会使其膨胀,给真正执行工作的阶段留下更少空间。

    缩小系统提示词可以为实际工作提供更多空间,并降低成本。

    指令预算

    LLM 不仅有上下文窗口,还有 指令预算,也就是一次能够遵循的指令数量上限。

    你的 CLAUDE.md 中的每句话都是一条指令。现实中,LLM 大约能处理 300~400 条指令 。更大的模型可能能达到 500 条。

    如果向 CLAUDE.md塞入数十条无关指令,智能体还没开始处理任务,预算就已经被消耗了。

    全局性问题

    一个常见建议是:如果智能体做了你不喜欢的事情,就在 CLAUDE.md.

    中添加规则。也许它使用 npm 而不是 pnpm,也许它采用了你讨厌的 React 模式,于是你加上一行。

    问题在于 CLAUDE.md is global。每条指令都会应用于每个会话:前端、后端、文档、数据库,全部如此。

    Different Request Types

    这条 React 规则对前端会话有用,但下一个会话可能只处理后端,它就完全无关;再下一个会话可能处理文档。

    无论是否相关,新增的每一行都会在所有会话中持续累积成本。

    Init 实际生成什么

    Init 命令往往生成相同类别的内容,而这些内容全都有问题。

    命令清单。 Init 喜欢把 package.json 中的每个脚本都倒进文件。这些内容很容易发现,智能体只需读取 package.json。你却在为重复真实来源的内容支付 token。

    架构描述。 框架名称、渲染模式、编译器设置。智能体可以从配置文件和 import 中发现这些内容。一个 react-router.config 文件已经告诉它正在使用 React Router,一个 effect import 则告诉它正在使用 Effect。

    文件和服务引用。 这是最糟糕的一类。Init 会记录具体文件、服务及其关系。一旦重命名文件、移动服务或修改实现,文档就会出错,并开始 主动误导 智能体。

    实现模式。 具体功能如何工作、在哪里使用什么模式。这些信息不仅可以从代码中发现,也只与少部分会话相关。大多数任务不会涉及大多数模式。

    贯穿始终的问题是:Init 生成的所有内容,要么很容易从源码发现,要么迟早过时。文件系统 is 本身就是文档。如果结构良好,智能体会从真实来源准确理解架构,而不是依赖腐化的摘要。

    解决方案

    信任探索步骤

    现代编码智能体都有探索阶段。修改前,它会读取文件、搜索代码库,并针对当前任务即时构建上下文。

    这严格优于静态的 CLAUDE.md ,因为它只加载相关内容,并始终反映代码当前状态。

    使用 Skills 进行引导

    确实存在 is 一些值得提供给智能体的有用引导。也许你希望它优先用 reducer 处理复杂 UI 状态,或遵循特定测试模式。

    这些内容应该放进 skills:可发现的指令,由智能体在相关时加载,而不必在每个会话中消耗指令预算。

    让 CLAUDE.md 几乎保持为空

    如果基础设置不属于 CLAUDE.md,引导内容又属于 Skills,那么还剩什么?

    几乎什么都不剩。我的整个 CLAUDE.md 只有:

    you are on WSL on Windows

    只有六个单词。之所以保留,是因为 WSL 存在智能体无法自行发现、并不直观的路径解析问题。标准应该是:只包含同时满足 undiscoverable and 全局相关.

    结论

    永远不要运行 Init。它生成的文件会把无关信息倒进全局上下文,膨胀系统提示词、浪费指令预算,并在代码变化的那一刻开始腐化。

    你要么持续消耗 token 维护它,要么最终删除它。不如直接跳到删除这一步。

    信任探索步骤,使用 Skills 进行引导,并让 CLAUDE.md 几乎保持为空。