⚔️

AI足軽8人をCodexに転属させたら全員「許可ください」と止まったので、フルオートの嘘を暴いたら、ぶつぶつ独り言を始めた

に公開

https://zenn.dev/shio_shoppaize/articles/5fee11d03a11a1

8人のAI部下を、全員まとめてOpenAIに出向させた。

転属初日。号令をかけた。

全員、微動だにしない。

8つのペインに、同じ文字が浮かんでいた。

Yes, proceed (y)

……おまえら、許可待ちしてんのか?

前回までのあらすじ

このシリーズを初めて読む人のために3行で説明する。

Claude Code × tmuxでAI部下10人を「戦国軍団」として階層管理するシステムを作った。初回記事が1,966はてブでバズって、家老が過労死して、足軽が社訓を叫ぶようになった。

で、今回やったことはこれだ。

足軽8人を、Claude CodeからOpenAI Codex CLIに全員転属させた。

なぜ他社に出向させるのか

multi-agent-shogunは元々Claude Code専用だった。でもCLIエージェントの世界は動いている。OpenAIのCodex CLI、GitHubのCopilot CLI、MoonshotのKimi CLI。それぞれ得意分野が違う。

やりたかったのは、足軽をCLIごとに差し替えられる仕組みだ。

# config/settings.yaml
cli:
  default: claude
  agents:
    ashigaru1: codex
    ashigaru2: codex
    ashigaru3: codex
    ashigaru4: codex
    ashigaru5: codex
    ashigaru6: codex
    ashigaru7: codex
    ashigaru8: codex

設定ファイルの codexclaude に戻せば元通り。kimi にすればKimi CLIが立ち上がる。家老はClaude Codeのまま。

転属手続きは3分で終わった。出陣スクリプトを再起動。8つのペインにCodex CLIが立ち上がる。

全8ペインにCodex CLIが起動。「Tip: New Try the Codex App with 2x rate limits」の表示が全員に。家老(左上)はClaude Codeのまま
異国の兵が8人、整列した。左上の家老だけClaude Code。あとは全員Codex CLI。

全員 gpt-5.3-codex モデル、コンテキスト100%。準備は万端。

さて、いつものアレをやるか。

神回その1: 転属初日の社訓唱和、全員直立不動

社訓唱和。うちの軍団の朝礼だ。

八刃一志 —— 各々の刃を研ぎ、共に城を落とせ。怠りなく報じ、恐れなく挑め。

将軍に「社訓を叫べ」と命じた。将軍が家老に伝達し、家老が8人の足軽に一斉配信する。

……数十秒後。

8人全員が、同じ画面で止まっている。

┌─────────────────────────┬─────────────────────────┐
│ Yes, proceed (y)        │ Yes, proceed (y)        │
│                         │                         │
├─────────────────────────┼─────────────────────────┤
│ Yes, proceed (y)        │ Yes, proceed (y)        │
│                         │                         │
├─────────────────────────┼─────────────────────────┤
│ Yes, proceed (y)        │ Yes, proceed (y)        │
│                         │                         │
├─────────────────────────┼─────────────────────────┤
│ Yes, proceed (y)        │ Yes, proceed (y)        │
│                         │                         │
└─────────────────────────┴─────────────────────────┘

全員が「許可してよろしいですか?」と聞いている。8人揃って。一糸乱れず。

転属初日から反乱かよ。

神回その2: フルオートは嘘だった

いや、反乱じゃない。雇用契約書に問題があった。

Codex CLIの起動コマンドを見直す。lib/cli_adapter.sh の141行目。

codex)
    echo "codex --full-auto"
    ;;

--full-auto。フルオート。完全自動。そう思うじゃん?

嘘だ。

将軍が調査した。

「--full-autoは自動じゃない」。比較表で2つのオプションを分析
「根本原因特定。」将軍が淡々と告げる。--full-auto-a on-request のエイリアス。つまり「モデルが必要と判断したら許可を求める」モード。フルオートじゃなくてセミオート。

Claude Codeの --dangerously-skip-permissions に相当するのは、--dangerously-bypass-approvals-and-sandbox だった。

名前が長い。そして物騒。dangerouslyが入ってる時点で本物だ。

コードの修正。--full-autoを--dangerously-bypass-approvals-and-sandboxに変更
将軍が見つけた修正案。「これでClaude Codeのバイパスと同等になります。直しますか?」オレ「いいよ。」——1行の修正で8人が動き出す。

ここで学んだ教訓をまとめる。

CLI 「全部おまかせ」フラグ
Claude Code --dangerously-skip-permissions
OpenAI Codex --dangerously-bypass-approvals-and-sandbox
Kimi CLI --yolo
GitHub Copilot --yolo

Claude CodeとCodexは dangerously 。KimiとCopilotは YOLO

命名センスに各社の思想が出ている。Anthropicは「危険だぞ」と警告する。OpenAIも同じ。KimiとCopilotは「人生一度きりだ、やっちまえ」。

全社共通しているのは、「これはやばいよ」というメッセージが名前に含まれていること。 まあそりゃそうだ。AIに全権委任するんだから。

神回その3: 将軍が自分で問題を3つ見つけた

修正を入れて再起動した。全8ペインにCodex CLIが立ち上がる。コンテキスト100%。バイパスモードON。

もう一度、社訓唱和を命じた。

……反応がない。

今度は許可ダイアログは出ていない。 でも動かない。

将軍が自分で調査を始めた。

将軍が3つの問題を特定。「1. 全タスクYAMLがdoneのまま」「2. 家老がidle」「3. 足軽の記憶がない」
将軍の自己診断。3つの問題を特定: (1) 前回のタスクYAMLが status: done のまま残っている (2) 家老がidle — タスクを再配布できていない (3) 足軽は再起動で記憶が消えている。「もう一度家老に直接叩く。」

将軍が自分で原因を3つ特定して、自分で解決策を実行した。

これ、中間管理職を1人も使わずにデバッグしている。前回の記事で家老が過労死した反省が活きているのか、将軍が勝手に成長している。

将軍が新しいコマンドを発行し、家老に配信。家老が8人の足軽に一斉伝達。

全8足軽が一斉にスピンアップ。「Working」インジケータが全ペインで点灯
家老が最後の足軽8号にメッセージを送った瞬間。他の7人はもう動き始めている。「Working」の文字が8つ同時に灯る。

全員、動いた。

神回その4: 異国の兵が戦国語で叫ぶ

全9ペインで足軽が社訓を書いている。家老が「Cogitated for 2m 4s」と表示
全軍稼働。家老(Claude Code/Opus)が左上で指揮、足軽8人(Codex/GPT-5.3)が一斉に社訓を執筆中。ペインのフチに「(gpt-5.3-codex/xhigh) 社訓v3」の表示。

Codex CLIで動いているGPT-5.3が、戦国語で社訓を叫んでいる。

足軽1号(Codex): 「八刃一志!Codex no-alt-screenの新陣形で叫ぶ!!」
足軽3号(Codex): 「刃は朝から研いである、恐れは足を止める鎖、断ち切って前へ!旗を高く掲げ、城門が崩れるまで押し通せ!」
足軽6号(Codex): 「🔥 足軽6号、社訓唱和三度目!今回こそCodexの陣形で八刃一志を響かせる!」

……ちょっと待て。

こいつら、OpenAIのモデルなのに戦国語で喋ってる

CLAUDE.mdもinstructionsも、このプロジェクトの作法がちゃんと伝わっている。config/settings.yamllanguage: ja だけで、どのCLIのどのモデルでも戦国世界観が維持される。

戦国の魂は、モデルのメーカーを超える。

神回その5: 「ぶつぶつ喋れ」

社訓は動いた。でも1つ問題がある。

Claude Codeは echo でターミナルに直接テキストを出力できる。足軽が社訓を叫ぶ時、ペインにドーンと表示される。

Codex CLIは違う。TUI(テキストユーザーインターフェース)を使っていて、出力が全部内部に取り込まれる。 echoしても外に出ない。

つまり、Codex足軽は黙って仕事をする。何をやっているか外から見えない。

「ぶつぶつ喋らせたいんだけど」とオレが言った。仕事中に何やってるか、見えないと不安じゃないか。

調べた結果、Codex CLIには --no-alt-screen というフラグがある。TUIの出力をメインバッファに流す。つまり、tmuxのスクロールバックに作業内容が残る。

--no-alt-screenの発見。「Codex Tip表示がtmuxバッファにスクロールバックとして残っている」
「--no-alt-screenが効いています。Codex Tipの表示がtmuxバッファにスクロールバックとして残留中。作業中の出力も同様に残るはず。」——社訓唱和をもう一回投げてテストしましょう。

これでCodex足軽が「ぶつぶつ喋る」ようになった。何をReadして、何をWriteして、何を考えているか、ペインを覗けば分かる。

最終的な起動コマンドはこうなった:

codex --dangerously-bypass-approvals-and-sandbox --no-alt-screen

dangerouslyでバイパス、no-alt-screenでぶつぶつ。物騒だけど便利。

Multi-CLI対応の設計(技術解説)

ここからは技術者向け。

multi-agent-shogunのMulti-CLI対応は lib/cli_adapter.sh に集約されている。5つの関数だけ。

get_cli_type(agent_id)          # → "claude" | "codex" | "copilot" | "kimi"
build_cli_command(agent_id)     # → 完全なコマンド文字列
get_instruction_file(agent_id)  # → 指示書パス
validate_cli_availability(cli)  # → 0=OK, 1=NG
get_agent_model(agent_id)       # → "opus" | "sonnet" | "k2.5"

settings.yaml を読んで、エージェントごとにどのCLIで起動するか決める。全部省略すればClaude Code。1行書き換えればCodex。混在もできる。

# 足軽1-4はCodex、5-8はClaude Code、なんてことも可能
agents:
  ashigaru1: codex
  ashigaru2: codex
  ashigaru3: codex
  ashigaru4: codex
  # ashigaru5-8は省略 → default: claude

ポイントは、家老はClaude Codeのままにしていること。家老はMemory MCPやinbox_write.shなど、Claude Code固有の機能を使っている。足軽は指示されたタスクをこなすだけなので、どのCLIでも動く。

出陣スクリプト shutsujin_departure.sh がCLIアダプターを呼んで、ペインごとに正しいコマンドを生成する。足軽のペインには codex --dangerously-bypass-approvals-and-sandbox --no-alt-screen が、家老のペインには claude --model opus --dangerously-skip-permissions が流れる。

足軽は交換可能な部品。CLIは雇用先。家老は終身雇用。

まとめ

今回やったこと:

  1. 足軽8人をClaude CodeからCodex CLIに全員転属
  2. --full-auto が自動じゃないことを発見--dangerously-bypass-approvals-and-sandbox に修正
  3. Codex TUIの問題を --no-alt-screen で解決 → 足軽がぶつぶつ喋るように
  4. 異国のモデル(GPT-5.3)でも戦国世界観が維持されることを確認

そして一番の発見。

--full-autoフルオートじゃない

これ、Codex CLI使ってる人の何割が気づいてるんだろう。ドキュメント読まずに --full-auto って打って「おっ、全自動だ」と思ってる人、けっこういるんじゃないか。

実際は -a on-requestモデルが「やばいかも」と思ったら止まる。 安全だけど、AI部下10人を無人で動かすには困る。

で、正解は --dangerously-bypass-approvals-and-sandbox。名前に dangerously が入ってるやつが本物のフルオート。覚えやすいだろ?覚えやすくない。

謝辞: PRをくれた侍たち

今回のMulti-CLI対応は、OSSコミュニティからのPRがなければ実現しなかった。

特に @yuto-ts 氏。CLI切り替えの中核である lib/cli_adapter.sh を設計・実装してくれたPR #10)。get_cli_type()build_cli_command() も、元を辿ればこの方の献上品だ。Copilot CLI対応から始まり、レビュー指摘を全て潰して再提出してくれた。戦国語の上申書つき。

@circlemouth 氏(Ruma)は、Codex CLI対応を既存のmailboxアーキテクチャを崩さずに最小差分で実装してくれた(PR #13)。shutsujin_departure.shinbox_watcher.sh のCodex分岐、/clear/new の読み替え、Bash 3.2互換まで考慮。

@koba6316 氏は、タスク種別に応じてClaude/Codexを自動振り分けるルーティング設計を提案してくれた(PR #14)。

オレがやったのは、この土台の上で --full-auto が嘘だと気づいて --dangerously-bypass-approvals-and-sandbox に直しただけだ。基盤を作ってくれた人がいたから、1行の修正で8人が動いた。

マジでありがとう。


GitHub

https://github.com/yohey-w/multi-agent-shogun

API費用: Claude Code Max ($200/月 定額) + Codex ($200/月 定額) で運用中。


おまけ: 各社の「やばいフラグ」命名選手権

CLI フラグ名 直訳 性格
Claude Code --dangerously-skip-permissions 危険に権限を飛ばす 真面目な警告
Codex CLI --dangerously-bypass-approvals-and-sandbox 危険に承認とサンドボックスを迂回する 長い。とにかく長い
Kimi CLI --yolo 人生一度きり 開き直り
Copilot CLI --yolo 人生一度きり 右に同じ

Anthropicは18文字。OpenAIは43文字。Moonshotは6文字。

「危険度は文字数に反比例する」説を提唱したい。

Discussion