tutorial

在 Cursor 中接入 Token Station:GPT-6 Astra 和 GPT-5.6

Cursor 在 Settings → Models 里支持自定义 OpenAI 兼容 provider。把它指向 Token Station 的端点,就能把 OpenAI 的 GPT-6 Astra 和 GPT-5.6 系列(Sol、Terra、Luna)添加为可选模型,全部通过你自己的 Token Station key 计费。

这在最近之前实际上是做不到的。早期测试(和我们Claude Sonnet 5 和 Haiku 版的 Cursor 配置同期)发现,Token Station 的 GPT-5.6 路由在 Cursor 的 Agent 模式下能读取和讨论代码,但始终无法真正应用文件编辑,这是 Token Station 一侧的工具调用响应格式问题。具体的差距是这样的:OpenAI 的模型把文件编辑表示为一次 ApplyPatch 工具调用,这种响应形状和 Cursor 的 Agent 模式此前能正确读取的形状不一样。现在,Token Station 的 key 可以挂载一个小型 adapter,把这种响应重写成 Cursor 期望的形状,专门作用于 Cursor 与 OpenAI、OpenAI-Codex 模型对话的场景:通过同一个 key 路由的其他工具和其他 provider 不受影响。下面完整走一遍这套配置流程,包括接入这个 adapter,并确认它确实有效。

在开始配置之前,有必要说清楚为什么要通过 Token Station 来路由 Cursor,而不是直接付费给 Cursor。有三个具体的理由。Cursor 的 Pro 计划把一部分模型(Grok 4.6、Grok 4.5、Composer 2.5)打包进一个共享的月度用量池,其余模型则从另一个池子里按各自的 API 价格计费,但这两个池子都不会给你一份按模型、按请求拆分的实际花费明细。Token Station 的 key 会绕开这两个池子:BYOK 请求直接发往 Token Station 的端点,完全不经过 Cursor 自己的计费,会按 provider 的真实费率、零加价,显示在你自己的控制台里。第二,如果 Cursor 只是你使用的多个编码工具之一(比如同时还用 Claude Code、Codex 或 OpenClaw),同一个 Token Station key 和同一批模型 ID 在所有这些工具里都能用:只需要一个账户、一个余额去追踪,而不必给每个工具单独准备 key、单独充值、单独对账。第三,Token Station 的模型目录已经超过 300 个模型、来自 30 多家 provider,远远超出 Cursor 自己打包进那些用量池里的范围。

开始之前需要准备什么

  • 已安装 Cursor(cursor.com/download)。
  • 一个 Token Station 账户和 API 密钥。免费注册:models.bytefuture.ai,注册即送 1 美元额度,无需信用卡。
  • Cursor Pro。免费版即使填了自己的 API key,Agent 模式下的自定义模型选择依然是锁死的,所以除了 Chat 模式之外的任何用法都需要 Pro(每月 20 美元)。

步骤 1:创建接入 OpenAI adapter 的 Token Station API 密钥

在 Token Station 控制台里,打开 API Keys,点击 Create new key。给它起个名字(Cursor 就可以),然后点击 Create key。请立即复制保存:它只会显示一次,之后不会再显示。

创建一个 Token Station API 密钥,并为它接入 Cursor ↔ OpenAI adapter。

回到 API Keys,找到你刚创建的这个密钥,点击 Edit。在 WASM middleware 下,它一开始显示为“No WASM middleware assigned.”。打开 Select WASM module 下拉菜单,选择 Cursor ↔ OpenAI adapter,这一项会把 OpenAI 的工具调用响应重新格式化成 Cursor 的 Agent 模式期望的形状。点击 Save changes。你会看到一条确认提示(“WASM middleware installed and validated”),这个密钥在 Active keys 表格里对应的那一行,现在会在 WASM 列里列出这个 adapter。

Token Station 的 API Keys 页面,显示确认提示 WASM middleware installed and validated,Cursor 密钥所在行的 WASM 列里列出了这个 adapter
接入 adapter 后的 Token Station API Keys 页面:确认提示,以及密钥那一行在 WASM 列里列出的 adapter。

这一步才是真正新增的内容。如果不接入它,这篇文章里其他的一切依然会照常工作,但针对 OpenAI 模型的 Agent 模式文件编辑,仍然会像早期测试发现的那样失败:Agent 模式能正常读取和讨论代码,但从来不会真正改动文件。

步骤 2:将 Token Station 注册为自定义 provider

打开 Settings → Cursor Settings → Models,滚动到 API Keys,设置两个字段:

  • OpenAI API Key:填入你刚接入 adapter 的那个 Token Station 密钥。
  • Override OpenAI Base URL:打开开关,把默认值(https://api.openai.com/v1)替换成 https://models.bytefuture.ai/v1

打开“OpenAI API Key”这个开关时,会先弹出一个确认提示:“Are you sure you want to enable your own OpenAI API key? Several of Cursor’s features require custom models (Tab, Apply from Chat, Agent), which cannot be billed to an API key.“确认继续即可,这是正常现象。

在 Cursor 的 Models 设置里,把 Token Station 注册为自定义 OpenAI 兼容 provider。

不要指望靠一个“Verify”按钮来确认密钥和地址是否正确。它不一定总会出现,即使出现了也不能覆盖所有路径。真正可靠的确认方式是添加一个模型,然后真的给它发一条消息,这一点接下来会讲到。

步骤 3:将 OpenAI 系列添加为自定义模型

还是在 Models 设置里,滚动到模型列表底部的自定义模型输入框,逐一输入下面每个完整路由,然后点击 Add

openai/gpt-6-astra
openai/gpt-5.6-sol
openai/gpt-5.6-terra
openai/gpt-5.6-luna

和我们 Claude、Grok 配置里一样的命名坑,这里尤其容易踩上:你可能会以为,既然这些模型是注册在 Cursor 自己的“OpenAI API Key”字段下面,就可以直接输入不带前缀的模型名。并不能。Cursor 会把你在这里注册的名字原样作为请求里的 model 字段发出去,而 Token Station 真实的路由名称里都带着 provider 前缀。注册成不带前缀的 gpt-6-astra,请求会失败,报错 Model 'gpt-6-astra' not found;注册成 openai/gpt-6-astra,就能正常工作。

模型 费用(输入/输出,每百万 token) 适用场景
openai/gpt-6-astra $10 / $50 最难、耗时最长的 agentic 会话:多文件重构和长时间的 Agent 模式运行,这类场景里减少纠错轮数比省 token 更重要。
openai/gpt-5.6-sol $5 / $30 大多数编码 agent 步骤的旗舰默认选择,价格只有 Astra 的一半。
openai/gpt-5.6-terra $2.50 / $15 反复的实现和调试循环。
openai/gpt-5.6-luna $1 / $6 直接切换主对话来处理较轻量的单轮问题、探索或分类。

步骤 4:确认 Agent 模式的文件编辑真的能生效

这一步正是此前无法完成的。下面先添加全部四个路由,然后选中 openai/gpt-5.6-luna,让它对一个真实仓库(httpie)做一次真正的编辑:

把全部四个 OpenAI 路由添加为自定义模型,然后 openai/gpt-5.6-luna 在 Cursor 的 Agent 模式下应用了一次真正的文件编辑。

提示词是:“please update the edit at the top of the readme to say ‘model: gpt-5.6-luna’.”。Cursor 读取了 README.md,应用了改动,并回报:“Worked for 8s. Edited README.md, explored 1 file, +1 -1,”,对应的 diff 把一个残留的测试标记替换成了 <!-- model: gpt-5.6-luna -->。这是真正落地到真实文件里的一次编辑,不是聊天里的一句描述。

Token Station 的控制台从计费这一侧也确认了同样的事情:

Token Station 控制台的 Recent Activity 显示多条 openai/gpt-5.6-luna 请求,每条几千个 token,费用只有几分之一美分
Token Station 的 Recent Activity,显示测试期间 openai/gpt-5.6-luna 请求被正确计费。

全部四个路由,openai/gpt-6-astraopenai/gpt-5.6-solopenai/gpt-5.6-terraopenai/gpt-5.6-luna,都通过这种方式确认了端到端可用:真实的文件编辑,正确计费,都经过步骤 1 里接入的那同一个 adapter。

步骤 5:定义范围明确的 subagent

Cursor 支持 subagent:带 YAML frontmatter 的 markdown 文件,可以按项目放在 .cursor/agents/ 下,也可以全局放在 ~/.cursor/agents/ 下。对编码场景来说,有两个角色很实用:一个只读的研究者,一个在改动之后负责验证的测试执行者。

.cursor/agents/bill-the-explorer.md

---
name: bill-the-explorer
description: Searches and reads the codebase to answer questions about existing code. Use proactively before implementing anything unfamiliar.
model: inherit
readonly: true
---

You are a fast, read-only research agent. Find and summarize relevant
files, functions, and patterns. Never edit files or run mutating commands.

.cursor/agents/jill-the-test-runner.md

---
name: jill-the-test-runner
description: Runs the test suite and reports pass/fail results with failure details. Use proactively after any code change.
model: inherit
---

You run the project's test command, capture output, and report which
tests passed or failed and why. Do not modify source files.

这里我们用 model: inherit,而不是指定某个具体路由:正如我们 Claude 那篇文章记录的,Cursor 的 Task 工具目前只接受 inherit 或它自己的 composer-2.5-fast 作为 subagent 的模型,不管自定义 agent 文件里写了什么都是如此。这是 Cursor 平台本身的限制,不是 OpenAI 模型特有的问题,所以这里的每个 subagent 都会运行在主对话当前使用的模型上。除此之外,subagent 的其他部分都会照常生效:namedescriptionreadonly 都按文档所说正常工作,无论是自动调用(主 agent 读取每个 description,自行判断何时该交给它)还是显式调用(/bill-the-explorer),都会触发真正的委派。

给 subagent 起名时,避免和 Cursor 自带的某个 agent 撞名。 explore 就是一个真实存在的内置名字,会被悄悄路由到那个内置 agent 而不是你自己的定义,也没有任何报错来解释原因。bill-the-explorerjill-the-test-runner 避开了这个问题。

创建 bill-the-explorer 和 jill-the-test-runner 两个 subagent。

如果你是在对话里让 agent 帮你写这两个文件,而不是自己在终端里写,写完后侧边栏依然显示没有 subagent,重新加载一下窗口(Ctrl+Shift+P → “Reload Window”):Cursor 不会总是实时重新扫描 .cursor/agents/

自己试试看:同样的 httpie 任务

我们的 Claude Sonnet 5 配置那篇跑过一次完整的编码会话,针对 httpie 里的一个真实功能:把跟随重定向后实际到达的 URL(effective URL)加进 httpie 的 --meta 输出里,放在已有的耗时字段旁边,并把研究和验证工作委派给上面这两个 subagent。

我们还没有针对 GPT-6 Astra 或 GPT-5.6 系列跑过这个具体的多步骤、多 agent 会话,所以这一节是“自己试试看”,而不是关于具体发生了什么的报告。从步骤 4 里已经确认的是:全部四个路由都能通过 Token Station 应用真实的 Agent 模式文件编辑,所以已经没有根本性的理由认为完整任务会失败。同样的三条消息序列值得一试:

消息 1,委派研究工作:

/bill-the-explorer find how elapsed time is computed and displayed in HTTPie's --meta output, and identify where to add the effective URL, the URL actually reached after following any redirects, alongside it.

消息 2,研究结果出来后,回到主 agent:

Using what bill-the-explorer found, add the effective URL next to the existing elapsed time in HTTPie's --meta output. Add a test that confirms it works for both a redirected and a non-redirected request.

消息 3,委派验证工作:

/jill-the-test-runner verify the new effective-URL test passes, along with the rest of the test suite. Report any failures separately from the two known pre-existing Big5 charset-detection failures in tests/test_encoding.py, which are unrelated to this change.

目前能用的

Agent 模式下的文件编辑,在全部四个 OpenAI 路由 openai/gpt-6-astraopenai/gpt-5.6-solopenai/gpt-5.6-terraopenai/gpt-5.6-luna 上,通过 Token Station 在 Cursor 里都已确认可用:真实的编辑应用到真实的文件上,正确计入你的 Token Station 密钥,并显示在控制台里。这是新出现的能力:同样这些路由此前在 Agent 模式下只能讨论代码,不能编辑,而修复方式就是步骤 1 里接入你的 Token Station 密钥的那个 adapter。

subagent 在划分范围和权限方面是能用的:namedescriptionreadonly 都会被正确识别,自动调用和显式调用(/name)都会触发真正的委派。subagent 层面的模型路由目前对自定义模型不起作用,不管是哪个 provider 都一样:Cursor 的 Task 工具只接受 inherit 或它自己的 composer-2.5-fast,所以每个 subagent 都运行在主对话所用的模型上。这和我们 Claude、Grok 配置里记录的是同一个 Cursor 平台限制,不是 OpenAI 模型特有的问题。

开始使用

前往 models.bytefuture.ai 注册:1 美元免费额度,无需信用卡,首次充值最高可再获得 50 美元奖励。导出你的密钥,接入 OpenAI adapter,接入 Cursor 的 Models 设置,添加上面的这些路由。

试用 Token Station