Happy Docs 中文文档

工作原理

Happy Coder 让你在手机上实时查看和操控 Claude Code,所有通信都经过端到端加密。 本文解释系统的工作方式。

三大组件

Happy Coder 由三个协作部分组成:

组件 运行位置 职责
CLI 程序 (happy) 你的电脑 启动 Claude Code、监控其行为、加密信息并发送到服务器
移动端 App 你的手机 从服务器获取加密数据、解密后展示 Claude Code 的状态
中继服务器 云端 在电脑和手机之间传递加密消息。无法读取数据——只做搬运
flowchart LR
    subgraph Computer
        happy["CLI<br>Encrypts & Sends"]
    end
    subgraph Happy Server
        relay["Relay Server<br>Stores & Forwards"]
    end
    subgraph Phone
        app["Mobile App<br>Decrypts & Displays"]
    end

    happy -->|encrypted data| relay
    relay -->|encrypted blob| app

为什么需要中继服务器

中继服务器解决的核心问题是:防火墙。 你的手机和电脑通常在不同的网络中,无法直接通信。

中继服务器就像邮局——手机和电脑都向外连接到服务器,这样就能绕过防火墙(防火墙通常允许出站连接)。服务器会暂存消息,直到两端都准备好。

没有中继服务器的话,你得自己配端口转发、处理动态 IP——麻烦且在移动网络下几乎行不通。

信任与安全

你不需要信任我们——这正是系统的设计目标。

数据隐私保障

你的手机和电脑通过扫描二维码共享一个密钥。服务器从未看到这个密钥。在发送任何数据之前,电脑先用这个密钥加密。服务器看到的只是加密后的数据块——无法解读其内容。

设备连接方式

你的手机和电脑用共享密钥互相识别:

零往返认证:每个设备一次性发送所有信息:
1. 设备自己生成一个随机挑战值(不是服务器生成的)
2. 设备用密钥对挑战值签名
3. 设备发送:挑战值 + 签名 + 公钥

服务器验证签名是否匹配公钥。匹配就连接成功,无需多次往返。

额外安全措施
- 服务器只保存公钥的哈希值
- 连接后立即从内存中删除实际公钥
- 即使有人查看服务器硬盘,也无法得知曾使用过哪些公钥

这种设计阻止了多种攻击。服务器无法骗你泄露密钥。即使有人黑入服务器,也读不了你的数据。

自建服务器

中继服务器非常小——只有 900 行代码。你可以:
- 几分钟内通读全部代码
- 验证它确实只做消息转发
- 自己搭建一个(2 分钟搞定)
- 按照规范编写自己的实现

移动端 App 和 CLI 都有设置项,可以切换到你自己的服务器。

数据流转过程

当你在电脑上运行 happy 时,数据按如下路径流转:

  1. CLI 启动 Claude Code
  2. Claude Code 开始处理你的项目
  3. CLI 监控 Claude Code 的行为
  4. 用你的密钥加密这些信息
  5. 将加密数据发送到服务器
  6. 服务器保存数据并转发给你的手机
  7. 手机解密后展示实时状态

服务器永远不知道你在做什么——它看到的只是带时间戳的加密数据。

为什么要保存加密数据

服务器保存加密数据块有两个实际好处。

查看历史记录:当你关闭 Claude Code 后,CLI 停止运行。但你下周打开手机 App 仍能看到之前做了什么。可以把旧的想法复制到新项目中,方便追踪工作进展。

应对网络不稳定:这是最重要的场景。假设你在火车上或者徒步途中,手机信号时断时续。但你家里的电脑一直保持连接,持续上传 Claude Code 的工作状态。

当手机恢复信号时,它会追赶所有错过的消息。你不会丢失任何信息,随时有信号就能查看 Claude Code 的进度。

给贡献者的说明

Happy Coder 的每个部分都是开源的:CLI、App 和中继服务器。

核心设计原则:

  • 保持服务器"愚蠢"——不要给服务器添加功能
  • 把逻辑放在移动端 App 里
  • 如果 CLI 需要更多能力,保持简单——用通用 API 执行命令并将输出返回给 App
  • 不要在 CLI 中构建大量逻辑,让移动端 App 做真正的工作

总结

这个设计确保无论服务器发生什么,你的代码都是安全的。 即使有人黑入服务器,也只能得到无法解读的加密数据块。服务器什么都不知道,也什么都说不出来——这正是设计的核心目标。