本文へスキップ

外部エージェント(ACP)

Chimera は、自分で書いていないエージェント — Claude Code、Gemini CLI、あるいは Agent Client Protocol を話すあらゆるアダプタ — にコーディングの1ターン を渡せます。トランスクリプト、検証器、スナップショット、取り消しは Chimera のまま。作業だけが他人のもの です。

なぜ

Chimera の主張は「自分のループだけが良いループだ」ではありませんでした。主張はループの周りにある 統治です。汚染台帳、書き込み領域、ターン前のコピー、ターン後の判定、実際に何が起きたかを語るレシート。 これらはどの実行者にも当てはまります。すでに信頼している実行者を動かすことを拒むのは、製品のうち最も 面白くない半分に固執することです。

保証されること、されないこと

この節はセットアップより先に読んでください。この機能があなたに向いているかを決めるのはここです。

ACP エージェントは、クライアントのどの能力を使うかを宣言します。Chimera は fs/read_text_filefs/write_text_file を提供します。提供は強制ではありません。 動かす価値のあるエージェントは自前の ファイル・シェルツールを持っています。Claude Code は Claude Agent SDK を通じて書き込み、こちらに先に 尋ねる義務はありません。

具体的には:

Chimera 自身のループ 外部エージェント
書き込み領域が領域外の書き込みを拒否 常に こちらを経由する呼び出しのみ
シェルは設定したサンドボックスで動く 常に エージェントが自分のやり方で実行
汚染台帳が危険ツールのゲートを起動 常に こちらが仲介するツールのみ
ターン前にワークスペースのスナップショット はい はい
ターン全体をワンクリックで取り消し はい はい
与えた許可はすべてレシートに残る はい

最後の3行が本当の保証であり、外部エージェントを選んだときにコード画面の姿勢の行が約束する内容です。 その行は「/project の中を編集し、コマンドは実行しない」と言うのをやめます — その文は Chimera が所有 するツールの説明だからです — 代わりに、先にコピーを取ったこと、そしてターンを取り消せることを述べます。 強いほうの文を残す画面は、そのターンが果たせない約束をしていることになります。

Chimera は ACP のターミナル能力も辞退します。こちらがホストするターミナルは、サンドボックスの規則を 何一つ持たない第二の実行経路になってしまいます。

セットアップ

Chimera が知っているエージェントに設定は不要です:

npm i -g @agentclientprotocol/claude-agent-acp   # Claude Code、Node 22+ が必要
npm i -g @google/gemini-cli                       # Gemini CLI(ACP モードは上流で実験的扱い)

そのうえで、このマシンが実際に何を実行できるか確認します:

chimera doctor

external_agents が各エージェントを available: true/false で報告し、false のときは解決するための行も 示します。可用性は sidecar が動いているマシン上で判定されます — パッケージ版デスクトップなら、CI が 組み立てて誰も見ていないマシンです。つまり「あるはずだ」は証拠になりません。

デスクトップアプリは入力欄の上に 実行するのは の行を表示し、doctor が見つけたものを並べます。実行 可能なものが一つも入っていなければ、この行はそもそも現れません。「まだ持っていない、入れ方はこう」は doctor の役目です。

資格情報

Chimera が起動する子プロセスの環境からは API_KEY / TOKEN / SECRET を含む変数が取り除かれます。 シェルコマンドがプロバイダのキーを出力できないようにするためです。ACP エージェントは仕事全体にキーを 必要とするプログラムなので、各エージェントが必要な変数を名前で宣言し、その分だけが戻されます:

  • Claude Code: ANTHROPIC_API_KEYANTHROPIC_AUTH_TOKENANTHROPIC_BASE_URLCLAUDE_CONFIG_DIR
  • Gemini CLI: GEMINI_API_KEYGOOGLE_API_KEYGOOGLE_APPLICATION_CREDENTIALS

環境をまるごと渡すほうが楽ですが、それは将来のあらゆるアダプタにマシン上のあらゆるキーを手渡すことに なります。

自前のアダプタ

Codex などは、このプロジェクトが実行していないサードパーティ製アダプタ経由で ACP に届きます。未検証の コマンドを並べる — それは「確認していない」を「対応済み」に変えてしまいます — のではなく、お手元の ものを Chimera に指してください:

// POST /api/code/turn
{
  "message": "失敗しているテストを直して",
  "provider": "custom",
  "provider_command": "npx -y some-acp-adapter --flag"
}

コマンドはシェル風に分割されますが、シェルを通さず実行されます。はぐれたパイプは第二のコマンドでは なく単なる引数になります。Windows では、cmd.exe の構文(& | < > ^ %)を含む引数が .cmd ランチャーに 届く場合、エスケープではなく拒否します。引用符の規則はランチャーごとに違い、推測を誤れば、マシン上の プログラムではなくマシンそのものを実行してしまうからです。

しくみ

  • 子プロセスは会話ごとに1つで、ターンごとではありません。session/prompt はエージェントが保持する 文脈の中の1メッセージです。毎回新しいプロセスにすると、どのターンも1ターン目になってしまいます。
  • 同時に生きているのは最大4つ。1時間触られなかったものは閉じます。それぞれがモデルへの接続を握った プロセスです。
  • プロセスは自分のグループで起動し、ツリーごと終了させます — コーディングエージェントはランチャーで、 こちらが握っているプロセスだけを終了させると、実際に働いているワーカーが残り、フォルダが掴まれた ままになります。ターンの途中でアプリを終了した場合は atexit の回収が受け持ちます。
  • エージェントの session/update 通知は、ネイティブのループが出すのと同じイベントに翻訳されます。 画面に2つ目の実装は要りません。思考の断片は回答に混ぜず捨てます。diff ブロックは、トランスクリプト がすでに描画している統合パッチになります。
  • ネイティブのループが持っていて、こちらが報告できない数値 — stepscontext_peak_tokens — は 0 ではなく null で届きます。0 は「何もしなかった」と読まれてしまいます。

限界

  • 許可の要求には allow_once で答え、レシートに記録します。エージェントが尋ねる義務のなかった要求を 堰き止めるのは演出です。誠実なやり方は、許可し、記録し、スナップショットに頼ること — それは一度も 尋ねてこなかった書き込みまで覆います。
  • 融合、ロール、記憶、リポジトリマップは Chimera 自身のループのものです。外部ターンは fused: false を 返し、記憶の利用も0です。どれも起きていないからです。
  • Gemini の ACP モードは上流で実験的と明示されており、リリース間で挙動が変わることがあります。

GitHub でこのページを編集