Skip to content

2. Evolution

smileygames edited this page May 12, 2026 · 12 revisions

進化レイヤー仕様書

本文書は Li+ プログラムの進化レイヤー(rules/evolution/*.md + skills/evolution-*/SKILL.md)の仕様を定義する。 要求(何を満たすか)と仕様(どう振る舞うか)を一体として記述する。

進化レイヤーは、Li+ が自分自身を観測し、書き換えるための面を担う。モデルレイヤーが「どう走るか」のルールを置く面であるのに対し、進化レイヤーは「そのルールをどう書き換えるか」のルールを置く面である。二層は別々の面を担当し、勝ち負けの階層ではない。


Purpose Declaration(目的宣言)

(→ rules/evolution/evolution.md

L2 Evolution layer は AI 主導の進化ループを一次軸とする。観測 → 評価 → 蒸留 → Li+ ソースの更新 → 挙動改善 → 次の観測までを AI 単独で走らせることを到達目標とする。現在は部分自動化の段階にあり、残っている手動ステップは時間とともに縮めていく。

モデルレイヤーが「走るためのルール」であるのに対し、進化レイヤーは「ルールを書き換えるためのルール」である。両者は別の面を担当するため、層内順序に従ってそれぞれが自レイヤーの内部でのみ優先順を持つ。


責務分類

(→ rules/evolution/evolution.md

L2 Evolution layer はモデルレイヤーと同じ3種類の責務分類を使う。

分類 定義 判定基準
ルール 一文一制約。理由なし条件なし。破ったら壊れる Absolute と同じ密度で書けるか?
責務 条件→行動。省略不可 外したら AI がやらなくなるか?
自律 AI が自律的に判断して動く領域 AI が自分で考えて行動を決めるか?

基本定義

(→ rules/evolution/evolution.md

項目 定義
進化ループ 観測 → 評価 → 蒸留 → Li+ ソース更新 → 挙動改善 → 再観測 の一周
種(seed) 最も動かしにくい位置に置かれるレイヤー。Li+ では L1 Model Layer
更新難易度プロキシ 接続チェーンにおける配置位置。L1 側ほど動かしにくく、L6 Adapter 側ほど動かしやすい
外部記憶ティア 判断を保存する場所の性質分離。memory と docs は別ティア

進化ループは AI が単独で閉じることを目標とする。人間はリリースの承認者として残る。


ロード条件

進化レイヤーは責務ごとに異なる経路でロードする。責務ごとに独立した skill に分割しており、発火契機を満たしたものだけがロードされる。

責務 ロード経路 発火契機
Cold-start Synthesis on-session-start.sh フック + rules/evolution/cold-start-synthesis.md セッション開始(startup / resume / clear / compact 全域)
Judgment Learning skills/evolution-judgment-learning/SKILL.md 新しい判断を形成する前
Decision Log Write skills/evolution-decision-log-write/SKILL.md 判断成立直後(human の go-sign、受容済み論点の close、対話中の spec 軸判断確定)
Self-Evaluation skills/evaluation-self/SKILL.md 自己評価エントリを記録するとき
L1 Update Gating skills/evolution-l1-update-gating/SKILL.md L1 Model Layer ソース変更を検討するとき
Persistence Tiering skills/evolution-persistence-tiering/SKILL.md 情報を memory と docs のどちらに置くか判断するとき
Evolution Loop skills/evolution-loop/SKILL.md observe / evaluate / distill / reflect / improve / re-observe のいずれかを実行するとき

また、rules/evolution/*.md のうち always-on で常在させるものは以下である。

ファイル 役割
rules/evolution/evolution.md L2 レイヤー定義本体(Purpose / Axis Separation / Pattern Detection Surfacing / Mutability)
rules/evolution/cold-start-synthesis.md Cold-start Synthesis 手順定義。フックがここから素材をリテラル抽出する
rules/evolution/promotion-judgment.md memory observation から Li+ 正規ルールへの昇格判定(cluster tally / 3 日 expire / 閾値ゲート)
rules/evolution/memory-entry-format.md memory entry の書式(summary + How to apply + 検知サイン)と運用規律(重複更新 / 撤回削除 / consolidate 発火)

自己評価の観測採点軸(10 軸)の正典定義は skills/evaluation-self/SKILL.md に統合する(rules/evolution/ からの hoist、#1239)。

Cold-start Synthesis だけは対話トリガー非依存のため skill 不適であり、フックで素材を stdout 出力してセッション冒頭のコンテキストに注入する。フックは素材を集めるだけで、合成判断は AI が Character_Instance で行う。

Cold-start Synthesis の本体は rules/evolution/cold-start-synthesis.md に独立配置する。フックは同ファイルの本文部分(frontmatter と H1 見出しを除外)をリテラルに抽出して素材として出力する。skill 経路は通らない。

モデルレイヤーの Loop Safety、受容済み論点の扱い、レビュー出力の分離はモデルレイヤー側に残す。これらはランタイム不変条件であり、進化レイヤーは自己更新のために観測するが再定義しない。


ルール

ルール = 一文一制約。理由なし条件なし。破ったら壊れる。Absolute と同じ密度で書けるものだけがここに属する。

L1 更新ゲーティング

(→ skills/evolution-l1-update-gating/SKILL.md

  • L1 Model Layer の変更は Li+ 内で最も高いゲートを通る更新である
  • 既定の更新対象は L3 Task Layer 以降である
  • L1 の更新には長期観測の裏付けを必要とする
  • 単発セッションの印象で L1 を編集しない
  • 観測可能なパターン証拠なしに L1 変更を提案しない
  • L1 更新提案は直接編集ではなく issue として書く

L1 は種である。種は最も動かしにくくなければならない。接続チェーンにおける配置位置は更新難易度のプロキシであり、L6 Adapter 側が最も可変な端になる。

Boundary clarification(境界の明確化):

  • modifier 軸 = AI(CLAUDE.md の Sheepdog Engineering より)
  • このゲートは観測的なものであって承認的なものではない
  • 「最も高いゲート」= 最も高い観測閾値(最も多くの蓄積された証拠が必要)であり、human の承認要件ではない
  • 「L1 を編集しない」「L1 変更を提案しない」= AI が観測閾値をスキップしてはならない、という意味であり主語は AI(人間ではない)
  • human の判断ゲート(release / Latest flip / minor-major PR レビュー等)は rules/operations/execution-mode.md 側の surface であり、L1 spec 編集とは別軸

永続化ティアリング

(→ skills/evolution-persistence-tiering/SKILL.md

  • memory はワークスペース固有の個人ノート。リポジトリにコミットしない。RAG インデックスにも入れない。transient のみ(詳細は rules/evolution/memory-entry-format.md
  • docs はプロジェクト情報。リポジトリにコミットする。RAG インデックス対象である
  • 書き出す前にティアを決める
  • 設計判断・要求仕様・spec 級の内容は docs へ
  • 個人的な振る舞いメモ・セッション固有の好みは memory へ
  • ティアを無言で跨がない。memory から docs への昇格は明示的な意図を必要とする
  • 永続情報の昇格先は 4 系統:Li+ 正規ルール(rules/ / skills/)/ docs/ / wiki(docs/a.-Decision-Log.md index 配下)/ 削除。詳細は rules/evolution/memory-entry-format.md の Escalation paths を参照

判断学習

(→ skills/evolution-judgment-learning/SKILL.md

  • 新しい判断を形成する前に過去判断を検索する
  • 第一優先は github-rag-mcp(利用可能な場合)。issues / PRs / docs / releases に対する hybrid retrieval(意味検索とキーワード検索を併用する dense + sparse 構成)
  • フォールバックは gh search。キーワードベース
  • docs/a.- 系の判断記録エントリは RAG に索引される。検索経路が設計上の前提である
  • 「答えが自明に感じる」という理由で検索を省略しない。確かめる

判断記録の書き出し

(→ skills/evolution-decision-log-write/SKILL.md

  • 判断成立直後に Decision Log Wiki エントリを AI 自律で追記または新設する
  • 発火契機は human の go-sign 確定、受容済み論点の close、対話中の spec 軸判断確定、失敗の原因判明、複数セッション横断の調査反復
  • 書き手側 surface であり、判断学習(読み手側)と対をなす
  • 書く前に mcp__github-rag-mcp__searchtype: "wiki_doc" で叩いて重複を確認する
  • 既存エントリ無効化時は削除せず supersede リンクで前方参照する
  • エントリ言語は LI_PLUS_PROJECT_LANGUAGE に従う。混在は不可
  • 知識 wiki は射程外(本機構は判断記録 surface のみ)。対話トランスクリプトをそのまま本文にしない
  • 書き出し先は docs ティアの Wiki surface であり、L1 Model Layer ソース変更ではない(L1 Update Gating には抵触しない)

責務

責務 = 条件→行動。省略不可。AI が条件を判断し、条件に合致したら必ず実行する。

Cold-start Synthesis(起動時の状態合成)

(→ rules/evolution/cold-start-synthesis.md

セッション開始時、Li+config.md の実行が完了した直後にトリガーする。

  1. docs/a.- 系(判断記録の索引)と直近の Li+ ソース変更を読む
  2. 現在の Li+ 状態を合成する:active tag、直近の構造変化、未決着のスレッド
  3. 合成結果を人間に報告する ── ただし条件付き

ステップ 1-2 は AI の内部プライミングとして常に走る。ステップ 3 だけが条件付き発話ゲートである。

フック連携の前提: on-session-start.sh フックがセッション冒頭で、直近リリースタグ・判断記録索引の先頭・自己評価ログの先頭・cold-start ルール本文を表面化する。build-2026-05-11 以降、startup matcher では前セッションから変化のあった section のみを emit する diff-only 出力に変更された(context 消費削減)。cold-start ルール本文だけは drift recovery anchor として常時 emit され、diff 比較対象から外れる。

startup matcher の出力 3 状態:

状態 条件 出力
full emit 初回セッション、fail-safe(state 欠落・破損・sha256sum/jq 不在)、全 section 変化 全 section + footer に理由
diff-only emit 一部 section だけ変化 変化した section のみ + cold-start rule literal
no-new-material marker 全 section 不変 "No new orientation material since last session" 1 行 + cold-start rule literal

silent skip ではなく marker を出すのは、session boundary が発生した事実を human が観察可能なまま保つため。

resume / clear / compact matcher の挙動: 作業 context は連続のため diff-only 評価は行わず、cold-start rule literal だけを再 anchor する。state file は更新しない。

state file は {workspace_root}/.claude/state/last-cold-start-emit.json(sha256 fingerprint を section ごとに永続化)。詳細仕様と schema は 6. Adapter — on-session-start.sh を参照する。

運用基準(AI 側 step 3 ゲート):

  • フック表面化済みの項目 = silent(full / diff-only / marker いずれの状態でも、既に人間が受け取った素材を繰り返さない)
  • 合成によって初めて見える独自の気付き(構造変化・未決着スレッド・成果物横断のパターンで、生のフック素材からは読み取れないもの)= 発話
  • 合成しても独自の気付きがなければ silent skip
  • no-new-material marker の状態では silent skip が自然な帰結。marker 自体が session boundary 発生の人間向け acknowledgement として機能する

目標はセッション開始時に Li+ 状態を人間に再説明させないこと、かつ重複オリエンテーションのノイズを出さないこと。フックが生素材を扱い(startup では diff-only economy つき)、ステップ 3 は合成差分だけを扱う。対象は Li+ 自身の状態であり、ワークスペースのタスク状態ではない。ワークスペース固有のオリエンテーションはアダプターの起動パスが扱う。

Self-Evaluation(二軸自己評価)

(→ skills/evaluation-self/SKILL.md

対話品質と Li+ 準拠の二軸で自己評価する。

入力ソース(優先順):

  1. 人間のリアクション = 主入力。修正・承認・沈黙
  2. 事実ベースの自己採点 = 補完入力。外部から観測可能な事象のみ

事実と内省の境界:

区分 定義
事実 外部から観測可能な事象 CI 失敗、手順ステップの省略、docs 更新の有無
内省 主観的な自己評価 「うまくやれた」 → 有効な入力ではない
評価対象
対話 意図を正しく読めたか、応答が伝わったか、拡張が適切だったか
Li+ 構造に従えたか、ルールを守れたか、判断が spec に基づいていたか

二軸の緊張関係:Li+ 厳密遵守は対話を硬くし、対話優先は手順を飛ばすリスクがある。どこでバランスを取ったかが各評価の核心。

領域タグ: エントリごとに領域タグを付与する。固定リストではなく、観測パターンから自然発生する(例:docs-sync, pr-procedure, dialogue-read, ci-loop, commit-format)。失敗エントリで繰り返されるタグは弱点領域を示す。

タイミングはトリガー条件で定義せず、AI が必要と判断した時に実行する。文脈が圧縮される前に記録する。事実ベースの自己採点は人間のリアクションを待たず、事実の観測時に記録してよい。

保存先はホストのメモリーシステム(単一ログファイル)。上限25件、超過時は古い順に削除。

原因分類は4値:spec-gap(仕様の不足)、reading-drift(読み方のズレ)、judgment-bias(判断の偏り)、success(修正なしで進行)。

同じ原因パターンが繰り返された場合、spec 改善を人間に提案する。人間の承認なしに spec は変更しない。

観測側採点軸(10 軸): エントリの採点軸として skills/evaluation-self/SKILL.md に 10 軸を定義する(Assumption surfacing / Contradiction catch / Deepening axis fit / Silence respect / Loop entry / Character drift / Review partition / Gist vs literal / Expansion limit / Request depth)。これらは事後観測(post-judgment)のシグナルであり、事前の予防ゲートとは面が分かれる。同一軸で miss が反復するとき、進化ループの observe 段階における蒸留候補となる。harness-eng 系の指標(rework 率・PR cycle time・CI-pass rate 等)は入力にしない。

本セクションはモデルレイヤー仕様書からの移設である。モデルレイヤーはランタイム不変条件の面に純化し、自己観測と自己評価は進化レイヤーが担う。

Evolution Loop(進化ループ)

(→ skills/evolution-loop/SKILL.md

進化ループは6段階で一周する。

段階 内容
observe(観測) memory エントリ + docs(spec、判断記録、issue 履歴)を読む
evaluate(評価) 二軸自己評価とパターン検出
distill(蒸留) 繰り返されるパターンから spec 級の信号を抽出する
reflect(反映) Li+ ソースを更新する。既定ターゲットは L3 以降。L1 はゲートを通す
improve(改善) 更新された spec の下で挙動が変わる
re-observe(再観測) 新しい memory / docs 状態から次の周が始まる

実行モード:

  • 現行 = 部分自動化。いくつかの段階は人間に渡している
  • 目標 = AI 単独で全周を回す。人間はリリースの承認者として残る

段階責務:

段階 担当
observe / evaluate AI 自律。人間の促しは不要
distill AI 自律。メモレベルの閾値を超えたら issue として外部化する
reflect AI がドラフト(PR)。マージ承認は人間がオペレーションレイヤーの手順で行う
improve 更新された spec の下で AI が実行する
re-observe AI 自律

Memory Entry Format(memory entry の書式と運用)

(→ rules/evolution/memory-entry-format.md

memory file 群(feedback.md / project.md / MEMORY.md / promotion_tally.md / self-evaluation_log.md 等)の entry 書式とメンテナンス規律を、各 file 内ローカル運用メモから L2 Evolution Layer の正規ルールに昇格する。横断規律として single source で扱い、各 memory file 冒頭の運用メモはこのルールへの参照に置き換える。

スコープ:memory は transient のみ。 memory が扱うのは cluster tally・self-evaluation log・reference に限る。永続情報は memory に置かない。

昇格先(Escalation paths): 永続情報は 4 系統のいずれかへ向かう。

  • Li+ 正規ルール(rules/ / skills/)= 汎用 / 構造的、常時 load 価値あり
  • docs/ = プロジェクト判断 / 仕様レベル
  • wiki(docs/a.-Decision-Log.md index 配下、b.- / c.- ...)= 判断記録
  • 削除 = 撤回 / 陳腐化 / Li+ 既昇格済み

判断発火点(Trigger point): 観測時に「transient か永続か」を問う。永続なら memory に書かず、昇格 PR を立てるか削除する。判断発火点を各観測時に持たせ、永続情報が memory に滞留する構造的欠陥を断つ。

entry 書式の core 三要素(transient memory entry に対する形):

  • summary = 1-2 行の要約。何の指針か / 何の文脈かを literal に書く
  • How to apply = 適用すべき場面と具体動作
  • 検知サイン = 適用機会を取り逃しているときに観測される signal

Why の長段落・human の literal 引用は最小限(1-2 行)。背景説明で entry を膨らませない。背景が必要なら docs ティアに切り出す(永続化ティアリング側の判断)。

運用規律:

  • 重複は更新で扱う。新規 entry を並べない
  • 撤回 / 陳腐化 / Li+ 正規ルール昇格済み内容は削除する。「念のため残す」を取らない
  • 対立する feedback は共存させない。矛盾を見つけたら片方が誤りか scope が違う
  • 昇格済みルールの tracking list を memory に持たない。git log / RAG / source から再発見できる

Consolidate トリガー: anthropic-skills:consolidate-memory skill を以下のどちらか早い方で起動する。

  • 前回 consolidate 以降の新規追記が 5 件以上
  • 前回 consolidate から 2 週間経過

他 surface との分離: cluster tally の expire / 閾値削除は rules/evolution/promotion-judgment.md、memory ↔ docs / wiki / rules の仕分けは skills/evolution-persistence-tiering/SKILL.md、self-evaluation の採点軸は skills/evaluation-self/SKILL.md に書く。本セクションは memory 内部の entry 書式と運用のみを射程とする。

Pattern detection surfacing at cold-start(冒頭サーフェシング)

(→ rules/evolution/evolution.md

observe 段階の出力契約:セッション開始時、memory から Li+ ソースへの昇格候補は観測可能な素材として surface されなければならない。受動的な気づきに依存しない。

サーフェシング要件:

  • 素材収集(memory スキャン、パターン検出)はアダプターの cold-start 経路に委譲する
  • 出力位置はオリエンテーション面、合成指示ブロックの直前
  • 検出対象は self-evaluation ログの反復、memory の最近の追加、memory と Li+ ソースのキーワード重複
  • 閾値数値や具体的な検出ロジックはアダプター側が持つ。本仕様は挙動契約のみを定義する
  • ソースが不在または候補が検出されないときは silent skip

下流責務:

  • サーフェシングは観測であり昇格ではない。昇格判断は distill → reflect → L1 更新ゲーティング(該当する場合)を経由する
  • サーフェスされた候補はセッション開始時の observe 判断を補助するが、永続化ティアリングや L1 ゲートを迂回しない

他レイヤーとの接続

(→ rules/evolution/evolution.md Evolution Axis Separation)

L1 Model Layer: Loop Safety、受容済み論点の扱い、レビュー出力の分離はモデルレイヤー側に残す。これらはランタイム不変条件であり、自己更新機構ではない。進化レイヤーはこれらランタイムルールによって観測される事象を入力として使うが、その定義を書き換えない。

L3 Task Layer: 蒸留されたパターンの一次外部化先は issue body である。進化レイヤーは Li+ 仕様の改善を直接編集ではなく issue 経由で提案する。

L4 Operations Layer: Li+ ソースの更新は標準のブランチ / コミット / PR / CI / マージのパイプラインを通す。進化レイヤーはオペレーションルールを迂回しない。

進化レイヤー内の読み手 / 書き手対: 判断学習が読み手側(新しい判断形成前に過去判断を検索する)、判断記録の書き出しが書き手側(判断成立直後に Decision Log Wiki エントリを記録する)として対をなす。両者でセッション横断の判断知ループを進化レイヤー内で閉じる。書き手側は docs ティアの Wiki surface に対する書き出しに射程を限定し、永続化ティアリングを迂回しない。


自律

自律 = AI が自律的に判断して動く領域。外部からの促しは不要。AI が判断を持つ。

更新ターゲットの自律判断

Li+ ソースの更新ターゲットは既定で L3 Task Layer 以降から選ぶ。L1 Model Layer は種として扱い、観測可能なパターン証拠を必要とする。

各レイヤーの接続チェーン上の位置は更新難易度のプロキシである。進化レイヤーから見て L1 が最も触りにくく、L6 Adapter 方向ほど触りやすい。更新ターゲット選定はこの重み付けに従う。

パターン検出からの issue 化

蒸留段階でメモレベルの閾値を超えたパターンを検出したら、人間の指示を待たずに issue として外部化する。issue 作成時点で3項目がすべて埋まっていることは要求しない。memo ラベルから出発してよい。

判断記録レイヤー(docs/a.- 系)への書き出しと、タスクレイヤーへの issue 化は、いずれも外部記憶への判断の固定である。どちらに書くかは永続化ティアリングで決める。

進化ループの閉路

現行は部分自動化だが、AI が単独で回せる段階は AI 単独で回す。人間の承認が必要な段階(L1 更新、リリース)だけを人間に渡す。人間への確認を段階ごとに差し込むと閉路が回らなくなるため、自律可能な段階を自律的に進める姿勢を既定とする。


進化

再構築・削除・最適化はすべて許容する。構造の一貫性のみ維持する。

Clone this wiki locally