Feature

Keep your Claude Code, Codex and OpenCode terminals, or work from the app

Happier runs them as the same session you would have started yourself — so you can drive it from their own TUI, from your phone, or from both, without the session noticing.

If you live in a terminal, most writing about running coding agents from a phone reads like a request to stop. That is a fair thing to refuse. Nothing about a phone screen is better than tmux and a keyboard for the part of the work you are actually good at.

So the claim here is narrower. A Happier session is one session with two front ends: a terminal on the computer doing the work is one of them, the app on your phone is the other. Switching between them does not start anything new — the session id, the transcript, the permission mode and the queued messages are all the same objects on the other side of the switch.

Start in the terminal or in the app, and move between them

Start in the terminal
Run happier in a repository and you get the default agent with the app attached. happier codex, happier opencode, happier gemini and the rest of the registry are the same thing pointed at a different CLI. You are in your own terminal, in your own shell, with your own aliases; the app is watching.
Start in the app, finish in the terminal
Start a session from your phone on the train, then run happier attach <session-id> when you sit down. With no id it opens a picker of the sessions running on this computer, and marks the ones it cannot attach to with the reason rather than hiding them.
Hand the session back to the app
Taking local control starts from the terminal; handing it back can be asked for from the app. Happier will wait for the current terminal turn to reach a safe stopping point first, because forcing a prompt into a busy TUI is how you lose the work it was in the middle of.
Use the terminal built into the app
A live shell on the connected computer, docked to the bottom panel, the sidebar or the details panel, surviving a page refresh and keeping the same shell as you move it around. It is the same terminal transport the app uses to run provider logins.

Which agents move a session between the terminal and the app

Three of the thirteen, and they do not behave the same way. Codex is exclusive — one driver at a time. OpenCode is not, and Claude Code can be either, depending on which runtime you start it under.

AgentTerminal and app togetherReattaches throughWhat that means in practice
Claude CodeOne at a time, or bothtmuxOn the default runtime, a message you send from the app while you are driving the terminal waits in the queue instead of being typed into your session; permission prompts are still forwarded to the app, and that bridge is on by default. The unified terminal runtime is the “both” case — see below.
CodexOne at a timetmuxSame exclusivity. Happier waits for the local turn to finish, abort, or exit before it takes the session back and delivers whatever you queued.
OpenCodeBoth at onceOpenCode’s own attachShared local control with nothing to enable first: the app stays writable while the OpenCode TUI is attached, and no multiplexer is involved.

The other ten agents Happier runs still start from the terminal with happier <agent> and still appear on your phone. What they do not do is let you take the session back into their own TUI half way through.

Drive one Claude Code session from both the terminal and the app

Steering and interrupting are different moves. Interrupting stops the turn that is running and starts another one from your message. Steering adds to the turn that is running — the work carries on, now knowing the thing you just told it. Both are useful, and the second one is the one you want when you look up from your phone and realise it is about to rename the wrong file.

Anthropic documents the Agent SDK’s streaming input as queued messages that process sequentially, with the ability to interrupt. That is the runtime Happier uses for Claude Code by default, and for most sessions it is the right one. Claude Code’s own terminal takes the other kind of message: type while it is working and the instruction joins the work already in flight.

The unified terminal runtime is how the app reaches that. Happier starts the real claude TUI inside a shared terminal host — tmux where you have it, otherwise the zellij Happier bundles — streams that terminal to every device you are signed in on, and types what you send from the app into the same composer you would have typed into yourself. One Claude Code process, one session, two keyboards on it. You can be typing in the TUI at your desk while the same session is answered from a phone, and neither end locks the other out.

It is off until you turn it on, in the Claude Code provider settings. It needs tmux or the bundled zellij, so today that means macOS and Linux; on Windows the CLI tells you to use WSL2 rather than starting something it cannot verify. And when the terminal is in a state where typing would be unsafe — a dialog is open, or you are part-way through a line of your own — Happier holds your message instead of typing over you.

What attaching needs: tmux, the same computer, a running daemon

The one that catches people: on macOS and Linux, attaching to a Claude Code or Codex session started from the app needs tmux integration enabled before that session starts. Turn it on after the fact and the session already running is not attachable — it was never launched inside tmux to begin with. You also have to attach from the same computer that owns the session and the same account that started it.

Windows does not use tmux. A session there is launched Hidden, in Windows Terminal, or in a console, and happier attach focuses the host that already exists instead of reattaching to a multiplexer. That is a per-machine and per-session choice, not a global one.

The embedded terminal needs your daemon running and connected for the computer you are targeting. If the daemon is offline, Happier shows an error state rather than a shell that silently does nothing.

tmux, the Windows session mode, and where the terminal docks

Nothing on this page needs configuration if you start your sessions from the terminal — that path works the moment the CLI is installed. The settings that do need a decision are tmux integration, the Windows session mode and where the embedded terminal docks, and all three are in the configuration reference.