1. 先说结论:OpenSpec 管规范,TaoToken 管模型入口
如果你正在用 OpenSpec 给 Claude Code 和 Cursor 管 spec,第一件值得做的事,是把两个编码智能体的模型入口统一到同一把 TaoToken Key。你可以在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=openspec_intro 获取 Key,Base URL 统一填 https://taotoken.net/api。
很多团队刚开始用 OpenSpec 时,只把规范文件写进仓库,却忽略了 Claude Code 和 Cursor 背后的模型通道。结果是:同一份 spec,两个工具读到的上下文不一致;Token 消耗分散在多个供应商,无法按需求、按工具、按模型归因。本文不从新闻角度复述 OpenSpec 的发布,而是直接给一套可复现的落地路径:先建 OpenSpec spec 目录,再把 Claude Code 的 settings.json 和 Cursor 的自定义模型通道都切到 TaoToken,最后用一张 Token 消耗对照表观察规范落地前后的差异。
OpenSpec 的定位可以理解为一个轻量、可配置的规范框架:它围绕 spec 的创建与维护,让团队和编码智能体在需求变化时保持同一上下文。它兼容 Claude Code、Cursor 等常见工具,但兼容并不等于自动统一模型入口。真正决定两个工具行为是否一致的,除了 spec 文件本身,还有模型通道、模型名、上下文窗口策略和 Token 计费口径。所以,同一把 TaoToken Key 的价值就体现在这里:Claude Code 和 Cursor 都通过同一个 Base URL 调用模型,控制台能按 Key 看到调用量,团队也能把 OpenSpec 变更与 Token 消耗对应起来。
下面这套方案适用于使用 Claude Code / Cursor 的工程团队,重点解决三件事:
- OpenSpec spec 目录怎么建,才能被两个工具共享;
- Claude Code 和 Cursor 怎么分别配置 TaoToken,且不混用 ANTHROPIC_* 与 OpenAI 兼容配置;
- 怎么记录 Token 消耗,验证 OpenSpec 规范落地是否真的减少了返工和无效上下文。
2. OpenSpec 落地目录:一份 spec 同时给 Claude Code 和 Cursor 读
OpenSpec 的核心不是某个工具插件,而是仓库里的规范文件。建议先把目录一次建好,Claude Code 和 Cursor 都指向同一个位置,避免一个读docs/、一个读.cursor/rules/,最后需求漂移。
推荐目录结构如下:
project/ ├── openspec/ │ ├── project.md │ ├── specs/ │ │ └── auth/ │ │ └── spec.md │ └── changes/ │ └── add-sso/ │ ├── proposal.md │ └── tasks.md ├── CLAUDE.md └── .cursor/ └── rules/ └── openspec.mdc可以直接用命令创建:
mkdir -p openspec/specs/auth openspec/changes/add-sso touch openspec/project.md \ openspec/specs/auth/spec.md \ openspec/changes/add-sso/proposal.md \ openspec/changes/add-sso/tasks.mdopenspec/project.md写项目级约束,例如技术栈、代码风格、测试要求、禁止事项。openspec/specs/放稳定规范,按模块拆分。openspec/changes/放正在进行的变更,每个变更一个目录,包含 proposal 和 tasks。
一个最小spec.md示例:
# auth spec ## 目标 - 支持邮箱密码登录 - 支持 SSO 登录 ## 非目标 - 不在此阶段引入生物识别 ## 验收标准 - 登录失败返回统一错误码 - 登录成功写入审计日志 ## 依赖 - 用户表已存在 - 审计日志模块可用一个最小tasks.md示例:
# add-sso tasks - [ ] 阅读 auth spec 与现有登录实现 - [ ] 增加 SSO 配置读取 - [ ] 实现回调路由 - [ ] 补充失败路径测试 - [ ] 更新 auth spec然后分别在 Claude Code 和 Cursor 的规则入口里指向 OpenSpec,而不是复制两份 spec。
Claude Code 侧,在CLAUDE.md中写:
# 项目规则 - 需求与变更以 `openspec/` 目录为准。 - 修改代码前先读 `openspec/specs` 对应模块。 - 新需求先写 `openspec/changes/<change-id>/proposal.md` 和 `tasks.md`。 - 不要把任何 API Key 写入仓库。Cursor 侧,在.cursor/rules/openspec.mdc中写:
--- description: OpenSpec 规范落地规则 alwaysApply: true --- - 先读 `openspec/project.md`。 - 涉及具体模块时读 `openspec/specs/<module>/spec.md`。 - 变更先写 `openspec/changes/<change-id>/proposal.md` 与 `tasks.md`。 - 实现完成后更新对应 spec。 - 禁止在代码中硬编码 API Key。这一步完成后,Claude Code 和 Cursor 虽然还是两个工具,但它们读的是同一份 OpenSpec 目录。接下来才是统一模型入口。
3. 统一 Key 的第一步:在 TaoToken 官网创建 Key 并记录 Base URL
准备把编码智能体调用的 Key 统一到 TaoToken 时,访问 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=create_key_step 获取 Key。进入控制台后创建 API Key,复制为YOUR_API_KEY,后续所有工具都用这一把 Key 的占位符替换。Base URL 统一使用:
https://taotoken.net/api注意:Base URL 不要加 UTM 参数,UTM 只用于官网和 deep link 的跳转归因。工具里填写的协议地址保持干净。
建议先在本地 shell 里定义环境变量,避免直接写进仓库:
export TAOTOKEN_API_KEY="YOUR_API_KEY" export TAOTOKEN_BASE_URL="https://taotoken.net/api"同时在.gitignore中忽略本地配置文件:
.env .env.local .claude/settings.local.json .cursor/*.local.jsonClaude Code 使用ANTHROPIC_*环境变量,Cursor 通常走 OpenAI 兼容或自定义模型通道,Codex 则使用config.toml。这三者不要混写,尤其不要把ANTHROPIC_*塞进 Codex 的配置里。统一的是 Key 和 Base URL,不是配置文件的键名。
你可以在 TaoToken 控制台里确认三件事:
- 当前 Key 是否启用;
- 可用模型 ID 是什么;
- 调用量、Token 消耗能否按 Key 或模型查看。
模型 ID 不要凭记忆写死。比如 Claude Code 里可能填claude-sonnet-4-20250514,但最终必须以控制台模型列表为准。Cursor 如果走 OpenAI 兼容通道,也要用控制台标注的模型名。下面的配置示例中,模型名都建议替换成你控制台实际可用的 ID。
4. Claude Code 接入 TaoToken:settings.json 与 ANTHROPIC_* 最小配置
Claude Code 的推荐做法是使用settings.json注入环境变量。可以放在用户级目录,也可以放在项目级.claude/settings.json。项目级更适合团队共享,但不要把真实 Key 提交上去,可以用本地覆盖文件或系统环境变量。
项目级.claude/settings.json示例:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" } }如果你的团队使用用户级配置,可以放到~/.claude/settings.json:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" } }也可以用 shell 环境变量覆盖:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY" export ANTHROPIC_MODEL="claude-sonnet-4-20250514"配置完成后,进入项目目录启动 Claude Code,让它先读 OpenSpec:
cd project claude然后在 Claude Code 里输入类似指令:
请先阅读 openspec/project.md、openspec/specs/auth/spec.md, 再阅读 openspec/changes/add-sso/tasks.md。 只实现 tasks 中的第一项,并告诉我你读了哪些文件。如果 Claude Code 能正确列出 OpenSpec 文件,并基于 spec 回答,说明规则入口和模型通道都通了。此时再检查 Token 消耗:在 TaoToken 控制台按 Key 查看调用记录,确认 Claude Code 的请求已经归到这把 Key 下。
常见坑有三个:
ANTHROPIC_BASE_URL填成了带/v1的地址,导致 404;ANTHROPIC_AUTH_TOKEN还是旧供应商的 Key;ANTHROPIC_MODEL写了控制台不存在的模型 ID。
Claude Code 侧统一完成后,再配置 Cursor。两者共用同一把YOUR_API_KEY,但 Cursor 不需要ANTHROPIC_*。
5. Cursor 接入同一把 Key:自定义模型通道与项目规则
Cursor 的模型配置入口通常在设置里的 Models 区域。选择 OpenAI 兼容或自定义模型能力,填入:
- API Key:
YOUR_API_KEY - Base URL:
https://taotoken.net/api - Model:从 TaoToken 控制台复制的模型 ID
如果 Cursor 的界面要求 Override OpenAI Base URL,同样填写https://taotoken.net/api。如果它明确要求/v1后缀,以 TaoToken 控制台模型文档为准,不要自行拼接未公布路径。核心原则是:Cursor 和 Claude Code 最终都指向同一套 TaoToken 入口。
Cursor 侧真正和 OpenSpec 强相关的是项目规则文件。.cursor/rules/openspec.mdc可以写成:
--- description: OpenSpec 规范落地规则 alwaysApply: true --- - 先读 `openspec/project.md`。 - 修改 auth 模块前读 `openspec/specs/auth/spec.md`。 - 新变更创建 `openspec/changes/<change-id>/proposal.md`。 - 实现任务写进 `tasks.md`,完成后更新 spec。 - 不要输出或提交任何 API Key。在 Cursor 中打开项目后,可以这样验证:
请根据 .cursor/rules/openspec.mdc 和 openspec/specs/auth/spec.md, 检查当前 auth 模块实现是否符合 spec。 只列出差距,不要直接修改文件。如果 Cursor 能引用 OpenSpec 文件内容,说明规则文件生效。接下来让它执行tasks.md中的某一项:
读取 openspec/changes/add-sso/tasks.md, 只完成“增加 SSO 配置读取”这一项。 完成后告诉我修改了哪些文件,以及是否需要更新 spec。此时 Cursor 的请求也会走 TaoToken。你可以在控制台看到同一把 Key 下既有 Claude Code 的调用,也有 Cursor 的调用。为了区分,建议在 Cursor 的模型名称或项目规则里加一个标识,例如在任务描述中写“工具:Cursor”,这样后续对账时更容易区分。
Cursor 和 Claude Code 共享 OpenSpec 目录后,最大的收益是需求上下文统一。但也要注意:两个工具的上下文窗口策略不同,Cursor 可能更倾向自动读取文件,Claude Code 可能更依赖显式指令。因此规则文件里要明确写“先读哪个文件、再读哪个文件”,减少无效 Token。
6. CC Switch 三件套:多工具切换时别把 ANTHROPIC_* 塞进 Codex
如果团队同时使用 Claude Code、Cursor、Codex,建议用 CC Switch 或类似的配置管理方式维护多套 profile。这里说的“三件套”可以理解为:
- Claude Code 的
settings.json与ANTHROPIC_*; - Codex 的
config.toml; - Cursor 的自定义模型配置与项目规则文件。
它们可以共用同一把 TaoToken Key,但配置文件格式完全不同。最典型的错误是把ANTHROPIC_BASE_URL写进 Codex 的config.toml,或者把 OpenAI 兼容的base_url写进 Claude Code 的settings.json。这会导致 401、404 或模型名不匹配。
Codex 如果要走 TaoToken,应使用config.toml,参考结构如下:
model = "gpt-5-codex" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "responses"注意:model必须替换成 TaoToken 控制台实际可用的模型 ID。wire_api也要按 Codex 与供应商的兼容说明填写。最关键的是,Codex 配置里不要出现ANTHROPIC_*。Claude Code 才用ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN。
CC Switch 切换 profile 时,建议每套 profile 只改三处:
- Base URL 是否为
https://taotoken.net/api; - Key 是否引用
YOUR_API_KEY对应的环境变量; - 模型 ID 是否与当前工具匹配。
切换完成后,分别用最小请求验证:
# Claude Code 侧验证 claude --version # Codex 侧验证 codex --version然后各发一个只读任务,例如“读取 openspec/project.md 并总结三条项目约束”。如果两个工具都能正常返回,并且 TaoToken 控制台能看到两笔调用,说明多工具共 Key 配置成立。
7. OpenSpec 工作流:从需求到变更,Claude Code 与 Cursor 如何共享上下文
OpenSpec 落地不是只建目录,而是形成固定工作流。推荐按“提案 → 任务 → 实现 → 更新 spec”推进。
第一步,新需求先写 proposal:
# proposal: add-sso ## 背景 当前仅支持邮箱密码登录,企业客户需要 SSO。 ## 目标 - 增加 SAML SSO 登录 - 保留原有登录方式 ## 影响范围 - auth 模块 - 用户配置 - 审计日志 ## 非目标 - 不修改计费模块第二步,拆 tasks:
# tasks - [ ] 阅读 auth spec 与现有路由 - [ ] 增加 SSO 配置模型 - [ ] 实现回调处理 - [ ] 增加错误码 - [ ] 补充测试 - [ ] 更新 auth spec第三步,让 Claude Code 或 Cursor 执行单项任务。给工具的指令要限定范围:
只完成 tasks.md 中的“增加 SSO 配置模型”。 先读 openspec/specs/auth/spec.md 和 openspec/changes/add-sso/proposal.md。 不要修改其他模块。 完成后列出改动文件和建议更新的 spec 片段。第四步,完成后更新 spec。稳定规范进入openspec/specs/,变更目录可以归档或保留在changes/下作为历史。这样下一轮编码智能体读到的就是最新规范,而不是旧文档。
为了控制 Token,建议:
- 规则文件只写路径和原则,不粘贴大段 spec;
- 让工具按需读取具体模块,而不是每次全量读取
openspec/; - 变更任务拆小,一项任务一次对话;
- 长 spec 按模块拆分,例如 auth、billing、notification;
- 在任务描述中写明“只读相关文件”,减少无关上下文。
Claude Code 和 Cursor 共享这套目录后,你可以在两个工具之间切换,但需求上下文不断层。此时再用同一把 TaoToken Key,就能把两个工具的调用量放到同一张账单视图里。
8. Token 消耗对照表:OpenSpec + TaoToken 同一 Key 下怎么记录
要观察 OpenSpec 是否真的降低了返工,可以维护一张 Token 消耗对照表。数据从 TaoToken 控制台读取,入口同样在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=token_usage_table 。控制台可以按 Key、时间、模型查看调用量,把数据填入下表即可。
| 日期 | 工具 | 模型通道 | 任务 | 输入 Token | 输出 Token | 缓存命中 | 备注 |
|---|---|---|---|---|---|---|---|
| 第 1 天 | Claude Code | TaoToken / Claude | 阅读 OpenSpec 目录 | 控制台读取 | 控制台读取 | 控制台读取 | 同一把 Key |
| 第 1 天 | Cursor | TaoToken / 自定义模型 | 检查 auth spec 差距 | 控制台读取 | 控制台读取 | 控制台读取 | 同一把 Key |
| 第 2 天 | Claude Code | TaoToken / Claude | 实现 add-sso tasks 第 1 项 | 控制台读取 | 控制台读取 | 控制台读取 | 任务已拆分 |
| 第 2 天 | Cursor | TaoToken / 自定义模型 | 补充测试建议 | 控制台读取 | 控制台读取 | 控制台读取 | 只读相关文件 |
| 第 3 天 | Claude Code | TaoToken / Claude | 更新 auth spec | 控制台读取 | 控制台读取 | 控制台读取 | 变更完成 |
记录时重点看四个维度:
- 同一任务在 Claude Code 和 Cursor 上的 Token 差异;
- 有无 OpenSpec 规则时,首轮对话的输入 Token 是否下降;
- 是否因为 spec 不清晰导致多轮返工;
- 缓存命中是否稳定,是否因为频繁改规则文件而失效。
如果发现某个工具 Token 异常高,优先检查规则文件是否过长、是否重复粘贴 spec、是否让工具全量读取了openspec/。OpenSpec 的价值在于让规范可维护,而不是把规范全文塞进每次请求。统一 Key 后,控制台数据可以帮助团队做更细的归因:哪个工具、哪个模型、哪个变更消耗最多,后续就能针对性优化。
9. 常见排障:401、404、模型名不匹配与 spec 未生效
配置过程中最容易遇到四类问题。
第一类,401 未授权。检查YOUR_API_KEY是否替换成功,Claude Code 的ANTHROPIC_AUTH_TOKEN是否正确,Cursor 的 API Key 是否填在同一处。还要确认环境变量是否被当前 shell 或 IDE 继承。修改settings.json后,重启 Claude Code;修改 Cursor 设置后,重新加载窗口。
第二类,404 路径错误。Claude Code 的ANTHROPIC_BASE_URL建议使用https://taotoken.net/api。如果客户端要求/v1,以 TaoToken 控制台模型文档为准。Cursor 的 OpenAI 兼容 Base URL 也不要凭经验拼接。记住:Base URL 不加 UTM,保持协议地址干净。
第三类,模型名不匹配。模型 ID 必须从 TaoToken 控制台复制,不要沿用其他供应商的名称。Claude Code 的ANTHROPIC_MODEL、Cursor 的 Model、Codex 的model三者可能不同,分别对应各自工具的模型通道。
第四类,OpenSpec 未生效。检查CLAUDE.md是否在项目根目录,.cursor/rules/openspec.mdc是否被 Cursor 加载,alwaysApply是否设置正确。然后让工具执行只读任务:
请列出你从 openspec/project.md 中读到的三条约束。如果工具无法列出,说明规则入口没生效;如果工具能列出但回答偏离 spec,说明模型通道虽然通了,但提示词或任务范围不清晰。
最后,多工具共 Key 时不要全局 export 冲突的环境变量。Claude Code 用ANTHROPIC_*,Codex 用config.toml,Cursor 用自定义模型配置。统一的是 TaoToken Key 和 Base URL,不是配置键名。
10. 文末 CTA:模型对话 → Coding Plan → 创建 Key → Claude Code 文档
如果你准备把 OpenSpec、Claude Code、Cursor 的模型入口统一到同一把 TaoToken Key,可以按下面路径走一遍:
先到模型对话页,确认可用模型与对话效果:
https://taotoken.net/models/detail/chat?utm_source=taotoken_aicg_blog_end&utm_content=cta_chat如果团队需要长期编码使用,查看 Coding Plan:
https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=cta_coding_plan进入 API Keys 控制台创建或复制
YOUR_API_KEY:
https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=cta_api_keys按 Claude Code 文档完成
settings.json与ANTHROPIC_*配置:
https://taotoken.net/doc/ClaudeCodeAnthropic?utm_source=taotoken_aicg_blog_end&utm_content=cta_claude_code_doc
最后回到官网检查当前配置入口:
https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=final_check
完成这些步骤后,你的 OpenSpec spec 目录会成为 Claude Code 和 Cursor 的共同上下文,而 TaoToken Key 会成为两个工具的统一模型入口。后续只需要围绕openspec/specs/和openspec/changes/迭代,用控制台 Token 数据验证规范落地效果即可。