用 Happy 在手机上控制 Claude Code:从安装到自建服务器

💡 原文中文,约5200字,阅读约需13分钟。
📝

内容提要

VibeCoding 无需持续盯盘,Happy Coder 工具支持手机随时审批和推进任务。文章详述了安装、扫码连接、后台守护进程、Linux 开机自启(含 systemd 配置),以及自建服务器部署(Docker、环境变量、TLS),实现随时随地用 Claude Code 协作。

🔎

延伸解读

从“盯盘”到“把关”:VibeCoding 的注意力模式转变

文章指出,VibeCoding 的痛点不是 AI 运行慢,而是需要持续关注权限弹窗等节点。Happy Coder 的价值在于将用户从“监控器”转变为“把关人”,只在关键节点介入。这种间歇性注意力模式,让碎片时间(如通勤)也能推进任务,改变了与 Claude 的协作方式。

systemd 配置的三个关键细节

文章特别强调了 systemd 用户服务配置中的三个易错点:必须使用 `start-sync` 而非 `start`,否则 systemd 会误判进程退出导致重启循环;`Restart=always` 而非 `on-failure`,因为正常关机时退出码为 0;环境变量中不能包含 `CLAUDE_CODE` 或 `CLAUDE_CODE_ENTRYPOINT`,否则手机发起的会话会挂起。这些细节是官方文档未明确说明的实践坑。

自建服务器:独立模式与扩展模式的选择

Happy Server 提供两种部署模式:独立模式内置 PGlite,无需外部依赖,适合个人使用;扩展模式则需外部 PostgreSQL、Redis 和 S3,适合多副本或高可用场景。文章建议个人用户只需设置 `HANDY_MASTER_SECRET` 即可,并提醒默认开启的 Prometheus 指标可显式关闭。

TLS 与反向代理:Caddy 简化 HTTPS 配置

自建服务器本身不处理 TLS,需配合反向代理。文章推荐使用 Caddy,因其自动申请和续期 Let's Encrypt 证书,仅需两行配置。相比之下,Nginx 需手动配置 certbot,较为繁琐。这降低了自建 HTTPS 的门槛,适合个人部署。

Q&A

Happy Coder 是什么?它解决了 VibeCoding 中的哪些问题?

Happy Coder 是一个工具,允许用户通过手机远程控制和监控 Claude Code 会话。它解决了 VibeCoding 中需要持续盯盘的问题,让用户可以在手机上随时查看进度、审批权限、发送指令,从而利用碎片时间,不必守在电脑前。

如何快速安装并连接 Happy Coder 到手机?

首先确保已安装 Claude Code,然后运行 `npm install -g happy` 安装 happy-cli。接着在手机上下载对应 APP(iOS 为 Happy: Claude Code Client,Android 为 Happy Coder)。在电脑终端运行 `happy auth login` 显示二维码,用手机 APP 扫码完成配对。最后运行 `happy` 启动会话,手机端即可实时查看和控制。

如何让 Happy Coder 在后台常驻,以便随时从手机发起会话?

使用 `happy daemon start` 启动守护进程,它会在后台持续运行,手机 APP 可以通过它随时创建新的 Claude Code 会话。相关命令包括 `happy daemon stop`、`happy daemon status`、`happy daemon list` 和 `happy daemon logs`。

在 Linux 上如何配置 systemd 实现 Happy Coder 开机自启?

创建用户级 systemd 服务文件 `~/.config/systemd/user/happy-daemon.service`,内容包含 `ExecStart=/path/to/happy daemon start-sync`、`Restart=always`、`Environment=PATH=...` 和 `Environment=HOME=...`。然后执行 `loginctl enable-linger $(whoami)` 允许用户服务在未登录时运行,再运行 `systemctl --user daemon-reload` 和 `systemctl --user enable --now happy-daemon.service` 启用服务。

为什么 systemd 配置中要使用 `start-sync` 而不是 `start`?

因为 `happy daemon start` 会派生一个子进程然后父进程退出,systemd 会认为服务结束而不断重启。而 `start-sync` 是前台阻塞模式,systemd 可以正确跟踪进程状态,避免死循环。

如何自建 Happy Server 并使用 Docker 部署?

在仓库根目录执行 `docker build -t happy-server -f Dockerfile .` 构建镜像,然后运行 `docker run -d --name happy-server -p 3005:3005 -e HANDY_MASTER_SECRET=your-secret-here -e PUBLIC_URL=https://happy.example.com -e METRICS_ENABLED=false -v happy-data:/data --restart unless-stopped happy-server`。其中 `HANDY_MASTER_SECRET` 必须设置,`PUBLIC_URL` 设为公网 HTTPS 地址,数据持久化在 volume 中。

如何配置 TLS 以使用 HTTPS 访问自建的 Happy Server?

推荐使用 Caddy 作为反向代理,它会自动申请和续期 Let's Encrypt 证书。在 Caddyfile 中添加 `happy.example.com { reverse_proxy localhost:3005 }` 两行配置即可。如果使用 Nginx,则需要自己配置 certbot。

如何让 happy-cli 和手机 APP 连接到自建的服务器?

对于 CLI,设置环境变量 `HAPPY_SERVER_URL=https://happy.example.com`,可以临时导出或写入 shell 配置文件(如 ~/.zshrc)。如果使用 systemd 管理 daemon,还需在 service 文件的 Environment 中添加该变量并重启服务。对于手机 APP,进入设置找到 Relay Server URL,输入自建服务器地址,APP 会自动验证并保存。

🏷️

标签

➡️

继续阅读