Claude Code、Codex、OpenCode のターミナルをそのまま使う。あるいはアプリから作業する
Happier はそれらを、あなた自身が起動したはずのものと同じセッションとして動かします — だから、そのエージェント自身の TUI からでも、携帯電話からでも、その両方からでも、セッションに気づかれることなく操作できます。
ターミナルで暮らしているなら、携帯電話からコーディングエージェントを動かすことについて書かれたものの多くは、それをやめてくれという依頼のように読めます。それを断るのはもっともです。あなたが本当に得意な部分の作業について、携帯電話の画面が tmux とキーボードより優れている点は何もありません。
なので、ここでの主張はもっと狭いものです。Happier のセッションは、2 つのフロントエンドを持つ 1 つのセッションです。作業をしているコンピュータの上のターミナルが 1 つ、携帯電話のアプリがもう 1 つです。両者を行き来しても新しいものは何も始まりません。セッション ID、トランスクリプト、権限のモード、キューに入れたメッセージは、切り替えた向こう側でも同じオブジェクトです。
ターミナルでもアプリでも始めて、その間を行き来する
- ターミナルで始める
- リポジトリで
happierを実行すると、アプリが付いた状態で既定のエージェントが動きます。happier codex、happier opencode、happier geminiをはじめレジストリの残りも、別の CLI に向けた同じものです。あなたは自分のターミナルで、自分のシェルで、自分のエイリアスのままです。アプリはそれを見ています。 - アプリで始めて、ターミナルで終える
- 電車の中で携帯電話からセッションを開始し、席に着いたら
happier attach <session-id>を実行します。id を付けなければ、このコンピュータで動いているセッションの選択画面が開き、アタッチできないものは隠さずに、その理由を添えて示します。 - セッションをアプリに戻す
- ローカルの制御を取るのはターミナルから始まりますが、返すのはアプリから頼めます。Happier はまず、いまのターミナルのターンが安全に止まれる地点に達するのを待ちます。忙しい TUI にプロンプトを押し込むのは、その最中の作業を失う方法だからです。
- アプリに組み込まれたターミナルを使う
- 接続したコンピュータの上のライブなシェルで、下部のパネル、サイドバー、詳細のパネルにドッキングでき、ページを再読み込みしても残り、移動させても同じシェルのままです。アプリがプロバイダのログインを実行するのに使うのと同じターミナルのトランスポートです。
どのエージェントがセッションをターミナルとアプリの間で移動できるか
13 のうちの 3 つで、振る舞いは同じではありません。Codex は排他的で、操作できるのは一度に 1 つだけです。OpenCode はそうではなく、Claude Code はどちらのランタイムで起動するかによって、どちらにもなります。
| エージェント | ターミナルとアプリの併用 | 再アタッチの経路 | 実際にどういうことか |
|---|---|---|---|
| Claude Code | 一度に 1 つ、または両方 | tmux | 既定のランタイムでは、ターミナルを操作している間にアプリから送ったメッセージは、セッションに入力される代わりにキューで待ちます。権限の確認はそれでもアプリへ転送され、そのブリッジは既定で有効です。統合ターミナルランタイムが「両方」のケースです — 下を参照してください。 |
| Codex | 一度に 1 つ | tmux | 同じく排他的です。Happier は、ローカルのターンが終了するか、中断されるか、抜けるまで待ってからセッションを取り戻し、あなたがキューに入れたものを届けます。 |
| OpenCode | 同時に両方 | OpenCode 自身の attach | 先に有効にするものが何もない、共有されたローカル制御です。OpenCode の TUI がアタッチされている間もアプリは書き込み可能なままで、マルチプレクサは関与しません。 |
Happier が動かす他の 10 のエージェントも、happier <agent> でターミナルから始められ、携帯電話にも表示されます。できないのは、途中でセッションをそのエージェント自身の TUI に戻すことです。
1 つの Claude Code のセッションを、ターミナルとアプリの両方から操作する
方向づけと中断は別の動きです。中断は、動いているターンを止めて、あなたのメッセージから別のターンを始めます。方向づけは、動いているターンに足します — 作業はそのまま続き、いま伝えたことを踏まえた状態になります。どちらも役に立ちますが、携帯電話から目を上げて、間違ったファイルの名前を変えようとしていると気づいたときに欲しいのは、後者です。
Anthropic は、Agent SDK のストリーミング入力を、順に処理されるキューに入ったメッセージで、中断もできるもの、としてドキュメント化しています。それが Happier が Claude Code に既定で使うランタイムで、ほとんどのセッションではそれが正解です。Claude Code 自身のターミナルは、もう一方の種類のメッセージを受け取ります。作業中に入力すると、その指示はすでに進行中の作業に加わります。
統合ターミナルランタイムは、アプリがそこへ届くための仕組みです。Happier は本物の claude の TUI を共有のターミナルホストの中で起動し — tmux があればそれを、なければ Happier が同梱する zellij を使います — そのターミナルをサインイン中のすべてのデバイスへストリーミングし、アプリから送った内容を、あなた自身が打ち込んだはずの同じコンポーザーへ入力します。1 つの Claude Code のプロセス、1 つのセッション、その上に 2 つのキーボードです。机で TUI に打ち込みながら、同じセッションに携帯電話から答えることもでき、どちらの側も他方を締め出しません。
これは Claude Code のプロバイダ設定でオンにするまで無効です。tmux か同梱の zellij が必要なので、今日のところ macOS と Linux が対象です。Windows では、CLI が検証できないものを起動するのではなく、WSL2 を使うよう案内します。そして、入力が安全でない状態のターミナル — ダイアログが開いている、あるいはあなたが自分の行を打ちかけている — では、Happier はあなたに重ねて打つのではなく、メッセージを保留します。
アタッチに必要なもの: tmux、同じコンピュータ、動いているデーモン
人がつまずくのはこれです。macOS と Linux では、アプリから開始した Claude Code や Codex のセッションにアタッチするには、そのセッションが始まる前に tmux 連携が有効になっている必要があります。あとから有効にしても、すでに動いているセッションにはアタッチできません。そもそも tmux の中で起動されていないからです。また、セッションを所有するのと同じコンピュータから、それを開始したのと同じアカウントでアタッチする必要があります。
Windows は tmux を使いません。そこでのセッションは Hidden、Windows Terminal、またはコンソールで起動され、happier attach はマルチプレクサに再アタッチするのではなく、すでに存在するホストにフォーカスします。これはグローバルな選択ではなく、マシンごと・セッションごとの選択です。
埋め込みターミナルは、対象にしているコンピュータについて、デーモンが動いていて接続されている必要があります。デーモンがオフラインなら、Happier は黙って何もしないシェルではなく、エラーの状態を表示します。
tmux、Windows のセッションのモード、そしてターミナルのドッキング先
ターミナルからセッションを開始するなら、このページの内容に設定は必要ありません。その経路は CLI をインストールした時点で動きます。判断が必要な設定は、tmux 連携、Windows のセッションのモード、埋め込みターミナルのドッキング先の 3 つで、いずれも設定リファレンスにあります。

