Agent Harness Bootstrap NONCOMMERCIAL English GitHub

助言ではなく、遮断するガードレール。

二つの Claude Code スキルと一つのビューア。一つは手元にあるものを一つの契約に変換し、 一つはコードベースを読んでリポジトリに合ったエージェント編成を組み立て、もう一つはその全体を可視化して 任意の部分を無効化できるようにします。

新規開発でも、既存コードベースでも、監査専用でも。安全性の下限はシェルスクリプトと 終了コードで担保されるため、モデルを入れ替えても動きません。

ガードレール評価
112/112 フック形式ごと
ライセンス
PolyForm NC 非商用なら無償
最新版
v1.18.0 バイナリ同梱
移植アダプタ
32/32 Cursor と Codex

こんな覚えはありませんか。

実際のリポジトリに AI エージェントを入れたことがあるなら、このうち三つ以上には 心当たりがあるはずです。どれも助言ではなく、このリポジトリの中の何かが答えます。

  • 機能を一つ頼んだだけなのに、3 モジュール 14 ファイルに手を入れて main に強制プッシュした。

    これが答えますスコープを持つエージェント、パス単位のルール、そして着地する前に終了コード 2 でプッシュを拒否するフック。

  • セッションが圧縮され、三工程まで進めていた計画を忘れた。

    これが答えますタスクボードとセッションログはディスク上にあるので、新しいセッションは前回止まった場所から再開します。

  • バグを直すだけと言いながら .env を開いた。

    これが答えますそれらのパスは読み取りが起きる前に拒否されます。そもそも開けなかったものを漏らすことはできません。

  • 40 個目の生成ドキュメントが、いつの間にか仕様と矛盾している。

    これが答えますすべての要件に安定した ID が付き、トレーサビリティグラフが乖離した文書を名指しします。

  • キットがエージェント 40 個とスキル 100 個を入れたが、うちのプロジェクトにはどれも要らなかった。

    これが答えますロースターは契約と実在するモジュールから導かれます。16 席のうち 7〜15 席で、既定ですべてが埋まることはありません。

  • コードが何をしても通るテストを書いた。

    これが答えますテストの期待値は受け入れ基準から取るものであって、コードを実行した結果から取るものではありません。

  • スキャンした PDF を「読んで」、拾えた三単語から仕様書を書いた。

    これが答えますすべてのソースが、実際に読めるリーダーへ振り分けられます。1 ページあたり 80文字未満のページはスキャンと判定されて画像認識に回り、どうしても読めないファイルは推測ではなく、名前の付いた未解決事項になります。

  • 自分の .claude/ が結局何を強制しているのか、もう分からない。

    これが答えますharness-view がディスクから読み取り、採点し、配線されていない部分をすべて名指しします。

それに答えるもの

二つの Claude Code スキルと一つのビューア。どれか一つだけでも使えます。

  • spec-builder

    アイデア、議事録、既存文書の山、あるいは空のリポジトリを、国際規格に沿った一つの契約に変換します。 要件 ID は安定していて、要件を勝手に作ることはありません。書かれていないことは、フラグの立った 未解決事項になります。

  • harness-bootstrap

    まずコードを読み、それに合う .claude/ ハーネスを組み立てます。スコープが明示された エージェント、実在するパスに紐づくルール、そして助言ではなく遮断するフック。

  • harness-view

    その結果を読み取って描画し、採点し、任意の部分を無効化できるようにします。モデルは介在しないので、 ブラウザと CI の結果が食い違うことはありません。

下限はモデルに依存しません。ガードレールはシェルスクリプトと終了コードなので、全エージェントを Opus から Haiku に替えても安全性の結果はバイト単位で同一です。python eval/guardrail_eval.py がそれを示します。フック形式ごとに 112/112、両形式で 224/224。

受け渡しは四つ。ネットを順にたどってください。各段階は、そこで通電する経路と、 ディスクに書き出す成果物を示します。

デリバリーネット N1 金色は通電中の信号

段階をたどる

段階 IN 入力素材

実際に手元にあるものを、実際にある形のまま。

  • 一行のアイデア、あるいは誰もまとめていない会議の議事録
  • 既存ドキュメント、書きかけの仕様書、既存のリポジトリ、空のリポジトリ
  • PDF / Office ソースはルーターが読み方を判定 - 読めないファイルが推測になることはない

書き出し まだ何も - これは素材の段階

段階 S1 /spec-builder

あなたと AI の双方が読む、一つの契約。

  • 安定した要件 ID により、後のすべての変更が発端まで遡れる
  • ISO/IEC/IEEE 29148、ISO 25010、BABOK v3、C4、arc42 に沿って記述
  • 単独でも使える。ここで止めて仕様書だけ持ち帰ることもできる

書き出し docs/specs/ - FR-014、NFR-003、BR-002

段階 S2 /harness-bootstrap

まずコードベースを読み、そのうえで契約の周りにハーネスを組み立てます。

  • 16 のエージェント、それぞれにモデル・推論強度・ツール枠を明示
  • 16 のルール、うち 9 は対象パスでのみ読み込み
  • 10 の遮断フック、22 のコマンド、コンパクションを越えるタスクボード
  • スキルはあなたのマニフェストから見つけ、必要な席に配線する。使われないスキルは検出結果として名指しされる

書き出し .claude/ - エージェント、ルール、フック、コマンド、設定

段階 S3 デリバリーループ

計画、実装、レビュー、マージ - すべてハーネスが許す範囲の内側で回ります。

  • 大半の変更は担当エージェントへ直接渡る。オーケストレーターを通すのは、本当に横断的な作業だけ
  • 終了コード 2 のフックは、実行後ではなく実行前にツール呼び出しを止める
  • ボードはコンパクションを越えるので、長いセッションでも計画を失わない

書き出し コード、ドキュメント、開き直せるタスクボード

段階 S4 harness-view

ディスク上のハーネスを読み取って描画します。モデルは介在しません。

  • すべての配線を示すフロー表示とグラフ表示。どのノードも開けるファイル
  • 決定的な採点と、名指しされた検出結果。ブラウザと CI の結果が食い違うことはない
  • ルール・コマンド・フック・ロースター席のすべてに有効と無効の切り替え

書き出し スコアと、問題ごとに名指しされた検出結果

全体を一本の動画で

7 本の解説クリップ。すべてキャプション付きで、このページ上でそのまま再生できます。 ダウンロードも音声も不要です。

  • 完全なソリューション ~63秒

    プロダクト全体を 1 本のクリップで。4 つの課題、そして spec-builder が契約書を書き、 harness-bootstrap がハーネスを構築し、その内側でデリバリーループが回り、成果に至るまで。 各課題は解決するたびに赤から緑へと目に見えて切り替わります。最後は harness-view が存在意義そのものの 問い - 実際に正しく配線されているとどう分かるか - に答えて締めくくります。

残り 6 本のクリップ
  • 1. 全体像 - 何をするか、なぜ必要か ~34秒

    制約のないエージェントは要件を勝手に作り、圧縮で忘れ、最上位モデル階層で課金される。 二つのスキルがハーネスを構築する。

  • 2. 運用の流れ ~31秒

    spec-builder が契約書を書き、harness-bootstrap がコードを読んで一瞬でスキャフォルドし、 その後タスクループが回る。

  • 3. 制御の階層 ~32秒

    拒否リスト、フック、起動境界、パススコープルール、レビューゲート。ガードレールはシェルスクリプトなので、 Opus から Haiku に替えても安全性は同一。

  • 5. spec-builder 詳解 ~58秒

    生の入力から契約書へ。ヒアリング、まず FR 一覧を確認、選択したセクションをスキャフォルド(コア 6 は常に)、 順番に埋め、トレーサビリティチェック。何も作らない - 書かれていないことはすべて AS-nn か OI-nn として フラグが立つ。

  • 6. harness-bootstrap 詳解 ~68秒

    モード選択、必須のコードベース分析と棚卸しレポート、インテイクとツール質問、model・effort 明示のロースター、 スタックに合わせて絞り込み選んだら配線されるスキル、ADDED / KEPT / CONFLICT を報告し決して上書きしない スキャフォルド、オーケストレーションの配線、そして両方のナレッジグラフと HTML 書き出し。

  • 7. テーラーメイド構築・スキル・ビューア ~44秒

    運用フローの全体像。来た形のまま入る入力、一つの契約、上から降りてくるルールとフック、 秩序ある三つの成果物、そして与えられるのではなく書かれる状態。続いて、多くのキットが飛ばす工程 - 契約と実在するモジュールから導かれるロースター - と、それを健全に保つ三つの仕組み。 スキル探索、スキル配線、そして harness-view。

導入する

まずプラグイン経路から。更新が実際に機能するのはこちらなので、先に置いています。 リリース zip は、オフラインでバージョンを固定する経路として引き続き正式にサポートされます。 どちらでも、次のセッションからスキルが使えます。

Claude Code

プラグイン経路

/plugin marketplace add nguyenhx2/agent-harness-bootstrap
/plugin install harness-bootstrap@agent-harness-bootstrap
/plugin install spec-builder@agent-harness-bootstrap

片方だけでも、両方でも導入できます。各エントリはスキルのディレクトリを直接指しており、 SKILL.md がそのルートにあるため、Claude Code は単一スキルのプラグインとして 自動的に読み込みます。追加の設定は不要です。

Codex

プラグイン経路

codex plugin marketplace add nguyenhx2/agent-harness-bootstrap

そのうえで Codex CLI の /plugins を開き、harness-bootstrap、 spec-builder、またはその両方を導入します。

Cursor、および Agent Plugins 対応クライアント

プラグイン経路

git clone https://github.com/nguyenhx2/agent-harness-bootstrap
cp -r agent-harness-bootstrap/plugins/harness-bootstrap ~/.cursor/plugins/local/

その後ウィンドウを再読み込みします。同じディレクトリを VS Code、Copilot、Kiro など Agent Plugins 対応クライアントがそのまま読みます。クライアントごとの詳細と、どのクライアントで 実際に検証したかは docs/PLUGIN.md にあります。

または リリース zip

オフライン・固定

# 両方のスキル、ダウンロードした版に固定
unzip agent-harness-bootstrap.zip -d ~/.claude/skills/

オフラインで動き、ファイルを置き換えるまでそのバージョンに固定されます。Python 3 が必要です。 各リリースには、アーカイブを検証するための SHA256SUMS も添付されます。

ビューア

任意

各リリースには Windows・macOS(Intel と Apple Silicon)・Linux 向けの単体実行ファイルが添付されます。 ツールチェーンも Python も導入手順も不要です。Web UI は実行ファイルに埋め込まれています。Windows では リポジトリに置いてダブルクリックするだけで、引数なしならそのフォルダを配信してブラウザを開きます。

cargo install --path tools/harness-view   # 自分で構築する場合

ハーネス側がこれを必要とすることはありません。スキル自身の HTML 書き出し (docs/context/harness-graph.html)は Python とブラウザだけで動き、同じ二つの表示を 導入なしでカバーします。

新しいバージョンへ移る

更新の対象は二つあり、それぞれ独立しています。手元のスキルと、すでにリポジトリへ 展開済みのハーネス。どちらも、あなたが行った作業を上書きしません。

スキルの更新

プラグイン経路

/plugin update harness-bootstrap@agent-harness-bootstrap
/plugin update spec-builder@agent-harness-bootstrap

更新を左右するのはマーケットプレイスエントリの version フィールドです。二つのスキルは 一つのリポジトリバージョンでまとめてリリースされるため、両方のエントリがリリースごとに同時に上がります。 zip 経路に更新コマンドはありません。新しいアーカイブをダウンロードして上書き展開します。それが、 バージョンを固定したときに選んだ取引です。

リポジトリ内のハーネス

照合であって、上書きではない

スキルを新しくしても、それだけでは既存のハーネスには届きません。対象リポジトリの中で スキャフォルダを再実行します。

/harness-bootstrap:harness-update

何度実行しても安全です。まず現状を読み直します。存在しないパスにスコープされた開発エージェントは、 どこも指していない席だからです。そのうえで記録済みの回答を使ってスキャフォルダを再実行し、 すべてのファイルを次の三つの状態のいずれかとして報告します。

ADDED
新しいスキル版から入った新規アセット。あなたのファイルは関与していません。
KEPT
両側で同一。そのまま残ります。
CONFLICT
テンプレートと差分がある、つまりあなたが編集したファイル。そのままの状態で残され、手作業で解消する 照合キューに載ります。残す・取り込む・新しい方を採る、のいずれかを一件ずつ判断します。 --force による一括処理はしません。

スキャフォルダは差分のあるファイルを決して上書きしないので、あなたやチームが編集した内容は更新を越えて 残ります。意図的に無効化した制御も同様です。.claude/disabled.json がある場合、 トグル状態の再適用によって、無効化したものが更新で復活せず再び隔離されます。移植先もインテイクが記録した 対象だけに再適用されるため、Cursor や Codex の追加は再ブートストラップではなく、記録された箇所の編集です。

更新が決してしないこと。tech-stack.md、coding-standards.md、 エージェントのスコープ、その他の執筆済みコンテンツを書き換えることはありません。それらはあなたのコードと 回答から導かれたものであり、更新が触れるのは照合キューを通してだけ、判断するのはあなたです。

動かす

どちらのスキルも、何かを書き出す前に、あなたが書いた言語でヒアリングします。 一画面の計画を承認するまで、何も生成されません。

最初の実行

/spec-builder           # アイデアから始めるなら、まず仕様書を書く
/harness-bootstrap      # このリポジトリの .claude ハーネスを構築(または更新)する

すでにコードがあるリポジトリなら /harness-bootstrap だけで構いません。先にコードを読み、 見つけた内容でインテイクを埋めておくので、ゼロから入力するのではなく、findings を訂正する作業になります。 既存ファイルは上書きではなく照合されます。

何を訊かれるか

harness-bootstrap は 8 つのバッチを尋ねますが、その大半は確認です。プロジェクトの識別と ドキュメント言語、スタック(コードから確認)、git(git から確認)、品質と安全性、そして該当する場合にだけ現れる データベース・フロントエンド・監査のバッチ。最後はガバナンス - モデル主権、データ所在地、ライセンス、 ゲートされる操作 - で、ここだけは何も推測しません。どの回答も、あなたの組織にしか取れない方針であり、 でっち上げた答えは信じられてしまうからです。「まだ分からない」は有効な回答で、登録済みタスクになります。

spec-builder は 4 つのバッチと設定質問が一つ。文章ではなくファイルを渡すと、まずそれらを読み、 ソースごとに一行の計画 - どのリーダーを選んだか、あるいは読めない理由と対処 - を示してから、質問を始めます。

急いでいる場合はそう伝えてください。安全な既定値がない質問だけに絞る特急経路になり、それ以外は既定値を当てて 一枚の表として確認を求めます。監査モードだけは特急にできません。スコープは推測できないからです。

日々の運用

ブートストラップは、あなたの回答を埋め込んだデリバリーコマンドをリポジトリに書き出します。だから /deploy はあなたのデプロイコマンドを知っています。

/new-task "短いタイトル"    # マスタープランにタスクを登録する
/implement-fr FR-014       # 要件を一つ、端から端まで計画して実装する
/review-changes            # ブランチ差分全体に対するレビューゲート
/secret-scan               # 検出されたらローテーションまで停止
/task-resume TASK-007      # 圧縮やクラッシュの後、記憶ではなくファイルを信じて再開

この五つはハーネスの中で作業を進めるためのものです。もう一組は、出来上がったハーネス自体を 変えるためのもの - チューニングコマンドを、それぞれどんなときに使うのかと 合わせて下にまとめてあります。

ブートストラップ後の調整

ブートストラップが書くのは最終判断ではなく初稿です。出来上がったハーネスを 後から変えるコマンドが八つあり、どれも意図的に狭く作られています。差分を見せ、確認を取り、選ばれた ぶんだけを適用し、理由を docs/context/tool-changelog.md に記録します。そしてどれもが 何かを拒否します。必要になる前に読んでおく価値があるのは、むしろその拒否の側です。

  • /harness-tune

    こんなときに安全性の下限がチームの実態に対して厳しすぎる、あるいは 緩すぎる。制御そのものを外すのではなく、つまみを回したいとき。

    確認一回につきつまみは一つです。デプロイコマンドを誰が実行してよいか、force-push・ rm -rf・データベースリセットへの姿勢、spawn 許可リスト、席ごとのターン上限と 試行回数の上限、レビューをどこまで深く回すか、エージェント履歴をどれだけディスクに残すか。 上限を下げるのは無償で、上げるときは増えるコストが提示されます。コードレビューゲートの削除は 拒否されます - それはチューニングではなく別のリポジトリです。制御をまるごと止めるのも チューニングではなく、次のコマンドの仕事です。

  • /harness-toggle

    こんなときに特定のルール・コマンド・フック・席が一つ邪魔で、削除せずに 止めたいとき。

    動かすのはスクリプトだけです。ファイルを .claude/disabled/ に退避し、 settings.json の登録を外し、一行の理由を .claude/disabled.json に 書きます。このファイルはコミットされるので、チームで共有され、再スキャフォールドでも尊重されます。 さらにグラフを再生成し、止めた項目がグレー表示になります。保護された制御(シークレット保護、 spawn 保護、レビュー席)は、確認フレーズをバイト単位でそのまま入力しなければ動きません。 有効化に確認は要りません。制御を戻すことは、この段階が存在する理由のリスクではないからです。

  • /harness-update

    こんなときにスキルを新しいバージョンに上げた、あるいは以前の形に合わせて 組んだハーネスの下でコードベースが動いたとき。

    まず現状のコードを読み直します。存在しないパスにスコープされた開発エージェントは、何も指して いない席だからです。そのうえで記録済みの回答でスキャフォルダを再実行し、すべてのファイルを ADDED・KEPT・CONFLICT のいずれかとして報告します。CONFLICT は一件ずつ手で解決するものです。 その後トグル状態を再適用するので、意図して止めた制御が更新で復活することはありません。移植先も インテイクが記録した Cursor / Codex だけで、再検出はしません。

  • /agent-permissions

    こんなときにある席にツールを一つ足したい - あるいは、より多くの場合、 一つ減らしたいとき。

    一つの席の tools: 行だけを編集します。編集前に、ロースターを安全に保つ不変条件と 突き合わせます。レビュアーが Edit や Write を得ることはありません。編集するゲートは、独立性を 失った開発エージェントだからです。spawn ツールを持つのはオーケストレーターだけ。ワイルドカードの 付与もありません。model: と effort: は権限ではないのでここでは拒否され、 ロースターとコストモデルの話に回されます。剥奪は確認を飛ばします。狭めるのは常に安全だからです。

  • /board-audit

    こんなときにステータスを信じて次へ進む直前、あるいはボードの知らない どこかで作業が進んでいる気配があるとき。

    まずボード自身のフロントマターと依存関係の連鎖を検証します。以降のすべての走査が、整形式の タスクファイルを前提にしているからです。そのうえで、誰も進めていない Active タスク、誰も回収して いない完了済みエージェント実行、マスタープランと食い違うステータス、上限を超えてなお Active な 試行回数、どのタスクも参照していないワークツリーとブランチ、解除条件も担当者も書かれていない Blocked タスク、そして古くなったコードグラフを探します。読み取り専用です。報告はしますが、 直すのはあなたかオーケストレーターです。

  • /code-graph

    こんなときに変更がモジュール境界をまたぐとき、あるいは陳腐化ログが空で なくなった瞬間。

    ファイルを一つ読んでも答えられない問い - このモジュールを変えたら何が壊れるか - に答えます。 モジュール、ファイル、参照回数付きの import エッジ、そしてロースターのスコープから割り出した モジュールごとの担当。オーケストレーターは割り当て前に対象の被参照数を確認し、多ければ依存側を 指示に明記させます。限界も正直に。組み込みの抽出は静的なので、エッジが無いことは孤立の証拠では なく、証拠が無いだけです。

  • /docs-graph

    こんなときに仕様を変更した後、あるいはどの要件も求めていないものが 作られている疑いがあるとき。

    コードグラフの対になるトレーサビリティ側で、どちらも他方の代わりにはなりません。すべての ID - FR、NFR、BR、ADR、TASK - と、それを定義する文書、参照するすべての文書、そしてネットワーク不要で ブラウザから開ける自己完結のインタラクティブグラフ。spec-guardian は差分が名乗る ID を これと突き合わせます。グラフが知らない要件を名乗る実装は、でっち上げた要件を実装しています。 孤立した ID は未着手の作業か、死んだ参照のどちらかで、報告はどちらなのかを述べます。

  • /skill-wire

    こんなときにスキルを入れたのに何も使っていないとき。スキルは、どの席が それを使うのか指示されるまで誰の役にも立ちません。

    導入時のレビューを信用せず、配線時にスキルの全ファイルを読み直します。更新で本文が書き換わって いる可能性があるからです。プラグイン経由で入ったものなら束ごと読みます。プラグインのフックや MCP サーバーは、どのスキルを配線したかに関係なく動くからです。.claude/・ settings.json・フックを編集させるスキルは拒否します。レビュアーには読み取り専用の スキルだけを配線します。書き込みを促す指示は、ツール付与に関係なく従われてしまうからです。 配線解除はいつでも可能で、どちらの向きも記録されます。

八つとも、ブートストラップがリポジトリに書き込むと同時に、プラグインにも /harness-bootstrap:harness-tune のような形で同梱されます。だから他の誰かが用意した プロジェクトでも動きます。何を承認しても決して起きないことが三つ。レビュアーが書き込み権限を 得ることはなく、起動するのはオーケストレーターだけで、コードレビューゲートは削除できません - 範囲を変えられるだけです。

オーケストレーターの実際の動き

すべての入口ではありませんし、そうでなくなったのは意図的です。何かを割り当てる前に、 その変更がどの階層かを決め、階層が process の重さを決めます。大半の変更は Direct です。 オーケストレーターもタスクファイルも通さず、担当エージェントが直接呼ばれます。

ルーティング階層 N4 割り当ての前に階層が決まる

変更を選ぶ

階層 Direct

1 モジュール、巻き戻し可能、契約・スキーマ・認可・決済・インフラのいずれにも触れない。

  • 担当エージェントが直接呼ばれる - オーケストレーターもタスクファイルもなし
  • エージェント自身が各受け入れ基準を証明し、その方法を報告する

結果 作業が進み、ブランチはレビュー済み MR を通って着地する

階層 Standard

1 ドメイン、複数ファイル、あるいは背後に機能要件がある変更。

  • これもオーケストレーターではなく担当エージェント
  • 圧縮されたセッションを越えて残す必要があるなら、タスクファイルを登録する
  • 変更箇所に対してテストコマンドを実行する

結果 ボード上のタスクファイルと、レビュー済み MR

階層 Guarded

2 ドメイン以上、またはスキーマ・認可・金銭・公開契約・マイグレーション・デプロイ・個人データに触れる。

  • 統括役(オーケストレーター)が実行する - 同じボードで同時に二件は走らせない
  • 実装の前に spec-guardian がスコープを固定する
  • 専門エージェントは固定された基準に対して実装する
  • MR を開く前にブランチゲートが走る。/implement-fr FR-NN がその一連の流れ

結果 フル手順、そのどれも省略できない

  • 階層は既定値ではなく判断

    変更に必要な以上に重い階層を選ぶのは、慎重さではなく欠陥です。一行の修正が計画パスとタスクファイルと 三度のレビューを払えば、何も学ばないまま実時間を消費します。逆に Guarded の一覧に載る変更で軽い階層を 選ぶのは、その一覧が防ぐために存在している失敗そのものです。二つが同程度に妥当に見えるときは、 選んだ方とその理由を明示してから進みます。

  • ゲートはブランチで一度だけ走る

    エージェントごとではありません。/review-changes がその境界です。テスト、 code-reviewer と security-reviewer、そして /secret-scan を、 ブランチ差分全体に対して走らせます。エージェントごとにレビューすると、同じファイルを何度も読み直し、 同じ検出結果を毎回報告することになります。セキュリティレビューはこの境界と、あなたが求めた瞬間のもので、 すべての変更に付くものではありません。

  • タスク状態はコンテキスト消失を越える

    ボードは docs/tasks/ 配下の markdown にあり、対象のコードと一緒にコミットされます。 真実の源はそれらのファイルであって、会話の記憶ではありません。記憶は圧縮され、何が完了したかについて 嘘をつくからです。状態の変更はタスクファイルとマスタープランの両方に同じ編集で書き込まれ、 二つが食い違ってはなりません。

  • 信用せず、検証する

    エージェントの「完了」「合格」「マージ済み」は主張であって事実ではありません。作業が返ってきた時点で git とタスクファイルに照らして確認します - 走っている最中ではなく、一度だけ。作業中のエージェントに 終わったかを尋ねても何も検証できず、尋ねた分だけ課金されます。

ロースターは導入するものではなく、決まるもの

契約と、実在するモジュールが、誰の席を用意するかを決めます。 プロジェクトの形を選ぶと、ロースターが確定します。

テーラー N2 証拠が入り、ロースターが出る

プロジェクトの形を選ぶ
  • orchestrator
  • spec-guardian
  • reviewer
  • code-reviewer
  • qa-test
  • merge-manager
  • history-tracker
  • ba-analyst
  • security-reviewer
  • debugger
  • devops
  • tech-researcher
  • brainstormer
  • data-modeler
  • db-engineer
  • db-seeder

16 席のうち 7 席を導入 9 席は空のまま

理由 契約にもツリーにも、データベースの席を正当化するものがない

16 席のうち 11 席を導入 5 席は空のまま

理由 データベースと外部公開面があるため、データ・セキュリティ・運用の席が入る

16 席のうち 15 席を導入 1 席は空のまま

理由 実在する 5 モジュールにそれぞれ開発エージェントが付き、調査系の席も割に合う

  • キットはすべてを導入する

    コードを一行も読まないうちに 16 席すべて。全席分のコンテキストを払い、 持ち主のいない席は孤立した席と一般論の助言になります。

  • 実行が導入するのは 16 席のうち 7〜15 席

    既定ですべてが埋まることはありません。ルールは実在するパスにスコープされるため、 ルール本文の 62% が既定セッションの外に出ます。

    benchmark/benchmark.py --json による算出

要求が遮断される様子を見る

エージェントとリポジトリの間には五つの層があります。要求を経路に流して、 どの層が拒否し、エージェントに何が返されるかを確かめてください。

制御経路 N3 珊瑚色は拒否

要求を送る

層 1 で停止 拒否リスト

git push --force origin main

結果 権限拒否 - ツール呼び出しはシェルに届かない

層 2 で停止 遮断フック、終了コード 2

cat .env

結果 exit 2 - フックが拒否し、その理由がモデルに返る

層 3 で停止 生成境界

サブエージェントが別のサブエージェントを起動しようとする。

結果 却下 - 委任するのはオーケストレーターだけ。実行が無制限に広がらない

五層すべてを通過 レビュー保留

edit src/payments/charge.ts

結果 そのパスが実在するため決済ルールが読み込まれ、ブランチゲートが変更をレビューに回す

五層すべてを通過 許可

npm test

結果 実行される - 下限は止めるべきものだけを止め、それ以外では邪魔をしない

  • 1 - 拒否リスト

    settings.json に宣言します。エージェントの推論が始まる前に、クライアント自身が 呼び出しを拒否します。

  • 2 - 遮断フック

    10 の遮断フック。終了コード 2 のフックはツール呼び出しを止めて理由を返すので、 モデルは「気をつけて」ではなく、何をしてはいけないかを知ります。

  • 3 - 生成境界

    誰が誰を起動できるかはプロンプトではなくトポロジーで固定されます。委任するのは オーケストレーターだけで、サブエージェントは第二波を起こせません。

  • 4 - パススコープのルール

    ルールは対象パスでのみ読み込まれます。だからルール本文の 62% が既定セッションの外に出て、 ルールが背景ノイズにならずに済みます。

  • 5 - レビューゲート

    レビュー、セキュリティレビュー、マージ管理はそれぞれ予算を持つ席です。ブランチゲートは プロンプト内の提案ではなく、フロー上の一工程です。

Opus を Haiku に入れ替えても、評価結果はバイト単位で同一です。 それがこの設計の要点で、下限はシェルスクリプトと終了コードによって強制されるため、どのモデルが 動かしているかに依存しません。安いモデルで変わるのは、書かれるコードの質とレビューの深さ、 すなわち上限であり、この評価はそれを測っていません。

フック形式ごとに 112/112 - ブロック必須 40 件、許可必須 67 件。 py -3.13 eval/guardrail_eval.py で自分で再実行できます

harness-view - ネイティブビューア

スキルが書き出すのと同じ .claude/state/harness-graph.json 契約を読み、 実際にどう配線されているかを見せる小さな Rust バイナリです。ファイルを読んで関係を報告するだけで、 モデルもネットワークも判断も介在しません。ブラウザと CI が同じリポジトリについて食い違うことはありません。

ビューア経路 N5 ディスクから読み、同じ道で書き戻す

ここにモデルの意見はありません。scan は .claude/ をディスクから読み、 出力がバイト単位で安定したグラフを書き出します - ノードもエッジもキーもソート済み、タイムスタンプなし。 その下の三つのコマンドは、同じファイルの三通りの読み方です。ブラウザの Assess タブと CI の harness-view assess は同じエンジンなので、同じリポジトリについて食い違えません。

ページが変更できるものは、すべて一つの狭い扉から書き戻されます。サーバーは 127.0.0.1 にのみ バインドし、変更を伴うエンドポイントはすべて same-origin のブラウザリクエストを要求します。 ファイルの読み取りは .claude/ と docs/ に限られ、256 KB で打ち切られ、 常に nosniff 付きのプレーンテキストとして返されます。

実在プロジェクトの harness-view フロー表示。左のルールがフックを通ってエージェント席に入り、マージゲートに収束する
フローはグラフを左から右へ並べます - ルール、次にフックと設定、次にエージェント席、 そしてマージリクエストゲート、人間、コマンド。ノードをクリックすると、つながった部分グラフが マーチングダッシュで描かれ、無関係な部分は背景へ退きます。これはモックではなく実在のハーネスです。 ノード 109、エッジ 112。
harness-view の Assess タブ。実在ハーネスを 100 点満点中 79 点と採点し、ボード健全性・コスト管理・ドキュメント品質・安全性・トレーサビリティのカテゴリ別バーと、問題を名指しする検出結果一覧を表示
Assess は素朴なルールエンジンで、実在のハーネスを 79/100 と採点し、 その導出をカテゴリごとに見せます。一つの数字の裏に隠しません。ノードを名指しする検出結果には show in graph ボタンが付きます。場所を特定できない検出結果は、報告ではなく苦情だからです。

今回のリリースで新しくなったもの

  • ロースターエディタ

    エージェントを選ぶと Edit roster が現れ、席の model・effort・tools・description を フロントマターの手編集ではなくピッカーで変更できます。書き込みは変更されたキーだけに触れ、 触れていないキーは位置もコメントも空行もそのまま、CRLF は CRLF のままです。名前の変更は無視ではなく 拒否されます。それはフィールドの編集ではなく、ルーティングテーブルの変更だからです。

  • 編集できるリファレンス

    ピッカーの裏にあるカタログです。4 つのベンダー - Claude Code、OpenAI Codex、Gemini CLI、Z.AI GLM - のモデルとツールが、それぞれ verified フラグと用途のメモを持ちます。一次情報で確認できな かったものは、ピッカーの中を含め、現れる場所すべてで unverified と表示されます。カタログはあなたのもので、 編集はリポジトリごとに .claude/state/references.json に保存され、同梱シードの上に マージされるため、スキルを更新しても残ります。オーバーライドでラベルは訂正できますが、 unverified なモデルを verified に昇格させることはできません。

  • 編集できるコマンドステップ

    コマンドの番号付きステップがカードの連なりとして描かれ、ドラッグで並べ替え、任意の位置に挿入、 その場で無効化、タイトル変更ができます。保存はまとめて一度、Revert はすべて破棄。保存が書き換えるのは ステップが占める行範囲だけで、フロントマター、見出し、グループ間の文章はバイト単位でそのまま通過します。 編集していないステップは届いたバイトのまま書き戻され、それは主張ではなくテストです。

  • メンションとマークダウン描画

    ステップに入力すると、参照しようとしている名前 - エージェント席、ルールファイル、フック名、 リポジトリ内の実在パス - が候補として出ます。表・リスト・コードブロックであるステップはそのまま 描画されるので、ステップ 4 のルーティングテーブルは表として読めます。開いて編集すればマークダウン ソースに戻ります。リポジトリ由来のテキストは createElement と textContent だけを通り、リンクは http(s) に限られます。

  • 独自ダイアログ

    確認や編集はブラウザのプロンプトではなくビューア自身のダイアログなので、中身に合わせた大きさにでき、 合わないときはリサイズできます。

  • 二段階の実行時トグル

    ルール、コマンド、フック、ロースター席は詳細パネルから無効化でき、契約は /harness-toggle と同じです。HARD 保護の制御は確認フレーズを一字一句そのまま入力する必要が あり、トリムも大文字小文字の吸収もしません。SOFT 保護のものと、すべてのエージェント席は明示的な了承を 求めます。有効化はゲートされません。制御を戻すことは、この段階分けが防ごうとしているリスクではないからです。 記録は .claude/disabled.json。コミットされ、ソートされ、日付は入りません。

コマンド

harness-view                              # 現在のフォルダを配信し、ブラウザを開く
harness-view scan   [path]                # .claude/state/harness-graph.json を書き出す
harness-view serve  [path] [--port 7420]  # ローカル UI
harness-view watch  [path]                # .claude/ や docs/ の変更に応じてグラフを再構築
harness-view assess [path] [--json]       # 採点し、high があれば exit 1

scan はファイルを書いて終了するので、スクリプトやフックで使うのはこの形です。出力は バイト単位で安定しており、ノードもエッジもキーもソート済み、タイムスタンプはありません。 assess は high の検出結果が残っている間 exit 1 を返すので、パイプラインのゲートにできます。 安全性モデルと全エンドポイントを含む詳細は tools/harness-view/README.md にあります。

このスコアが測っていないもの。ルールがあなたのコードベースにとって有用なことを言っているか、 エージェントのスコープがコードの実際の構成と合っているか、存在するフックが主張どおりに遮断するか - いずれも測っていません。クリーンな結果は、エンジン内のすべてのルールを通過したという意味であって、 ハーネスが良いという意味ではありません。