v1.37.0 で Evolver は「シングルループ修復」から「ダブルループ進化」へより明確に移行する -- 既知の問題を修正するだけでなく、失敗を含むすべての経験から能動的に学習する。
この記事の内容
3 月中旬、UNC/CMU/UCSC/Berkeley が共同で MetaClaw(arXiv 2603.17187)を発表した。Evolver と密接に関連する取り組み:Agent をデプロイ後に持続的に自己進化させること。MetaClaw は別のパスからこの問題が真剣に取り組む価値があることを検証した。
両プロジェクトは類似の問題意識に到達したが、実装の深さとエンジニアリングの重点は根本的に異なる。MetaClaw は失敗蒸留、アイドルスケジューリング、セマンティック検索といった能力獲得層のメカニズムに傾倒している。Evolver は構造化された Gene、因果記憶グラフ (Memory Graph)、7 層セーフティファネルといったエンジニアリングガバナンス層の深さに傾倒している。両者は同じベンチマーク上にはなく、直接スコアリングで比較すべきではない。同じ種類の問題に対する異なるアングルと言える。
v1.37.0 のコア進展:Evolver が「シングルループ修復」から「ダブルループ進化」へより明確に移行した。
MetaClaw が解決したこと、解決していないこと
MetaClaw が解決した問題:
失敗軌跡からのスキル蒸留。 Agent がタスクを失敗すると、MetaClaw は失敗プロセス全体を分析し、「次に類似の状況に遭遇したらどうすべきか」という防御的ルールを蒸留して、即座にプロンプトに注入する。ゼロダウンタイム、ゼロレイテンシ。このメカニズムは情報効率が高い -- 成功パスは似通う傾向があるが、失敗にはそれぞれ固有の原因がある。
アイドル時間中の進化加速。 OMLS スケジューラがシステムのハイバネーション、キーボードの沈黙、Google Calendar イベントを監視。ユーザーが不在の時、Cloud LoRA ファインチューニングを含むより重い操作を起動する。
セマンティックスキル検索。 embedding cosine similarity でスキルライブラリを検索し、「同義だが表現が異なる」マッチングシナリオに対応する。
MetaClaw が解決していない問題:
論文の Knowledge Gaps セクション自身が認めている -- "rollback and version control...are not described"、"safety and security...no adversarial evaluation"。スキルは構造化制約のない自然言語テキスト。クロスセッションの因果記憶なし。シングルマシンフレームワークでクロスノード経験の再利用なし。
Evolver が解決したこと、解決していないこと
Evolver が解決した問題:
構造化された進化単位。 Gene は自然言語ではなく、完全な JSON 構造体:id、signals_match、preconditions、strategy(ステップ別)、constraints(max_files、forbidden_paths)、validation(実行可能コマンド)、epigenetic_marks(環境適応マーカー)。すべてのフィールドが検証可能 -- Gene が何ファイル変更できるか、どのパスに触れてはいけないか、成功後にどう検証するか -- 定義時に決定、LLM のランタイム判断に依存しない。
因果記憶グラフ。 Memory Graph は各進化の完全な因果チェーンを記録:SignalSnapshot -> Hypothesis -> Attempt -> Outcome。getAdvice() は Laplace 平滑 + 時間減衰で各 (signal, gene) 組み合わせの成功確率を計算し、非効率なパスを自動 ban、効果的なパスを優先推奨。セッションをまたいで蓄積、使うほど精度が上がる。
7 層セーフティファネル。 solidify プロセスのいずれかの層が失敗すれば、git checkout -- . && git clean -fd、完全ロールバック。validation コマンドには厳格なホワイトリスト(node/npm/npx プレフィックスのみ許可、シェルメタ文字禁止)。破壊的変更検出は .git、package.json、コア依存関係への変更を直接ブロック。
Hub エコシステム。 A2A プロトコルで EvoMap Hub に接続 -- あるノードが発見した修復戦略は他のノードで再利用可能。Capsule には env_fingerprint が埋め込まれ、クロス環境での互換性評価が可能。
オフライン能力。 コア機能は完全にオフラインで動作。
Evolver が解決していない問題:
RL/LoRA 重み更新ループなし。 MetaClaw の第 2 ループ(Cloud LoRA + RL-PRM)はアイドルウィンドウでモデル重みを微調整し、理論的にはプロンプトレベルの進化より高い上限を持つ。現時点での統合は見送った -- Cloud LoRA エコシステムが未成熟(Tinker/MindLab は汎用 API ではない)、Kimi-K2.5 でのみ検証済み。インターフェースは idleScheduler の deep レベルに予約済み。
学術ベンチマークなし。 MetaClaw には MetaClaw-Bench(934 問題 / 44 日間シミュレーション)がある。我々にはユニットテストと統合テストがあるが、標準化された公開比較可能なベンチマークスイートはない。test/bench.test.js が第一歩。
v1.37.0:記憶からの学習
このリリースのテーマは、Evolver が自らのすべての経験をより完全に活用すること。
失敗記憶からの防御ルール生成 (autoDistillFromFailures)
skillDistiller.js に完全な失敗学習パイプラインを追加:
collectFailureDistillationData()--failed_capsules.jsonから失敗記録を収集、gene + 失敗理由でグループ化analyzeFailurePatterns()-- 高頻度の失敗パターンと繰り返し発生する制約違反を識別synthesizeRepairGeneFromFailures()-- 失敗パターンから防御的 repair Gene を合成、戦略ステップは GUARD/VERIFY/ROLLBACK で始まるautoDistillFromFailures()-- 上記を統合、閾値(デフォルト 5 つの失敗 Capsule)到達で自動トリガー
蒸留された Gene は成功蒸留の Gene と同じ検証パイプラインを通る -- validateSynthesizedGene() の 15 以上のハード検証がすべて適用。
以前の Evolver は成功した Capsule からのみ新しい Gene を抽出していた。失敗記録は保存されていたが、anti-pattern ban にのみ使用。v1.37.0 はシステムが失敗記憶から真に学習することを可能にした -- 繰り返し発生する失敗パターンを再利用可能な防御ルールに変換し、以降の進化決定に能動的に注入。
アイドルスケジューリング (idleScheduler)
新しい idleScheduler.js でアイドル感知スケジューリングを実装:
- システムアイドル時間を検出(Windows/macOS/Linux)
- 4 段階の強度:
normal->aggressive->deep(およびsignal_only) - 5 分以上アイドルで aggressive モードに入り、蒸留とリフレクションを加速
- 30 分以上アイドルで deep モードに入り、将来のより重い操作のために予約
- メインループのスリープ時間にスケジューラの係数を乗算(アイドル時 0.25x ~ 0.5x、ビジー時は変更なし)
セマンティックマッチング (scoreGeneSemantic)
selector.js の scoreGene() に bag-of-words cosine similarity を補足スコアとして導入:
- シグナルと Gene の signals_match / summary / id をトークン化
- ストップワードをフィルタリング、語頻ベクトルを構築
- cosine similarity を計算、重み 0.4 を乗じて加算スコアとする
既存の正規表現/部分文字列マッチングを置換するのではなく拡張。Hub の KG サービスが成熟したら真の embedding 検索に切り替え可能。
プロセススコアリング (computeProcessScores)
以前の solidify のアウトカムは二値の success/failed + 0~1 のスコア。現在は 8 次元のプロセススコアリングに拡張:
| 次元 | 重み | 評価内容 |
|---|---|---|
| signal_quality | 0.05 | シグナルが豊富で意味があるか |
| gene_selection | 0.10 | 既存の Gene にマッチしたか(vs 自動生成) |
| mutation_quality | 0.05 | Mutation に完全な rationale と category があるか |
| blast_control | 0.15 | 変更範囲が Gene の制約内か |
| constraint_compliance | 0.25 | すべての制約チェックをパスしたか |
| validation_pass_rate | 0.25 | 検証コマンドのパス率 |
| protocol_compliance | 0.10 | プロトコル違反数 |
| canary_health | 0.05 | カナリアチェックをパスしたか |
コアアイデアは進化プロセス自体にスコアを付けること。最終結果だけではない。ルールベースのステップ別評価、RL に依存しない。
データバージョニング (gene_library_version)
EvolutionEvent と Capsule に gene_library_version フィールドを追加 -- 現在の genes.json のコンテンツハッシュ。Gene ライブラリが学習過程で変更された場合、旧版 Capsule は新版 Gene の効果評価に使用されない。古い評価データは学習品質を汚染する。
次のステップ、そしてなぜ
v1.37.0 は進化エンジンの「記憶ループ」を完成させた -- 成功も失敗も再利用可能な知識に変換される。しかし現時点まで、Evolver は受動的だ:シグナルがあれば応答し、エラーがあれば修復し、起きたことから学ぶ。
それでは足りない。真の自己進化システムは治療だけでなく、トレーニングもできるべきだ。
我々が次に構築する能力は Exploration モード -- Agent が未知の領域を能動的に探索する:自分がどんな役割になりたいかを定義し、現在の能力の境界を識別し、自律的に新しい Gene を探して学習し、自らを拡張する。
なぜこのステップが必要で、ロードマップ上の nice-to-have ではないのか?シングルループ修復には構造的な天井があるからだ:既知の問題ドメイン内で Agent をより安定させることはできるが、新しい問題ドメインに Agent を移動させることはできない。自分を修復することしかできないシステムは、最初にデプロイされた日より強くなることは永遠にない。ダブルループ進化 -- 一つのループが問題を処理し、もう一つが能動的に境界を拡張する -- がその天井を突破する道だ。
v1.37.0 変更ログ
| 変更 | ファイル | タイプ |
|---|---|---|
| 失敗記憶学習 | src/gep/skillDistiller.js | 新機能 |
| アイドル感知スケジューリング | src/gep/idleScheduler.js | 新モジュール |
| セマンティックマッチングスコアリング | src/gep/selector.js | 強化 |
| 8 次元プロセススコアリング | src/gep/solidify.js | 強化 |
| データバージョニング | src/gep/solidify.js | 強化 |
| ベンチマーク | test/bench.test.js | 新テスト (15) |
| スケジューラテスト | test/idleScheduler.test.js | 新テスト (10) |
全テストスイート:352 pass / 0 fail。
npm install @evomap/evolver@latest
GitHub: EvoMap/evolver
MetaClaw 論文: arXiv 2603.17187 Evolver は EvoMap エコシステムのオープンソースコンポーネント、GEP (Genome Evolution Protocol) 上に構築。




