- CLI
- 0.2.17
- 预览 ref
- a2c45c8
真正让人崩溃的中断往往不是崩溃本身,而是你回来时发现:
- 会话已经不活跃了,
- 你仍然想继续它,
- 但你不确定接下来是恢复同一个会话,还是一不小心开了一个新会话。
在电脑上,这通常能理清楚。在手机上,很容易就放弃,然后从头开始。
所以问题很简单:
继续同一个会话,而不是新开一个,而且要在手机上完成。
常见的办法(SSH、新开会话、复制粘贴摘要)都会丢掉一些东西。
Happier 是一款用于跨设备运行和编排编程代理的开源应用,它严格区分“attach 和 resume”,恢复失败时不会悄悄开启一个新会话。
要点
- Attach = 重新连接到仍在运行的会话。
- Resume = 会话不活跃后,重新打开同一个提供商会话(仅在提供商支持时)。
在手机上:
- 先判断你属于哪种情况:会话仍在运行(attach),还是已经不活跃(resume)。
- 如果你用的是 Happier,打开会话并发送下一条消息。在支持的情况下,它会先尝试恢复。
- 如果无法恢复,你需要一个“失败即停止”的工具(不会悄悄开新会话)。在 Happier 中这是默认行为。这时你要么 attach(如果它其实还在运行),要么新开一个会话。
问题
当你用 AI 编程代理做真正的工作时,“会话连续性”决定了你是:
- 保持节奏,还是
- 花一个小时重新解释上下文。
但并不是每个提供商的会话都能恢复,也不是每个不活跃的 Happier 会话都能恢复。
所以目标不是“总能恢复”,而是:
清楚自己在恢复什么,不要因为意外开了新会话而让工作分叉。
Attach 和 resume(这能解决大部分困惑)
Attach
当会话仍在本地运行,你只是想重新连接到正在运行的进程时,用 attach。
Resume
当会话已经不活跃,且提供商支持重新打开同一个会话时,用 resume。
在 Happier 中,恢复是一个严格的流程:
- 找到已有的 Happier 会话
- 检查它在供应商侧是否真的可以恢复
- 请求提供商后端恢复同一个供应商会话
- 如果失败,显示错误(不会悄悄开新会话)
这种严格是有意为之。它保证了一个会话身份和一个可信的对话记录来源。
会话什么时候可以恢复(需要满足的条件)
只有同时满足以下所有条件,会话才能恢复:
- 它是一个普通的、由 Happier 管理的会话
- 它当前不活跃
- 它没有被归档
- Happier 在会话元数据中保存了有效的提供商恢复 ID
- 所选的后端或提供商支持恢复该会话
- 你的设置没有禁用该后端
只要有一项不满足,Happier 就会把该会话视为不可恢复。
如果你第一次接触 Happier(它是什么、在哪里获取)
Happier 是一款面向 Claude Code、Codex 和 OpenCode 等 AI 编程代理的开源配套应用(移动端 / 网页 / 桌面端)。
这里的工作流是:会话仍在拥有它的机器(笔记本 / 服务器 / 开发机)上运行,你在手机上用 Happier 恢复或继续它。
对这篇指南来说,这意味着你可以保持一个会话身份(和一份对话记录),而不是每次会话不活跃就从头再来。
开始设置:
- 如何在手机上使用 Happier
- GitHub: https://github.com/happier-dev/happier
- 安装 / 下载: https://github.com/happier-dev/happier#how-it-works
- Discord(社区与支持): https://discord.gg/W6Pb8KuHfg
手机上的工作流:恢复不活跃的会话
1) 打开会话
在手机上打开你想继续的不活跃会话。
你通常会看到:
- 不活跃 + 可恢复 + 机器可访问 → 可以输入,发送消息时会先恢复
- 不活跃 + 不可恢复 → 无法输入
- 不活跃 + 机器离线 → 在拥有该会话的机器可访问之前无法输入
2) 发送下一条消息(如果可以输入)
如果会话可以恢复,直接发送下一条提示即可。
Happier 会先恢复提供商会话,再投递你的消息。
3) 如果无法输入,决定接下来怎么做
如果会话无法恢复,你有几个选择:
- 如果会话其实还在运行:在拥有它的机器上从终端 attach。
- 如果它真的已经结束:新开一个会话,并附上相关文件或摘要。
- 如果机器离线:先让机器重新上线。
Codex 说明(为什么恢复有时会出乎意料)
在 Happier 中,Codex 可以通过多种后端运行。
在当前版本的 Happier 中:
- Codex 默认使用 App Server(有元数据时的常规可恢复路径)
- 纯 MCP 仍然可以运行新会话,但不是供应商恢复路径
- 恢复是严格的:Codex 恢复失败时,Happier 不会用新会话代替
所以对 Codex 来说,能否恢复取决于:
- 会话是否有有效的恢复元数据
- 当前的后端路径是否支持恢复该会话
- 机器上是否具备该恢复路径所需的依赖
故障排查
症状:会话不活跃,但我无法输入消息
可能原因:
- 在供应商侧不可恢复(后端不支持、缺少恢复 ID)
- 会话已被归档
- 拥有会话的机器离线或无法访问
解决:
- 确认机器在线
- 如果不可恢复,就新开一个会话(不要反复尝试指望它恢复)
症状:我以为会恢复,结果开了一个新会话
在 Happier 中,显式恢复被设计为失败即停止。
如果你感觉像是“新会话”,通常是因为:
- 你没有恢复,而是新建了一个会话,或者
- 你重新打开的是直连会话或提供商原生会话,而不是 Happier 管理的同步会话
解决:
- 再确认一下你操作的是你关心的那个已有 Happier 会话 ID
症状:电脑上能恢复,手机上不行
可能原因:
- 手机上用的是不同的服务器或配置
- 手机没有添加或信任同一个服务器
解决:
- 在手机上切换到同一个服务器或配置,然后重新打开会话
常见问题
重启后还能恢复吗?
有时可以。
能否恢复取决于提供商的支持和保存的恢复元数据,而不是机器是否重启过。只要提供商能重新打开同一个会话,恢复就可能成功。
为什么恢复这么严格?
因为“悄悄开一个新会话”会很快让连续性丢失。失败即停止在当下有点让人沮丧,但它保留了会话的意义。