数据截至 (上游 commit eb980a5c9eea)
Happy — 架构与原理
30 秒导读: 你在终端里把
claude改成happy claude(codex改成happy codex),这个会话就同时挂上了一条端到端加密的消息流——手机上能看它在干什么、能追加提示词、能逐个批准它要跑的命令。它自己不是 agent:没有模型循环,智能全在被它包住的那个 CLI 里;中间那台服务器只经手密文,看不到你的代码。
1. 这是什么(零基础也能懂)
一句话定义: Happy 是一层会话外壳——它在你本机启动真正的编码 agent CLI,同时把这次会话的每一条消息加密后同步到手机和网页,让你能从别的设备接管同一个会话。
解决什么问题
场景:你在公司电脑上让 Claude Code 重构一个大模块,它要跑二十分钟。你去吃午饭了。
- 它跑完了吗?出错了吗?——你不知道,得回工位看。
- 它卡在「要不要允许我执行
rm -rf build/」的确认框上,干等了十五分钟。 - 你路上突然想到该补一句需求——只能记在备忘录里。
Happy 把这三件事搬到手机上:看进度、批权限、追加提示词。
给谁用
| 人群 | 典型用法 |
|---|---|
| 用 Claude Code / Codex 的开发者 | 离开工位后继续盯着长任务 |
| 手上有多台机器的人 | 从手机挑一台机器,凭空开一个新会话 |
| 在意代码隐私的人 | 中继服务器只存密文;也可以自己部署一台 |
它能做什么
- 包住
claude/codex/gemini等 CLI,不改变你在终端里的原生使用体验。 - 把会话消息端到端加密后同步给手机 App / 网页 App;服务器只见密文。
- 双向接管:手机上点一下就把控制权拿走;终端里按个键就抢回来。
- 远程逐个批准工具调用(含 plan 模式、「本会话都允许」这类决策)。
- 需要权限或出错时发推送通知。
- 装一个守护进程后,可以从手机凭空在这台机器上新开一个会话,不必先坐到电脑前。
用起 来什么样
安装后,唯一要改的是你敲的那行命令:
npm install -g happy
# 原来这么用:
claude
codex
# 现在这么用:
happy claude # 或者直接 happy
happy codex
第一次运行会打印一个二维码,手机 App 扫一下就配对完成——之后所有会话自动出现在 App 里,终端里的体验和直接跑 claude 一模一样。
子命令分发集中在一处:packages/happy-cli/src/index.ts:49 取 args[0] 当子命令,codex 走 handleCodexCommand(index.ts:139),gemini / acp / daemon / doctor / auth 各有分支;而 happy claude 的 claude 这个词会被直接丢掉(index.ts:615),落到默认路径 runClaude(index.ts:783)——所以 happy 和 happy claude 是同一件事。
一句话直觉
把 Happy 想成给终端会话装的一套「投屏 + 遥控器」,而投屏信号是加密的——中间的电视盒子只负责转发一堆看不懂的乱码,但它知道该转给谁。
本节到此不涉及代码细节。往下开始讲它怎么转。