AIVEST 開発ハーネス|現状システム俯瞰

最終更新 2026-05-19

AIVEST 開発ハーネス|現状システム俯瞰

LINE から CEO が指示を投げる → AI エージェント群が役割分担して用件定義 / 設計 / 実装 / レビューを進める → 成果物が出る、までを自動化するハーネスの現状をまとめたもの。

1. ひとことで

AIVEST 開発ハーネスは LINE を窓口に、Claude Max と ChatGPT サブスクの 2 モデルをクロスチェックさせる開発ワークフロー

  • Claude(Max20x サブスク)= 実装担当(coder)
  • Codex(ChatGPT サブスク)= 上流(COO / CTO)+ レビュー(reviewer)
  • 状態は tasks/<id>/state.json をファイルベースで管理、エージェント間は直接対話せずファイル経由でやりとり。

2. 全体図

CEO の iPhone (LINE App) │ 平文メッセージ / スラッシュコマンド ▼ HTTPS POST (webhook + X-Line-Signature) Cloudflare Quick Tunnel └ https://cartoon-russia-aspect-comprehensive.trycloudflare.com → localhost:3000 ▼ codex-line-bot (Mac host, Hono + tsx watch) ├ server.ts … 署名検証 + allowlist ├ orchestrator.ts … 分類 + フェーズ駆動 ├ tasks.ts … TaskStore (SQLite + state.json 同期) ├ agents.ts … claude / codex / grok 抽象化 ├ usage.ts … トークン/コスト計測 ├ hooks.ts … harness/hooks/*.sh 発火 ├ line.ts … Reply / Push / Loading ├ sessions.ts … debug 用 resume 補助 └ env.ts / logger.ts ▼ docker compose run --rm (毎回新規 container) ┌─────────────────────────┐ ┌─────────────────────────┐ │ claude-sandbox (4.44GB) │ │ codex-sandbox (4.43GB) │ │ Playwright + Claude │ │ Playwright + Codex │ │ + Vercel CLI │ │ + Vercel CLI │ │ ブラウザ /ms-playwright │ │ ブラウザ /ms-playwright │ │ auth volume │ │ auth volume │ └────────────┬────────────┘ └────────────┬────────────┘ │ │ └──── 同じ /workspace ───────┘ ▼ claude-sandbox/shared/ ← ハーネス本体(資産) ├ profiles/ ── 役割定義・テンプレ・規約 ├ tasks/<id>/ ── 案件1個 = 1ディレクトリ ├ tools/ ── bash 補助 ├ hooks/ ── 8 種のライフサイクルフック ├ memory/ ── index / decisions / lessons └ monitor/ ── 監視アラート

3. コンポーネント

LINE Messaging API

CEO の唯一の入口。Bot 名 AIV_CTO。
Channel ID: 2006423193
許可ユーザー: 1名のみ
認証: dotenvx 暗号化済

Cloudflare Quick Tunnel

無料 quick tunnel で webhook を Mac に転送。
現 URL: cartoon-russia-aspect-...
安定 URL 化: named tunnel 移行可

codex-line-bot

Mac で動く Hono サーバ。フェーズ駆動の中核。
Port: 127.0.0.1:3000
起動: ./start.sh
11 ファイル / TypeScript / tsx watch

claude-sandbox

Claude Code を非対話で動かす隔離環境。
Size: 4.44 GB
Base: Playwright v1.60.0-jammy
役割: coder(実装担当)

codex-sandbox

Codex CLI を非対話で動かす隔離環境。
Size: 4.43 GB
Base: Playwright v1.60.0-jammy
役割: COO / CTO / reviewer

ハーネス(claude-sandbox/shared/)

両 container が /workspace として bind mount。
36 ファイル
profiles + tools + hooks + memory + tasks

4. データの流れ(典型 1 ターン)

  1. CEO が LINE で「x バズらせるウェブアプリ作りたい」と送信
  2. LINE Platform が webhook を Cloudflare Tunnel に POST
  3. codex-line-bot/server.ts が受信、署名と allowlist を検証
  4. orchestrator.classify(text, openTaskId) で分類
    • 平文 + open task 無 → new_task
    • 平文 + open task 有 → continue_task
    • /... → 対応コマンド
  5. handleNewTask or handleContinueTask
    • tools/task-new.shtasks/<id>/ 生成
    • discussion.md に CEO 発話を append
    • 即時 reply「📨 task ... 着任…」
    • 進捗タイマー(90s / 240s に「思考中」push)
    • Loading indicator を 25 秒毎にリフレッシュ
  6. runCOOConversation
    • プロンプト構築(タスクID + 原文 + 既存 discussion + 役割定義)
    • docker compose run --rm codex codex exec --json - で spawn
  7. Codex container 内で agent が動く
    • AGENTS.md 自動読込
    • profiles/general/roles/coo.md 読み込み
    • モード判定(壁打ち vs spec 確定)
    • モード1: discussion.md に追記 → DISCUSSING
    • モード2: coo-spec.md/json を書く → SPEC_READY
  8. orchestrator が stream-json を parse、usage 記録、state.json を SQLite に同期
  9. CEO に push 返信

5. タスクのライフサイクル

/spec で強制 ┌────────────────────────────────────┐ │ ▼ [NEW] ─→ [DISCUSSING] ─COO judge─→ [SPEC_READY] ─/approve→ [CONTRACT_READY] ─→ [SUBTASKS_READY] ↑ ↑ ↑ │ └─continue─┘ └──/reject── │ ▼ [IMPLEMENTING] ⇄ [UNDER_REVIEW] │ 3回 fail ▼ [WAITING_HUMAN] │ CEO 介入 ▼ [SUBTASK_DONE] │ 全 subtask 完了 ▼ [DONE]
Phase 1(実装済) NEW → DISCUSSING → SPEC_READY → CONTRACT_READY → SUBTASKS_READY
Phase 2(未実装) IMPLEMENTING / UNDER_REVIEW / SUBTASK_DONE / DONE のループ

6. 役割と担当モデル

Roleモデル入力出力
COOCodexLINE原文 + discussion.md + memorydiscussion.md or coo-spec.md+.json
CTOCodexcoo-spec.* + tech-stack.mdcto-contract.md+.json, subtasks.md+.json, acceptance.tests.json
SplitterCodex(CTO兼任)cto-contractsubtasks.json
CoderClaudespec + contract + subtaskimpl/<S>.md + 実コード変更
ReviewerCodexspec + contract + impl + acceptance.testsreviews/<n>.md(pass/fail + Bash で verify)
ResearcherCodexクエリtasks/<id>/research/<topic>.md
Monitorスクリプトプロセス状態monitor/alerts/*.json
LearnerCodex過去 reviewsmemory/lessons.md
クロスチェック原則 書いたモデルが読まない。Claude が実装、Codex がレビュー。同一モデルの盲点を異モデルで補う。

7. LINE コマンド一覧

主要操作

コマンド動作
(平文メッセージ)open task があれば壁打ち継続、無ければ新規 task
/new <内容>明示的に新規 task
/progress [id]状態 + 直近の壁打ち末尾
/spec [id]COO に spec 確定を強制
/approve [id]次フェーズへ進行
/reject id 理由spec 修正リクエスト
/escalate [id]人間判断待ち
/status直近 10 task の一覧
/budget当月のトークン/コスト試算
/whoamiuserId + provider 構成 + 最新 task
/helpヘルプ

デバッグ

コマンド動作
/codex msgcodex 直叩き(state を変えない)
/claude msgclaude 直叩き
/grok msggrok 直叩き(要 GROK_API_KEY)
/use codex|claude|grokprovider 永続切替
/reset, /resetallsession 破棄

8. 中間進捗・監視

  • ローディングインジケータ:LINE 標準のタイピング表示。25 秒毎にリフレッシュして agent 走行中ずっと点灯
  • 生存 push:90 秒経過で「🤔 COO 思考中... 1.5m 経過」、240 秒で「⏳ 引き続き走行中... 4m 経過」を自動 push(最大 2 回)
  • タイムアウト:agent 走行 15 分(AGENT_TIMEOUT_MS)で SIGTERM
  • 沈黙検知hooks/on_silence.sh 雛形あり watchdog 発火元 未実装

9. 認証情報の所在

トークン保管場所状態
LINE channel secret + access token.env(dotenvx 暗号化)設定済
dotenvx 秘密鍵macOS Keychain codex-line-bot-dotenv-key設定済
Claude Max OAuthclaude-sandbox_auth Docker volume設定済
ChatGPT サブスク OAuthcodex-sandbox_auth Docker volume設定済
VERCEL_TOKEN.env(dotenvx 暗号化予定)未設定
GROK_API_KEY.env(dotenvx 暗号化予定)未設定(保留)

10. データベース

/Users/ren/AI/01_APP/codex-line-bot/data/ 配下に 3 つの SQLite DB:

  • sessions.db/codex /claude 直叩きの session_id resume 用
  • sessions.tasks.db — TaskStore(task_id → state, line_user_id, title, timestamps)
  • usage.db — 全 agent 呼び出しのトークン/コスト記録(/budget の元データ)

正本の状態は tasks/<id>/state.json(ディスク)。SQLite は高速検索用のキャッシュ。

11. 現状の制約

#制約インパクト状態
1Phase 2 未実装(SUBTASKS_READY 以降の coder / reviewer ループ無し)仕様までは書けるが、実装は手動最優先
2/workspaceclaude-sandbox/shared/ 固定他の repo(例: 01_APP/youtube-analyzer)に agent が触れない
3VERCEL_TOKEN 未配線container 内で vercel コマンドが認証失敗準備中
4沈黙検知 watchdog 未稼働60 秒以上 stdout なしを検知できない未実装
5Quick Tunnel の URL 不安定cloudflared 再起動で URL 変わる、LINE Console 更新必要named tunnel 検討
6Claude Max 課金分離 2026-06-15Agent SDK credit が独立化、現状の claude -p 多用は枠を食う27 日後
7JSON 出力検証なしcodex が coo-spec.json を不正 JSON で書いても検知できない小修正
8shared.old/ がまだ残ってる旧 harness のバックアップ削除可

12. 次のステップ

  1. A. Phase 2 実装 — coder / reviewer ループ、最大の機能空白
  2. B. 動的 workspace 切替/project switch <path> で bind mount を変える
  3. C. VERCEL_TOKEN セット + vercel build / preview deploy 動作確認
  4. D. Cloudflare Tunnel を named tunnel に(URL 安定化)
  5. E. JSON 出力の機械検証(spec の生成失敗を自動検知)
推奨順序 A → C → B → D → E。A が最大の機能空白(書いた仕様で実装が走らないと harness の意味が半減)。続いて C を入れれば「実装したら preview URL が LINE に返る」までいく。

13. 主要ファイル

/Users/ren/AI/01_APP/
├── codex-line-bot/                ← Mac で動く Hono サーバ
│   ├── src/
│   │   ├── orchestrator.ts        ← フェーズ駆動の中核
│   │   ├── agents.ts              ← claude/codex/grok 抽象化
│   │   ├── tasks.ts               ← TaskStore
│   │   ├── usage.ts               ← コスト計測
│   │   ├── server.ts              ← webhook
│   │   └── ... (他 6 ファイル)
│   ├── data/                       ← SQLite × 3
│   ├── .env                        ← dotenvx 暗号化済
│   └── start.sh
│
├── claude-sandbox/
│   ├── Dockerfile                  ← Playwright base + Claude Code + Vercel CLI
│   ├── docker-compose.yml
│   ├── start.sh
│   └── shared/                     ← ★ ハーネス本体(/workspace)
│       ├── OVERVIEW.md             ← この内容の md 版
│       ├── ARCHITECTURE.md
│       ├── EXECUTION.md
│       ├── CLAUDE.md / AGENTS.md
│       ├── profiles/general/{roles,templates}/
│       ├── profiles/domains/coding/
│       ├── tasks/<id>/
│       ├── tools/
│       ├── hooks/
│       ├── memory/
│       └── monitor/
│
└── codex-sandbox/
    ├── Dockerfile                  ← Playwright base + Codex CLI + Vercel CLI
    ├── docker-compose.yml
    └── start.sh