ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Claude Code 最佳实践:用 CLAUDE.md、MCP、subagents 与 hooks 搭一套可复用的项目级配置

Claude Code 最佳实践:用 CLAUDE.md、MCP、subagents 与 hooks 搭一套可复用的项目级配置 1. 为什么你的 Claude Code 总是“聊着聊着就变笨”Claude Code 是一个代理式编码环境它能读文件、跑命令、改代码甚至在你离开时自主推进任务。但很多人用了一周后发现刚开始它像个靠谱的结对程序员聊到后面就开始忘指令、改错文件、重复犯同一个错。这不是模型退化而是 context window 被塞满了。Claude Code 的 context 保存整个对话每条消息、它读过的每个文件、每条命令输出。一次调试会话或代码库探索就能烧掉几万 token。当 context 接近上限模型会开始“遗忘”早期指令错误率明显上升。所以工程化落地的核心不是写更长的提示词而是把持久上下文、外部工具、任务隔离、确定性校验这四件事拆开管理。这套配置对应四个机制CLAUDE.md 定义项目级持久上下文MCP 接入外部工具subagents 把重探索任务隔离到独立 contexthooks 把必须每次都发生的校验固化成确定性脚本。下面我给出一套可以直接复制、逐项验证的项目级配置并用 TaoToken 统一 Key 和 API 通道完成接入避免在多个环境里反复切换凭证。适合谁已经在用 Claude Code 但觉得“时好时坏”的开发者想把 Claude Code 接进团队工作流的 Tech Lead以及准备把编码 Agent 纳入 CI 的工程团队。整套配置大约 30 分钟能跑通之后每个新项目复用成本接近零。2. 前置准备用 TaoToken 统一 Key 与 API 通道在写任何配置文件之前先把接入通道固定下来。Claude Code 需要的是 Anthropic 兼容的 API 端点TaoToken 提供统一的 Key 和 API 通道这样你在本地、CI、多台机器上用的是同一套凭证不用每个环境单独配。第一步去控制台创建 API Key。打开 https://taotoken.net/console 登录后在 API Keys 页面新建一个 Key复制保存。注意 Key 只在创建时完整显示一次。第二步确认你要用的模型通道。如果你主要做长上下文编码和 Agent 任务建议先看 Coding Plan 的额度与模型说明https://taotoken.net/coding-plan 。想先验证模型对话是否通可以用模型对话页面https://taotoken.net/models 。第三步把 Key 写进环境变量不要硬编码进任何提交到 git 的文件。Linux/macOS 下export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的TaoTokenKeyWindows PowerShell$env:ANTHROPIC_BASE_URLhttps://taotoken.net/api $env:ANTHROPIC_API_KEYsk-你的TaoTokenKey注意ANTHROPIC_BASE_URL 只写到 /api不要在后面拼具体路径。Claude Code 会自己拼接 /v1/messages 等端点。如果你希望这些变量在每次开终端时自动生效把它们写进 ~/.zshrc 或 ~/.bashrc。团队场景下把 Key 放进 CI 的 Secret 管理本地用 .env 并加入 .gitignore。这一步做完先别急着配 CLAUDE.md先验证通道是通的否则后面所有配置出问题你分不清是配置错还是通道错。3. 可复制配置CLAUDE.md 骨架 MCP hooks subagents3.1 CLAUDE.md 骨架只写 Claude 猜不到的东西CLAUDE.md 在每个会话开始时被读取所以它必须短。判断标准只有一条删掉这一行Claude 会不会犯错不会就删。膨胀的 CLAUDE.md 会让 Claude 忽略你真正的指令。在项目根目录运行/init生成初始版本然后按下面骨架精简# 项目上下文 - 这是一个 Node.js TypeScript 的 API 服务包管理器用 pnpm - 入口在 src/server.ts路由在 src/routes/数据访问在 src/db/ # 代码风格 - 使用 ES modulesimport/export不用 CommonJS - 导入尽量解构import { foo } from bar - 所有导出函数必须有显式返回类型 # 工作流 - 改完一系列代码后必须跑 pnpm typecheck - 优先跑单个测试文件不要每次跑全量测试 - 提交信息用 conventional commits 格式 # 验证要求 - 实现功能后必须运行相关测试并贴出结果 - 修复 bug 时先写一个能复现的失败测试 # 压缩保留项 - When compacting, always preserve the full list of modified files and any test commands几个关键点。第一# 验证要求这一段是最高杠杆的给 Claude 一种自己验证工作的方式它的表现会显著提升。没有成功标准它会产出看起来对但实际不工作的代码。第二最后一行压缩指令能保证长会话自动压缩时关键上下文不丢。第三用path/to/import可以拆分文件See README.md for project overview and package.json for available npm commands. - Git workflow: docs/git-instructions.mdCLAUDE.md 可以放在多个位置~/.claude/CLAUDE.md对所有会话生效./CLAUDE.md提交进 git 给团队共享./CLAUDE.local.md放个人笔记并加进 .gitignore。monorepo 里父目录和子目录的 CLAUDE.md 会被自动拉入。3.2 MCP 配置接入外部工具MCP 让 Claude 能查数据库、读 issue 跟踪器、拉设计稿。用命令行添加claude mcp add github -- npx -y modelcontextprotocol/server-github claude mcp add postgres -- npx -y modelcontextprotocol/server-postgres postgresql://localhost/mydb添加后运行claude mcp list确认已注册。MCP 工具会出现在 Claude 的可用工具列表里你可以直接说“从 issue 跟踪器拉取 #123 并实现它”。注意不要把 MCP 直连到生产数据库。用只读账号或本地副本避免 Agent 在探索时执行写操作。3.3 hooks 配置把必须发生的校验固化hooks 和 CLAUDE.md 指令的区别是确定性hooks 保证执行指令只是建议。在.claude/settings.json里配置{ hooks: { PostToolUse: [ { matcher: Edit|Write, hooks: [ { type: command, command: pnpm eslint --fix $(echo $CLAUDE_FILE_PATHS | tr , ) } ] } ], PreToolUse: [ { matcher: Write, hooks: [ { type: command, command: echo $CLAUDE_FILE_PATHS | grep -q migrations/ exit 2 || exit 0 } ] } ] } }第一个 hook 在每次文件编辑后自动跑 eslint 修复。第二个 hook 阻止写入 migrations 目录exit 2表示阻止操作并把原因反馈给 Claude。运行/hooks可以浏览当前生效的配置。你也可以直接让 Claude 帮你写 hook比如提示“写一个在每次文件编辑后运行 eslint 的 hook”它会生成配置片段。3.4 subagents 配置隔离重探索任务subagents 在自己的 context 里运行有独立的工具权限。当 Claude 需要读几十个文件来调查某个问题时用 subagent 可以避免主对话被文件内容塞满。在.claude/agents/下创建security-reviewer.md--- name: security-reviewer description: Reviews code for security vulnerabilities tools: Read, Grep, Glob, Bash model: opus --- 你是一名资深安全工程师。审查代码中的 - 注入漏洞SQL、XSS、命令注入 - 认证与授权缺陷 - 代码中的密钥或凭证 - 不安全的数据处理 给出具体行号和修复建议。使用时明确告诉 Claude“使用 subagent 审查这段代码的安全问题。” 实测下来把代码库调查委托给 subagent 后主对话的 context 消耗能降一个数量级长任务的成功率明显提高。4. 逐项验证确认每个配置真的生效配置写完必须逐项验证否则你只是写了一堆看起来对的文件。先验证 API 通道。用非交互模式跑一条最简单的请求claude -p Explain what this project does --output-format json如果返回结构化 JSON 且没有认证错误说明 TaoToken 通道正常。想进一步确认模型可用性去 https://taotoken.net/models 做一次对话验证。验证 CLAUDE.md 是否被加载。在项目里问 Claude“这个项目用什么包管理器改完代码要跑什么命令” 如果它能准确回答 pnpm 和 typecheck说明 CLAUDE.md 生效了。如果答错检查文件是否在项目根目录、命名是否为 CLAUDE.md。验证 MCP。运行claude mcp list然后让 Claude “列出 GitHub 上最近的三个 issue”。如果它能调用 MCP 工具返回结果说明接入成功。验证 hooks。随便改一个文件观察终端是否自动跑了 eslint。再尝试让 Claude 写一个 migrations 目录下的文件应该被阻止并给出原因。验证 subagents。让 Claude “使用 subagent 调查认证系统如何处理 token 刷新”观察它是否启动独立 context 并只返回摘要。验证非交互模式与扇出。这是把 Claude Code 接进 CI 的关键for file in $(cat files.txt); do claude -p Migrate $file from React to Vue. Return OK or FAIL. \ --allowedTools Edit,Bash(git commit *) done先用前 2-3 个文件试跑根据出错情况精化提示再跑全量。--allowedTools限制无人值守时 Claude 能做什么这个参数在批量场景下很重要。5. 本篇常见错排查报错401 Unauthorized 或 authentication_error。检查 ANTHROPIC_API_KEY 是否完整复制有没有多余空格。确认 ANTHROPIC_BASE_URL 是https://taotoken.net/api没有多余路径。如果 Key 是在别的环境创建的确认它没有过期或被删除。需要重新生成就去 https://taotoken.net/api-keys 。报错model not found 或 404。通常是 BASE_URL 拼错或者模型名不在当前通道支持范围内。先确认通道再检查模型名。接入细节参考 https://taotoken.net/doc 。Claude 不遵守 CLAUDE.md 里的规则。先看文件是不是太长。如果 Claude 已经在没有指令的情况下正确做某事删掉那行或转成 hook。如果某条规则反复被忽略加“IMPORTANT”或“YOU MUST”强调或者检查措辞是否模糊。像对待代码一样对待 CLAUDE.md出错时审查定期修剪。hooks 没触发。检查.claude/settings.json的 JSON 格式是否合法matcher 是否匹配到实际工具名。运行/hooks看配置是否被识别。hook 命令里的环境变量名要确认正确。context 很快被填满Claude 开始犯错。在不相关任务之间运行/clear。如果同一个问题改正了两次以上context 已经被失败方法污染/clear后用更具体的提示重开。长会话里用/compact Focus on the API changes控制压缩重点。快速问题用/btw答案不会进入对话历史。subagent 没有按预期隔离。确认.claude/agents/下的文件 frontmatter 格式正确name 和 description 都填了。调用时要明确说“使用 subagent”否则 Claude 可能直接在主对话里做。批量扇出时部分文件失败。先用前几个文件的结果精化提示词再跑全量。检查--allowedTools是否给了必要权限但不要给过宽权限。开发期加--verbose调试生产关掉。6. 把配置沉淀成团队资产这套配置真正的价值在于复用。CLAUDE.md 提交进 git团队每个人拉下来就有一致的项目上下文。hooks 和 subagents 放在.claude/目录一起提交新人入职当天就能用上确定性校验和隔离调查。MCP 配置如果涉及凭证用环境变量引用不要写死。长期跑编码和 Agent 任务的话建议用 Coding Plan 统一管理额度避免在多个 Key 之间切换https://taotoken.net/coding-plan 。接入过程中遇到认证或端点问题先查接入文档 https://taotoken.net/doc 再对照第 5 节的排查清单。需要新建或轮换 Key 时去 https://taotoken.net/api-keys 。最后一条经验不要一次性把所有机制都开满。先把 CLAUDE.md 和验证要求跑顺再加 hooks最后上 subagents 和扇出。每加一层都单独验证出问题时你才知道是哪一层引入的。
返回列表