- CLI
- 0.2.17
- 预览 ref
- a2c45c8
分叉在你拿不准的时候很有用。
不是“不知道怎么写代码”,而是这样的情况:
- 你不确定是否要继续这个方案。
- 你不确定代理当前的计划是否安全。
- 你想尝试另一个方向,又不想毁掉已经在正常工作的会话。
目标是尝试另一种方案,同时不牺牲正在推进的主线,也不丢失让会话有用的上下文。
没有分叉的话,通常会变成同一件事的笨拙版本(把上下文复制到新会话、写一份总结,或者原地继续并祈祷别弄乱)。
Happier 是一款跨设备运行和编排编码代理的开源应用,它提供一个统一的“分叉”操作,然后选择受支持的策略(能用提供商原生分叉就用,不能就用重放)。
简要回答
- 决定从哪里分支:
- 从某条消息分叉,在更早的位置分支,或
- 从会话菜单分叉,从最新位置分支
- 在拥有会话和工作区的机器上设置 Happier,并连接你的手机。
- 分叉会话。
- 如果你的提供商在该位置无法原生分叉,Happier 会回退到重放(一个隐藏的重放种子),让子会话仍然拥有上下文。
问题
长时间运行的编码会话会积累很多惯性。
这是好事……直到你想做一些有风险的事:
- 重写一大段代码
- 修改 API 接口
- 尝试另一种重构方式
如果原地这样做,就很难回到那条“已知良好”的主线。
分叉解决的是人的问题:“我想试试这个,但不想失去已经能用的东西。”
常见做法及取舍
- 把最后一条提示复制粘贴到新会话: 能用,但会丢失细微的上下文。
- 写一份很长的“当前状态”总结: 能用,但很费时间。
- 在同一个会话里继续并祈祷: 很快,但以后要付出代价。
- 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) 决定你想要哪种分叉
Happier 支持两种“分叉意图”:
- 从某条消息分叉(在更早的位置分支)
- 分叉最新对话(从会话最新位置分支)
如果你确切知道事情是从哪里跑偏的,就从那条消息分叉。
如果你只是想从“现在”开一条并行的线,就从会话菜单分叉。
2) 从消息分叉(在更早的位置分支)
在转录中,悬停或点按一条已提交的消息,选择 Fork。
一个实用的细节:如果你在一条用户消息上分叉,Happier 会把那条消息预先填入子会话的输入框,你可以编辑后重新发送一个更清晰的版本。
3) 从会话最新位置分叉
使用会话操作(标题栏菜单或命令面板)中的 分叉会话(Fork session),从最新的已提交对话状态分叉。
这就是“我想从现在开始一条新分支”的操作。
4) 了解 Happier 在底层会做什么(原生分叉还是重放)
文档描述了明确的选择顺序:
- 当你从某条消息分叉时,使用提供商原生的按消息分叉(OpenCode 服务器)。
- 当你从会话最新位置分叉时,使用提供商原生的按最新位置分叉(Codex app-server,以及公开了
session/fork的 ACP 后端)。 - 当原生分叉不可用时,使用 Happier 重放分叉。
实际上的要点是:你在界面中只用一个“分叉”操作,Happier 会选择受支持的机制。
5) 理解重放(在不污染转录的情况下保留上下文)
重放是安全网。
使用重放时,Happier 会:
- 根据分叉点之前的转录构建一个重放种子
- 只在你于子会话中发送的第一条用户消息上应用一次
- 让种子保持隐藏(它只发送给模型,从不显示在转录中)
“隐藏种子”这个细节很重要。它让子会话的转录保持干净,同时给模型足够的上下文,让它表现得像在继续同一项工作。
6) 在分叉出的会话中会看到什么
在子会话中:
- 祖先消息以只读上下文的形式内联显示
- 向上滚动会自动加载更早的父会话片段
- 子会话自己的消息照常可交互
这样不用复制整份转录也能保持方向感。
值得了解的提供商说明
Codex 的行为(分叉和回滚)
Codex app-server 支持:
- 通过会话级分叉操作原生地从最新位置分叉
- 回滚到某个位置(回滚到某条已提交用户消息之前)
但它不支持原生的按消息分叉。这种情况下由重放作为回退。
OpenCode 的行为
OpenCode 服务器原生支持按消息分叉(这是效果很好的形式)。
OpenCode 还有一条 ACP 回退路径,原生分叉在那里可能只是“尽力而为”。不可用时会使用重放。
为什么有效(以及什么会失效)
分叉在以下情况下有效:
- 你想尝试另一种方案而不破坏主线
- 你想让子会话继承上下文,而不必自己写一大段总结
主要的“失效”情况是:重放被禁用(或种子预算太低),而你的提供商又无法以你尝试的方式原生分叉。
这时,分叉界面要么不可用(对某些分叉类型而言),要么子会话会以较少的上下文开始。
常见错误
- 只是想恢复却用了分叉 → 分叉用于分支,恢复用于继续。
- 分叉得太晚 → 如果你知道计划是从哪条消息开始偏离的,就在那里分叉。
- 忘了分叉出的祖先消息是只读的 → 你可以复制它们,但操作和审批不会从祖先片段中运行。