ヘッダーをカスタマイズする

よく使う操作が「ターミナルに打ち込む」しかないと、1 日に何十回も同じ文字を打つことになります。 MulmoTerminal は、稼働中セッションのヘッダーに自分のボタンを足せます。設定ファイルに数行 書くだけで、/compact の送信も、テストの実行も、社内 wiki を開くのも、ワンクリックになります。

このページは最初の 1 個を足すところから順に説明します。全フィールドの一覧は 設定 → ヘッダーのカスタマイズに。


1. まずヘッダーを読む

何も設定していないセルのヘッダーです。2 段あります。

何も設定していないセルのヘッダー

場所 何が出ているか 設定でどうなるか
1 段目 左 状態ドット、⎇ main などの情報チップ chips で並べ替え・非表示・追加
1 段目 右 拡大・寝かせる・閉じるなどセルの操作 変えられません(アプリの構造)
2 段目 左 ~/acme-api ▾ — パスメニュー(後述) 変えられません
2 段目 右 Skill ドロップダウンとアイコンのボタン列 buttons がここに入ります

カスタマイズできるのは、この 2 段目の右側です。上の画像で Skill(稲妻のアイコン)の右にある小さな アイコンのうち、いちばん左のクリップが唯一の既定ボタン(Insert a file path)で、 残りはアプリ側の固定ボタンです。

既定のボタンは 2 つだけです — Insert a file path と、Open this branch’s PR (そのブランチに開いている PR があるときだけ出ます)。以前ここにあった Reveal in the file manager / Browse files in the app / New terminal here / GitHub は、下のパスメニューへ 移りました。

パスメニュー — ディレクトリに対する操作はここ

2 段目の左にあるパス(~/acme-api ▾)はボタンです。押すと、そのセルのディレクトリに対する 操作が出ます。

パスメニュー

GitHub のリモートが解決できるリポジトリなら、区切り線の下に Repository / Issues / Pull requests / Actions も並びます。ここは固定なので設定では変わりません。同じことをボタンでも やりたい場合は、buttons に自分で書けば両方出ます。


2. 最初のボタンを 1 個足す

どのファイルに書くか

ファイル 効く範囲
~/.mulmoterminal/config.json すべてのターミナル
<プロジェクト>/.mulmoterminal.json そのディレクトリで開いたセルだけ

ボタンが出るのはエージェントのセル(Claude / Codex / Antigravity / Grok / Muse)です。ランチャーの チップや Shell セル、Run コマンドで開いたターミナルには出ません —— あれはユーザー自身のコマンドラインで、 このアプリが設定したものは何も足さないからです。

まずはプロジェクト側で試すのが安全です。プロジェクトのルートに .mulmoterminal.json を作って、 こう書きます。

{
  "buttons": [
    {
      "id": "compact",
      "icon": "compress",
      "label": "Compact this conversation",
      "run": "input",
      "text": "/compact"
    }
  ]
}

サーバの再起動は要りません。 ヘッダーは、作業ディレクトリ・セッション・エージェントが 変わったときと、ブラウザのウィンドウに戻ってきたときに読み直されます。エディタで保存して ブラウザに切り替えれば、それで反映されます。

押すと何が起きるか

run: "input" なので、そのセルで動いている Claude / Codex に /compact と打ち込んで送信します。 自分でターミナルに切り替えて打つのと同じことが、1 クリックで済みます。

大事な落とし穴 — buttons を書くと既定は消えます

buttons をどこかに 1 つでも書くと、組み込みの既定セットは丸ごと置き換わります(足されません)。 上の例だけを書くと、Insert a file path が消えます。残したいなら自分で並べてください。

{
  "buttons": [
    { "id": "pick-file", "icon": "attach_file", "label": "Insert a file path", "run": "open", "open": { "pickFile": true } },
    { "id": "compact", "icon": "compress", "label": "Compact this conversation", "run": "input", "text": "/compact" }
  ]
}

3. アイコンとツールチップ

ここが最初につまずくところです。

label は画面に出ません。 ボタンが描くのはアイコンだけで、label は マウスを乗せたときに出るツールチップ(ブラウザ標準のもの)になります。

つまり label は「そのボタンが何なのか」を伝える唯一の手段です。Build のような単語より、 Run the tests のように動作が分かる文にしてください。ホバーするまで読めないのですから。

キー 役割
icon Material Symbols の名前(compress、science、menu_book …)。画面に出るのはこれだけ
emoji 絵文字を 1 つ。icon より優先されます
label 必須。ホバーで出るツールチップ。読み上げ(aria-label)にも使われます

icon も emoji も書かないと、bolt(稲妻)が出ます。全部これだと見分けが付かないので、 必ず icon を指定してください。

下は、5 個のボタンを設定したヘッダーです。文字は 1 つも出ていないことに注目してください。

ボタンを 5 個設定したヘッダー

同じ画面を、設定していないセルと並べるとこうなります。左が未設定、右が上の設定を入れたもの。

未設定のセルと設定済みのセル


4. run の 4 種類

ボタンが何をするかは run で決めます。4 つしかありません。

run: "input" — エージェントに送る

text をそのセッションに打ち込んで送信します。スラッシュコマンドや、決まり文句のプロンプトに。

{ "id": "compact", "icon": "compress", "label": "Compact this conversation", "run": "input", "text": "/compact" }

run: "shell" — コマンドを実行する

cmd をコマンドセルで実行します。エージェントのセッションは邪魔されません。

{ "id": "test", "icon": "science", "label": "Run the tests", "run": "shell", "cmd": "yarn test" }

押すと、こういうセルが開いて結果が出ます。

run:"shell" のボタンが開いたコマンドセル

cmd の中身はブラウザに渡りません。押した時にサーバが id から引き直し、${変数} を シェルエスケープしてから実行します。

run: "open" — 何かを開く

open の中に書いたキー 1 つで、開くものが決まります。

表は、複数書いてしまったときに効く順(上ほど強い)でもあります。

キー 開くもの
pr 現在のブランチの PR をブラウザで(PR が無いときはボタン自体が出ません)。サーバ側で url に解決されるため、url を一緒に書いていても PR のほうが勝ちます
url ブラウザで URL(http / https のみ)
reveal OS のファイルマネージャ(Finder / エクスプローラ / xdg-open)
files アプリ内のファイルエクスプローラ
view アプリ内のビュー:prs / wiki / collections / accounting(diff も受け付けますが、現状は専用の画面が無くファイルビューが開きます。worktree の差分は差分バッジから)
terminal そのディレクトリで新しい端末セル
pickFile OS のファイル選択ダイアログ。選んだパスを入力欄に挿入します
{ "id": "handbook", "icon": "menu_book", "label": "Open the team handbook", "run": "open", "open": { "url": "https://example.com/handbook" } }

1 つのボタンには 1 つだけ書いてください。 複数書くと上の順で最初の 1 つだけが効き、 残りは黙って無視されます。

run: "action" — このセルのエージェントを再起動する

セル自身に効く操作です。今のところ 1 つだけ:

{ "id": "restart", "icon": "restart_alt", "label": "Restart the agent", "run": "action", "action": "restart" }

"restart" は、エージェントのプロセスを終了して、同じセル・同じディレクトリ・同じ会話のまま起動し 直します。ランチャーに戻ってディレクトリを選び直し、or resume here から会話を探す必要はありません。 MCP の登録変更・~/.mulmoterminal/config.json の編集・plugin の更新が効くようになるのはこれです。 これらはプロセス起動時に一度だけ読まれるからです。

resume の代償があり、確認は出ません。 会話は transcript から読み直され、実際にトークンを消費します。 作業中でもエージェントは終了します。組み込みの Restart ボタンはありません。このボタンと terminal-restart ショートカットが、再起動する手段のすべてです。


5. ここから先は「引く」ページへ

ここまでで、ボタンは作れます。この先 —— ${変数} の一覧、when の全記法、global とプロジェクトの マージ、チップ、Skill メニュー、そのまま貼れるレシピ —— は ヘッダーのリファレンスにあります。上から読むページではなく、 書くときに引くページです。

知りたいこと どこ
${dir} や ${task} に何が入るか、いつ空になるか ${変数}
出し分けの条件(!isGitRepo・!=・「値があるとき」) when
global とプロジェクト、2 つの設定ファイルの関係 並び順とマージ
1 段目の情報チップを並べ替える・足す チップ
Skill メニューを短くする Skill メニュー
全部入りの .mulmoterminal.json レシピ集


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