MulmoTerminal の customAgents — ollama や自前の起動スクリプトで動かした Claude Code を『本物のセル』にする

MulmoTerminal の customAgents — ollama や自前の起動スクリプトで動かした Claude Code を『本物のセル』にする

課題: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 のボタンが増えます。選んで起動すると:

本物のセッションになります。

末尾の -- が全部を決める

実際に起動されるのは、こういう形です。

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

ファイルにあってこの出力に無い項目が、弾かれたものです。

可能性の高い順:

  1. agent: "claude" が無い(必須)
  2. id が名前として無効(大文字・空白・組み込みの名前と重複)
  3. サーバを再起動していない/タブをリロードしていない

シェルを通さないので $HOME や && は展開されない

command は書かれたまま実行されます。引用符は解釈しますが、$HOME・~・パイプ・&& は展開されません。シェルの記法を使いたいなら、ランチャコマンド(チップ)のほうが向いています。

再開はピッカーの選択を無視する

これを知っておくと混乱が減ります。

Agent Picker が決めるのは新しく始めるセッションだけです。OR RESUME HERE から会話を再開した場合は、ピッカーの表示に関係なく、そのセッションが最初に起動したときのエージェントで動きます。

どのセッションがどのエージェントで始まったかはディスクに記録されているので、セルを閉じても、サーバを再起動しても残ります。

ランチャコマンドとの違い

同じコマンドを登録するにしても、customAgents とランチャは性質が違います。

customAgents ランチャコマンド
実行するもの 自分のコマンド + Claude Code の引数 自分のコマンドを書かれたまま
セルの中身 本物のセッション(再開・コスト・コンテキスト・入力待ち) ただのターミナル
GUI ツール Claude セルと同じく使える 自分のコマンドで指定したときのみ
シェル記法($VAR・パイプ) 使えない 使える

選び方は単純で、セルに本物の会話が要るかどうか。htop を出したいだけなら後者、Claude Code を別のバックエンドで動かすなら前者です。

使ってみる

既存の MulmoTerminal インストールがあれば、customAgents は追加のインストールなしで動きます。初めての方は MulmoTerminal 完全ガイド の「使い方 3 ステップ」から。

動作確認の最小シナリオ(ollama でローカル LLM を動かす例)

  1. ollama pull llama3.1:8b でモデルを取る(数 GB、時間がかかる)
  2. ~/.mulmoterminal/config.json に上の customAgents を書く
  3. MulmoTerminal を再起動してタブをリロード
  4. 空いているセルを開いて Agent Picker に Nemotron が出ていれば成功
  5. 選んで起動したセルに色が付けば成功。灰色のままなら -- が足りていない

やめるときは項目を消して再起動します。始めた会話は、その形のまま再開されます。

まとめ

関連: MulmoTerminal 公式ガイドの customAgents ページ / MulmoTerminal の worktree 隔離 / MulmoTerminal の複数アカウント(accounts) / Cursor の代替としての MulmoTerminal

この記事をシェア

関連記事

記事一覧に戻る