5.4.0 — 画面があなたの言語になり、動かしっぱなしのサーバが自分で片づける

5.4.0 時点のスナップショットです(2026-09-20 リリース)。 アプリが進めば内容は古くなります。 それは前提で、各節からリンクしている「生きているガイド」が常に最新です。

3つのうち2つは、あなたが何かを決める必要があります(言語と、掃除の間隔)。残る1つは設定が要りそうで 要らない、というのがその中身です。

1. 画面を 简体中文 / 繁體中文 / 한국어 にする

場所: ヘッダの歯車 → 設定の上の方にある Language for this app。

設定の言語ピッカー

配色と同じくブラウザごとに保存されます。電話とデスクトップでそれぞれ別の言語にできますし、 この設定がエージェントに送られることはありません。

訳されている範囲: 設定画面と、グリッドとロスターが出しっぱなしにしている状態語です。他の画面は まだ英語で、ピッカーの下の行がそう言います(気づかせずに放置しません)。状態語を先にやったのは、 作業している間ずっと画面に出ているので、アプリの中で一番読まれる文字列だからです。

触らないもの: エージェントが書く文章と、ターミナルの中身。あれはエージェントの言語とシェルの 言語であって、このアプリの言語ではありません。

「ブラウザの言語」がブラウザにちゃんと訊くようになりました。 以前はこのリポジトリが持っている 一覧と突き合わせていました。いまは CLDR に訊きます。zh-HK が繁体字に落ちるのはそのためで、 zh-yue も同じく繁体字になります(このタグの正準形は prefix を置き換え、CLDR がそれを繁体字・香港 に展開するため)。ピッカーの下の行は、ブラウザが要求したタグと解決結果を分けて出すので、 意外な結果になったときにどちらを見ればいいか分かります。

読んで変だと思ったら、たぶん変です。 機械で検査できるものは全部通してあります —— キー集合、 プレースホルダ、簡繁の文字混入、用語の一貫性、句読点の全半角 —— が、どれも文を読んでいません。 issue を立ててください。翻訳の修正 PR は相談無しで歓迎です。

2. 動かしっぱなしのサーバが、detached セッションを定期的に掃除する

これまで、detached になったセッションを終わらせるスイープはサーバ起動時に一度きりでした。 サーバを何日も上げっぱなしにしていると、今朝 detached になったセッションは次に再起動するまで 見られない —— つまり再起動が掃除の唯一の契機でした。

場所: 設定の、既にある「何日で終わらせるか」のステッパーと同じブロック。

設定のスイープ間隔ステッパー

~/.mulmoterminal/config.json で書いても同じです:

{
  "sessionIdleReapDays": 7,
  "sessionReapIntervalHours": 6
}

既定は 0(無効)で、これは意図的です。アップグレードを境に、これまで平穏に動いていたサーバが 勝手にセッションを終わらせ始めるのは避けたい。0 はいまの挙動そのままです(起動時に1回、あとは無し)。

効くのは次にサーバを起動したときからです。 間隔は起動時に一度だけ読まれ、保存してもわざと タイマーを張り直しません(保存のたびにカウントダウンが戻ると、いつまでも発火しないため)。 つまり保存してから再起動するまでの間、保存された数字といま動いているサーバの数字は別物で、 画面はそれを区別します。ヒントは「保存された値」を言い、1行だけが「このサーバが実際に張った値」を言います。

効いているかの確かめ方: 再起動後、ステッパーの下の行が This server repeats the sweep every N hour(s) になっていれば動いています。The saved cadence above applies from the next start. のままなら、 保存はできていて再起動がまだ、ということです。

何を終わらせて何を終わらせないかは変わっていませんし、sessionIdleReapDays も変わっていません。 このリリースが変えたのは「どれくらいの頻度で訊くか」だけです。両方のキーの詳細は 設定ガイドにあります。

3. Markdown プレビューが、読んでいた位置に戻る

設定は要りません。Files ペインで .md を開いて Preview にし、下の方までスクロールして、別の所へ 行って、戻ってくる。先頭ではなく、読んでいた所に戻ります。

読んでいる最中にファイルが書き換わっても保たれます。というより、そちらが常態です —— そのディレクトリで 作業しているエージェントが同じファイルを触っているので。プレビューは描き直されますが、あなたは途中に 留まります。Preview を表示しているときでも、Edit に切り替えている裏で書き換わったときでも同じです。

入っているかの確かめ方: 長い Markdown を Preview でスクロールしておき、エージェントにその ファイルへ追記させて見ていてください。このリリースより前は、ファイルが変わった瞬間に先頭へ飛んでいました。

興味のある方へ。ここが一番やりようの無かった所です。プレビューはアプリ側からわざと読めない iframe です —— サニタイズしていない Markdown を描くので、アプリのオリジンに触れない形で封じ込めてあります。 その封じ込めを手放さずにスクロール位置だけ読む、というのが今回の作業でした。文書側が、サーバが 応答ごとに署名した1本のスクリプトを通して自分の位置を報告します。ファイル自身のスクリプトはその署名を 持たないので、これまでどおり一切動きません。

4. 落ちたサーバが復帰する、ほか

以下はすべて設定不要です。

  • npx mulmoterminal が、起動したサーバを見張るようになりました。 クラッシュしたらバックオフ 付きで立て直し、ブラウザのタブは tmux が保持していたセッションに再接続します。死んだポートを 見つめ続けることはもうありません。yarn dev は前からこうでしたが、配布版の launcher は逆でした。 これは逆さまです —— npx で動かしている人こそ自分では直せませんし、電話からでは起動し直す ターミナルがありません。あなたが止めた場合はちゃんと止まります。Windows は対象外です (Node に本物のシグナルが無く、停止とクラッシュを区別できないため)。
  • 終了時にキューに積まれたセッション状態が、ディスクに届くようになりました。 それまでは終了時の 書き込みがまるごと失われていました(最初の1件が順番を得る前にプロセスが去るため)。
  • 電話から、id の一部で別のセッションに届かなくなりました。 tmux は完全一致が無いとき前方一致で 対象を解決するので、他のセッション名の先頭でしかない id がそのセッションに届いていました。
  • 再起動をまたいだセッションでも「このディレクトリで新規ターミナル」が動きます。 tmux が再起動を 生き延びるのは設計どおりなので、これは再起動のたびに失敗していました —— しかも行にはその ディレクトリが表示されているのに、です。
  • git status のポーリングが積み上がらなくなりました。 同じ checkout を開いた複数のセルが それぞれ読んでいたのが、1本に合流します。
  • Files ペインの展開復元が速くなりました。 取得する一覧は同じで、1ディレクトリずつではなく 階層ごとにまとめて待ちます。

アップグレード

npx mulmoterminal@latest

このリリースは、既にある設定ファイルを書き換えません。新しいキーはどれも、これまでの挙動が既定値です。 バージョンを固定している場合も 5.4.0 はそのまま差し替えられます。


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