mcpField
H
harness-evolve

harness-evolve

github.com/ruvnetエージェントワークフロー80.0k205 回インストール今日更新
リポジトリ

harness-evolve について

harness-evolveはmetaharness-darwin evolve CLIをrufloスキルとして利用し、制御された変更がハーネスの準備度スコアに与える影響を調べます。人が開始する実験と失敗診断に対応し、継続的な自律最適化には使いません。

主な機能

  1. 017種類のポリシー領域を変更
  2. 02各バリアントで変更は1領域のみ
  3. 03サンドボックス実行と進捗出力
  4. 04失敗したバリアントの診断
  5. 05実行前の確認

活用シーン

  1. 01目標未達の準備度スコアの原因調査
  2. 02新しい分野向けの初期設定の探索
  3. 03手動調整したハーネスと進化したベースラインの比較

MCP 対応

harness-mcp-scanやharness-threat-modelなどのMCPセキュリティ監査スキルと併用できます。入力には、提供するMCPエンドポイントの説明はありません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ruvnet/ruflo --skill harness-evolve

インストール後、Claude Code で/harness-evolveを入力して読み込まれたか確認します。

詳細

上流の metaharness-darwin evolve CLI を Ruflo のスキルとして公開します。ADR-150 の読み取りレイヤー(score / genome / mcp-scan / threat-model / oia-audit)に対応する書き込みレイヤーです。読み取り準備スコアが横ばいで、基盤モデルを再トレーニングせずに、どのサーフェスの変更がスコアを動かすかを見つけたい場合に使用します。

使用する場合

  • harness-score の結果が目標を下回っており、どのポリシーサーフェスが原因かわからない場合。
  • 新しい業種向けのハーネスを用意する際、手作業で調整するのではなく、実証的に適切な初期設定を見つけたい場合。
  • 手作業で調整したハーネスを進化させたベースラインと比較する場合(darwin のチャンピオンを比較対象として扱います)。

使用しない場合

  • 継続的なバックグラウンド最適化には使用しないでください。Darwin Mode は人が開始します。自律的な自己変更ではなく、単発の探索のために CI に組み込んでください。
  • CI で ruflo 自体に使用しないでください。ADR-153 §5 では ruflo の自動進化を明示的に拒否しています。CI ゲートで検証するのは収束ではなく、正常な縮退動作です。

アルゴリズム

実装:scripts/evolve.mjs。

  1. 引数を検証します(--repo が存在すること、--generations の上限が 50 以下、--children の上限が 20 以下、--concurrency の上限が 8 以下であること、sandbox/selection/mutator に既知の値が指定されていること)。
  2. --confirm がない場合:計画を出力して終了コード 0 で終了します(harness-mint の安全性に関する規約を踏襲し、上流の safety.ts チェックに対する多層防御を行います)。
  3. --confirm がある場合:インストール済みの @metaharness/darwin から metaharness-darwin evolve <repo> ... を実行します(_darwin.mjs で固定。条件を満たすインストール済みコピーがない場合に限り、~/.ruflo/darwin-cache-<pin> に一度だけインストールし、npx は決して使用しません)。共通の _darwin.mjs 非同期ヘルパーを使用します。世代ごとの進捗は stderr に転送し、最終チャンピオンの JSON は stdout から取得します。
  4. generations × children × per-variant に基づいてタイムアウトを計算します(per-variant は実環境で約 60 秒、モック環境で約 2 秒です)。呼び出し元は --timeout-ms で上書きできます。
  5. 上流の終了コード 99 をそのまま尊重します。「safety-disqualified」として伝播し、別の値に置き換えないでください。これは意図的に組み込まれたトリップワイヤーです(あるバリアントが、シークレット/シェルコマンドの実行/ネットワーク/動的評価を対象とする inspectVariant を発動しました)。ADR-153 §「Safety model」を参照してください。
  6. --alert-on-no-improvement は任意です。チャンピオンが親と同等以下の場合、終了コード 1 で終了します。

7 つの変更サーフェス

サーフェス担当する内容
plannerタスクの分解/ステップの順序
contextBuilderプロンプトに渡す内容
reviewer自己批評/出力の検証
retryPolicy失敗時に再試行するタイミングと方法
toolPolicyエージェントが使用できるツールと、その条件
memoryPolicy保存、想起、忘却する内容
scorePolicyエージェントが自身の出力を評価する方法

1 つのバリアントにつき変更は 1 つです。複数サーフェスの変更は禁止されています(因果関係の特定を明確に保ちます)。

出力

レポートは <repo>/.metaharness/ に出力されます。

.metaharness/
  archive.json         # full lineage tree (sampling next gen draws from this)
  lineage.json         # parent→child edges only
  variants/<id>/       # per-variant code (kept for audit)
  runs/<id>/           # per-variant sandbox test output
  reports/winner.json  # final champion + score delta vs parent

スキルの stdout は JSON {success, data: {champion, plan, durationMs, improved}} です(--diagnose が指定された場合は data.diagnosis も含まれます。以下を参照してください)。

失敗診断(--diagnose)

GEPA の重要な仕組みは、実行トレースから自然言語で失敗を診断し、その結果を次の変異に反映することです。単なるスカラーの適応度ではありません。--diagnose はその機能の一部を追加します。進化処理の完了後、敗北した/失敗したバリアントのトランスクリプトを darwin の GEPA ライブラリの操作(analyzeTranscript と classifyFailure。scripts/_darwin.mjs の共有 importGepa リゾルバー経由)に渡し、出力される JSON に diagnosis セクションを追加します。

"diagnosis": {
  "available": true,
  "scope": "losing-variants",
  "variants": [
    { "id": "g1_v0", "transcripts": 2,
      "failureClasses": { "exploration-loop": 1, "edit-mechanics": 1 },
      "dominantClass": "exploration-loop" }
  ],
  "totals": { "exploration-loop": 1, "edit-mechanics": 1 }
}

上流の形式に関する注意点(@metaharness/[email protected] で検証済み):

  • metaharness-darwin evolve --json が出力するのは TEXT 形式のリーダーボードです。標準出力には JSON もトランスクリプトも含まれません。バリアントごとの実行記録は <repo>/.metaharness/runs/<id>.json にあります。
  • これらの実行記録にはサンドボックスの実行トレース({taskId, exitCode, stdout, stderr})が含まれますが、GEPA 形式のトランスクリプト({actionRaw, obs})ではありません。そのため、診断では実行記録に GEPA 形式のトランスクリプトが埋め込まれている場合(エージェントのサンドボックス/将来の上流実装)はそれを使用し、なければチャンピオンのトランスクリプトにフォールバックします。それ以外の場合は、diagnosis: {available: false, reason, traceSummary} を出力します。traceSummary はバリアントごとの機械的な集計値(タスク数/失敗数/タイムアウト数/ブロックされたアクション数)です。
  • --diagnose によって実行が失敗することはありません。内部エラーが発生した場合は、{available: false, reason: "diagnosis-failed: ..."} にフォールバックします。

終了コード

コード意味
0進化処理が正常に完了した場合、またはドライラン、あるいは縮退動作(Darwin 不在)
1--alert-on-no-improvement が指定され、チャンピオンが親を上回らなかった場合
2設定エラー、または進化処理のインフラストラクチャ障害
99上流の「safety-disqualified」(再マッピングせず、そのまま伝播)

グレースフルデグラデーション(ADR-150 の制約 3 + ADR-153)

@metaharness/darwin がインストールされていない場合、スクリプトは {degraded: true, reason: 'metaharness-darwin-not-available', hint: ...} を出力し、終了コード 0 で終了します。ruflo は引き続き機能します。CI の no-metaharness-smoke.yml 形式のジョブで、この経路を検証します。

コメント