Cursor
Cursor 提供商通过 Cursor Agent SDK,在中继所在的机器上运行 Cursor 的智能体。OAR 为每个对话启动一个 worker 进程。智能体在对话的工作目录中工作,使用你 Cursor 账户的模型。与 Claude 不同,它不使用机器上的登录:你给 OAR 一个 Cursor API 密钥。
本页介绍 Cursor 特有的内容。对话、队列和文件浏览器的工作方式与其他提供商相同;Cursor 的比较见提供商一览。
你需要什么 #
- 一个 Cursor API 密钥。你把它粘贴进 OAR 一次;见启用。
- 无需安装任何东西。Cursor 不需要机器上有 CLI 或 Cursor 应用,因此 Cursor 子选项卡没有 CLI 一行。
各项内容的位置:
| 内容 | 位置 |
|---|---|
| 智能体 | 中继所在机器上的一个 worker 进程,每个对话一个,位于对话的工作目录中。 |
| API 密钥 | 在那台机器的中继数据库中。面板绝不会再次显示它,也不会发送到浏览器。 |
| 智能体自身的状态 | 每个对话一个文件夹,在对话的第一轮创建。文件浏览器中的 Session(会话)会打开它。 |
默认情况下,状态文件夹在中继数据文件夹的 cursor- 下:全局安装时为 ~/.(Windows 上为 %APPDATA%\),git 检出时为 server/。0.9.14 新增 0.9.14 之前,全局安装会把它们放在包文件夹内,而更新会替换该文件夹,因此对话可能丢失它的智能体;文件夹仍存在的对话会继续使用它。CURSOR_ 会移动它们;见环境变量。
启用 #
打开 Settings → Providers → Cursor(设置 → 提供商 → Cursor)。面板标题为 Cursor SDK。
| 控件 | 默认值 | 作用 |
|---|---|---|
| Enable Cursor for New Chat model selection(在新建对话的模型选择中启用 Cursor) | 保存密钥后开启 | 在 New Chat(新建对话)中提供 Cursor。保存密钥之前无法勾选。 |
Cursor API key(Cursor API 密钥)(字段显示 Cursor API key…) |
空 | 你的密钥。保存后,字段显示为 Saved API key (enter to replace)。留空以保留已保存的密钥。 |
| Cursor model ID(Cursor 模型 ID) | composer- |
新的 Cursor 对话一开始所用的模型。空字段表示 composer-。 |
| Save Cursor settings(保存 Cursor 设置) | 保存密钥和模型。新密钥第一次会开启 Cursor。 | |
| Remove saved key(删除已保存的密钥) | 请求确认,然后删除密钥、已发现的模型和你在 Select Models(选择模型)中的选择,并关闭 Cursor。模型 ID 会保留。 |
字段下方的状态行会说明当前所处的状态:
| 状态 | 含义 |
|---|---|
Not configured. New conversations use Git |
没有保存密钥。 |
API key saved but currently disabled. Enable it to allow Cursor selection in New Chat. |
已保存密钥但开关关闭。 |
Cursor is enabled. Select Cursor in New Chat to use it. |
就绪。 |
保存会做什么:
- 模型发现。 当 Cursor 开启且你保存了新密钥、更改了模型或再次开启它时,OAR 会向 Cursor 询问你的密钥可用的模型,以及每个模型的推理选项。请求会在 20 秒后放弃。失败会在提示中显示为警告,例如
Cursor model discovery failed: …。在发现成功之前,列表只保留默认模型。 - 更换密钥。 保存新密钥会清空已发现的模型,并且如果 Cursor 已开启,会再次运行发现。当已有保存的密钥时,中继还会停止每一个 Cursor worker,包括处于一轮之中的,因此请在轮次之间保存新密钥。worker 会在下一条消息时用新密钥再次启动。
- 移除密钥在有任何 Cursor 对话已发送消息或有排队消息时会被拒绝:
Cannot remove Cursor API key while N active Cursor conversation(s) still exist. Disable Cursor for new conversations instead.。因此移除不会影响任何正在运行的轮次。请改为关闭 Cursor。移除成功后,尚未发送消息的对话会移回 Copilot。关闭 Cursor 不会移动它们。
然后照常开始对话:在 New Chat 中选择提供商 Cursor SDK。见开始对话。
模型与推理强度 #
列表的来源。 来自 Cursor 本身,通过你的密钥,在上述时刻读取。🤗 Select Models → Cursor SDK(选择模型 → Cursor SDK)决定输入区提供其中哪些模型;💾 Save enabled models(保存已启用的模型)保存选择,Refresh(刷新)再次运行发现。没有做选择时,会提供所有已发现的模型。Cursor model ID 中的模型始终提供。
按消息。 对话可以在一条消息到下一条之间更换模型和推理强度;Cursor 模型 ID 按 Cursor 的写法使用。不在提供给你的模型(已启用的那些,加上 Cursor model ID 和对话自己的模型)之中的 ID 会被拒绝,显示 Cursor model "…" is not available。
推理强度。 推理强度选项来自模型,按模型列出的为准。OAR 认识这些级别:none、low、medium、high、xhigh 和 max。Cursor 的 extra- 显示为 xhigh。OAR 不认识的级别不会被提供。
none始终在列表中。如果模型能关闭推理,none就会关闭推理。如果不能,输入区会把该条目显示为 default(默认),模型按正常方式运行。- 不列出任何推理强度的模型只有
none,显示为 default。 - 在有思考开关的模型上,选择某个级别会开启思考,
none会关闭它。
在其他模型上的子智能体。 Cursor 内置的子智能体菜单只提供少数模型。因此 OAR 会为你已在 Select Models 中启用的每个模型声明一个子智能体,这样智能体就能把任务交给例如 Grok 或 GPT 模型。名称使用连字符(grok- 变成 grok-)。子智能体运行其模型的默认变体:不能给它指定推理强度。更改选择会在下一条消息生效。
OAR 的功能在 Cursor 上的表现 #
| 功能 | 在 Cursor 上 |
|---|---|
| 中继模式 | plan 在 SDK 自己的计划模式下运行。agent 是正常模式。ask 和 autopilot 在模式更改时会把一行 [Relay mode: …] 放在你的消息前面。见中继模式。 |
| 提问卡片 | 通过 OAR 自己的 ask_ 工具,智能体被告知这是向你提问的唯一方式。最多 4 个问题,每个 2 到 6 个选项,可选多选。以普通回复文本写出的问题不会变成卡片。见 ask_。 |
| 计划看板 | Cursor 没有退出计划步骤。在 plan 模式下,当最终回复有至少两行项目符号或编号行时,OAR 会显示 Plan ready for review(计划已就绪,待审阅),带有 Implement in autopilot(以 autopilot 实施)、Stop here and prompt myself(到此为止,我自己写提示词)和 Stop here(到此为止)。以散文写出的计划不会有看板。 |
| 引导与排队 | 没有引导。在一轮期间发送的消息会在它后面等待,发送按钮显示为 Queue(加入队列)。见轮次与队列。Stop(停止)会结束正在运行的这一轮,即使在智能体等待你对问题的回答时也是如此。 |
| 后台任务 | 没有任务面板。当智能体开始后台工作时,会有一行活动显示 Background task <status>: …。 |
| 子智能体 | 每个都显示为一个子智能体,带有它的开始与结束,其文本、思考和工具调用出现在查看器中。只有一层:子智能体自己的子智能体不会显示。Stop 会结束整轮,而不是一个子智能体。 |
| 附件 | 最大 5 MB 的图片会在消息内交给智能体。更大的图片和其他文件会在消息中以路径形式交给智能体读取。 |
| 上下文显示 | 🧠 按钮显示模型窗口的总量和百分比,不含分类。当一轮做了多次模型调用时,该数字是估算,并会说明。窗口来自模型的列表,或在列表没有时来自内置表。 |
| 压缩 | OAR 既不设置也不显示自动压缩。/ 的用法与在其他提供商上相同。见压缩对话。 |
| 恢复 | 中继存储 Cursor 智能体的 ID,并在重启或 worker 句柄关闭后恢复该智能体。如果无法恢复,会创建一个新的。见重启与恢复。 |
| 智能体工具 | preview 和 relay_ 会作为工具交给智能体。relay_ 只在中继有已配对中继或已开启智能体会话时存在。见智能体工具和智能体会话。 |
工作目录下 . 文件夹中 Cursor 自己的项目规则、子智能体文件和 MCP 服务器不会被加载。OAR 自己定义智能体的工具和子智能体。
长时间空闲的智能体 #
30 分钟未使用的 Cursor 智能体会在下一条消息时被关闭并重新打开,因为它的登录在空闲几小时后会过期。你看不到这个过程。如果登录仍然过期,OAR 会重建智能体并再次发送消息,最多两次,并添加活动行 Cursor session re-。第三次失败会以无法正常工作时中的登录消息结束该轮。
用量 #
Cursor 轮次在回复下方没有用量行。📊 Check Usage(查看用量)有一张 Cursor 卡片。当 Cursor 关闭时,它显示 Cursor is not enabled in provider settings.。它的数字来自两个来源,卡片会说明它使用了哪一个。
来自 OAR 的花费,一个估算。 每轮之后,OAR 从 Cursor 读取智能体的已计费花费,并把增量计入当前计费周期。它把每一轮归到运行它的模型的额度池下:
| 额度池 | 模型 |
|---|---|
| Cursor Models(Cursor 模型) | 以 composer、cursor-、cheetah 或 sonic 开头,或包含 grok 的名称。 |
| Other Models(其他模型) | 包含 claude、sonnet、opus、haiku、fable、codex、gemini、deepseek、kimi、qwen、llama、mistral 或 minimax,或以 gpt、glm,或 o 加一个数字开头的名称。 |
| Unclassified(未分类) | auto、cost、balance、intelligence、任何包含 router 的名称,以及所有不符合上述两个额度池的名称。仅在有花费时显示,并注明 Cursor 未说明由哪个额度池提供服务。 |
匹配不区分大小写,且 router 名称会优先检查。
Cursor 不会告诉 SDK 你的套餐包含什么。由你输入:
| 控件 | 默认值 | 作用 |
|---|---|---|
| Cursor Models pool (USD)(Cursor Models 额度池,USD) | 空 | 该额度池的每月额度。空字段会清除它,卡片只显示花费。 |
| Other Models pool (USD)(Other Models 额度池,USD) | 空 | 另一个额度池同理。 |
| Billing resets on day of month(每月计费重置日) | 1 |
周期重新开始的日期,1 到 31。在天数更少的月份,使用该月的最后一天。 |
| Save allowances(保存额度) | 保存这三个字段。 | |
| Reset tracked spend(重置已记录的花费) | 请求确认,保存这三个字段,然后清除当前周期的合计。在更换套餐或账户后使用。OAR 会从智能体当前的合计开始计数,因此过去的花费不会重复计算。 |
计量条按原始模型成本对照你的额度进行衡量。卡片还会列出 Cursor 实际收取的费用,对套餐内使用这通常为零。所有这些数字都是估算。Cursor 延迟报告的成本会与看到它的那一轮一起入账。Cursor 自己的 Spending 仪表盘才是权威来源,卡片会链接到它。
实时套餐进度条,来自仪表盘。 有了仪表盘会话令牌,卡片会增加 Plan usage (total)(套餐用量,总计)、Auto + Composer 和 API 条,实时从 Cursor 的仪表盘读取,还有套餐名称、包含的和按需的花费,以及周期的真实日期。本地额度池计量条随即退居次要。该令牌是会话 cookie,不是 API 密钥,API 密钥无法读取这些数字。
| 控件 | 作用 |
|---|---|
| Dashboard session token (live plan bars)(控制台会话令牌,实时套餐进度条) | 来自已登录 cursor.com 标签页的 Workos cookie 值(在浏览器开发者工具的 Application → Cookies 下)。 |
| Save token(保存令牌) | 保存它。该字段不接受空格,最多 8192 个字符。 |
| Remove(移除) | 请求确认,然后删除你保存的令牌。来自环境或 Cursor 应用的令牌仍在使用。 |
OAR 按此顺序查找令牌:
- 你保存的那个。
- 中继环境中的
CURSOR_,用于没有 Cursor 应用的主机。SESSION_ TOKEN - 中继机器上 Cursor 应用的登录,无需设置即可从其本地状态读取。
字段下方的状态行会说明正在使用的来源。令牌留在中继上,绝不会发送到浏览器。如果 Cursor 不接受该令牌,卡片会回退到估算,并说明被拒绝的是哪个来源,或没有找到令牌。
智能体可以用 relay_ 的 usage 操作读取同样的数字。
环境变量 #
在中继启动时的环境中设置这些变量。
| 变量 | 效果 |
|---|---|
CURSOR_ |
实时套餐进度条所用的仪表盘会话令牌。你在面板中保存的令牌优先于它;它优先于 Cursor 应用的登录。 |
CURSOR_ |
存放每个对话智能体状态的文件夹,取代中继数据文件夹中的 cursor-。Session 按钮会跟随它。 |
OAR_、OAR_、OAR_ |
Cursor 轮在失败前可以沉默多久:无任何进行中事项时 120 秒,模型请求期间 5 分钟,工具调用期间 30 分钟;0 表示无上限。见轮次与队列。在会话于 tmux 下运行时不会传给智能体:见哪些变量会到达智能体。 |
API 密钥无法这样设置:中继会从面板把密钥传给它的 worker,并忽略其自身环境中的 CURSOR_。
限制 #
除上表中的缺口外(没有引导、没有任务面板、没有压缩设置、只有一层子智能体):
- 提问卡片取决于智能体调用
ask_。user - 花费和额度是估算。只有仪表盘条来自 Cursor。
- Cursor 套餐上的用量上限不会暂停对话。该轮像任何失败的轮一样失败,你重新发送消息。
无法正常工作时 #
| 你看到的 | 原因与处理 |
|---|---|
回复说 System note: the Cursor runtime could not authenticate (…). Set or renew the Cursor API key in provider settings, then retry. |
即使在 OAR 重建智能体两次之后,Cursor 仍拒绝了密钥。在 Settings → Providers → Cursor 下粘贴有效密钥并保存。 |
New Chat 中没有 Cursor,或开始时因 Cursor API key is not configured 失败 |
没有保存密钥。保存一个。 |
状态行显示 API key saved but currently disabled. |
勾选 Enable Cursor for New Chat model selection。 |
保存后出现 Cursor model discovery failed: … 或 Cursor model discovery returned no models |
密钥错误,或 Cursor 未在 20 秒内回答。检查密钥并重新保存,或在 🤗 Select Models 中使用 Refresh。在那里失败的刷新会说 Cursor model discovery failed. Cached Cursor models were kept: …。 |
Cursor model "…" is not available |
该模型不在你的密钥对应的列表中。刷新列表,或选择其他模型。 |
Invalid Cursor model ID |
Cursor model ID 含有模型 ID 中不允许的字符。从模型列表复制该 ID。 |
System note: the Cursor runtime sent nothing for Ns while a model request was running, so the relay ended the turn. |
该轮在它的窗口之外一直沉默(见环境变量),OAR 取消了它。重新发送消息。见轮次与队列。 |
同样内容,但为 … while a tool was running (…) |
一条命令静默运行了 30 分钟。调高 OAR_,或设为 0 表示无上限。 |
System note: the turn completed without a text reply. |
智能体在没有写出任何内容的情况下结束了。问它做了什么。 |
Cannot remove Cursor API key while N active Cursor conversation(s) still exist. |
归档或删除那些对话,或改为关闭 Cursor。 |
| Check Usage 中的 Cursor 卡片只显示估算,并说没有找到令牌 | 中继机器上没有 Cursor 应用登录。在 Dashboard session token 下粘贴令牌,或设置 CURSOR_。 |
Live plan bars unavailable — Cursor did not accept … |
令牌已过期。再次登录 Cursor 应用,或保存一个新令牌。 |
That does not look like a Workos |
粘贴的文本含有空格或换行,或超过 8192 个字符。只复制 cookie 的值。 |
| Session 按钮变灰 | 该对话还没有过一轮。 |