Claude Code Remote 的开源替代:Happy Coder 深度体验
场景引入
上周五下午,我躺沙发上想改个 bug。
不是那种紧急的 bug,就是想优化一个工具函数。桌面在卧室,我在客厅,不想动。
掏手机,开了 Happy Coder,说了句"帮我把那个日期格式化的函数改成支持时区的",喝口茶,它改完了。
这不是科幻。是今天下午真实发生的事。
痛点:Claude Code Remote 为什么用不了
用 Claude Code 的人都有一个痛:
桌面版很好,但你一离开电脑,就没法交互了。
Anthropic 官方有个 Claude Code Remote 方案,需要 Pro 会员(20美元/月),而且——
国内用不了。
网络原因,Remote 模式延迟高到没法用。你人在北京,指令要先绕出国再回来,等半天没响应。
这时候你有两个选择:
- 忍了,回书房
- 找个能用的替代方案
我选了第二个。
Happy Coder 是什么
Happy Coder 是一个开源项目,本质上是个wrapper:它把 Claude Code/Codex 的命令行接口包装了一下,加上远程控制能力。
安装方式:
npm install -g happy
装完以后,你电脑上的使用方式没变:
# 启动 Claude Code
happy
# 或者 Codex
happy codex
关键区别:它会生成一个二维码。
扫完,手机和电脑就连上了。你可以在手机上发指令、看进度、批准危险操作。
安装配置
第一步:装 CLI
npm install -g happy
要求:
- Node.js >= 20.0.0
- 电脑上已经装好
claudeCLI 并登录
第二步:下载 App
- iOS:App Store 搜 "Happy Claude Code Client"
- Android:Google Play 搜同名
- 或者直接用 Web 版
第三步:扫码连接
电脑端运行 happy,会自动弹出二维码。
手机 App 扫一下,完事。
$ happy
[Happy] Session started
[Happy] QR Code: ▓▓▓▓▓▓▓▓
[Happy] Waiting for connection...
实际体验
好用的部分
1. 推送通知
Claude Code 需要权限时(比如要执行 rm -rf),手机会收到推送。你可以远程批准或拒绝。
以前这种操作必须坐电脑前,现在躺沙发上点点手机就行。
2. 实时同步
Agent 在干什么,你手机上能看见。跑了哪个命令,读了哪个文件,输出了什么——都实时同步过来。
不是截图,是结构化的日志流。
3. 设备切换
在手机上按任意键,切回电脑控制。反之亦然。
这个体验做得很顺,没有那种"到底谁在控制"的困惑。
4. 多端多会话
Daemon 模式支持下,你可以同时开多个项目,每个项目是独立会话。手机可以随时切换看哪个都行。
需要注意的地方
1. 复杂操作还是得用电脑
比如要你 approve 一个 git push,要你在 terminal 里选选项——这类操作手机端体验不好,还得回电脑。
2. 网络依赖
虽然是本地 Agent 跑,但手机和电脑之间需要通信。断网就废了。
工作原理解析
这部分是我最好奇的:它到底怎么实现的?
整体架构
Happy Coder 是个 monorepo,包含几个包:
happy/
├── happy-cli # 命令行包装器
├── happy-agent # 远程控制 CLI
├── happy-app # 手机/Web 客户端 (Expo)
├── happy-server # 同步服务器
└── happy-wire # 通信协议定义
核心原理:Wrapper 模式
当你运行 happy 而不是 claude 时,发生了什么?
用户输入 → happy-cli → claude CLI → 模型 → 响应 → happy-cli → 推送
Happy Coder 是个壳。它启动真正的 Claude Code,然后把两边的通信劫持了:
- Claude Code 的输出(terminal 显示)被捕获
- 手机端的输入被转发
- 两边通过 WebSocket 同步
端到端加密
Happy Coder 的隐私设计做得比较认真。
服务器不知道你说了什么。
看 happy-wire 包里的协议定义,加密是这么做的:
// 消息内容被加密后传输
{
id: "msg_01",
seq: 101,
content: {
t: "encrypted",
c: "BASE64_ENCRYPTED_PAYLOAD" // 只有你能解密
}
}
你的手机和电脑共享一对加密密钥。服务器只存加密后的 blobs,它看不到内容。
这就是为什么 Happy Server 虽然是闭源服务的,但隐私上可信任——它根本拿不到你的数据。
Wire 协议
happy-wire 定义了完整的通信协议,包括:
Legacy 格式(兼容旧版):
{
"role": "user",
"content": { "type": "text", "text": "fix the failing test" },
"meta": { "sentFrom": "mobile" }
}
新版 Session 协议:
{
"role": "session",
"content": {
"id": "env_01",
"time": 1739347232000,
"role": "agent",
"turn": "turn_01",
"ev": { "t": "text", "text": "I found 3 TODOs." }
}
}
事件类型包括:text、tool-call-start、tool-call-end、file、turn-start、turn-end、stop 等。
这个设计让 CLI、App、Server 之间有了一个共同的约定,不容易出协议层面的 bug。
Daemon 模式
默认情况下,happy 启动后前台运行。你关掉 terminal,Agent 就停了。
happy daemon start 可以让 Agent 在后台跑。这样即使你关了电脑屏幕,手机还能连上去控制。
Daemon 的状态通过 happy-server 同步,所以你的手机能找到你的电脑。
说白了:不是做不了,是不想做。
适合谁用
Happy Coder 适合这几类人:
1. Claude Pro 用户
想用 Remote 模式但嫌贵的。Happy Coder 免费,开源,能力差不多。
2. 多设备党
电脑、手机、平板都要能 coding 的。一套工具,不同设备无缝切换。
3. 隐私敏感者
不想让自己的代码经过第三方服务器的。Happy Coder 的 E2E 加密是真正不知情的——服务器只是存储 blobs。
4. 开发者本身
就是想折腾、想了解 AI coding 工具底层原理的。Happy Coder 代码开源,架构清晰,值得研究。
不适合谁
1. 需要复杂 terminal 交互
有些操作必须在 terminal 里选选项,这类场景手机端体验差。
2. 网络不稳定
电脑和手机之间需要通信,断网就断线。
总结
用了 Happy Coder 一下午,我的感受是:
它解决的是一个真实痛点。
Claude Code 本身能力强不强,是 Claude 模型决定的,跟 Happy Coder 无关。Happy Coder 只解决了一个问题:让你不在电脑前的时候,也能跟 Claude Code 交互。
实际用下来,这个功能解决得不错——端到端加密是认真的,设备切换是顺的。
当然,它有局限:复杂 terminal 交互、网络依赖。
但对于我这种"躺在沙发上也想改代码"的人,它已经好用到值得写一篇介绍了。
工具在进化。以前的开发者是坐着写代码,现在的开发者是躺着写代码。
本文测试环境:macOS + iPhone 16 + Claude Code 1.x