MulmoTerminal の script.json と launchers — テスト完了通知が鳴らない理由と、どちらに何を書くかの判断

MulmoTerminal の script.json と launchers — テスト完了通知が鳴らない理由と、どちらに何を書くかの判断

課題:テストに 5 分かかるのに、終わったときに音が鳴らない

テストに 5 分かかるプロジェクトがあります。走らせているあいだは別のセルで作業したい。失敗したら音で知らせてほしい。

MulmoTerminal の通知音設定には「コマンドが異常終了したとき」という項目があり、有効にしてあります。

素のターミナルセルを開いて、yarn test と打つ。5 分後、失敗して戻ります。

音は鳴りません。

これは設定ミスでも環境問題でもなく、素のシェルの中で走らせているから起こります。

なぜシェルの中では終了が検知できないのか

素のターミナルセルの中では、bash や zsh のような対話シェルが生き続けています。その中で yarn test を走らせても、終わったあとシェルはプロンプトに戻るだけで、外から見るとシェルは何も変わっていません。

MulmoTerminal が通知音を鳴らすのは、セルで走っているコマンドが終了したときです。シェルの中で走った子プロセスの終了は、シェルは知っていてもセルの外には伝わりません。成功だったか失敗だったかも分かりません。

鳴らせるのは、セル自体が 1 つのコマンドで、そのコマンドが終わるとセルも終わるタイプのものです。終了の合図がセル境界で発生するので、成功も失敗も検知できます。

MulmoTerminal の解決:1 コマンド専用セルを登録する

空いているセルの起動フォームには OR RUN A SCRIPT と OR LAUNCH という欄があります。ここに登録したコマンドは、1 つのコマンド専用のセルで起動します。そのコマンドが終わればセルも終わるので、通知音が鳴ります。

空きセルのランチャ — OR RUN A SCRIPT が script.json、OR LAUNCH が launchers

登録先が二つあって、見た目が似ているので迷いますが、置き場所と性質が一対一で対応しています。

OR RUN A SCRIPT OR LAUNCH
書く場所 プロジェクトの script.json 全体設定の ~/.mulmoterminal/config.json の launchers
誰のものか プロジェクトのもの(他の人が clone しても出る) 自分のもの(どのプロジェクトでも出る)
セルの中身 1 コマンド専用 1 コマンド専用
典型 テスト/ビルド/dev サーバ/lint/デプロイ htop/lazygit/node REPL
通知音 鳴る 鳴る

どちらも 1 コマンド専用セルなので、通知音は鳴ります。違うのは「プロジェクトごとに違うコマンド」なのか「自分がどのプロジェクトでも使う道具」なのかです。

詳細

script.json — プロジェクトのスクリプト

プロジェクトのルートに script.json を置きます。

{
  "scripts": [
    { "label": "dev", "command": "yarn dev" },
    { "label": "test", "command": "yarn test", "cwd": "." }
  ]
}

package.json のスクリプトを自動で読み込まないのには理由があります。package.json にはビルド補助の内部用スクリプトも入っていて、空きセルの Run メニューに出す価値があるのはそのうちの数件だけです。別ファイルにすることで、「セルで開く価値があるもの」をプロジェクト側が明示できます。

clone した他の人にも同じボタンが出るので、プロジェクトの「標準の動かし方」をコミットできます。

launchers — どのプロジェクトでも出る自分の道具

~/.mulmoterminal/config.json に書きます。

{
  "launchers": [
    { "label": "htop", "command": "htop" },
    { "label": "lazygit", "command": "lazygit" }
  ]
}

launchers に書くのは 自分で足したものだけ で、素のシェルを登録する必要はありません。素のシェルは起動フォームの Shell トグルが担当します。

ヘッダーボタンにも昇格できる

script.json のスクリプトは、稼働中のセルのヘッダーにボタンとして出すこともできます(buttons / commands)。空きセルを探さず、作業中のセルから 1 クリックで走ります。

稼働中セッションの Run ボタン(再生アイコン)から呼び出すと、隣の空きセルで走ります。会話を止めずに裏でテストが回るので、「エージェントに書かせたコードをその場で試す」を 1 クリックに畳めます。

反映のタイミング

launchers は全体設定の ~/.mulmoterminal/config.json にあり、このファイルはサーバ起動時に 1 度だけ読まれます。

使ってみる

MulmoTerminal を立ち上げたら、まずは script.json から試すのが楽です。

  1. いま開いているプロジェクトのルートに script.json を作る
  2. 普段よく打つ yarn test などを 1 行書く
  3. 空きセルを開き直す
  4. OR RUN A SCRIPT に test が出れば成功

そこから走らせて、失敗で終わったときに音が鳴れば、通知音も効いています。「コマンドが異常終了したとき」の設定を有効にしておくのを忘れずに。

launchers のほうは、htop のようにどのプロジェクトでも使う道具を 1〜2 件書いて、再起動して空きセルの OR LAUNCH に出れば成功です。

書き方の詳細は MulmoTerminal 公式ガイドの設定ページ に全キーが載っています。

まとめ

関連: MulmoTerminal 公式ガイドの設定ページ / Cursor の代替としての MulmoTerminal / tmux で Claude Code を並列に走らせる限界

この記事をシェア

関連記事

記事一覧に戻る