nikkie-ftnextの日記

イベントレポートや読書メモを発信

実験的に ACP Client な marimo 上で Gemini CLI にコーディングさせる

はじめに

七尾百合子さん、お誕生日 357日目 おめでとうございます! nikkieです。

Agent Client Protocol を知って世界が広がった例です。

目次

marimo as ACP Client

Jupyter への別の選択肢として登場してきた marimo。

いいぞの評が広まってきているように見受けられます。

そんな marimo ですが、なんと Agent Client Protocol を実験的にサポートしています。
https://agentclientprotocol.com/get-started/clients に記載もあります

公式動画がこちら。
marimo を Client とし、Agent は opencode。
LLM は Ollama でローカル LLM を動かしています

ドキュメントはこちら

docs.marimo.io

Gemini CLI を Agent として marimo Client に接続

ドキュメントの Gemini CLI の例に取り組みました。
https://docs.marimo.io/guides/editor_features/agents/#gemini-agent

uvx marimo edit --sandbox --watch hello.pyで一時的な仮想環境で起動しています(marimo 0.20.4)

実験的機能の有効化

少し準備が必要です。
https://docs.marimo.io/guides/editor_features/agents/#connecting-to-an-agent

Enable the feature flag: Enable the feature flag under the "Lab" section in the settings menu

右上の歯車マーク > User Settings > Lab から「External Agents」を有効にします

marimo を一度落として再び起動すると、以下が表示され有効になったことが分かります。

🧪 Experimental features (use with caution): external_agents

Gemini CLI がコーディング

上記の設定がされていると「Chat & Agents」から「AGENTS」タブが選べるようになります。
(動画では有効化について説明されていたかが曖昧だったように思われます)

marimo で UI 操作して、Gemini CLI の起動コマンドを marimo のターミナルに入力。

私は Vertex AI に向けている1都合上、少し変えました。

% npx stdio-to-ws "vgemini --experimental-acp --model gemini-3.1-pro-preview" --port 3019

stdio-to-ws は marimo チームが開発したようです。
https://github.com/marimo-team/stdio-to-ws

これで connect できたので、さああとはコーディングです!

Pythonでエラトステネスの篩を実装して

途中でファイルの編集許可を求められました。

感動したのは、marimo の cell が追加される2
コーディングエージェントを CLI で使っているときとは異なる、新鮮な体験でした。
プロンプトに marimo での記載ルールが入っている3ようですね(いわば marimo Skill 的な知識の注入)

cell を実行していってエラトステネスの篩は動きました🙌
(ただちょっと Gemini CLI の応答速度がもっさりしていると感じるかもしれません)

終わりに

marimo を ACP Client として、Agent の Gemini CLI に marimo の記法でコーディングさせられました!
cell が書かれるのがすごいと思います(marimo の記法に沿ったコード生成 + Web UI での描画)。
いまは実験的とのことですが、非常に可能性を感じました

直接 cell が書かれるのを体験すると、コーディングのようなユースケースはチャットの往復だけだと UI としては厳しいんだなと感じます。
marimo という Client の例から ACP はそこに対処できる可能性がありますね。
またコーディングの外に目を向ければ、AG-UI4MCP Apps といった技術もチャットという UI を超えるという背景は共通しているのかもしれないですね


  1. vgeminiのヒミツはこちら
  2. gemini-3.1-flash-lite-preview は篩を実装できましたが、marimo 向けの Python が書けませんでした
  3. 実装はこちら? https://github.com/marimo-team/marimo/blob/0.20.4/frontend/src/components/chat/acp/prompt.ts