MOSHLINE
MOSHLINE / DOCS运行手册展开 +
文档/智能体控制02

审批与“Confirm on Mac”

审批卡片可以描述真实请求,但不一定持有能够回答它的通道。只有路由真实且仍在有效期内时,Moshline 才展示远程动作。

更新时间: 2026-07-23适用范围: Host Helper 的 bridge_relay 与 host_local 审批范围

完成后

你可以判断手机动作是否真的会解除 Agent 阻塞,理解哪些请求保持 host-local,以及超时和风险策略如何改变可用动作。

可见与可控制是两个事实

Hook 可以上报观察到的权限请求。远程审批还要求 Provider Hook 保持阻塞、Moshline 保留精确请求身份,并且 Provider 定义了可写回 stdout 的 allow/deny 协议。

Moshline 用 approval_scope 记录这一区别。bridge_relay 表示存在同步路径;host_local 表示信息真实可读,但必须在 Provider 所在主机回答。

当前审批路由

路径手机动作如何抵达 Agent降级
Claude Code PermissionRequest + 当前 HookRelay 有效期内 Approve / DenyHook stdout 返回 Claude allow / deny JSONClaude 本机权限界面
没有同步通道的 Claude 事件Confirm on Mac / Open Terminal不发送远程决定Claude 本机界面
Codex 原生 HookConfirm on Mac / Open Terminal只观察事件Codex 本机界面
其他观察型 Provider HookConfirm on Mac / Open Terminal只观察事件Provider 本机界面
Bridge 托管兼容 RunnerRunner 活跃时 Approve / DenyRunner 专用协议响应Runner 或终端提示
Apple Watch低风险动作经 iPhone 转发复用可信移动路由打开 iPhone 或终端

Claude Relay 如何抵达被阻塞的 Hook

  1. 01Claude 调用 Moshline PermissionRequest Hook 并等待。
  2. 02Hook 把请求连同 awaiting_decision 与截止时间发给本机 Host daemon。
  3. 03Daemon 返回已保存的 event ID;Hook 对带鉴权的决策端点进行长轮询。
  4. 04iPhone 或 Watch 提交绑定到精确 request 与 agent run 的决定。
  5. 05Daemon 记录 permission.decided 并唤醒对应 Hook waiter。
  6. 06Hook 把 Claude 所需的 allow 或 deny JSON 写入 stdout,Provider 解除阻塞。

超时或网络失败会发生什么

  • 过期 Relay 不再接受迟到的移动决定。
  • Bridge 不可达或没有有效决定时,Hook stdout 保持为空。
  • 空 stdout 会把控制权交回 Provider 正常的本机权限提示。
  • Inbox 保留事件上下文,但在路由过期后移除远程动作。
  • Open Terminal 仍可用于完整上下文和手动确认。

风险策略仍然生效

技术上可达并不表示适合所有表面。Apple Watch 只展示 iPhone 判断为可在有限上下文下安全操作的决定;高风险或未知请求应在 App 或终端查看命令、cwd、风险、策略与 reason 后再处理。

“Confirm on Mac”到底表示什么

它通常表示 Moshline 收到了真实请求,但没有该 Provider 的有效同步回复通道,或者原本有效的 Relay 已过期。它不一定是配对或通知故障。

  • 打开对应终端会话,在 Provider 提示中回答。
  • Claude Code 若长期没有远程动作,重跑 Host Helper setup 以刷新 PermissionRequest Hook。
  • Codex 中信任当前 Hook 定义以保持事件可见;原生远程审批仍是 host-local。
  • 不要在 Relay 截止时间后反复操作旧通知。

相关文档