Cursor

Nexting Devices 集成

用实体硬件介入 Cursor

让可信 Host 保管会话和凭证,只把需要你判断的一次性审批与实时状态发送到身边的按键、LED 或屏幕。

今天能做什么

这是 Cursor 与 Nexting Devices 当前已经冻结并可测试的公共表面。

批准或拒绝用两个实体按键回答符合条件的一次性审批。已发布 · approval/1
查看运行状态用 LED 或屏幕显示 Agent 是否正在思考、工作、等待、完成或出错。已发布 · status/1
接入完整物理控件方向键、命令键、旋钮、按住说话、屏幕文本、用量和远程配置都已有冻结 Profile。SDK 0.3 · 已发布
协议已经发布,但 App Store 2.4 尚未注册第三方开发者设备。当前请用公开协议与固件检查完成设备验证。

工作方式

  1. Agent 发起请求

    Cursor 遇到需要用户决定的一次性操作。
  2. 可信 Host 过滤

    Host 核对请求类型、选项和风险字段,只下发符合资格的最小摘要。
  3. 硬件回答

    用户操作由开发者映射的实体控件;设备只回传当前请求的 allow 或 deny 选择。
  4. Agent 继续运行

    Host 权威提交答案并解决硬件状态,Agent 从同一会话继续。
开发者映射的实体控件映射用户得到什么
你定义的确认控件approval/1 → allow批准当前一次性请求
你定义的取消控件approval/1 → deny拒绝当前一次性请求
LED / 屏幕行status/1 → slot查看一个易失 Agent 状态

为什么可以信任

信任来自 LE Secure Connections 与 encrypted GATT、本地 Host 凭证隔离、最少披露,以及有效期、重放防护和 single consumption。Developer Reference 的 Just Works 只是加密配对;量产仍需要 authenticated application identity。

控制Nexting 的实现边界
BLE LE Secure Connections本地设备链路使用 BLE LE Secure Connections,并要求控制流量使用加密 GATT 权限。
opaque request IDAgent 凭证及内部账号、会话路由留在可信 Host;固件只接收不透明请求 ID 等有界 Profile 数据。
single consumptionHost 校验授权、有效期、序列或修订号、重复与重放状态,以及单次消费。
state and partial-frame clearing on disconnect断开连接、重启、重新绑定、重置或 Host 撤销会清除相应的易失状态与残缺帧。
voice/1voice/1 只控制 Host 麦克风生命周期,绝不承载音频字节或转写文本。
Just WorksDeveloper Reference 的 Just Works 配对会加密链路,但量产设备需要经过认证的应用身份和签名固件。

技术契约

设备只与 Nexting Host 说 BLE;Host 负责把有界审批转换为 Cursor 会话动作。固件不保存 Agent 凭证,也不解析提示词。

官方接口依据

Nexting 的深度集成分两层:历史与侧栏来自 Cursor Desktop;手机写入走官方 Cursor Agent CLI 的 ACP(session/new 或 session/resume,再 session/prompt)。Host 只把恰好为 allow_once + reject_once 的 session/request_permission 投影到 approval/1。Cursor.app Agents 窗口是观众,不接受硬件按键注入。

官方请求可下发到 approval/1Allow 选择Deny 选择
session/request_permission仅恰好两个选项,kind 为 allow_once 与 reject_once选中 kind=allow_once 的选项选中 kind=reject_once 的选项
allow_always · cursor/ask_question · cursor/create_plan不下发;留在手机或电脑——
allow_always、多选项、提问、计划和任何未知或缺字段请求都不会进入参考审批控制器。官方 ACP 取消该权限时,Host 撤销对应的 BLE 请求。Desktop 任务 UUID 不能注入;可写路径是同一 cwd 的 ACP twin。

审批交换

Host ↔ 设备json
Host → device   {"v":1,"t":"present","id":"3bb7","sum":"Run tests?","opt":["allow","deny"],"ttl":30000}
device → Host   {"v":1,"t":"answer","id":"3bb7","ch":"allow"}
Host → device   {"v":1,"t":"resolved","id":"3bb7","r":"answered"}

固件按键处理只调用 nexting_device_state_choose(&approval, NEXTING_DEVICE_CHOICE_ALLOW, now_ms(), &answer),再编码并 notify。SDK 负责倒计时、1 秒重发和终结状态。

状态显示

设备在 Device Info 声明一到八个 statusSlots。帧中未出现的槽位为空;断开连接时清空全部状态。

状态帧

Host → 设备json
{"v":1,"t":"status","agents":[{"slot":0,"state":"thinking","label":"fix login bug"}]}

完整物理控件接口

以下七个 Profile 已在 SPEC、共享测试向量、C99 和 JavaScript 参考实现中发布。设备只报告通用物理事件;具体把某个按键映射成 fork、send 或 fast,仍由官方 App 的 Agent 适配器决定。

Profile方向硬件能做什么消息
navigation/1双向多选项导航与确认nav_present · nav_move · nav_select · nav_resolved
keys/1双向通用按键事件、标签与灯光keymap · key_event
rotary/1双向会话和模型切换rotary_map · rotary_event · rotary_press
voice/1双向按住/松开/取消说话voice_event · voice_state
text/1Host → 设备显示有界纯文本text
usage/1Host → 设备显示模型与用量计数usage · usage_clear
config/1双向原子更新键位、灯光和显示偏好config · config_result
voice/1 只发送按住说话控制,不传音频和转写。录音、权限和语音识别由 Host 麦克风与 Host App 负责。设备也不会收到 Agent 凭证、内部会话 ID 或账号信息。

按键和旋钮事件

设备 → Hostjson
{"v":1,"t":"key_event","slot":3,"event":"press","seq":18}
{"v":1,"t":"rotary_event","slot":0,"delta":1,"seq":19}
{"v":1,"t":"voice_event","event":"start","seq":20}

seq 让 Host 丢弃重放和乱序输入。键号、旋钮号和 Profile 必须先由 Device Info 声明;Host 未支持的 Profile 不会收发。