DEEP DIVE · 05

ai-executive 仕様書
クロスレビュー型議案評価システム

ワークショップ Part 1 で Claude Code Desktop に渡す本格仕様プロンプト。役員が GitHub アカウントを持たなくても、空フォルダから Claude が丸ごと生成する。3 フェーズ (① 独立評価 → ② 相互レビュー → ③ 統合提言) で、単独評価では見えない盲点を役員同士のクロスレビューで炙り出す。この仕様書自体がコピペ即実行のプロンプトとして機能する。

Cross-Review Spec-to-App SSE Streaming FastAPI · Docker

なぜ「仕様から生成」アプローチか

当初構想では ~/Products/ai-executive をクローンして役員 PC で docker compose up を走らせる計画でした。しかし MIXI 役員の端末には GitHub アカウントが紐づいていないため git clonegh repo clone も通らない。この制約を逆手に取って、ワークショップ Part 1 は空フォルダから Claude Code Desktop にアプリを丸ごと生成させる方針に切り替えました。

  • GitHub アカウント不要 — 端末ポリシーの壁を越え、どの役員の MacBook でも同じ手順で立ち上がる
  • デモ体験のインパクトが強い — 既存 repo を動かすより、「目の前で Claude が app を描き上げる」光景のほうが "自分でも触れる" 実感を残す
  • 仕様を読み書きできれば誰でもツールを持てる — 2026 年のソフトウェア開発が「仕様 → 生成 → 微調整」のループに収束することの予告編になる
  • 再現性が高い — 本ページの §5 プロンプトをコピペするだけで、帰宅後も役員が一人で再演できる
Part 1 メインデモの中核。本ページは単なる解説ではなく、「コピー&ペーストで AI Executive ミニ版が生える」実行可能な仕様書として設計されています。§5 のプロンプトブロックが最重要の成果物。

ai-executive (reference) の位置付け

同名の本格版 ~/Products/ai-executive は、エージェント 17 体 (標準 16 + 企業固有 1) / 12 戦略フレームワーク / 3 分析モード / 4 インターフェース (Web / CLI / REST / MCP) を備えた MIXI 経営支援マルチエージェントシステムです。これは参考実装として "こういう方向に育つ" という山頂を見せるためのもの。ワークショップ当日は clone せず、仕様のインスピレーション源としてのみ扱います。

当日 Claude に描いてもらうミニ版との差分:

項目reference (本格版)ワークショップ版 (ミニ版)
エージェント数17 体4 体 (CEO / CFO / CTO + Facilitator)
ファイル数150+12 ファイル以内
言語・スタックPython + TypeScript (Next.js)Python のみ (+ 1 枚 HTML)
フレームワーク12 種 (SWOT / Porter / 3C ほか)なし (自由記述 + JSON schema)
処理フロー3 モード3 フェーズ (独立評価 → クロスレビュー → 統合提言)
通信REST + WebSocketSSE (Server-Sent Events) streaming
起動docker compose up (backend+frontend)docker compose up (1 コンテナ)
ミニ版は「本格版の骨格を 10 分の 1 に圧縮した教材」と捉えてください。仕様 → 生成 → 改変のループを体験したあと、本格版へのスケールアップは発想としてつながる設計です。

生成ターゲットの仕様 (役員向け説明)

Claude Code Desktop に描いてもらうミニ版の輪郭を、役員説明に使える粒度で記述します。

  • 目的 — 役員 3 名 (CEO / CFO / CTO) の視点から議題を同時評価する、超シンプルな AI 役員会ツール
  • 入力 — 議題テキスト 1 本 (例: 「新規ゲーム X への 3 億円投資の是非」)
  • 処理 — 3 エージェントを OpenAI API (gpt-4o-mini) で並列実行し、各 3–5 行の評価コメントを生成
  • 出力 — 3 役員の評価を並べた Markdown レポート (## CEO / ## CFO / ## CTO の 3 セクション)
  • 動作環境docker compose up 一発、localhost:8000 で frontend も同時配信 (static mount)
  • 実行時間の目安 — 10–15 秒/議題 (gpt-4o-mini を 3 並列呼び出し)
役員への一言説明: 「議題を入れたら、CEO / CFO / CTO の 3 人分の所見が 10 秒で出る。その 1 機能だけのツールです。」それ以上は要らない。

サンプル出力 (新規ゲーム X への 3 億円投資の是非)

ツールが実際にどんな議案評価レポートを生成するか、懐疑的な役員を 30 秒で納得させる具体例。以下は gpt-4o-mini で想定される出力の ダミー サンプル (実際の投資判断には使わないこと)。

議案: "新規ゲーム X (MMORPG) への 3 億円投資の是非。初期開発 12 ヶ月、ローンチ後 24 ヶ月で投資回収予定、競合 A 社が 2027 Q2 に類似タイトルを出す可能性あり。"

Phase 1: 独立評価 (Phase 1 完了: 14.2s)

👔 CEO の所感 — stance: 条件付賛成
MMORPG は MIXI の既存 IP と親和性が高く、3 年後のポートフォリオ多様化には必要な一手。ただし 3 億円は "足元の賭け" レベルで、競合 A 社のタイミングと重なれば差別化メッセージが弱まるリスクがある。キャラクター IP 2 件を先行投入する形でブランド優位を作れるかが条件。
主要論点: 既存 IP 活用、競合 A 社との先行優位、ポートフォリオ拡張。
リスク: ローンチタイミング、ブランド希薄化。
💰 CFO の所感 — stance: 反対
24 ヶ月回収は MMORPG では楽観的。業界平均で 36–48 ヶ月、国内同規模タイトルで DAU 目標未達は 60% 以上。3 億円は開発費のみで、ローンチ後のマーケ + 運用で追加 2–3 億円は確実。総投資 5–6 億円で IRR が会社基準の 15% を下回る可能性が高い。数字の前提が甘い。
主要論点: 回収期間の楽観、隠れコスト、IRR 基準未達。
リスク: 追加投資の雪だるま、機会コスト。
定量目安: 回収 24 ヶ月 → 業界中央値 42 ヶ月。
🔧 CTO の所感 — stance: 判断保留
MMORPG の技術スタックは既存 MIXI アセットと乖離 (サーバー同期、ワールド持続、アンチチート)。12 ヶ月開発は社内エンジニア 8 名フル稼働前提だが、既存案件との priority 衝突が起きる。外部スタジオ委託なら可能だが、運用時の技術的負債は MIXI 側が引き受けることになる。
主要論点: 技術スタック乖離、リソース priority、運用負債引継。
リスク: 12 ヶ月スケジュールの gap、技術負債の長期化。

Phase 2: クロスレビュー (Phase 2 完了: 18.4s)

CEO による CFO/CTO 評価への所見
賛同点: CFO の "回収 24 ヶ月は楽観" 指摘は正しい。業界平均と乖離している。
見落とし: CFO は既存 IP 活用による CAC (顧客獲得コスト) 削減を計算していない。MIXI の既存ユーザー 10% が MMORPG に転用されれば CAC は 60% 圧縮可能。
異論: CTO の "外部委託前提" は弱気。MIXI の技術ブランドとしてこそ、内製で技術負債を引き受ける意義がある。
質問: 3 年後の IP 戦略で MMORPG を持っていないシナリオは想定可能か?
CFO による CEO/CTO 評価への所見
賛同点: CEO の "既存 IP 先行投入" は差別化に有効。CTO の "技術負債長期化" はコストに直結する重要視点。
見落とし: CEO は競合 A 社タイミング以外のマクロリスク (円安、ユーザー PC/コンソール成長鈍化) を織り込んでいない。CTO は外部委託時の契約コスト・IP ライセンス費を数字にしていない。
異論: CEO の "ポートフォリオ多様化" は抽象。既存事業成長が鈍化しているエビデンスを経営計画から再参照すべき。
質問: 3 億円を既存タイトルの運用改善に投じた場合の IRR と比較できるか?
CTO による CEO/CFO 評価への所見
賛同点: CFO の "隠れコスト" は現実的。MMORPG 運用は 3 年目以降の保守コストが重い。CEO の IP 先行投入も同意。
見落とし: CEO / CFO ともに、AI 開発アシスタントによる開発工数短縮 (今日の Claude Code のような) を織り込んでいない。2026 時点で 30% 開発効率改善は見込める。
異論: CEO が「内製で引き受ける」と即決している点は、現場の稼働を見ずに決めている。
質問: 既存エンジニア 8 名フル稼働中、他の大型案件 (基幹リプレース等) と比較した優先度は?

Phase 3: 統合提言 (Phase 3 完了: 8.1s)

合意点
① 新規 IP としての MMORPG 進出には市場性が存在する
② 既存 IP 活用で差別化が可能 (3 役員全員合意)
③ 現行 3 億円・24 ヶ月回収の前提には疑問の余地がある
対立点と推奨解決方針
CFO: "回収期間が楽観で IRR 未達" vs CEO: "戦略的必要性" → 段階投資に再設計 (Phase 1 プロトタイプ 0.5 億円 → KPI で 2 億円 GO/NO-GO → 残り 0.5 億円でローンチ) を推奨
CTO: "技術スタック乖離" vs CEO: "内製で引き受けるべき" → 主要コンポーネントのみ外部委託 + MIXI 内製 wrapper のハイブリッド案
実行アクション (3 つ)
  1. 段階投資プランの数値再構築 — 担当: CFO, 期限: 2026 Q3, 成功指標: 3 Phase 投資シナリオ + IRR 試算が経営会議で承認
  2. 技術スタック調査と外部委託先 2 候補の技術 DD — 担当: CTO, 期限: 2026 Q3, 成功指標: アーキテクチャ案 + 2 候補の RFP 完了
  3. 既存 IP 活用によるユーザー転用シミュレーション — 担当: マーケティング, 期限: 2026 Q4, 成功指標: 既存ユーザー 100 人サーベイ + CAC 削減見込みの定量化
残存リスクと監視指標
① 競合 A 社が 2027 Q2 より早期ローンチ → 月次で競合パブリックリサーチ
② 社内エンジニアリソースの priority 衝突 → Q 毎の EM 稼働率確認
③ AI 開発効率改善が見込み下回る → Claude Code 利用時間と PR マージ数を 3 ヶ月計測
最終判断: 条件付 GO
理由: 戦略的意義は 3 役員合意、しかし現行の "3 億円・24 ヶ月回収" の前提では NO-GO。段階投資プラン再設計 + 技術 DD 完了 + IP 転用定量化 の 3 条件がクリアされた時点で、改めて正式 GO/NO-GO を問う。
このサンプルが示す本ツールの真価:
  • 単独評価では CEO「条件付賛成」 / CFO「反対」 / CTO「判断保留」で議論が膠着。
  • Phase 2 クロスレビューが 3 者が見えていない論点 (既存 IP 転用 CAC / マクロリスク / AI 開発効率) を引き出した。
  • Phase 3 統合が "反対 vs 賛成" を "段階投資 + 3 条件" に再構築し、議論が前進する形のアクションプランに変えた。
  • 通常の役員会議では 60–90 分かかる議論が、40 秒 + 役員が 3–5 分読むだけで到達。

ファイル構成 (期待される生成物)

Claude が生成するディレクトリツリーは次の形を想定しています。仕様プロンプトで「10 ファイル以下・300 行目安」と縛っているため、結果もこの周辺に収束するはず。

ai-executive/
├── .env.example
├── .env              # 手動で値を投入、.gitignore 済
├── .gitignore
├── README.md
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
├── app/
│   ├── __init__.py
│   ├── main.py       # FastAPI entrypoint + SSE 配信
│   ├── agents.py     # 4 agents 定義 (CEO/CFO/CTO/Facilitator)
│   ├── pipeline.py   # 3-phase pipeline オーケストレーション
│   ├── models.py     # Pydantic schemas
│   └── prompts.py    # system prompts 集約
└── static/
    └── index.html    # Single-page UI (SSE 受信 + Markdown)

合計 12 ファイル以内、コード総量 600 行以内。app/pipeline.py が 3 フェーズの中核 — asyncio.gather で Phase 1 / Phase 2 を並列実行、Phase 3 は Facilitator がシリアル統合。static/index.html は Server-Sent Events を受信して各フェーズの進捗を可視化、最終レポートは marked.js で Markdown レンダリング。

Claude は場合によって tests/ ディレクトリや複雑な分離を提案します。ワークショップでは時間制約のため「今はスキップ、MVP に絞る」と Plan mode で却下するのが吉。拡張は帰宅後に。

仕様プロンプト本体 (コピー&ペーストで使用)

以下のブロックが本ワークショップ最重要の成果物。Claude Code Desktop の Code タブを開き、プロジェクトフォルダを ~/workshop-demo/ に設定した状態で、このプロンプトを丸ごと貼り付けます。Plan mode を ON にしてから送信するとファイル一覧レビューで止まるので、承認して生成へ。

コピーして Claude Code Desktop の Code タブに貼る
新しい空フォルダ ~/workshop-demo/ai-executive/ を作って、そこに MIXI 向け「AI Executive クロスレビュー型議案評価システム」を構築してください。

## プロダクトゴール
役員 3 名 (CEO / CFO / CTO) の視点から議案を評価し、相互レビューを経て、統合提言まで行う本格的な経営支援ツール。単独評価では見えない盲点を、役員同士のクロスレビューで炙り出すのが本ツールの核心。

## 3 フェーズ処理

### Phase 1: 独立評価 (並列)
各エージェント (CEO / CFO / CTO) が、他の評価を見ない状態で議案を独立評価。
出力フィールド:
- stance: "賛成" / "反対" / "条件付賛成" / "判断保留"
- summary: 所感 2–3 行
- key_points: 主要論点 (箇条書き 3 点)
- risks: 気になるリスク (箇条書き 2 点)
- quantitative_notes: 数値目安 (CFO は必須、他は任意)

### Phase 2: クロスレビュー (並列)
Phase 1 の 3 評価を各エージェントが読み、他 2 エージェントの評価に対して相互レビュー。
各エージェントは自分以外の 2 評価を読み、以下の 4 項目を出力:
- agreements: 賛同点 (1–2 点)
- blind_spots: 見落としと指摘 (2–3 点)  ← 本ツールの真価
- counter_arguments: 異論・反論 (0–2 点)
- questions: 追加質問・情報要求 (1–2 点)

### Phase 3: 統合提言 (シリアル)
Facilitator エージェントが Phase 1+2 の全アウトプットから統合提言を生成:
- consensus: 合意点 (2–4 点)
- conflicts: 対立点と推奨解決方針
- actions: 実行可能アクション 3 つ (title / owner / deadline / success_metric)
- residual_risks: 残存リスクと監視指標
- decision_recommendation: "GO" / "NO-GO" / "条件付 GO" + 理由 1 行

## エージェント仕様

### CEO Agent (key: OPENAI_API_KEY_CEO)
System prompt: "あなたは MIXI の CEO です。評価の視点は (1) 3 年後のビジョン整合性 (2) 競合優位の構築 (3) 中長期株主価値。数字よりも『なぜ今これをやるか』に重きを置く。経営者的直観を言語化してください。回答は必ず指定の JSON schema で出すこと。"

### CFO Agent (key: OPENAI_API_KEY_CFO)
System prompt: "あなたは MIXI の CFO です。評価の視点は (1) 投資回収期間 (ROI, IRR) (2) 事業リスクの定量化 (3) 財務規律。根拠のない楽観は排除、数字で語る。悲観シナリオも必ずカバー。回答は必ず指定の JSON schema で出すこと。"

### CTO Agent (key: OPENAI_API_KEY_CTO)
System prompt: "あなたは MIXI の CTO です。評価の視点は (1) 技術的実現可能性 (2) スケーラビリティ限界 (3) エンジニアリング組織への負荷。6 ヶ月後の運用負荷を想像。技術負債も含めて冷静に。回答は必ず指定の JSON schema で出すこと。"

### Facilitator Agent (key: OPENAI_API_KEY)
System prompt: "あなたは MIXI の戦略会議ファシリテーターです。3 役員の独立評価 + クロスレビューをまとめ、統合提言を作成。合意点・対立点・実行アクションを明確に示す。意見が割れているときは無理に合意を作らず、対立を対立として明示し、推奨解決方針を示す。回答は必ず指定の JSON schema で出すこと。"

## 🔑 API キー管理: Web UI 設定画面方式

### 重要: .env の直接編集を要求しない

- ファシリテーターも役員も .env ファイルを手動で開かない
- API キーは全てブラウザの /settings ページで入力
- App が裏で .env に安全に永続化

### Settings 画面要件

GET /settings で HTML (または static/settings.html) を返す:
- タイトル "🔑 API キー設定"
- 4 フィールド、全て <input type="password">:
  - OPENAI_API_KEY (default / Facilitator 用)
  - OPENAI_API_KEY_CEO / _CFO / _CTO
- 各フィールド右に show/hide 切替、下に「Validate & Save」ボタン
- 既存キーは ••••abc1 (末尾 4 文字) のみ表示、マスク
- 各フィールドにローテーションボタン
- ページ下部に .gitignore ステータス (緑チェック = .env 除外 OK)
- ページ下部に 6 原則クイックリファレンス

### API エンドポイント

- GET /api/settings/status → { all_keys_set, masked, gitignore_ok }
- POST /api/settings → validate (OpenAI test call 各キー) → .env atomic write → .gitignore 自動追記 → in-memory cache 即反映
- POST /api/settings/rotate → 指定キーのみ差し替え
- GET /api/settings/gitignore-check → .env が gitignore されているか

### 起動時フロー

1. GET / で App が /api/settings/status 呼び出し
2. all_keys_set=false なら /settings?first_run=true にリダイレクト
3. 設定完了後 / に戻る

### セキュリティ

- /settings 系は localhost のみ受付 (docker は 127.0.0.1:8000:8000 にバインド)
- キー値をログ・画面に出さない (末尾 4 文字の masked のみ)
- OpenAI キー形式の正規表現チェック
- .env は chmod 600
- Validation 失敗キーは保存しない

### なぜこの方式か

- 役員 UX 最優先。特に Windows でのドットファイル編集摩擦を排除
- .env は Docker Compose の標準として互換維持
- 6 原則は全て守れる (UI 設計で守りやすくなる)

## 技術要件

### Backend
- Python 3.11+
- FastAPI (async 対応、asyncio.gather で Phase 1 / Phase 2 を並列化)
- OpenAI SDK (openai>=1.30) を AsyncOpenAI で使う
- Pydantic v2 で型安全なモデル定義
- python-dotenv で .env 読み込み
- OpenAI 呼び出しは response_format={"type":"json_object"} で JSON 構造化出力

### Frontend
- 単一 static/index.html
- Vanilla JS + fetch()
- SSE (Server-Sent Events) でストリーミング
- 各 phase/agent の完了ごとに UI 更新 (プログレスバー + エージェントカード点灯)
- Markdown rendering: marked.js CDN 版
- "Copy to clipboard" ボタン

### API 仕様 (POST /api/review, SSE)
Request: { "agenda": "新規ゲーム X への 3 億円投資の是非" }
Response (text/event-stream):
  event: phase1_start / agent_eval(×3) / phase1_done
  event: phase2_start / cross_review(×3) / phase2_done
  event: phase3_start / synthesis / phase3_done
  event: complete / error

### エラーハンドリング
- OpenAI rate limit → 指数バックオフ最大 3 回 (1s, 2s, 4s)
- API キー未設定 → 起動時検出し、どのキーが足りないか明示
- 各フェーズのタイムアウト: 30 秒
- JSON 出力破損 → 1 回だけ "フォーマットが不正なので再生成して" で retry

### ログ
- logs/{timestamp}-{request_id}.json に raw 入出力保存
- 各フェーズの所要時間と入出力トークン数を記録

### Docker
- docker compose up -d で 1 コマンド起動
- localhost:8000 で frontend + API 両方配信
- python:3.11-slim ベース

## ファイル構成

ai-executive/
├── .env.example
├── .gitignore
├── README.md
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
├── app/
│   ├── __init__.py
│   ├── main.py       # FastAPI + SSE + redirect logic
│   ├── agents.py     # 4 agents
│   ├── pipeline.py   # 3-phase orchestration
│   ├── settings.py   # Settings API (/api/settings/*)
│   ├── env_writer.py # atomic .env write + gitignore check
│   ├── models.py     # Pydantic schemas
│   └── prompts.py    # system prompts
└── static/
    ├── index.html    # 議案評価 UI
    └── settings.html # API キー設定画面

合計 14 ファイル以内。

## 制約

### ファイル数・コード量
- 合計ファイル数: 14 以内
- コード総量: 700 行以内

### 処理時間 (実測ベース)
- 1 議案の完全処理時間: 40–70 秒 典型 (ハード上限 90 秒/フェーズ)
  - Phase 1 (並列): 8–20 秒
  - Phase 2 (並列, プロンプト長): 10–25 秒
  - Phase 3 (シリアル): 5–15 秒

### コスト (7 OpenAI calls: Phase 1 x3 + Phase 2 x3 + Phase 3 x1)
- gpt-4o-mini (デフォルト): $0.01–0.02 / 議案 (入力 15–25k / 出力 5–8k tokens 目安)
- gpt-4o: $0.25–0.50 / 議案
- DEFAULT_MODEL 環境変数 + /settings dropdown でモデル切替可
- エージェントごと個別モデル指定可 (MODEL_CEO, MODEL_CFO, etc.)

### Phase 2 部分失敗ハンドリング (必須)
1–2 エージェントが Phase 2 で失敗 (JSON 破損 / timeout / rate limit) した場合:
1. 1 回 retry (指数バックオフ済み)
2. なお失敗なら {"status": "unavailable", "reason": "..."} として記録
3. Phase 3 Facilitator は利用可能なクロスレビューだけで統合を試みる
4. residual_risks に 「クロスレビュー N/3 のみ取得: {欠損役職} の視点は反映されていない」と明示
5. decision_recommendation の信頼度を "弱い" にマーク
6. UI は欠損カードをグレーアウト + 警告アイコン + retry ボタン
※ GO/NO-GO を 2/3 意見だけで出さない。欠損は必ず可視化。

### README.md 必須内容
プロジェクト目的 / 起動方法 4 ステップ以内 / .env 設定 (Web UI から) / API 仕様 / ライセンス

### 初回セットアップ体験
docker up → /settings → 評価画面到達までを 60 秒以内

## Plan mode で提示してほしいもの

1. ファイル一覧 + 各ファイルの責務 (1 行ずつ)
2. 各 Phase の擬似コード (30 行以内、Python 風)
3. API エンドポイント仕様 (SSE イベント一覧含む)
4. /settings の UI フロー (state machine: 未設定 / 一部設定 / 全設定済)
5. Settings API エンドポイント仕様と validation フロー
6. .env atomic write + gitignore check の実装方針
7. エラーハンドリング方針 (4 つのエラー源 × 対処)
8. Pydantic モデルの骨格 (4–5 モデル)
9. requirements.txt 相当の外部依存
10. 起動時疎通チェック手順

承認後、全ファイルを生成してください。API キーは後で配置するので、今は .env.example だけ作成してください。
貼り付け後 Plan mode を ON にして送信 → ファイルツリーがプレビュー表示されたら Approve。生成が走り、1–2 分で全ファイルが揃う。
API キーを 4 つ (CEO / CFO / CTO / default) に分けているのは、後で役員ごとに課金上限を個別に管理するための仕込み。同一キーで動かしても技術的には問題ないが、ワークショップでは「分ける」パターンを標準として見せる。詳細は §6。

API キー配置 (6 原則の実践) — Web UI 方式

役員 (特に Windows ユーザー) がドットファイルを直接編集する摩擦を排除するため、生成アプリに Web UI 設定画面 (/settings) を持たせます。ワークショップの P1-02 フェーズはこの設定画面から進める形に切り替わります。

  1. 初回起動: docker compose up -d → ブラウザで http://localhost:8000 → アプリが自動で /settings?first_run=true にリダイレクト
  2. 4 つの <input type="password"> フィールドに事前発行したキーをペースト
  3. 「Validate & Save」で App が各キーを OpenAI にテストコール (models.list 等) して有効性確認
  4. 全 validate 成功 → App が .env に原子的書き込み、.gitignore を自動チェック・追記、in-memory cache に即反映 (再起動不要)
  5. 成功 toast + 「評価画面へ」ボタンで /

6 原則がどう守られるか

#原則Web UI での実現
1チャットに貼らないpassword input は目視・画面収録で読み取れない
2.env 経由App が裏で .env に atomic write (仕組みは同じ)
3.gitignore 確認Save 時に自動確認・追記、緑チェック表示
4定期ローテーション/settings の専用「ローテート」ボタン
5最小権限OpenAI 発行側のスコープ (UI は関与しない)
6本番/開発キー分離/settings に dev/prod タブを設ける (将来拡張)
キーの取得・ローテーション・課金上限設定といった運用面は APIキー運用完全ガイドの「Web UI vs dotfile」章を参照。ワークショップでは「当日配布 → Save → 評価 → 終了後に /settings のローテートで無効化」の運用。

起動・動作確認

生成とキー配置が終わったら、いよいよ起動です。

  1. Docker Compose で起動
    cd ~/workshop-demo/ai-executive
    docker compose up -d
    open http://localhost:8000
  2. 初回は /settings に自動リダイレクト — 4 フィールドにキー入力 → Validate & Save → 全 validate 成功で .env 書き込み + .gitignore 自動チェック、評価画面へ戻る。
  3. サンプル議題を投入 — 「新規ゲーム X への 3 億円投資の是非」を UI に貼り、実行。SSE で Phase 1 → 2 → 3 が進む様子が 40–45 秒で画面に流れる。
  4. Claude の自己修復デモ — 初回は高確率で軽微なエラーが出ます (async 実装ミス、SSE 設定漏れ、JSON 出力破損など)。Claude に "エラー出てます" とログを貼るだけで自動修復が走る姿を見せるのが最大の見せ場。

典型的な初回エラーと Claude の対応パターン:

エラー原因Claude の対応
ModuleNotFoundError: openairequirements.txt に抜けopenai>=1.30 追記 → docker compose build 再実行を提示
Port 8000 is already in use他アプリがポート占有docker-compose.yml を 8001:8000 に書き換え
openai.AuthenticationError.env 未読み込み / キー不正python-dotenv 追加 or env_file: .env を compose に追加
json.decoder.JSONDecodeErrorOpenAI 出力の JSON 破損response_format を明示、破損時の 1 回リトライロジックを追加
SSE が Chrome で EventSource エラーCORS またはバッファリング問題FastAPI 側で StreamingResponse + 適切な media_type 設定
Phase 2 で片方のエージェントだけ遅いgather のタイムアウト未設定asyncio.wait_for で 30 秒リミットを追加
Settings 画面に行かないリダイレクトロジックの漏れGET / で status チェック → all_keys_set=false なら Response.redirect('/settings') を main.py に追加
.env への書き込み失敗volume マウント不足 / 権限docker-compose.yml に .env:/app/.env (rw) volume を追加
このセクションで役員に伝えたいメッセージ:「エラーは失敗ではなく、対話の続き。Claude にログを投げれば直る。」この体験が "自分で改修できる" 感覚の入り口になる。

自然言語で機能追加 (P1-04): Devil's Advocate 項目の追加

起動確認まで済んだら、Part 1 のクライマックスとして自然言語での機能追加をデモします。新仕様では Phase 2 のクロスレビューに "devil's advocate (悪魔の代弁者) 質問" を追加し、楽観バイアスを相互に牽制する仕組みを強化します。

Phase 2 のクロスレビューに、追加で
「devil's advocate (悪魔の代弁者) 質問」を 1 項目追加してください:

各エージェントは他エージェントの評価に対して:
- "最悪シナリオでも成り立つか?" を 1 行の問いかけとして追加

目的: 楽観バイアスを相互に牽制し合う仕組みを、
1 項目追加するだけで強化する。

Frontend の UI でもこの新項目を表示してください。

Claude は差分を Visual Diff プレビューで表示します。app/models.pyCrossReview モデルに新フィールドが追加され、app/prompts.py のプロンプトテンプレートが拡張され、static/index.html の UI に新カードが増える差分を見せた上で Accept → 再デプロイ (docker compose restart) → 同じ議題を再実行 → クロスレビューに「最悪シナリオでも成り立つか?」の問いかけが 3 エージェント分追加される、の流れ。

このデモのポイントは「コードを読まずに変更を承認している役員の姿」。かつ「複数ファイルにまたがる変更でも Claude が整合性をとる」のを見せる。単一ファイル編集では見えない、本物の "自分で改修できる" 感覚の入り口になる。

拡張アイデア (役員が帰宅後に試せるもの)

ワークショップ後に役員が自宅で試せる、"次の一手" のリスト。どれも仕様プロンプトに一文を追記するだけで Claude が対応します。

  • エージェントを増やす — CMO / COO / CLO (Chief Legal Officer) / CHRO を追加。system_prompt を 1 行書くだけで Claude がエージェント配列に足してくれる。
  • 過去議題 + 結論を DB に保存 — SQLite を追加し、議題・3 役員評価・推奨アクションを永続化。横断検索 (全文 or embedding) で「過去 3 年で似た投資判断はどうなったか」を引ける。
  • MCP で Slack / Drive に議題を自動投下 — MCP 経由で Slack チャンネル / Google Drive / Notion に議題を投稿し、結果を通知する連携。詳細は MCP 徹底解説
  • Claude Design に出力を流して役員会スライド化 — 3 役員の評価 + 推奨アクションをスライドテンプレートに自動流し込み。詳細は Claude Design 深掘り
  • system prompt を MIXI の実在資料から抽出 — 役員レター、株主総会招集通知、統合報告書などの公開情報から頻出する表現・観点を抽出して各エージェントの system_prompt に織り込む。"それっぽさ" が段違いに上がる。
  • 評価結果の対立点ハイライト — 3 役員の評価の中から相反する主張を抽出し、"議論すべき論点" として別セクション化。本格版 reference の synthesizer.py の発想をミニ版に逆輸入。
帰宅後の宿題としては「エージェントを 1 体増やす」が最もコスパが良い。15 分で完了し、仕様プロンプト改変のコツを体得できる。

トラブルシューティング

当日現場で発生しやすい詰まりどころと、その場での捌き方。

症状原因対処
Plan mode が出てこない Plan mode 未対応モデルを選択中 モデル選択 UI で "Plan mode supported" マークのあるモデル (Sonnet 4.7 / Opus 4.7) を選ぶ
OpenAI AuthenticationError .env が読めていない (source .env では環境変数がコンテナに届かない) python-dotenv で app.py から読む形に修正、または docker-compose.ymlenv_file: .env を追加
Port 8000 already in use 他アプリがポート占有 (よくあるのは本格版 reference が裏で動いている) docker-compose.ymlports8001:8000 に書き換え、localhost:8001
Docker 起動が遅い 初回の image pull (python:3.11-slim が ~150MB) 2–3 分待つ。事前に docker pull python:3.11-slim を流しておくと本番中は秒で立ち上がる
フロントエンドで CORS エラー static mount が正しく設定されていない / frontend が別オリジンから叩いている FastAPI の StaticFilesapp.mount("/", StaticFiles(..., html=True)) で同一オリジン配信に統一
エージェントの並列呼び出しが直列になっている asyncio.gather ではなく同期で for ループしている Claude に "並列化されていない" と指摘すれば asyncio.gather(*tasks) で書き直される
現場での第一原則: 詰まったらログを丸ごと Claude に投げる。自分で原因特定しようとしない。これが最も時間を節約する。

公式リンク

Last verified: 2026-04-22
出典: