課題:Claude Code を自分のコマンドから起動すると、セルが灰色のまま戻ってこない
Claude Code のバックエンドをローカルの ollama に差し替えて試したくなります。コマンドは一行。
ollama launch claude --model llama3.1:8b --
これを MulmoTerminal の「よく使うコマンド」(ランチャ)として登録して、空いているセルから起動します。
動きます。AI と会話もできます。でもセルが灰色のままです。処理中なのか入力待ちなのか、ヘッダーの色から読み取れません。コスト表示も出ません。コンテキストの残量も分かりません。
そして翌日、その会話を再開できません。
なぜそうなるか — ただのターミナルでコマンドを実行しているだけ
ランチャに登録されたコマンドは、MulmoTerminal から見ると「書かれたまま実行する対象」です。再開可能なセッション ID も、設定ファイルの引き渡しも、使用量フックの登録も、何もありません。
MulmoTerminal のセルが本来受け取る引数は、こういう形です。
<自分のコマンド> --session-id <uuid> --settings <hooks path> --permission-mode … --mcp-config …
ランチャ登録はこの引数の付け足しをしないので、Claude Code は裸で起動し、MulmoTerminal 側の機能が全部効きません。9 枚並べて見張るための画面で、一マスの機能が半分欠けている状態です。
MulmoTerminal の解決:customAgents で引数を付け足す
~/.mulmoterminal/config.json に customAgents を書くと、同じコマンドを実行しつつ Claude Code 自身の argv を後ろに付け足した形で起動します。
{
"customAgents": [
{
"id": "nemotron",
"label": "Nemotron",
"agent": "claude",
"command": "ollama launch claude --model llama3.1:8b --"
}
]
}
書いて再起動すると、空きセル上部の Agent Picker(Claude / Codex / … と並ぶトグル)に Nemotron のボタンが増えます。選んで起動すると:
- セルの色が付く(working / waiting / idle が区別される)
- コスト表示とコンテキスト残量が出る
- 会話を再開できる
- GUI ツール(図・フォーム・ファイル描画)が効く
本物のセッションになります。
末尾の -- が全部を決める
実際に起動されるのは、こういう形です。
ollama launch claude --model llama3.1:8b -- \
--session-id <uuid> --settings <hooks> --permission-mode … --mcp-config …
自分のコマンドの後ろに Claude Code の引数が続きます。つまり自分のコマンドは、Claude Code の引数が始まる位置で引数の解釈をやめる必要がある。
末尾の -- がその役目です。ollama は --model llama3.1:8b までを自分のものとして受け取り、-- 以降はそのまま素通しします。
--model が二つあっても衝突しない
書いた --model は -- の前なので ollama のもの、起動フォームで選ぶ MODEL は -- の後ろなので Claude Code のものです。同じ名前が二回出てきても、境目の前後で別のプログラムが受け取るので、ぶつかりません。
後ろの引数を飲み込むと、灰色のままになる
冒頭の症状がここに繋がります。後ろの引数を飲み込んでしまうコマンド(-- を忘れた、$@ を使わずに引数を捨てている自前スクリプト)は、エラーを出さずにセルを壊します。
| 届かない引数 | 症状 |
|---|---|
--session-id |
会話を再開できない |
--settings |
セルが working / waiting の色を出さない |
--mcp-config |
GUI ツール(図・フォーム)が使えない |
起動自体は成功するのが厄介で、設定が正しく見えてしまいます。灰色のままなら原因はこれ、と覚えておけば済みます。
設定の制約
| キー | 中身 | 制限 |
|---|---|---|
id |
内部識別子。後から変えると別のエージェント扱いになる | 小文字英数字・-・_、最大 32 文字、先頭は -/_ 不可。claude / codex などの組み込み名は使えない |
label |
ボタンに出る表示名 | 24 文字 |
agent |
何として起動するか(=誰の引数を付け足すか) | "claude" のみ。必須 |
command |
実行するコマンドライン | 500 文字 |
項目は最大 8 件。9 件目以降は無視されます。
id や agent が不正・空の label や command・id の重複はその項目ごと捨てられます。長すぎる label / command は切り詰められて実行されるので厄介で、気づかずに別のコマンドが走ります。
弾かれた項目を確かめる
設定を書いてもボタンが出ないことがあります。弾かれた項目は単に「無い」状態になるので、ファイルの保存し忘れと見分けがつきません。確かめる方法:
curl -s "http://localhost:34567/api/config" | jq .customAgents
ファイルにあってこの出力に無い項目が、弾かれたものです。
可能性の高い順:
agent: "claude"が無い(必須)idが名前として無効(大文字・空白・組み込みの名前と重複)- サーバを再起動していない/タブをリロードしていない
シェルを通さないので $HOME や && は展開されない
command は書かれたまま実行されます。引用符は解釈しますが、$HOME・~・パイプ・&& は展開されません。シェルの記法を使いたいなら、ランチャコマンド(チップ)のほうが向いています。
再開はピッカーの選択を無視する
これを知っておくと混乱が減ります。
Agent Picker が決めるのは新しく始めるセッションだけです。OR RESUME HERE から会話を再開した場合は、ピッカーの表示に関係なく、そのセッションが最初に起動したときのエージェントで動きます。
どのセッションがどのエージェントで始まったかはディスクに記録されているので、セルを閉じても、サーバを再起動しても残ります。
ランチャコマンドとの違い
同じコマンドを登録するにしても、customAgents とランチャは性質が違います。
| customAgents | ランチャコマンド | |
|---|---|---|
| 実行するもの | 自分のコマンド + Claude Code の引数 | 自分のコマンドを書かれたまま |
| セルの中身 | 本物のセッション(再開・コスト・コンテキスト・入力待ち) | ただのターミナル |
| GUI ツール | Claude セルと同じく使える | 自分のコマンドで指定したときのみ |
シェル記法($VAR・パイプ) |
使えない | 使える |
選び方は単純で、セルに本物の会話が要るかどうか。htop を出したいだけなら後者、Claude Code を別のバックエンドで動かすなら前者です。
使ってみる
既存の MulmoTerminal インストールがあれば、customAgents は追加のインストールなしで動きます。初めての方は MulmoTerminal 完全ガイド の「使い方 3 ステップ」から。
動作確認の最小シナリオ(ollama でローカル LLM を動かす例)
ollama pull llama3.1:8bでモデルを取る(数 GB、時間がかかる)~/.mulmoterminal/config.jsonに上のcustomAgentsを書く- MulmoTerminal を再起動してタブをリロード
- 空いているセルを開いて Agent Picker に Nemotron が出ていれば成功
- 選んで起動したセルに色が付けば成功。灰色のままなら
--が足りていない
やめるときは項目を消して再起動します。始めた会話は、その形のまま再開されます。
まとめ
- ランチャに
ollama launch claude …を登録しただけでは、セルが灰色のまま、翌日再開できない - customAgents は同じコマンドの後ろに Claude Code の argv を付け足して「本物のセル」にする
- 末尾の
--がその境目。これを忘れると、エラーを出さずにセルが壊れる - 弾かれた項目は
/api/configで確かめられる
関連: MulmoTerminal 公式ガイドの customAgents ページ / MulmoTerminal の worktree 隔離 / MulmoTerminal の複数アカウント(accounts) / Cursor の代替としての MulmoTerminal

