ヘッダーをカスタマイズする
よく使う操作が「ターミナルに打ち込む」しかないと、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 つも出ていないことに注目してください。

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

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" }
押すと、こういうセルが開いて結果が出ます。

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 | レシピ集 |
関連
- ヘッダーのリファレンス — 変数・
when・マージ・チップ・レシピ集 - 設定 → ヘッダーのカスタマイズ — 全フィールドのリファレンス
- 設定 → プロジェクトごとの設定 — 色・名前・並び順など、同じファイルの他のキー
- 設定 → 「よく使うコマンドを Run メニューに」 —
script.jsonで Run メニューを足す /mulmoterminal-headerスキル — 対話で書いてもらう場合はこちら