Skip to content

[Feature] 手机端:配对码接入 + 审批推送,把手机当「注意力设备」(借鉴 T3 Code) #1162

Open

Description

@j1749772215-pixel

背景

Codeg 已经有 iOS App、Android APK,以及 Telegram / 飞书 / 微信三个聊天入口,这部分不缺。缺的是手机作为「注意力设备」的专门设计:

  • 接入方式是「填 baseURL + 粘贴共享的 CODEG_TOKEN」,没有一次性配对,也没有限权;
  • 手机上主要是「看聊天、发消息」,没有把「批准 / 拒绝一次工具调用」「看到 agent 进度」「任务完成提醒」做成手机端的主路径;
  • 权限上手机拿到的令牌和桌面一样大(含 terminal / filesystem 写),这与「出门在外只批不改」的使用场景不匹配。

参考 T3 Code(MIT,0.1.9)。它把手机明确当作「注意力设备」来设计,而不是缩小版桌面。

T3 Code 的做法

1. 手机接入 = 扫配对码,不是填令牌

t3 pair [--scope ...] [--ttl 5m] [--label <name>]
  • 一次性配对码,默认 5 分钟过期,二维码直接扫;
  • --scope 限制这台设备能干什么(16 个 scope,从 orchestration:read 到 filesystem:write);
  • 服务端 auth_pairing_links → auth_sessions,Settings → Connections 里能看到每台设备并随时撤销。

2. 审批可以从任意客户端回答

权限模式是 Supervised / Auto-accept edits / Auto / Full access 四档。手机端典型用法:保持 Supervised,桌面照常干活,手机上只出现「待批准」的那一步,批完桌面立刻继续。同一个 thread 的审批请求不绑定客户端。

3. 推送是产品的一部分

t3 connect publish   # 把 agent 活动发布给手机客户端(推送通知 + Live Activities)

也就是说锁屏上能看到「正在跑哪个项目、哪一步、还要多久」,任务结束时收推送——不是靠你回去盯页面。

4. 通路按场合选

LAN 直连(同 Wi-Fi 最快)、Tailscale(--tailscale,只对 tailnet 可见,不开公网端口)、T3 Connect(账号穿透,外网可用)。

建议 Codeg 怎么落

第一步:配对码 + 最小权限令牌(和 #1160「多机协作」共用底座)

  • POST /api/pair 生成一次性码(TTL 5 分钟),手机扫码兑换成会话令牌;
  • 手机端首批只给三个 scope:session:read、approval:answer、session:interrupt;
  • 设置页显示「已连接设备」列表,可撤销。

第二步:审批卡片做成一等 UI

  • 后端把 ACP 的 approval / question 请求单独归类(acp/question.rs 已有基础),提供一个 /api/approvals?state=pending 的聚合视图;
  • 手机端首页默认就是「待我批的」列表,点进去看到 diff 摘要 + 工具名 + 影响范围,按钮「允许 / 允许并记住 / 拒绝」;
  • 走 APNs / FCM 推一条;如果没有推送通道,复用现有 chat_channel:给 TG 发一条带 inline 按钮的消息,点按钮即批准(这条几乎零成本,可以先做)。

第三步:进度与完成回执

  • 「正在跑」的会话在锁屏/小组件上显示状态(简化版即可:项目名 + 当前工具 + 已跑时长);
  • 任务结束/失败/需要人时推一条通知,点开直达那条会话。

第四步(可选):手机端默认只读

设置里给「手机端默认权限」开关:只读 / 可批准 / 全权,默认「可批准」。

验收标准

  • 手机扫码 30 秒内接入,且权限只有读 + 批准;
  • 桌面上 agent 请求批准时,手机 5 秒内收到,批准后桌面立即继续;
  • 撤销设备后该令牌立即失效;
  • 任务完成时锁屏收到通知,点开直达会话;
  • 手机端不提供「写文件 / 开终端」入口(除非用户显式提权)。

参考

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions