GANスタイル・ハーネススキル
Anthropic の長時間実行アプリケーション向けハーネス設計(2026年3月24日)に着想を得ています
生成と評価を分離し、敵対的なフィードバックループを形成することで、単一エージェントでは達成できない品質を実現するマルチエージェントハーネスです。
核となる洞察
「エージェントに自分の作品を評価させると、彼らは病的な楽観主義者になります。平凡な出力を褒め、正当な問題を言い訳でごまかしてしまいます。しかし、別個の評価器を容赦なく厳格に設計することは、生成器に自己批判を教えるよりもはるかに扱いやすいのです。」
これは GAN(Generative Adversarial Networks)と同じダイナミクスです。生成器(Generator)が生成し、評価器(Evaluator)が批評し、そのフィードバックが次のイテレーションを推進します。
使用すべき場合
- 1行のプロンプトから完全なアプリケーションを構築する
- 高い視覚的品質が求められるフロントエンド設計タスク
- コードだけでなく、実際に動作する機能が必要なフルスタックプロジェクト
- 「AI スロップ」と呼ばれる美観が許容されないあらゆるタスク
- 本番品質の出力を得るために50~200ドルを投資したいプロジェクト
使用すべきでない場合
- 迅速な単一ファイル修正(通常の
claude -pを使用) - 予算が厳しいタスク(10ドル未満)
- 単純なリファクタリング(代わりに de-sloppify パターンを使用)
- テストがすでに明確に定義されたタスク(TDD ワークフローを使用)
アーキテクチャ
┌─────────────┐
│ PLANNER │
│ (Sonnet) │
└──────┬──────┘
│ プロダクト仕様
│ (機能、スプリント、デザイン方針)
▼
┌────────────────────────┐
│ │
│ GENERATOR-EVALUATOR │
│ フィードバックループ │
│ │
│ ┌──────────┐ │
│ │GENERATOR │--構築--▶│──┐
│ │ (Sonnet) │ │ │
│ └────▲─────┘ │ │
│ │ │ │ 実際のアプリ
│ フィードバック │ │
│ │ │ │
│ ┌────┴─────┐ │ │
│ │EVALUATOR │<-テスト-│──┘
│ │ (Sonnet) │ │
│ │+Playwright│ │
│ └──────────┘ │
│ │
│ 5~15回イテレーション │
└────────────────────────┘
3つのエージェント
1. プランナーエージェント
役割: プロダクトマネージャー — 簡潔なプロンプトを完全なプロダクト仕様に拡張します。
主な動作:
- 1行のプロンプトを受け取り、16機能、マルチスプリントの仕様を作成
- ユーザーストーリー、技術要件、ビジュアルデザインの方針を定義
- 意図的に野心的にします — 保守的な計画は物足りない結果を生みます
- 評価器が後で使用する評価基準を作成
モデル: デフォルトは Sonnet。より深い仕様拡張には GAN_PLANNER_MODEL=opus で昇格可能
2. ジェネレーターエージェント
役割: 開発者 — 仕様に従って機能を実装します。
主な動作:
- 構造化されたスプリントで作業(新しいモデルでは継続モードも可能)
- コードを書く前に評価器と「スプリント契約」を交渉
- フルスタックツールを使用:React、FastAPI/Express、データベース、CSS
- イテレーション間のバージョン管理に git を使用
- 評価器のフィードバックを読み、次のイテレーションに反映
モデル: デフォルトは Sonnet。最大のコーディング能力には GAN_GENERATOR_MODEL=opus で昇格可能
3. 評価器エージェント
役割: QA エンジニア — コードだけでなく、実際に動作しているアプリケーションをテストします。
主な動作:
- Playwright MCP を使用して実際のアプリケーションと対話
- 機能をクリック、フォームに入力、API エンドポイントをテスト
- 4つの基準(設定可能)に従ってスコアリング:
- デザイン品質 — 一貫性のある全体として感じられるか?
- 独創性 — テンプレートや AI のパターンではなく、独自の判断か?
- 職人技 — タイポグラフィ、スペーシング、アニメーション、マイクロインタラクション?
- 機能性 — すべての機能が実際に動作するか?
- 構造化されたフィードバックをスコアと具体的な問題とともに返す
- 容赦なく厳格になるように設計 — 決して平凡な仕事を褒めない
モデル: デフォルトは Sonnet。より強力な判断力とツール使用には GAN_EVALUATOR_MODEL=opus で昇格可能
評価基準
デフォルトの4つの基準。各1〜10点で評価:
## 評価ルーブリック
### デザイン品質(重み: 0.3)
- 1~3: 汎用的、テンプレート的、「AI スロップ」の美観
- 4~6: 有能だが特筆すべき点はない、慣習に従っている
- 7~8: 特徴的で、一貫性のあるビジュアルアイデンティティ
- 9~10: プロのデザイナーの作品と見分けがつかない
### 独創性(重み: 0.2)
- 1~3: デフォルトの色、既製のレイアウト、個性なし
- 4~6: いくつかの独自の選択があるが、ほとんどは標準的なパターン
- 7~8: 明確な創造的ビジョン、独自のアプローチ
- 9~10: 驚き、喜び、真に斬新
### 職人技(重み: 0.3)
- 1~3: レイアウトが崩れている、状態がない、アニメーションなし
- 4~6: 動作するが粗い、スペーシングが一貫していない
- 7~8: 洗練されている、スムーズなトランジション、レスポンシブ
- 9~10: ピクセルパーフェクト、楽しいマイクロインタラクション
### 機能性(重み: 0.2)
- 1~3: コア機能が壊れている、または不足している
- 4~6: ハッピーパスは動作するが、エッジケースで失敗する
- 7~8: すべての機能が動作し、エラーハンドリングも良好
- 9~10: バグプルーフ、あらゆるエッジケースを処理する
スコアリング
- 加重スコア = 合計(基準スコア × 重み)
- 合格閾値 = 7.0(設定可能)
- 最大イテレーション数 = 15(設定可能、通常5~15で十分)
使用方法
コマンドから
# 完全な3エージェントハーネス
/project:gan-build "かんばんボード、チームコラボレーション、ダークモードを備えたプロジェクト管理アプリを作成"
# カスタム設定
/project:gan-build "レシピ共有プラットフォームを作成" --max-iterations 10 --pass-threshold 7.5
# フロントエンドデザインモード(プランナーなし、ジェネレーター + 評価器のみ)
/project:gan-design "暗号通貨ポートフォリオトラッカーのランディングページを作成"
シェルスクリプトから
# 基本
./scripts/gan-harness.sh "音楽ストリーミングダッシュボードを作成"
# オプション付き
GAN_MAX_ITERATIONS=10 \
GAN_PASS_THRESHOLD=7.5 \
GAN_EVAL_CRITERIA="functionality,performance,security" \
./scripts/gan-harness.sh "タスク管理用のREST APIを作成"
Claude Code から(手動)
# ステップ1: 計画
claude -p --model sonnet "あなたはプロダクトプランナーです。PLANNER_PROMPT.md を読んでください。次の簡潔なプロンプトを完全なプロダクト仕様に拡張してください:'かんばんボードアプリを作成'。仕様を spec.md に書き出してください。"
# ステップ2: 生成(イテレーション1)
claude -p --model sonnet "あなたはジェネレーターです。spec.md を読んでください。スプリント1を実装してください。開発サーバーをポート3000で起動してください。"
# ステップ3: 評価(イテレーション1)
claude -p --model sonnet --allowedTools "Read,Bash,mcp__playwright__*" "あなたは評価器です。EVALUATOR_PROMPT.md を読んでください。http://localhost:3000 で実際のアプリケーションをテストしてください。ルーブリックに従ってスコアリングしてください。フィードバックを feedback-001.md に書き出してください。"
# ステップ4: 生成(イテレーション2 — フィードバックを読む)
claude -p --model sonnet "あなたはジェネレーターです。spec.md と feedback-001.md を読んでください。すべての問題に対処し、スコアを向上させてください。"
# 合格閾値に達するまでステップ3~4を繰り返す
モデル能力の進化に伴う変化
ハーネスはモデルの改善に伴って簡素化されるべきです。Anthropic の進化に従います:
ステージ1 — 弱いモデル(Sonnet クラス)
- 完全なスプリント分解が必要
- スプリント間でコンテキストをリセット(コンテキスト不安を回避)
- 最小2エージェント:初期化エージェント + コーディングエージェント
- 大量の足場がモデルの限界を補う
ステージ2 — 能力の高いモデル(Opus 4.5 クラス)
- 完全な3エージェントハーネス:プランナー + ジェネレーター + 評価器
- 実装フェーズごとのスプリント契約
- 複雑なアプリ向けの10スプリント分解
- コンテキストリセットは依然として有用だが、重要性は低い
ステージ3 — フロンティアモデル(Opus 4.6 クラス)
- 簡素化されたハーネス:単一計画フェーズ、継続生成
- 評価は単一の最終パスに縮小(モデルがより賢い)
- スプリント構造は不要
- 自動圧縮がコンテキストの増大を処理
重要原則: すべてのハーネスコンポーネントは、モデルが単独では何ができないかという前提をコード化しています。モデルが改善されたら、それらの前提を再テストしてください。もう必要ないものを削ぎ落としてください。
設定
環境変数
| 変数 | デフォルト値 | 説明 |
|---|---|---|
GAN_MAX_ITERATIONS | 15 | ジェネレーター・評価器サイクルの最大数 |
GAN_PASS_THRESHOLD | 7.0 | 合格するための加重スコア(1~10) |
GAN_PLANNER_MODEL | sonnet | プランニングエージェント用モデル |
GAN_GENERATOR_MODEL | sonnet | ジェネレーターエージェント用モデル |
GAN_EVALUATOR_MODEL | sonnet | 評価器エージェント用モデル |
GAN_EVAL_CRITERIA | design,originality,craft,functionality | カンマ区切りの評価基準 |
GAN_DEV_SERVER_PORT | 3000 | 実際のアプリのポート |
GAN_DEV_SERVER_CMD | npm run dev | 開発サーバー起動コマンド |
GAN_PROJECT_DIR | . | プロジェクトの作業ディレクトリ |
GAN_SKIP_PLANNER | false | プランナーをスキップし、仕様を直接使用 |
GAN_EVAL_MODE | playwright | playwright、screenshot、code-only から選択 |
評価モード
| モード | ツール | 最適な用途 |
|---|---|---|
playwright | ブラウザ MCP + 実際の対話 | UI を備えたフルスタックアプリ |
screenshot | スクリーンショット + 視覚的分析 | 静的サイト、デザインのみ |
code-only | テスト + リンティング + ビルド | API、ライブラリ、CLI ツール |
アンチパターン
-
評価器が甘すぎる — イテレーション1ですべてを合格させる場合、ルーブリックが寛大すぎます。スコアリング基準を厳しくし、一般的な AI パターンに対して明示的なペナルティを追加してください。
-
ジェネレーターがフィードバックを無視する — フィードバックはインラインではなく、ファイルとして渡すようにしてください。ジェネレーターは各イテレーションの開始時に
feedback-NNN.mdを読み込む必要があります。 -
無限ループ — 必ず
GAN_MAX_ITERATIONSを設定してください。ジェネレーターが3イテレーション後にスコアの停滞から改善できない場合は、停止し、人間のレビュー用にフラグを立ててください。 -
評価器が表面的にテストする — 評価器は Playwright を使用して実際のアプリケーションと対話する必要があります。単にスクリーンショットを撮るだけでは不十分です。ボタンをクリックし、フォームに入力し、エラー状態をテストしてください。
-
評価器が自分の修正を褒める — 評価器に修正を提案させ、その修正を評価させることは絶対にしてはいけません。評価器は批評のみを行い、修正はジェネレーターが行います。
-
コンテキストの枯渇 — 長時間のセッションでは、Claude Agent SDK の自動圧縮を使用するか、主要なフェーズ間でコンテキストをリセットしてください。
結果: 期待できること
Anthropic の公開結果に基づく:
| 指標 | 単一エージェント | GAN ハーネス | 改善度 |
|---|---|---|---|
| 時間 | 20 分 | 4~6 時間 | 12~18 倍 |
| コスト | 9 ドル | 125~200 ドル | 14~22 倍 |
| 品質 | かろうじて機能する | 本番品質 | 段階的変化 |
| コア機能 | 壊れている | すべて動作 | N/A |
| デザイン | 一般的な AI スロップ | 特徴的で洗練されている | N/A |
トレードオフは明らかです: 約20倍の時間とコストをかけることで、出力品質が段階的に向上します。これは品質が重要なプロジェクト向けです。
参考文献
- Anthropic: Harness Design for Long-Running Apps — Prithvi Rajasekaran による原著論文
- Epsilla: The GAN-Style Agent Loop — アーキテクチャの分解
- Martin Fowler: Harness Engineering — より広範な業界の文脈
- OpenAI: Harness Engineering — OpenAI の並行研究