Codex
Nexting Devices 集成
用实体硬件介入 Codex
让可信 Host 保管会话和凭证,只把需要你判断的一次性审批与实时状态发送到身边的按键、LED 或屏幕。
今天能做什么
这是 Codex 与 Nexting Devices 当前已经冻结并可测试的公共表面。
工作方式
Agent 发起请求
Codex 遇到需要用户决定的一次性操作。可信 Host 过滤
Host 核对请求类型、选项和风险字段,只下发符合资格的最小摘要。硬件回答
用户操作由开发者映射的实体控件;设备只回传当前请求的 allow 或 deny 选择。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 ID | Agent 凭证及内部账号、会话路由留在可信 Host;固件只接收不透明请求 ID 等有界 Profile 数据。 |
| single consumption | Host 校验授权、有效期、序列或修订号、重复与重放状态,以及单次消费。 |
| state and partial-frame clearing on disconnect | 断开连接、重启、重新绑定、重置或 Host 撤销会清除相应的易失状态与残缺帧。 |
| voice/1 | voice/1 只控制 Host 麦克风生命周期,绝不承载音频字节或转写文本。 |
| Just Works | Developer Reference 的 Just Works 配对会加密链路,但量产设备需要经过认证的应用身份和签名固件。 |
技术契约
设备只与 Nexting Host 说 BLE;Host 负责把有界审批转换为 Codex 会话动作。固件不保存 Agent 凭证,也不解析提示词。
官方接口依据
Nexting 的深度集成建立在官方 Codex App Server 上:它负责线程、审批与流式 Agent 事件;高层 Codex SDK 更适合服务端自动化。App Server 留在用户电脑本地,Nexting Bridge 只转发经过认证的最小事件,绝不把 App Server 直接暴露到公网。
| App Server 请求 | 可下发到 approval/1 | Allow 选择 | Deny 选择 |
|---|---|---|---|
| item/commandExecution/requestApproval | 仅显式且精确为 accept / decline;有可读 command;无提权字段 | {"decision":"accept"} | {"decision":"decline"} |
| item/fileChange/requestApproval | 仅一次性选择;有可读 reason;没有 grantRoot | {"decision":"accept"} | {"decision":"decline"} |
| item/permissions/requestApproval · item/tool/requestUserInput · mcpServer/elicitation/request | 不下发;留在手机或电脑 | — | — |
审批交换
Host → device {"v":1,"t":"present","id":"3bb7","sum":"Apply patch to 3 files?","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。帧中未出现的槽位为空;断开连接时清空全部状态。
状态帧
{"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/1 | Host → 设备 | 显示有界纯文本 | text |
| usage/1 | Host → 设备 | 显示模型与用量计数 | usage · usage_clear |
| config/1 | 双向 | 原子更新键位、灯光和显示偏好 | config · config_result |
按键和旋钮事件
{"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 不会收发。