HARNESS ENGINEERING / CONCEPT

ハーネスエンジニアリング
— 概念と、ジェネレーター/エバリュエーターの作り方

AIの出力品質はモデルの賢さではなく環境設計で決まる。 長時間タスクでエージェントが壊れる2つの原因と、その中核的解決策である「作る側と採点する側の分離」を整理する。

出典 Anthropic Engineering 2026/3 + 2025/11 軽量版(HTML図解化スキル・1パス生成) 2026-07-30
CORE NUMBERS — 単体エージェント vs フルハーネス(同一プロンプト・1文)
20分 / $9
単体。速いが中核機能が動かない。自己評価は「いい出来です」
6時間 / $200
フルハーネス。実際に遊べるものが完成
22
コスト差。時間差は18倍
5-15
生成→評価の反復。品質のジャンプは後半に来る
SECTION 01

問題 — 素朴な使い方が壊れる2つの原因

「賢いモデルに丁寧なプロンプトを渡す」だけでは長時間・複雑タスクで必ず壊れる。壊れ方は2種類あり、それぞれ別の対処を要する。

2つの失敗モード 失敗モード A コンテキスト不安 context anxiety 序盤 安定 中盤 終盤で焦り始める 上限が近づくと「そろそろ終わらせなきゃ」と焦り、 未完成なのに強引にまとめて終了する。 実際の上限に達していなくても、近づいたという認識だけで起きる。 対処:圧縮では消えない。コンテキストリセット+ハンドオフ成果物 失敗モード B 自己評価バイアス self-evaluation bias ── 本題 同一エージェント 作る+採点する 成果物 実は破綻している 「いい出来です」 自信を持って絶賛 検証可能なテストがない主観的タスクで特に深刻。 コードでも「テストが通った」を根拠にUIの破綻を見逃す。 人間が指摘すれば直す。しかし自分では気づけない
Aはモデル世代で解消されつつある(Opus 4.5でほぼ消えた)が、Bは構造的な問題でモデルが賢くなっても消えない。
SECTION 02

解決 — ジェネレーターとエバリュエーターを分離する

機械学習のGAN(敵対的生成ネットワーク)に着想を得て、作る側と採点する側を別エージェントにする。ただし「別のAIなら客観的」という単純な話ではない。

生成器も評価器も、LLMである以上どちらも本質的に「甘い」。しかし、独立した評価器を懐疑的にチューニングすることは、生成器に自作を批判させることよりも、はるかに扱いやすい。 Anthropic Engineering / Harness Design for Long-Running Application Development(要旨)
観点 1

文脈の違い

自己評価する生成器のコンテキストには「なぜこう作ったか」の正当化の連鎖が全部入っている。独立した評価器は作った過程を一切見ていない。あるのは成果物だけ。

観点 2

役割の純粋さ

同一プロンプトに「完成させる」と「粗を探す」を同居させると衝突する。評価器は「粗を探す」だけなので、役割プロンプトが純粋になる。サンクコストも知らない。

観点 3

権限の剥離

直せる立場だと「直しながら甘く判断」できてしまう。書き込みツールを外せば判断しかできない。プロンプトのお願いではなく構造で縛れる。

逆向きの検証① 「厳しく自己評価せよ」

厳しい言葉で書かれた甘い評価が返る。文体が変わるだけ。

逆向きの検証② 「必ず3つ欠点を挙げよ」

些末な欠点3つを挙げて中核の破綻を見逃す。数を満たすことが目的化する。

逆向きの検証③ 「テストで検証せよ」

通るテストを書く。テストが仕様ではなく実装に寄る。

いずれも「完成させたい」という主目的が採点を汚染している。だから主目的を持たない別人格を立てる。

SECTION 03

作り方 — エバリュエーターを成立させる4つの構造

プロンプトの文言よりこの構造が効く。ハーネスエンジニアリングの思想は「お願いではなく構造で縛る」ことにある。

主観的品質を採点可能にする4軸ルーブリック

問い重み
部品の寄せ集めではなく、一体感のある全体になっているか高(苦手な軸)
独自性テンプレやデフォルトを超えたカスタムな判断の証拠があるか。AI生成の兆候にペナルティ高(苦手な軸)
丁寧さタイポの階層、余白の一貫性、色の調和、コントラスト比低(既に得意)
機能性目的が理解でき、主要アクションを見つけられ、タスクを完了できるか低(既に得意)

原則① 重みは「モデルが苦手な軸」に置く

Claudeは丁寧さと機能性がデフォルトで得意。放っておいてもできることに配点しても品質は上がらない。

原則② モデルの初期値そのものを減点対象にする

LLMは平均に回帰する。平均そのものを罰しないと平均から離れない。「AIっぽい紫グラデーション」を明記して減点する。

原則③ ハードしきい値を置く

平均点で誤魔化させない。1軸でも閾値未達ならスプリント全体を不合格にする。「見た目は良いが動かない」を通さない。

SECTION 04

活用 — 3エージェント構成とスプリント契約

プランナーを足したフルスタック開発向け構成。着手前に「完了とは何か」を合意するスプリント契約が、見落とされがちだが効果が大きい。

3エージェント構成(プランナー / ジェネレーター / エバリュエーター) 依頼(1〜4文) 「2Dのレトロゲームメーカーを作って」 AGENT 1 プランナー スコープについて野心的であれ 製品文脈に集中し実装詳細に入らない 1文 → 16機能・10スプリント 実測 4.7分 / $0.46(総額の0.4%) スプリント契約 ── コードを1行も書く前に「完了とは何か」を合意する ジェネレーターが「何を作るか+どう検証されるか」を提案 → エバリュエーターが「正しいものを作ろうとしているか」を確認 AGENT 2 ジェネレーター 1スプリント=1機能ずつ実装。自己評価 → git commit 実測:総コストの91.5%がここ AGENT 3 エバリュエーター Playwrightで実際に操作。UI・API・DB状態を検証 各軸にハードしきい値。1つ下回れば不合格 提出 差し戻しの粒度が肝 ── 「塗りつぶしが動きません」ではなく関数名とイベント名まで特定する 例:fillRectangle は存在するが mouseUp で正しくトリガーされていない / Deleteハンドラが selection と selectedEntityId の両方を要求している エージェント間の通信はすべてファイル経由。コンテキストリセットに耐え、人間が観察・介入でき、gitで監査可能になる。
SECTION 05

実験結果 — コストはどこに消えるのか

同一プロンプトでの比較と、簡素化後の構成での実測コスト内訳。削るべき部品と削ってはいけない部品がはっきり分かれる。

実験1:レトロゲームメーカー
単体フルハーネス
所要時間20分6時間
コスト$9$200
機能数素朴16機能
中核機能動かない動く(遊べる)
失敗の可視性表示なし・自覚なし未達が明示される
自己評価「いい出来です」評価者が未達を検出し続けた
実験2:ブラウザDAW(Opus 4.6世代)
プランナー4.7分$0.46
ビルド R12時間7分$71.08
QA R18.8分$3.24
ビルド R21時間2分$36.89
QA R26.8分$3.09
ビルド R310.9分$5.88
QA R39.6分$4.06
合計3時間50分$124.70
エバリュエーターを削るのはコスト削減としてほぼ意味がない。削るならジェネレーター側の反復回数。 QA 3ラウンド合計 $10.39(総額の8.3%)が、ビルド $113.85 の品質を保証している。ビルド時間は127分→62分→11分と収束
SECTION 06

意思決定 — ハーネスを組むべきか

部品は「モデルが自力ではできないこと」への仮説である。だから常に必要でも、もう不要でもない。

判断軸ハーネスを組む単体で済ませる
成果物の性質納品物・保存物。他人が見る壁打ち・調べ物・使い捨て
検証可能性主観的でテストが書けない(デザイン・文章)テストで自動判定できる
タスク難易度モデル能力の境界付近にある境界の内側で余裕がある
失敗コスト壊れたまま出ると困る間違っていてもすぐ気づける
許容レイテンシ数十分待てるその場で欲しい
ハーネスのあらゆる構成要素は、「モデルが自力ではできないこと」についての仮説を符号化している。それらの仮説はストレステストする価値がある。間違っているかもしれないし、すぐに陳腐化しうるからだ。
NEXT ACTION

最小の始め方 — 段階1だけで効果の大半が出る

hookや自動ループは後回しでよい。逆に段階1を飛ばすと効果が実感できない。

STEP 01
評価者を1体だけ立てる

.claude/agents/evaluator.md を置き、Write/Editを外して1行目にPASS/NEEDS_WORKを出させる。ここだけで効果の大半が出る。

STEP 02
ルーブリックとしきい値

4軸に分解し、モデルが苦手な軸に重みを寄せる。1軸でも未達なら不合格にする。

STEP 03
一次情報を証拠にする

生成側の要約ではなく、原文・実データ・実表示を見に行かせる。ここが無いと机上採点になる。