Claude Code Remote 的开源替代:Happy Coder 深度体验

2 阅读6分钟

Claude Code Remote 的开源替代:Happy Coder 深度体验

场景引入

上周五下午,我躺沙发上想改个 bug。

不是那种紧急的 bug,就是想优化一个工具函数。桌面在卧室,我在客厅,不想动。

掏手机,开了 Happy Coder,说了句"帮我把那个日期格式化的函数改成支持时区的",喝口茶,它改完了。

这不是科幻。是今天下午真实发生的事。


痛点:Claude Code Remote 为什么用不了

用 Claude Code 的人都有一个痛:

桌面版很好,但你一离开电脑,就没法交互了。

Anthropic 官方有个 Claude Code Remote 方案,需要 Pro 会员(20美元/月),而且——

国内用不了。

网络原因,Remote 模式延迟高到没法用。你人在北京,指令要先绕出国再回来,等半天没响应。

这时候你有两个选择:

  1. 忍了,回书房
  2. 找个能用的替代方案

我选了第二个。


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
  • 电脑上已经装好 claude CLI 并登录

第二步:下载 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,然后把两边的通信劫持了:

  1. Claude Code 的输出(terminal 显示)被捕获
  2. 手机端的输入被转发
  3. 两边通过 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." }
  }
}

事件类型包括:texttool-call-starttool-call-endfileturn-startturn-endstop 等。

这个设计让 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