a4phone 内置外出模式(手机优先)与终端优先模式两种交互模式:外出模式下提问与权限请求优先推送到手机,超时后终端兜底;终端优先模式下一切交互直接走终端,手机完全不参与。两种模式通过 a4p out / a4p home 一键切换、即时生效,无需重启会话。本文章介绍两种模式的行为差异、切换命令与续聊期间的自动切换机制。

1. 模式对比

维度 外出模式(out) 终端优先模式(home,默认)
切换命令 a4p out a4p home
提问交互 推送到手机点选 / 文字作答,超时终端兜底 直接走终端,手机不参与
权限请求 推送到手机 Approve / Deny / Always Approve 直接走终端审批
任务完成通知 电脑弹窗 + 手机推送 电脑弹窗 + 手机推送(不受模式影响)
适用场景 离开电脑外出办公 坐在电脑前正常使用
生效方式 即时生效,无需重启会话 即时生效

1.1 模式判断流程

graph LR A[事件触发
提问 / 权限请求] --> B{读取模式
mode.json} B -->|home| C[终端原生交互
手机不参与] B -->|out| D[推送到手机] D --> E{手机是否
按时回复} E -->|是| F[决策回传
注入会话] E -->|否| C style A fill:#e8f4f8,stroke:#1a6b8a,stroke-width:2px style B fill:#ebdef0,stroke:#8e44ad,stroke-width:2px style C fill:#fdebd0,stroke:#b7950b,stroke-width:2px style D fill:#fadbd8,stroke:#c0392b,stroke-width:2px style E fill:#ebdef0,stroke:#8e44ad,stroke-width:2px style F fill:#d5f5e3,stroke:#27ae60,stroke-width:2px

2. 模式存储与切换

2.1 模式存储

当前模式存储在 ~/.a4phone/mode.json

{
  "mode": "out"
}

模式读取失败时默认按终端优先模式(home)处理,保证配置异常时行为安全。

2.2 切换命令

a4p out        # 切换为外出模式(手机优先)
a4p home       # 切换为终端优先模式(默认)
a4p status     # 查看当前模式

切换即时生效:Hook 每次事件都会重新读取模式文件,无需重启 AI 会话。

3. 模式对各项功能的影响

功能 外出模式 终端优先模式
任务完成通知 电脑弹窗 + 手机推送 电脑弹窗 + 手机推送(无差别)
AI提问交互 手机点选 / 文字作答 终端原生提问
权限请求交互 手机 Approve / Deny / Always 终端原生审批
远程续聊 正常(续聊期间自动锁定外出模式) 正常

4. 续聊期间的自动切换

远程续聊(a4p resume / a4p listen)期间,人在手机端操作,a4phone 会自动临时切换为外出模式,确保续聊回合内触发的提问与审批推送到手机,形成完整闭环;续聊结束后自动恢复原模式,不影响你回到电脑后的使用习惯。

graph LR A[续聊开始
人在手机端] --> B[记录原模式] B --> C[临时切换
外出模式] C --> D[续聊回合
提问/审批走手机] D --> E[续聊结束] E --> F[恢复原模式] style A fill:#e8f4f8,stroke:#1a6b8a,stroke-width:2px style B fill:#d6eaf8,stroke:#1a6b8a,stroke-width:2px style C fill:#ebdef0,stroke:#8e44ad,stroke-width:2px style D fill:#fadbd8,stroke:#c0392b,stroke-width:2px style E fill:#d5f5e3,stroke:#27ae60,stroke-width:2px style F fill:#fdebd0,stroke:#b7950b,stroke-width:2px

5. 常见问题

问:外出模式下手机没收到提问推送,AI 会卡住吗?

答:不会。提问推送后 a4phone 等待 timeout 秒(默认 60,planTimeout 默认 300),超时后自动回退终端原生提问,AI 不会被永久阻塞。

问:模式切换需要重启 Claude Code / Codex / DSH 会话吗?

答:都不需要。模式存储在 ~/.a4phone/mode.json,三个 Agent 都在每次事件时实时重新读取:Claude Code / Codex 的 Hook 每次事件读取模式文件,DSH 的 dsh-hook 插件同样在每次 tools/executeapproval/request 事件时调用 readMode() 判断,切换即时生效,无需重启任何会话。

问:任务完成通知受模式影响吗?

答:不受影响。任务完成通知在两种模式下都会推送到手机(前提是已配置话题)。