保留你的 Claude Code、Codex 和 OpenCode 终端,或者从应用里工作
Happier 把它们作为你本来会自己启动的那同一个会话来运行 —— 所以你可以从它们自己的 TUI 驱动它,从你的手机驱动它,或者两边同时,而会话察觉不到。
如果你常驻终端,大多数关于用手机运行编码智能体的文字读起来都像是在请你别用终端了。拒绝这件事是合理的。就你真正擅长的那部分工作而言,手机屏幕没有哪一点比 tmux 加一副键盘更好。
所以这里的主张更窄。一个 Happier 会话是一个会话配两个前端:干活的那台电脑上的终端是其中之一,你手机上的应用是另一个。在两者之间切换不会新开任何东西 —— 会话 id、会话记录、权限模式和排队的消息,在切换之后都还是同样的那些对象。
在终端里开始,或者在应用里开始,并在两者之间来回切换
- 从终端开始
- 在一个仓库里运行
happier,你会得到默认的智能体,同时应用已经接上。happier codex、happier opencode、happier gemini以及注册表里的其余项,是同一件事指向不同的 CLI。你在自己的终端里、自己的 shell 里、用自己的别名;应用在旁边看着。 - 在应用里开始,在终端里收尾
- 在火车上用手机启动一个会话,坐下来之后运行
happier attach <session-id>。不带 id 时,它会打开一个选择器,列出这台电脑上正在运行的会话,并给无法接入的那些标上原因,而不是把它们藏起来。 - 把会话交还给应用
- 拿到本地控制要从终端开始;交还回去则可以从应用里请求。Happier 会先等终端上当前这一轮到达一个安全的停止点,因为把一条提示硬塞进一个正忙的 TUI,正是让它手头的工作丢掉的方式。
- 使用应用内置的终端
- 一个连到那台电脑上的实时 shell,可以停靠在底部面板、侧边栏或详情面板,页面刷新后依然存在,在你把它挪来挪去时保持同一个 shell。它和应用用来运行服务方登录的是同一套终端传输。
哪些智能体能把会话在终端和应用之间搬动
13 个里的 3 个,而且它们的行为并不一样。Codex 是独占的 —— 同一时间只有一个驱动方。OpenCode 不是,而 Claude Code 两种都可能,取决于你在哪个运行时下启动它。
| 智能体 | 终端与应用同时 | 通过什么重新接入 | 这在实践中意味着什么 |
|---|---|---|---|
| Claude Code | 一次一个,或者两边同时 | tmux | 在默认运行时上,当你正在驱动终端时,从应用发出的消息会在队列里等待,而不会被输入到你的会话中;权限提示仍会转发到应用,这座桥默认是开着的。统一终端运行时就是“两边同时”的那种情形 —— 见下文。 |
| Codex | 一次一个 | tmux | 同样是独占的。Happier 会等本地这一轮结束、中止或退出,然后才把会话收回来,并投递你排队的内容。 |
| OpenCode | 两边同时 | OpenCode 自己的 attach | 共享本地控制,不需要先启用什么:OpenCode TUI 接入期间,应用仍然可以输入,中间也不涉及多路复用器。 |
Happier 运行的另外 10 个智能体,同样用 happier <agent> 从终端启动,同样会出现在你的手机上。它们做不到的,是让你在进行到一半时把会话带回它们自己的 TUI。
从终端和应用两边驱动同一个 Claude Code 会话
引导和打断是两种不同的动作。打断会停掉正在进行的这一轮,并从你的消息开始新的一轮。引导是往正在进行的这一轮里追加 —— 工作继续,只是现在知道了你刚告诉它的事。两者都有用,而当你从手机上抬起头,发现它正要重命名错误的那个文件时,你想要的是后者。
Anthropic 的文档把 Agent SDK 的流式输入描述为按顺序处理的排队消息,并且可以打断。那是 Happier 默认给 Claude Code 使用的运行时,对大多数会话来说也是合适的那一个。Claude Code 自己的终端接受的是另一种消息:在它工作时输入,指令会汇入已经在进行中的工作。
统一终端运行时是应用抵达那种效果的方式。Happier 会在一个共享的终端宿主里启动真正的 claude TUI —— 有 tmux 就用 tmux,否则用 Happier 自带的 zellij —— 把那个终端流式传送到你登录的每一台设备,并把你从应用里发出的内容输入到你本来会自己输入的那个输入框里。一个 Claude Code 进程,一个会话,两副键盘同时接在上面。你可以在书桌前的 TUI 里打字,同时同一个会话被手机回应,两端谁也不会把对方锁在外面。
在你打开它之前它是关闭的,开关在 Claude Code 的服务方设置里。它需要 tmux 或自带的 zellij,所以今天这意味着 macOS 和 Linux;在 Windows 上,CLI 会让你改用 WSL2,而不是去启动一个它无法验证的东西。而当终端处于输入并不安全的状态时 —— 有对话框开着,或者你自己的一行才写了一半 —— Happier 会先扣住你的消息,而不是盖在你上面打字。
接入需要什么:tmux、同一台电脑、一个正在运行的守护进程
最容易绊住人的一条:在 macOS 和 Linux 上,要接入一个从应用启动的 Claude Code 或 Codex 会话,需要在那个会话启动之前就已经启用 tmux 集成。事后再打开,已经在运行的那个会话是接不进去的 —— 它一开始就没有在 tmux 里启动。你还必须从拥有该会话的那台电脑、用启动它的那个账号来接入。
Windows 不使用 tmux。那里的会话以隐藏方式、在 Windows Terminal 中,或在控制台中启动,而 happier attach 会把已经存在的那个宿主带到前台,而不是重新接入某个多路复用器。这是按机器、按会话的选择,不是全局的。
内嵌终端需要你所针对的那台电脑上的守护进程正在运行并已连接。如果守护进程离线,Happier 会显示一个错误状态,而不是给你一个默默什么都不做的 shell。
tmux、Windows 会话模式,以及终端停靠在哪里
如果你从终端启动会话,本页上的内容都不需要配置 —— CLI 一装好,那条路就通了。确实需要你做决定的设置是 tmux 集成、Windows 会话模式,以及内嵌终端停靠在哪里,这三项都在配置参考里。

