所有页面
本页内容

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-agents 下:全局安装时为 ~/.oar/data/cursor-agents(Windows 上为 %APPDATA%\oar\data\cursor-agents),git 检出时为 server/data/cursor-agents。0.9.14 新增 0.9.14 之前,全局安装会把它们放在包文件夹内,而更新会替换该文件夹,因此对话可能丢失它的智能体;文件夹仍存在的对话会继续使用它。CURSOR_AGENT_STORE_DIR 会移动它们;见环境变量。

启用 #

打开 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-2.5 新的 Cursor 对话一开始所用的模型。空字段表示 composer-2.5。
Save Cursor settings(保存 Cursor 设置) 保存密钥和模型。新密钥第一次会开启 Cursor。
Remove saved key(删除已保存的密钥) 请求确认,然后删除密钥、已发现的模型和你在 Select Models(选择模型)中的选择,并关闭 Cursor。模型 ID 会保留。

字段下方的状态行会说明当前所处的状态:

状态 含义
Not configured. New conversations use GitHub Copilot. 没有保存密钥。
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-high 显示为 xhigh。OAR 不认识的级别不会被提供。

  • none 始终在列表中。如果模型能关闭推理,none 就会关闭推理。如果不能,输入区会把该条目显示为 default(默认),模型按正常方式运行。
  • 不列出任何推理强度的模型只有 none,显示为 default。
  • 在有思考开关的模型上,选择某个级别会开启思考,none 会关闭它。

在其他模型上的子智能体。 Cursor 内置的子智能体菜单只提供少数模型。因此 OAR 会为你已在 Select Models 中启用的每个模型声明一个子智能体,这样智能体就能把任务交给例如 Grok 或 GPT 模型。名称使用连字符(grok-4.5 变成 grok-4-5)。子智能体运行其模型的默认变体:不能给它指定推理强度。更改选择会在下一条消息生效。

OAR 的功能在 Cursor 上的表现 #

功能 在 Cursor 上
中继模式 plan 在 SDK 自己的计划模式下运行。agent 是正常模式。ask 和 autopilot 在模式更改时会把一行 [Relay mode: …] 放在你的消息前面。见中继模式。
提问卡片 通过 OAR 自己的 ask_user 工具,智能体被告知这是向你提问的唯一方式。最多 4 个问题,每个 2 到 6 个选项,可选多选。以普通回复文本写出的问题不会变成卡片。见 ask_user。
计划看板 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 既不设置也不显示自动压缩。/compact 的用法与在其他提供商上相同。见压缩对话。
恢复 中继存储 Cursor 智能体的 ID,并在重启或 worker 句柄关闭后恢复该智能体。如果无法恢复,会创建一个新的。见重启与恢复。
智能体工具 preview 和 relay_tool 会作为工具交给智能体。relay_tool 只在中继有已配对中继或已开启智能体会话时存在。见智能体工具和智能体会话。

工作目录下 .cursor 文件夹中 Cursor 自己的项目规则、子智能体文件和 MCP 服务器不会被加载。OAR 自己定义智能体的工具和子智能体。

长时间空闲的智能体 #

30 分钟未使用的 Cursor 智能体会在下一条消息时被关闭并重新打开,因为它的登录在空闲几小时后会过期。你看不到这个过程。如果登录仍然过期,OAR 会重建智能体并再次发送消息,最多两次,并添加活动行 Cursor session re-authenticated; retrying this message on a fresh agent handle.。第三次失败会以无法正常工作时中的登录消息结束该轮。

用量 #

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 标签页的 WorkosCursorSessionToken cookie 值(在浏览器开发者工具的 Application → Cookies 下)。
Save token(保存令牌) 保存它。该字段不接受空格,最多 8192 个字符。
Remove(移除) 请求确认,然后删除你保存的令牌。来自环境或 Cursor 应用的令牌仍在使用。

OAR 按此顺序查找令牌:

  1. 你保存的那个。
  2. 中继环境中的 CURSOR_SESSION_TOKEN,用于没有 Cursor 应用的主机。
  3. 中继机器上 Cursor 应用的登录,无需设置即可从其本地状态读取。

字段下方的状态行会说明正在使用的来源。令牌留在中继上,绝不会发送到浏览器。如果 Cursor 不接受该令牌,卡片会回退到估算,并说明被拒绝的是哪个来源,或没有找到令牌。

智能体可以用 relay_tool 的 usage 操作读取同样的数字。

环境变量 #

在中继启动时的环境中设置这些变量。

变量 效果
CURSOR_SESSION_TOKEN 实时套餐进度条所用的仪表盘会话令牌。你在面板中保存的令牌优先于它;它优先于 Cursor 应用的登录。
CURSOR_AGENT_STORE_DIR 存放每个对话智能体状态的文件夹,取代中继数据文件夹中的 cursor-agents。Session 按钮会跟随它。
OAR_TURN_STALL_IDLE_MS、OAR_TURN_STALL_MODEL_MS、OAR_TURN_STALL_TOOL_MS Cursor 轮在失败前可以沉默多久:无任何进行中事项时 120 秒,模型请求期间 5 分钟,工具调用期间 30 分钟;0 表示无上限。见轮次与队列。在会话于 tmux 下运行时不会传给智能体:见哪些变量会到达智能体。

API 密钥无法这样设置:中继会从面板把密钥传给它的 worker,并忽略其自身环境中的 CURSOR_API_KEY。

限制 #

除上表中的缺口外(没有引导、没有任务面板、没有压缩设置、只有一层子智能体):

  • 提问卡片取决于智能体调用 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_TURN_STALL_TOOL_MS,或设为 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_SESSION_TOKEN。
Live plan bars unavailable — Cursor did not accept … 令牌已过期。再次登录 Cursor 应用,或保存一个新令牌。
That does not look like a WorkosCursorSessionToken cookie value 粘贴的文本含有空格或换行,或超过 8192 个字符。只复制 cookie 的值。
Session 按钮变灰 该对话还没有过一轮。