1. 从“能写代码”到“写得可控”Claude Code 日常开发的真实卡点Claude Code 是 Anthropic 推出的终端级 AI 编程助手能直接读写你本地的代码文件、执行命令、跑测试适合日常写业务代码、做重构、验证原型的开发者。但很多人用了一两周后会遇到同一批问题权限确认弹窗频繁打断思路、复杂需求一次性改崩多个文件、多个任务挤在一个会话里上下文越聊越乱、月底一看 token 账单不知道钱花在哪。我试过把这些问题拆开逐个解决最后沉淀出一套相对稳定的工作流用 Plan Mode 先规划再动手用 task 拆分可验收单元用 git worktree 做并行隔离把长提示词固化成 commands/skills/subagent最后用 ccusage 把成本看清楚。这套流程不依赖任何特殊网络环境全部在本地终端完成。这篇文章会给出可直接复制的 settings 配置片段、subagent 与 skills 的目录结构示例以及用 ccusage 验证 token 消耗的具体命令和预期输出。如果你已经在用 Claude Code 但总觉得“快是快就是不太放心”下面的内容应该能帮你把可控性拉回来。2. TaoToken 前置把 Base URL、Key、Model ID 三件套配好Claude Code 默认走 Anthropic 官方端点但很多团队会通过兼容 Anthropic API 协议的中转服务来统一管理 Key、做用量归因。TaoToken 就是这样一个入口它提供 Anthropic 兼容的 API 端点Claude Code 只需要改 Base URL 和 Key 就能接上。接入前你需要准备三样东西我把它叫做“三件套”Base URLhttps://taotoken.net/apiAPI Key在控制台创建形如sk-xxxxModel ID比如claude-sonnet-4-5、claude-opus-4-1这类具体模型标识获取 Key 的路径是打开 https://taotoken.net/api-keys 登录后新建一个 Key复制出来。注意 Key 只在创建时完整显示一次丢了就重新建。Claude Code 读取配置有两种方式环境变量和 settings 文件。环境变量适合临时切换settings 文件适合长期固定。我一般两个都配settings 里写默认值需要临时换模型时用环境变量覆盖。环境变量方式写进~/.zshrc或~/.bashrcexport ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENsk-你的Key export ANTHROPIC_MODELclaude-sonnet-4-5改完记得source ~/.zshrc让配置生效。这里有个坑ANTHROPIC_AUTH_TOKEN和ANTHROPIC_API_KEY是两个不同的变量Claude Code 优先读前者如果你两个都设了但值不一样会出现 401。建议只保留ANTHROPIC_AUTH_TOKEN。settings 文件方式放在~/.claude/settings.json下一节会给完整片段。两种方式不要同时配冲突的值否则排查起来很痛苦。3. 可复制配置settings.json、subagent 与 skills 目录结构这一节给的都是可以直接抄的片段路径和字段名保持和 Claude Code 实际读取的一致。3.1 settings.json 完整片段文件路径~/.claude/settings.json全局或项目根/.claude/settings.json项目级优先级更高。{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: sk-你的Key, ANTHROPIC_MODEL: claude-sonnet-4-5, ANTHROPIC_SMALL_FAST_MODEL: claude-haiku-4-5 }, permissions: { allow: [ Read, Glob, Grep, Bash(git status), Bash(git diff:*), Bash(npm run test:*), Bash(npm run lint:*) ], deny: [ Bash(rm -rf:*), Bash(git push --force:*), Read(./.env), Read(./secrets/**) ] }, includeCoAuthoredBy: false }几个字段说明ANTHROPIC_SMALL_FAST_MODEL用于后台小任务比如生成 commit message配一个便宜快速的模型能省不少钱。permissions.allow里把只读命令和测试命令放行日常就不会被反复打断deny里把危险操作和敏感文件挡掉比开--dangerously-skip-permissions稳得多。3.2 subagent 目录结构subagent 的作用是把执行型工作下沉主会话只做调度节省上下文。目录放在项目根/.claude/agents/.claude/ └── agents/ ├── code-writer.md ├── test-runner.md └── doc-updater.md每个.md文件用 frontmatter 声明名称和描述正文写系统提示词。以code-writer.md为例--- name: code-writer description: 按项目规范编写业务代码只输出改动文件与说明 tools: Read, Edit, Write, Bash --- 你是本项目的代码执行者。遵守以下约束 1. 只改任务指定的文件不顺手重构无关代码。 2. 遵循项目 ESLint 与 Prettier 配置提交前自查。 3. 输出格式改动文件清单 每个文件的变更摘要 验证命令。 4. 遇到不确定的接口签名先 Read 相关文件再动手。主会话里用code-writer调用它执行完只把结果摘要带回主会话中间过程不占用主上下文。3.3 skills 目录结构skills 是任务驱动的能力包放在项目根/.claude/skills/.claude/ └── skills/ ├── git-commit/ │ └── SKILL.md ├── code-review/ │ └── SKILL.md └── doc-sync/ └── SKILL.mdgit-commit/SKILL.md示例--- name: git-commit description: 生成符合 Conventional Commits 规范的提交信息并提交 --- 步骤 1. 运行 git diff --staged 查看暂存改动。 2. 按 feat/fix/refactor/docs/test/chore 分类。 3. 生成一行标题≤72 字符 可选正文。 4. 执行 git commit -m 标题 -m 正文。 5. 输出提交哈希与变更文件数。调用时直接说“用 git-commit skill 提交”它会按预设步骤走输出稳定。3.4 commands 固化长提示词commands 放在项目根/.claude/commands/文件名就是命令名。比如plan-feature.md--- description: 为复杂需求生成实施方案 --- 先不要改代码。用 Plan Mode 给我一份实施方案 - 目标与验收标准 - 需要改动的文件清单含路径 - 分步骤执行计划 - 风险点与回滚方案 - 验证/测试点 最后列一个任务列表每个任务可独立提交。使用时输入/plan-feature 给用户模块加限流长提示词不用每次重打。4. 验证请求Plan Mode、并行 worktree 与 ccusage 实测配置好之后跑一遍完整流程验证是否接通。4.1 启动与 Plan Mode 验证启动 Claude Codeclaude进入会话后按ShiftTab循环切换权限模式切到 Plan Mode。此时输入/plan-feature 给订单服务加一个幂等校验预期输出是一份结构化方案包含文件清单和任务列表且不会直接改代码。如果它直接开始 Edit 文件说明 Plan Mode 没生效检查是不是按错了键或者 settings 里覆盖了权限模式。4.2 并行 worktree 验证多任务并行时一个终端一个 worktreegit worktree add ../proj-feature-a -b feature-a git worktree add ../proj-bugfix-b -b bugfix-b然后开两个终端分别cd进去启动claude。这样两个会话的上下文和文件改动完全隔离回滚时git worktree remove即可不会互相污染。4.3 ccusage 验证 token 消耗安装npm install -g ccusage运行默认报告ccusage预期输出是一张按天汇总的表格包含 input tokens、output tokens、cache tokens 和估算成本。想看实时块ccusage blocks --live想看某天明细ccusage daily --since 2025-09-01如果输出为空说明 Claude Code 的本地 JSONL 日志目录没找到检查~/.claude/projects/是否存在。ccusage 是从本地日志分析的不依赖网络。4.4 一次完整请求的成功标志接通 TaoToken 后随便问一句“列出当前目录的 Python 文件”如果返回文件列表且没有 401 报错说明 Base URL、Key、Model ID 三件套都对了。此时再跑ccusage应该能看到刚才这次请求的 token 记录。5. 常见报错排查401、local proxy failed、reading choices、OAuth这一节对照真实报错给排查路径。401 Unauthorized最常见。先确认ANTHROPIC_AUTH_TOKEN的值没有多余空格或换行再确认 Base URL 是https://taotoken.net/api而不是带/v1的变体。如果环境变量和 settings.json 都配了检查是否冲突——Claude Code 读到的可能是旧值。用echo $ANTHROPIC_AUTH_TOKEN确认当前 shell 的值。local proxy failed / connection refused说明 Claude Code 尝试连的地址不通。检查ANTHROPIC_BASE_URL是否拼写正确末尾不要多加斜杠。如果公司网络有出口限制确认该地址在允许列表内。reading choices / unexpected response shape通常是 Model ID 写错了服务端返回的不是 Anthropic 格式。确认ANTHROPIC_MODEL用的是 TaoToken 支持的模型标识不要填gpt-4这类非 Anthropic 协议模型。OAuth / login requiredClaude Code 有时会尝试走 OAuth 登录流程。如果你用的是 API Key 模式确保没有残留的 OAuth 凭证。删掉~/.claude/credentials.json如果存在再重启。ccusage 无数据确认 Claude Code 至少成功跑过一次请求且~/.claude/projects/下有.jsonl文件。如果目录存在但为空说明请求没落盘可能是会话异常退出。排查顺序建议先echo三个环境变量 → 再curl一下 Base URL 的/v1/models如果支持→ 最后看 ccusage 是否有记录。三步定位大部分问题。6. 把工作流串起来从 Plan 到 ccusage 的日常节奏把上面所有东西串成一套日常节奏基本不会翻车。新任务进来先开 Plan Mode用/plan-feature生成方案看清楚要改哪些文件、风险在哪。方案确认后让它拆成 3 到 8 个 task每个 task 都能独立提交、独立验证。并行任务用git worktree隔离一个终端一个 tree互不干扰。稳定输出靠资产化项目系统提示词维护在.claude/CLAUDE.md里每次有修改直接让它自己更新常用要求做成 commands执行型工作下沉到 subagent主会话只做调度和验收。每周跑一次ccusage daily看哪类会话最烧钱。如果是长上下文导致的就拆会话如果是重复工作导致的就固化成 skill。数据会告诉你优化方向不用猜。需要长期跑编码任务或 Agent 的可以看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding_plan 。想先验证模型对话效果的用模型对话入口https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel_chat 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc Key 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi_keys 。最后一句实在话--dangerously-skip-permissions能不开就不开真要开也放在可随时重建的隔离环境里。快的前提是可控Plan Mode 加 ccusage 这套组合就是让你既快又知道钱花在哪。