a4phone 是一个通过 ntfy.sh 实现 Claude Code / Codex / DSH(DeepSeek Harness)远程手机交互的开源 npm 包:任务完成时在电脑弹窗并把 AI 最后输出的一段话推送到手机;AI 提问或请求权限时在手机上点选按钮或直接输入文字作答;出门在外时向手机发送文字即可远程续聊最近会话,形成完整的远程对话闭环。本文章为文档库入口,概述项目背景、功能全景、安装与快速开始,并给出各功能文档的导航。
源码仓库
- a4phone 源码(GitHub),本项目的开源仓库,可查看源码、提交 Issue 或参与贡献。
- a4phone npm 包,通过 npm 安装使用。
1. 项目简介
a4phone 以 a4p 为命令行入口,通过 Hook(Claude Code / Codex)与 Cordis 插件(DSH)拦截 AI 助手的会话事件,借助免费的 ntfy.sh 推送服务在手机与电脑之间传递通知、提问、权限决策与续聊消息。整个项目零第三方依赖(仅使用 ntfy.sh 免费服务,不依赖 Google 服务),安装一个包、运行一条命令即可完成全部配置。
1.1 项目定位
| 维度 | 说明 |
|---|---|
| 项目名称 | a4phone |
| 命令行入口 | a4p |
| 适用对象 | Claude Code、Codex、DeepSeek Harness(DSH) |
| 消息通道 | ntfy.sh(默认公共服务,可自建) |
| 运行环境 | Node.js 18+,Windows / macOS / Linux |
| 开源协议 | MIT |
| 当前版本 | 1.4.2(详见版本更新说明) |
| 源码地址 | GitHub、npm |
1.2 功能全景
| 功能 | 一句话说明 | 详细文档 |
|---|---|---|
| 任务完成通知 | Stop 事件触发,电脑弹窗 + 手机推送 AI 最后输出 | 任务完成通知 |
| AI 提问交互 | 提问推送到手机,点选选项或文字自由作答 | AI提问交互 |
| 权限请求交互 | 手机 Approve / Deny / Always Approve | 权限请求交互 |
| 双模式切换 | 外出模式(手机优先)/ 终端优先模式一键切换 | 双模式切换 |
| 远程续聊 | 手机向主话题发文字,自动续聊最近会话 | 远程续聊 |
| DSH 支持 | 一键挂载 dsh-hook 插件,DeepSeek Harness 同样支持手机交互与续聊 | DSH支持与插件挂载 |
| 后台守护进程 | a4p listen 无窗口后台运行续聊服务 |
后台守护进程与开机自启 |
| 开机自启 | Windows 登录时自动运行续聊守护进程 | 后台守护进程与开机自启 |
| 自动更新提醒 | 发现 npm 新版本时终端提示 + 手机推送 | 自动更新提醒 |
| 命令参考 | 全部 a4p 命令速查 |
命令参考 |
| 配置说明 | ~/.a4phone/config.json 及全部状态文件 |
配置说明 |
| 版本更新说明 | 1.0.0 至 1.4.2 的流水线式演进记录 | 版本更新说明 |
安装与使用教程可参考仓库中的 一键配置DeepSeek Harness等Agent桌面、手机提醒教程,本文档库侧重功能介绍与机制解析。
2. 安装
a4phone 通过 npm 全局安装,一条命令即可完成:
npm install -g a4phone
2.1 安装前置条件
| 条件 | 说明 |
|---|---|
| Node.js 18+ | a4phone 使用原生 fetch 与 ES Module,需 Node 18 及以上 |
| ntfy App | 手机端安装 ntfy 客户端(iOS App Store / Android GitHub Releases) |
| AI 编程助手 | 已安装并配置好 Claude Code、Codex 或 DeepSeek Harness 之一 |
| DSH(可选) | 如需 DSH 手机交互,需已安装并运行 DeepSeek Harness |
2.2 验证安装
a4p --version # 输出当前版本号,如 1.4.2
a4p help # 显示全部命令帮助
3. 快速开始
3.1 运行安装引导
a4p setup
a4p setup 会自动完成以下全部配置:
- 生成独一无二的话题名称(如
a4p-xxxx),写入~/.a4phone/config.json - 在
~/.claude/settings.json注册三个 Hook(Stop / AskUserQuestion / PermissionRequest) - 在
~/.codex/config.toml追加 Codex Hook 配置(保留原有设置) - 检测到 DSH 环境(
~/.dsh/profiles/web存在)时,把内置dsh-hook插件挂载到cordis.patch.yml - 默认启动续聊守护进程(
a4p listen后台运行) - 默认注册 Windows 开机自启(启动文件夹写入隐藏 VBS)
- 在终端显示订阅二维码
3.2 手机订阅话题
用手机 ntfy App 扫描终端显示的二维码,或手动输入话题名称订阅。建议在订阅设置中开启"即时交付",否则消息需要手动刷新才能收到。
3.3 切换外出模式
a4p out # 外出模式:提问/权限请求优先推送手机
a4p status # 查看当前模式
3.4 发送测试通知
a4p test
手机收到"测试通知:如果手机收到,配置正常。"即表示配置成功。
4. 工作原理
4.1 交互总流程
触发事件] --> B{a4phone
Hook / 插件拦截} B -->|Stop 任务完成| C[电脑弹窗
+ 手机推送] C --> D[推送 AI
最后输出] B -->|提问 / 权限请求| E{当前模式} E -->|外出模式| F[ntfy.sh
推送手机] F --> G[手机点选
或文字作答] G --> H[决策回传
注入会话] E -->|终端优先| I[终端原生
交互] style A fill:#e8f4f8,stroke:#1a6b8a,stroke-width:2px style B fill:#ebdef0,stroke:#8e44ad,stroke-width:2px style C fill:#d5f5e3,stroke:#27ae60,stroke-width:2px style D fill:#d6eaf8,stroke:#1a6b8a,stroke-width:2px style E fill:#ebdef0,stroke:#8e44ad,stroke-width:2px style F fill:#ffecd6,stroke:#e67e22,stroke-width:2px style G fill:#fdebd0,stroke:#b7950b,stroke-width:2px style H fill:#d5f5e3,stroke:#27ae60,stroke-width:2px style I fill:#fdebd0,stroke:#b7950b,stroke-width:2px
4.2 远程续聊闭环
发送文字] --> B[守护进程
a4p listen] B --> C{最近会话
来源 Agent} C -->|Claude Code| D[claude --resume
headless 续聊] C -->|Codex| E[codex exec resume
-o 捕获回复] C -->|DSH| F[文件队列
交给 dsh web 插件] F --> G[agent.followup
注入桌面会话] D --> H[AI 回复写入会话] E --> H G --> H H --> I[回复推回手机] style A fill:#e8f4f8,stroke:#1a6b8a,stroke-width:2px style B fill:#fdebd0,stroke:#b7950b,stroke-width:2px style C fill:#ebdef0,stroke:#8e44ad,stroke-width:2px style D fill:#ffecd6,stroke:#e67e22,stroke-width:2px style E fill:#ffecd6,stroke:#e67e22,stroke-width:2px style F fill:#fadbd8,stroke:#c0392b,stroke-width:2px style G fill:#d6eaf8,stroke:#1a6b8a,stroke-width:2px style H fill:#d5f5e3,stroke:#27ae60,stroke-width:2px style I fill:#e8f4f8,stroke:#1a6b8a,stroke-width:2px
5. 状态文件一览
a4phone 全部状态文件统一存放在 ~/.a4phone/ 目录:
| 文件 | 用途 |
|---|---|
config.json |
话题、服务器、超时等核心配置 |
mode.json |
当前模式(out / home) |
last.json |
最近会话记录(会话 ID、目录、Agent) |
daemon.json |
守护进程信息(PID、日志路径) |
daemon.log |
守护进程运行日志 |
dsh-jobs/ |
DSH 续聊文件队列(req / resp) |
dsh-heartbeat.json |
DSH 插件心跳(判断 dsh web 是否存活) |
dsh-logs/ |
DSH Hook 事件日志(task-complete / question-asked / permission-request) |
pending-batch.json |
续聊积压批次持久化 |
update-cache.json |
更新检查缓存(限频与去重) |
详细字段说明见配置说明。
6. 文档导航
| 文档 | 说明 |
|---|---|
| 项目总览与快速开始 | 本文档,项目简介与快速上手 |
| 任务完成通知 | 任务完成时手机推送 AI 最后输出 |
| AI提问交互 | 手机点选选项、文字自由作答 |
| 权限请求交互 | 手机 Approve / Deny / Always Approve |
| 双模式切换 | 外出模式与终端优先模式 |
| 远程续聊 | 手机发文字继续会话,含积压合并 |
| DSH支持与插件挂载 | DeepSeek Harness 手机交互与续聊 |
| 后台守护进程与开机自启 | 无窗口后台运行与 Windows 开机自启 |
| 自动更新提醒 | 新版本检测、去重与限频 |
| 命令参考 | 全部 a4p 命令速查表 |
| 配置说明 | 配置文件与状态文件详解 |
| 版本更新说明 | 1.0.0 至 1.4.2 流水线式演进 |
举手提问