4.7.2 — ターミナルが正しいプロセスに戻る

2026-08-08 にリリースした 4.7.2 のスナップショットです。 アプリが進むにつれて内容は古くなり ますが、それは想定どおりです。常に最新の情報は、各セクションから貼っている本編ガイドのリンクを たどってください。

npx mulmoterminal@latest

このリリースでは設定することはほとんどありません。 中身のほとんどは修正で、4.7.2 を起動した 時点で全部効いています。手を動かす価値があるのは片付けが 1 つだけ (→ すでに溜まった worktree チップを消す)。


このリリースの中心にある不具合

ターミナルが別のバックエンドプロセスに再接続してしまうことがありました。具体的には — codex(あるいは Antigravity / Muse)の会話のバックエンドがまだ tmux で動いているのに、ランチャーは それを「空いている」と表示し、resume を押すと同じ会話に 2 つ目のバックエンドが起動する。以降は コールド再接続のたびにどちらのプロセスに当たるか分からず、同じセルが日によって違う状態を見せる、 という状態でした。

実機で見つかったもので、しかも稀ではありませんでした。調査したところ Claude 以外の 3 エージェント すべてのログでこの二重セッション状態が見つかり、加えて 19 個のセッションが誰にも見えないまま detached で動き続けていました。

修正を受け取るために何かする必要はありません。 以下は「効いていることをどう確かめるか」です。

効いているかの確かめ方

worktree でエージェントを起動し、ブラウザのタブを閉じて(セルは閉じないでください — セルを 閉じるとセッションが終了します)、もう一度アプリを開きます。

  • worktree の行が、新規セッションの開始ではなく resume を出すようになります。以前はここが 「空き」に見えていて、動いているエージェントの隣に 2 つ目を起動していました。
  • resume を押すと、すでに動いていたプロセスにそのまま戻ります。同じ会話の、スクロールバックの 途中に着地します。

もう半分はサーバ再起動です。codex のセルが作業中のまま MulmoTerminal を再起動し、セルが再接続 するのを待ってから、そのセッションを進めてみてください。

  • セルの working / waiting のドットがまた動きます。このリリース以前は、再起動をまたいだ codex セッションは再接続自体はできるものの activity の追跡が復帰せず、ドットが止まったまま・ターン完了 通知も来ないままで、セッションを立て直すまで直りませんでした。
  • サーバが落ちた時点でターンの途中だった場合、セルはそれを working として表示します(ターンが 終わるまで idle に見える、ということがなくなりました)。

→ 本編の セッションと再接続

開けないセッションが掃除されるようになった

セッション id が設定されないまま起動すると、mt-undefined という名前の tmux セッションができて いました。同じ不具合を踏んだ起動が全部そこに相乗りする共有バケツで、しかも attach / resume / terminate はどれも id を検証するので、開くことも終わらせることもできない代物でした。2 つ直して います: 不正な id での起動は黙って共有されるのではなくメッセージを出して失敗するようになり、 idle sweep はこの手の到達不能なセッションを猶予なしで即座に終了します(どれだけ最近使われていても 到達可能にはならないため)。

もし持っていても、次回起動時に消えます。作業は不要です。

使っていないセッションの終了sessionIdleReapDays は今までどおり sweep 全体を 止められますし、誰かが接続中のセッションは今までどおり守られます。


worktree が作業ディレクトリのチップに溜まらなくなった

セルのランチャーの WORKING DIRECTORY の下に並ぶチップは、起動した場所から自動的に記録されます。 worktree も他のディレクトリと同じように起動するので、隔離タスクを 1 つ回すたびにチップが 1 つ 残っていました。worktree は 1 ブランチ 1 タスクのために存在し、タスクが終われば削除されるもの です。しかも削除してもチップは消えないので、実体のないパスが積み上がって本来のプロジェクトを 押し出していました。

4.7.2 からは managed worktree を記録しません。このリストに入る経路は 2 つあり、両方を塞いでいます: 起動のたびの自動記録と、mulmoterminal init が Claude の履歴から作り直す seed です。

スキップするのは「このアプリが作った worktree」だけです。 判定は managed root(MulmoTerminal が worktree を作るディレクトリ)配下かどうかを見たうえで、そこに生成される <repo>-<8hex> という名前 であることまで要求します。たまたま同じような構成になっているご自身のディレクトリや、その root の下に 手で置いたディレクトリは、今までどおり記録されます。

すでに溜まった worktree チップを消す

すでに保存されているチップはそのまま残します。 これは意図的です。保存済みの設定はユーザーのもの であって、このリリースがそこから黙ってエントリを削除することはしません。

したがって、しばらく溜め込んだリストには今も並んでいます。要らないものはチップの × で消して ください(今までと同じボタンです)。それ以外にすることはありません。新しく増えることはもうありません。

ランチャーフォーム — 作業ディレクトリの入力欄とチップ → worktree — managed worktree とは何か、どこにできるのか


何回押してもファイルダイアログは 1 つ

作業ディレクトリ欄の横のフォルダボタンは、クリックした回数だけ OS のファイルダイアログを開いて いました。ネイティブのダイアログは閉じるまで応答しない設計で、その間クリックを止めるものが何も なかったためです。せっかちにダブルクリックすれば 2 つ閉じることになり、何度か押せばその回数だけ 閉じる羽目になっていました。

ファイルダイアログは 1 台に 1 つなので、その裏側の状態も 1 つにしました。アプリ内のすべてのピッカー ボタンが同じフラグを読み、サーバ側でも 2 つ目の同時ダイアログを拒否します。

有効化の操作は不要です。


コックピットのロスター

拡大表示のロスターに関する変更が 2 つ。どちらもセルを拡大した瞬間に見えます。

すべての行が Agent Picker と同じマークを着ける

以前は Claude 以外のエージェントの名前が枠付きのピルで出ていました(codex / agy / grok / mu)。Claude には何も出ませんでした。これが Agent Picker やレート制限ゲージと同じ描かれた マークになり、1 つのエージェントはアプリのどこでも同じ見た目になります。

エージェントを走らせていない行には何も付きません。 ここが注意の要るところで、ランチャーチップ、 コマンド実行セル、まだ何も起動していないセルはいずれもエージェントを持ちません。安直に「エージェント 無し = Claude」としてしまうと、yarn dev のチップに Anthropic のマークが付くことになります。その行が 何なのかは、ステータスのドットとディレクトリがすでに語っています。

→ 本編の コックピット・ロスター

枠のジオメトリを統一(枠の太さが「状態」を意味するように)

行を囲むリングは blocked が 2px、done が 1px、残り 3 状態は無し、と状態ごとに太さが違って いました。縦に積まれたリストでは、目は色より先に幅の差を読むので、3 種類の太さは「3 つの意味」 ではなく「描画バグ」に見えます。

全状態を 2px に統一し、言うことのない行は透明で縁取ります(box-shadow なのでレイアウトコストは ゼロ)。左端の 3px のストライプは削除しました。リングが行を囲むようになった時点で、1 辺だけ太さが 違うのは枠が自分自身と食い違っているだけだからです。行間は 5px → 9px に広げています(隣り合う リングが 1px 差まで近づき、列がひとかたまりに見えていたため)。

設定は不要で、これがロスターの新しい描画です。


コレクションのチャットでエージェントを選べるようになった

Collections から始めるチャットは、二重の意味で Claude 専用になっていました。

コレクションブラウザにあった 3 ボタンのエージェント切り替えは、ピン留めのお気に入りに置き換えられ、 その設定を書く側が誰もいなくなっていました。つまりブラウザが最後に保存した値のまま固定され、 旧トグルを一度も使わなかった人にとってはずっと Claude、という状態でした。

コンパクトな Launch with ドロップダウンが、そのピンと同じ行に入りました。並ぶのは組み込みの エージェントだけです(spawn のルートがホストできるのがちょうどそれだけのため。Shell は無し — seed 付きのチャットにはエージェントが要ります。カスタムエージェントも無し — このルートはカスタムの argv を組み立てません)。ピンが 1 つも無くてもこの行は表示されるようになりました。ピッカーには常に 中身があるからです。

もう半分は目に見えないほうで、これらのチャットが頼るワークスペースのスキルが、選べるエージェント の一部からは見えていませんでした。今はすべてのエージェントから見えます。

機能一覧 — Collections とアプリ内ビュー → どのコーディングエージェントか — 5 つすべて、常に最新


その他

  • Windows の CI が復旧 (#1540)。前リリースのセッション周りの作業以降、Windows のテストが失敗して いました。新しいテストが、正規化済みのパスを取る関数に生の POSIX パスを渡していたため、Windows では /wt/fix-loginD:\wt\fix-login を比較して永久に一致しない、というものです。出荷される コードは正しく、間違っていたのはテストだけなので、Windows でのアプリの挙動は何も変わっていません。 記録しておく価値があるのは、そのテストの 6 ケースのうち 4 つが Windows で間違った理由で通って いたからです。次の不具合を隠すのはこの種の緑です。
  • コードレビュー bot が現行の Codex CLI とモデルで動くように (#1526, #1529)。リポジトリのツール 周りで、アプリへの影響はありません。
  • ブログのカバー画像をこのリポジトリへ移動 (#1530)。private 側の raw URL が外部から 404 になり、 記事のカバーが表示されなかったためです。

リンク


This site uses Just the Docs, a documentation theme for Jekyll.