1. 为什么你的 Claude Code 总是“聊着聊着就变笨”
Claude Code 是一个代理式编码环境,它能读文件、跑命令、改代码,甚至在你离开时自主推进任务。但很多人用了一周后发现:刚开始它像个靠谱的结对程序员,聊到后面就开始忘指令、改错文件、重复犯同一个错。这不是模型退化,而是 context window 被塞满了。
Claude Code 的 context 保存整个对话:每条消息、它读过的每个文件、每条命令输出。一次调试会话或代码库探索就能烧掉几万 token。当 context 接近上限,模型会开始“遗忘”早期指令,错误率明显上升。所以工程化落地的核心不是写更长的提示词,而是把持久上下文、外部工具、任务隔离、确定性校验这四件事拆开管理。
这套配置对应四个机制:CLAUDE.md 定义项目级持久上下文,MCP 接入外部工具,subagents 把重探索任务隔离到独立 context,hooks 把必须每次都发生的校验固化成确定性脚本。下面我给出一套可以直接复制、逐项验证的项目级配置,并用 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_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="sk-你的TaoTokenKey"Windows PowerShell:
$env:ANTHROPIC_BASE_URL="https://taotoken.net/api" $env:ANTHROPIC_API_KEY="sk-你的TaoTokenKey"注意:ANTHROPIC_BASE_URL 只写到 /api,不要在后面拼具体路径。Claude Code 会自己拼接 /v1/messages 等端点。
如果你希望这些变量在每次开终端时自动生效,把它们写进 ~/.zshrc 或 ~/.bashrc。团队场景下,把 Key 放进 CI 的 Secret 管理,本地用 .env 并加入 .gitignore。
这一步做完先别急着配 CLAUDE.md,先验证通道是通的,否则后面所有配置出问题你分不清是配置错还是通道错。
3. 可复制配置:CLAUDE.md 骨架 + MCP + hooks + subagents
3.1 CLAUDE.md 骨架:只写 Claude 猜不到的东西
CLAUDE.md 在每个会话开始时被读取,所以它必须短。判断标准只有一条:删掉这一行,Claude 会不会犯错?不会就删。膨胀的 CLAUDE.md 会让 Claude 忽略你真正的指令。
在项目根目录运行/init生成初始版本,然后按下面骨架精简:
# 项目上下文 - 这是一个 Node.js + TypeScript 的 API 服务,包管理器用 pnpm - 入口在 src/server.ts,路由在 src/routes/,数据访问在 src/db/ # 代码风格 - 使用 ES modules(import/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 和扇出。每加一层都单独验证,出问题时你才知道是哪一层引入的。