首页 / 文章 / 如何结构化CLAUDE.md、技能和Agent配置
← 返回
AI技术

如何结构化CLAUDE.md、技能和Agent配置

✍️ zhirenhun 📅 2026/7/26 👁 143 阅读 ⏱ 7 分钟
如何结构化CLAUDE.md、技能和Agent配置

如何结构化CLAUDE.md、技能和Agent配置

原文:https://dev.to/hash01/how-to-structure-claudemd-skills-and-agents-2p7a

嗨,各位朋友

这里有一个小技巧,适合你在真实代码库中配置 Claude Code(或任何编程代理)时使用——当我发现我们的代理文档竟然在主动生成有问题的代码时,这招帮了大忙。

问题所在

大多数项目最终会包含四类指令文件:

  • `CLAUDE.md` / `AGENTS.md` 文件
  • skills(`.claude/skills/...`)
  • agent 定义(`.claude/agents/...`)
  • 大型参考文档(UI 库 API、内部工具集等)
  • 而同样的知识会被复制粘贴到所有这些文件中。每个副本各自漂移。当我最终对照实际代码逐一核对我们文档中的每一个声明时,情况比我预想的更糟:

  • 样式文档展示了一种 CSS-modules 模式,但生成的 class 名称与构建配置完全不匹配。任何遵循该文档的代理都会产出有问题的样式。
  • 规范的测试模板在 `beforeAll` 中设置了 mock,但测试设置文件会在每个测试后恢复所有 mock。于是 mock 在第一个测试后就悄然失效。
  • 同一个模板渲染了一个数据获取组件,却没有提供它所需的 provider。渲染时即刻崩溃。
  • “推荐”的测试辅助函数在 50 个真实测试文件中只被 1 个使用。
  • 文档看起来完整。但它们自信地错了。而每份错误的文档都会在你代理遇到问题时,耗费你成千上万的 token 用于调试。

    经验法则

    关键在于它何时加载,以及谁需要它:

    形式加载时机应拥有的内容
    CLAUDE.md / AGENTS.md始终加载,每次会话适用于每次编辑的通用规则
    Skill按需加载,按任务类型深层的“如何做”知识
    Agent当被委派时加载工作流和关卡,而非知识
    Hook由代码强制加载绝不能跳过的规则

    用四个问题来决定每段内容的归属:

  • 是否适用于文件夹内的所有变更? → 放到 `CLAUDE.md`:导入风格、命名、命令、项目结构。保持简短,因为它每次会话都要消耗 token 租金。
  • 是否仅在某类任务中需要,但内容较深? → 放到 skill:样式机制、数据获取模式、测试配方。闲置时零成本,只加载描述直到被触发。
  • 是一个角色或流程,而非知识? → 放到 agent:工作流顺序、完成定义、要加载哪个 skill。保持 agent 精简,深埋在一个 agent 文件中的知识对其他人不可见。
  • 绝不可跳过? → 放到 hook。指令可以被合理忽视,但代码不能。用 hook 运行格式化器,而不是用一句“请礼貌地”要求。
  • 阻止腐化的一条规则

    每个事实只存在于一个文件中。其他所有文件都链接到它。

    我们文档的漂移恰恰是因为一个测试模板被粘贴到三个地方,然后各自演化。清理之后:

    CLAUDE.md / AGENTS.md → 最多三行规则 + 链接到 skill

    skill → 深层模式,引用真实源文件

    agent → 工作流 + “运行检查命令并观察其通过”

    参考文档 → 重型 API 参考的唯一归宿

    所以我们可以用一句话定义边界:如果一个模式需要超过几行,就放到 skill 中,CLAUDE.md 仅保留链接。

    像验证代码一样验证你的文档

    这一步很有趣。文档声明是可测试的,所以测试它们:

    首先,在信任之前先 grep。你文档中的每个示例都应该在代码库中存在。我们的就不满足:

    # 文档中的“最佳实践” vs 现实
    grep -rl "prefetchQuery" src/ | wc -l      # 0 次使用
    grep -rl "recommendedHelper" src/ | wc -l  # 50 个测试文件中只有 1 个使用
    

    然后,用一个子代理运行检索测试。只给它文档文件,不给仓库访问权限,让它回答真实的实现问题:

    “为一个数据获取组件编写测试。”

    “这个组件来自哪个包?”

    “全局 store 在哪里?”

    对照代码库给答案打分。如果遵循你文档的代理写出的代码会失败,那么你的文档没通过测试——在合并前修复它们。我们用这种方法捕获了所有回归,没有让任何人为此浪费一次调试会话。

    取得的成果

  • 每个典型特性任务约减少 ~11% 的上下文,常驻内存占用更轻量
  • 一个约定变更现在只需修改 1 个文件,而非 3 个
  • 最重要的:文档不再生成有问题的样式和失败的测试——以前每次代理踩到这些坑,都要花费数千 token 进行调试
  • 这个例子说明:代理文档是一个具有加载语义的系统,而不是维基百科——将每个事实放到与其加载模型匹配的位置,每个事实只有一个主文件,并且像测试代码一样测试文档。

    希望有用!

    哈希

    ——

    🧑‍💻

    zhirenhun

    一个热爱技术的程序员,喜欢分享前沿AI知识和开发经验。

    AI agent
    ← 上一篇
    面向AI Agent的双层记忆架构:无需Pinecone,本地向量搜索如何扩展至14,726条记忆
    下一篇 →
    Claude Code 生产环境成本控制:Token 预算、缓存策略以及计费仪表盘隐藏的信息

    📌 相关推荐

    停止相信仅文本代理排行榜:来自 Cua-Bench 和 Factorio 的教训
    2026/8/26
    Agent Memory 有两种不同含义,回答引擎给出的却是错误的那一种
    2026/8/26
    LLM的止境:AI辅助VAPT流水线的确定性评分
    2026/8/22
    ← 返回文章列表