在 Claude Code 里敲下/opsx:propose之前,我建议先把模型通道定下来——去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content= 注册并创建一把 Key,TaoToken 给你统一的 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.md,Superpowers 的help me plan this feature触发规划,子代理按 TDD 逐个执行 tasks.md 里的任务,最后/opsx:archive归档。每个动作都是一次或多次模型调用。如果通道不统一,你会在不同环节看到不同的失败方式,误以为是插件 bug。
把通道固定成一份settings.json,等于给整条流水线装了一个总闸。之后不管是 OpenSpec 的哪条命令,还是插件的子代理,走的都是同一个入口,出问题也只需要检查这一处。
2. 在 TaoToken 创建 Key,并写进 ~/.claude/settings.json
2.1 注册、创建 YOUR_API_KEY 的那一步
原文里「申请 API Key」这个动作,对应到本工作流就是先打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content= 完成注册,进入控制台后创建一把 API Key。这一步建议单独留个记事本,因为 Key 只在创建时完整显示一次,后面settings.json里要原样粘贴。
同时顺手看一眼模型广场,把你要用的模型 ID 记下来。这里不要凭印象写,模型列表会随通道调整,写错了/opsx:propose第一步就调不通。本文统一用YOUR_API_KEY和YOUR_MODEL_ID占位,你在实际操作时替换成自己刚创建的那两项即可。
需要强调的是,官网地址和接口地址是两个东西。注册、创建 Key、看模型广场、看用量都走 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_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/api;ANTHROPIC_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_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY" export ANTHROPIC_MODEL="YOUR_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/openspec@latest接着在你要开发的项目目录里执行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_source=taotoken_aicg_blog_end&utm_content= 的控制台看调用记录里有没有刚刚这一笔。
3.3 四份文档各自负责什么,别急着改
这四份产出不是随便分的,它们对应后续完全不同的动作。proposal.md是给人看的决策依据,确认「要不要做这件事」;specs/是验收标准的来源,Superpowers 子代理执行时会回来对照;design.md定技术路线,比如后端为什么用 Go + SQLite、前端为什么是 React + TypeScript;tasks.md则是真正会被逐条执行的任务列表。
按照原文的节奏,这个阶段先让/opsx:propose把四份都产出来,不要马上一头扎进去改。因为一旦你手动重排了 tasks.md 的顺序,后面子代理的 TDD 循环就可能对不上 spec。正确顺序是:先通读,确认方向没错,再进入执行环节。这一步的 Token 消耗通常集中在一次较长的生成上,通道稳定的话体验很连贯。
4. Superpowers 插件:从 help me plan this feature 到 TDD 子代理执行 tasks.md
4.1 插件市场安装 Superpowers
原文在 2.3 这一节讲安装 Superpowers 插件,走的是 Claude Code 的插件市场流程:在 Claude Code 里打开插件市场入口,搜索 Superpowers,完成安装,然后重启或新开会话让它加载。安装动作本身不涉及模型通道,但它装完之后的所有技能和能力,都是通过 Claude Code 的模型通道来调用的。
这也是为什么前面一定要先把 Key 和 Base URL 配好。插件装完第一次用,如果通道没通,你会以为是插件没生效,其实是它在调用模型时被拒了。装好之后可以用一句简单的触发词确认它在线,比如在会话里说help me plan this feature,看它是否会给出规划引导,而不是静默无响应。
4.2 子代理按 TDD 推进 tasks.md
Superpowers 的价值在于它能把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 末尾多了 /v1
5.1 401 先看 ANTHROPIC_AUTH_TOKEN
401 基本可以锁定在 Key 上。检查三个地方:settings.json里的ANTHROPIC_AUTH_TOKEN是不是完整粘贴了创建时那串;当前 shell 有没有残留一个旧的ANTHROPIC_AUTH_TOKEN覆盖了文件配置;这把 Key 是否被删除或重置过。确认后重启会话再试。
5.2 模型 ID 一律以模型广场当时列表为准
如果报错是模型不存在或不可用,去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_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.md,help 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,也方便判断下一轮提案要不要拆得更细。