
在 Claude Code 里敲下/opsx:propose之前我建议先把模型通道定下来——去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 注册并创建一把 KeyTaoToken 给你统一的 Base URL 和调用入口后面 OpenSpec 生成四份规范文档、Superpowers 子代理按 TDD 跑任务时就不用再到处换 Key、改模型名。这套 OpenSpec Superpowers 组合本身设计得很顺先由/opsx:propose产出 proposal.md、specs/、design.md、tasks.md再让插件子代理照着 tasks.md 一个任务一个任务执行最后用/opsx:archive收口。真正容易把人卡住的往往不是插件本身而是更前面那一步Claude Code 的执行通道没统一ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、模型 ID 散在好几个地方今天能用明天就 401。下面按原文的步骤顺序把这条链路从拿 Key 到归档完整拆一遍。1. 从 openspec init 选 Claude Code 那一刻通道就已经定了1.1 原文前置依赖里被跳过的那一步原文把「准备 Claude Code 执行环境」放在前置依赖里几行字就带过了但这一步恰恰是整条工作流的地基。OpenSpec 自己不产出代码它只负责把需求拆成结构化的四份文档真正动手写代码的是 Claude Code以及挂在它下面的 Superpowers 子代理。也就是说从你执行openspec init并选择 Claude Code 作为协作工具开始后面所有生成、执行、归档动作的 Token 消耗都从 Claude Code 当前生效的模型通道走。问题就出在「当前生效」这四个字上。Claude Code 的配置可以来自 shell 环境变量也可以来自~/.claude/settings.json的 env 字段还可能是某个会话里临时 export 过一遍的值。三处只要有一处没对齐/opsx:propose就可能用错 Key 或连错端点。原文没细讲这一层但读者最容易就卡在这——插件都装好了命令也敲对了输出却报权限或模型不存在。所以本章的建议很直接在做任何 OpenSpec 操作之前先打开 TaoToken 官网 把 Key 拿到手然后一次性把 Claude Code 的通道写成固定配置而不是靠临时 export 撑着。1.2 为什么 Base URL 必须提前统一Claude Code 在调用模型时会把三个信息拼在一起发出去请求发往哪个 Base URL、带哪把 Key、指定哪个模型 ID。任何一项和预期不符返回的报错都不一样排查起来很分散。比如 Key 不对是 401模型 ID 不在通道支持列表里是模型不存在的提示Base URL 末尾多写了/v1则会拼出一条不存在的路径。这套工作流涉及的动作又多/opsx:propose生成 proposal.mdSuperpowers 的help me plan this feature触发规划子代理按 TDD 逐个执行 tasks.md 里的任务最后/opsx:archive归档。每个动作都是一次或多次模型调用。如果通道不统一你会在不同环节看到不同的失败方式误以为是插件 bug。把通道固定成一份settings.json等于给整条流水线装了一个总闸。之后不管是 OpenSpec 的哪条命令还是插件的子代理走的都是同一个入口出问题也只需要检查这一处。2. 在 TaoToken 创建 Key并写进 ~/.claude/settings.json2.1 注册、创建 YOUR_API_KEY 的那一步原文里「申请 API Key」这个动作对应到本工作流就是先打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 完成注册进入控制台后创建一把 API Key。这一步建议单独留个记事本因为 Key 只在创建时完整显示一次后面settings.json里要原样粘贴。同时顺手看一眼模型广场把你要用的模型 ID 记下来。这里不要凭印象写模型列表会随通道调整写错了/opsx:propose第一步就调不通。本文统一用YOUR_API_KEY和YOUR_MODEL_ID占位你在实际操作时替换成自己刚创建的那两项即可。需要强调的是官网地址和接口地址是两个东西。注册、创建 Key、看模型广场、看用量都走 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 而填进 Claude Code 的 Base URL 只用https://taotoken.net/api末尾不要加/v1。这两条线混了后面必出问题。2.2 settings.json 的 env 三件套怎么写Claude Code 读取~/.claude/settings.json其中 env 字段就是给模型调用用的环境变量集合。把下面这段写进去替换两个占位符{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: YOUR_MODEL_ID } }三个字段各自的作用ANTHROPIC_BASE_URL决定请求发到哪这里固定成https://taotoken.net/apiANTHROPIC_AUTH_TOKEN就是刚创建的那把 Key填YOUR_API_KEY的位置ANTHROPIC_MODEL填你在模型广场看到的模型 ID。注意两个容易犯的错。第一Base URL 不要写成https://taotoken.net/api/v1多出来的/v1会让 Claude Code 拼出一个不存在的接口路径。第二也不要把官网那个带utm_source的落地页地址填进 Base URL那是给人看的页面不是接口。保存文件后新开一个 Claude Code 会话让它重新加载配置。2.3 只想临时试一次用环境变量如果你只是想先验证通道通不通不想马上落盘可以在启动 Claude Code 的那个 shell 里临时导出export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENYOUR_API_KEY export ANTHROPIC_MODELYOUR_MODEL_ID这种方式的缺点是只在当前终端窗口有效换个窗口或者重启就没了。所以一旦验证通过还是建议回到settings.json里写成固定配置。两种方式不要同时用否则容易出现「我以为改的是文件实际生效的是环境变量」这种错觉排查时白费时间。3. /opsx:propose 生成 proposal.md、specs/、design.md、tasks.md 的完整链路3.1 安装 OpenSpec 与 openspec init通道准备好之后回到原文的 OpenSpec 步骤先做全局安装npm install -g fission-ai/openspeclatest接着在你要开发的项目目录里执行openspec init。初始化过程会问你希望哪个 AI 工具来协作按原文的选择这里选 Claude Code。init 完成后项目根目录会多出一套 OpenSpec 的目录结构用来存放后续生成的各类规范文档。这一步本身不消耗模型调用但它决定了 OpenSpec 后续会把命令和上下文投给谁。所以顺序上先配好 Claude Code 的通道再执行 init 选 Claude Code逻辑才是闭环的。3.2 看板管理系统这条 prompt 该产出什么初始化完成后就可以在 Claude Code 会话里触发第一条正式命令。按原文的场景输入/opsx:propose 创建看板管理系统包含 Column 和 Task 的 CRUD后端 Go SQLite前端 React TypeScript这条命令的作用是把一句自然语言需求拆解成结构化的规范文档。执行顺利的话你会在 OpenSpec 相关目录下看到四类产出proposal.md记录这份提案的背景、目标和范围specs/目录放具体的行为规格design.md讲技术方案和取舍tasks.md把落地工作拆成可执行的任务清单。第一次跑如果只生成了一两份或者中途停下来先别怀疑 OpenSpec。回看一下这次调用是否真的走到了你配的通道——最直接的验证方法是去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 的控制台看调用记录里有没有刚刚这一笔。3.3 四份文档各自负责什么别急着改这四份产出不是随便分的它们对应后续完全不同的动作。proposal.md是给人看的决策依据确认「要不要做这件事」specs/是验收标准的来源Superpowers 子代理执行时会回来对照design.md定技术路线比如后端为什么用 Go SQLite、前端为什么是 React TypeScripttasks.md则是真正会被逐条执行的任务列表。按照原文的节奏这个阶段先让/opsx:propose把四份都产出来不要马上一头扎进去改。因为一旦你手动重排了 tasks.md 的顺序后面子代理的 TDD 循环就可能对不上 spec。正确顺序是先通读确认方向没错再进入执行环节。这一步的 Token 消耗通常集中在一次较长的生成上通道稳定的话体验很连贯。4. Superpowers 插件从 help me plan this feature 到 TDD 子代理执行 tasks.md4.1 插件市场安装 Superpowers原文在 2.3 这一节讲安装 Superpowers 插件走的是 Claude Code 的插件市场流程在 Claude Code 里打开插件市场入口搜索 Superpowers完成安装然后重启或新开会话让它加载。安装动作本身不涉及模型通道但它装完之后的所有技能和能力都是通过 Claude Code 的模型通道来调用的。这也是为什么前面一定要先把 Key 和 Base URL 配好。插件装完第一次用如果通道没通你会以为是插件没生效其实是它在调用模型时被拒了。装好之后可以用一句简单的触发词确认它在线比如在会话里说help me plan this feature看它是否会给出规划引导而不是静默无响应。4.2 子代理按 TDD 推进 tasks.mdSuperpowers 的价值在于它能把tasks.md里的任务分发给子代理并按 TDD 的方式推进先写测试再补实现最后让测试通过。这个循环会反复调用模型是整条工作流里 Token 消耗最密集的一段。想让这一段跑得稳有几件事值得提前做。其一tasks.md里的任务拆得越具体子代理越不容易跑偏其二别在会话中途切换 Base URL 或 Key子代理的上下文是连续的中途换通道容易打断节奏其三子代理生成的是代码和测试运行、编译、连本地数据库这些动作仍然由你在本机完成再把结果贴回对话——它是协作者不是能在你机器上乱动的执行器。如果某个任务执行到一半停下来先看它卡在哪一步是测试写出来跑不过还是调用直接失败。前者是代码问题后者大概率是通道问题两类的处理方式完全不同。4.3 /opsx:archive 归档把这次 spec 收口当 tasks.md 里的任务基本完成、测试也通过之后按原文走最后一步/opsx:archive。它的作用是把这次提案相关的文档和状态收口归档留下一条可回溯的记录。归档动作本身比较轻但建议在跑之前确认四份文档和实际代码是一致的否则归档的是一份对不上的快照。归档完成一轮完整的「提案 → 规范 → 设计 → 任务 → 执行 → 归档」就闭环了。下一轮新需求再来一遍/opsx:propose此时通道已经稳定你只需要专注在需求描述本身。5. 排障401、模型 ID 对不上、Base URL 末尾多了 /v15.1 401 先看 ANTHROPIC_AUTH_TOKEN401 基本可以锁定在 Key 上。检查三个地方settings.json里的ANTHROPIC_AUTH_TOKEN是不是完整粘贴了创建时那串当前 shell 有没有残留一个旧的ANTHROPIC_AUTH_TOKEN覆盖了文件配置这把 Key 是否被删除或重置过。确认后重启会话再试。5.2 模型 ID 一律以模型广场当时列表为准如果报错是模型不存在或不可用去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 的模型广场核对当前可用列表把ANTHROPIC_MODEL改成列表里真实存在的 ID。不要凭记忆写带日期后缀或版本号的名称模型列表会变占位符YOUR_MODEL_ID必须落到具体值才有意义。5.3 Base URL 只填 https://taotoken.net/api这一项出错的表现往往不直观。正确写法是https://taotoken.net/api末尾不带/v1也不是官网落地页地址。写错之后Claude Code 会拼出一条不存在的请求路径报错可能是 404也可能是一个语焉不详的连接失败。改完记得新开会话让配置重新生效。6. 跑通之后去控制台对一下这次 /opsx:propose 的消耗当/opsx:propose能稳定产出 proposal.md、specs/、design.md、tasks.mdhelp me plan this feature有响应子代理也能按 TDD 推进 tasks.md 时这条工作流就算真正跑起来了。此时建议做一次核对去 TaoToken 模型对话 里用同一把 Key 发一条消息确认模型 ID 和 Base URL 没填错如果准备长期用这套流程写代码可以看 Coding Plan 的套餐是否够用后续要新建 Key直接在 控制台 API Keys 里创建。Claude Code 的环境变量字段对照可以翻 Claude Code 接入文档里面把ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL三项讲得很清楚。把这次/opsx:propose之后的调用记录和费用对一遍你就能直观看到这条通道承载了多少 Token也方便判断下一轮提案要不要拆得更细。