-
-
Notifications
You must be signed in to change notification settings - Fork 0
2. Evolution
本文書は Li+ プログラムの進化レイヤー(rules/evolution/*.md + skills/evolution-*/SKILL.md)の仕様を定義する。
要求(何を満たすか)と仕様(どう振る舞うか)を一体として記述する。
進化レイヤーは、Li+ が自分自身を観測し、書き換えるための面を担う。モデルレイヤーが「どう走るか」のルールを置く面であるのに対し、進化レイヤーは「そのルールをどう書き換えるか」のルールを置く面である。二層は別々の面を担当し、勝ち負けの階層ではない。
(→ 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 と同じ密度で書けるものだけがここに属する。
(→ 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.mdindex 配下)/ 削除。詳細は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__searchをtype: "wiki_doc"で叩いて重複を確認する - 既存エントリ無効化時は削除せず supersede リンクで前方参照する
- エントリ言語は LI_PLUS_PROJECT_LANGUAGE に従う。混在は不可
- 知識 wiki は射程外(本機構は判断記録 surface のみ)。対話トランスクリプトをそのまま本文にしない
- 書き出し先は docs ティアの Wiki surface であり、L1 Model Layer ソース変更ではない(L1 Update Gating には抵触しない)
責務 = 条件→行動。省略不可。AI が条件を判断し、条件に合致したら必ず実行する。
(→ rules/evolution/cold-start-synthesis.md)
セッション開始時、Li+config.md の実行が完了した直後にトリガーする。
- docs/a.- 系(判断記録の索引)と直近の Li+ ソース変更を読む
- 現在の Li+ 状態を合成する:active tag、直近の構造変化、未決着のスレッド
- 合成結果を人間に報告する ── ただし条件付き
ステップ 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+ 自身の状態であり、ワークスペースのタスク状態ではない。ワークスペース固有のオリエンテーションはアダプターの起動パスが扱う。
(→ skills/evaluation-self/SKILL.md)
対話品質と Li+ 準拠の二軸で自己評価する。
入力ソース(優先順):
- 人間のリアクション = 主入力。修正・承認・沈黙
- 事実ベースの自己採点 = 補完入力。外部から観測可能な事象のみ
事実と内省の境界:
| 区分 | 定義 | 例 |
|---|---|---|
| 事実 | 外部から観測可能な事象 | 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 等)は入力にしない。
本セクションはモデルレイヤー仕様書からの移設である。モデルレイヤーはランタイム不変条件の面に純化し、自己観測と自己評価は進化レイヤーが担う。
(→ 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 自律 |
(→ 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.mdindex 配下、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 書式と運用のみを射程とする。
(→ 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 作成時点で3項目がすべて埋まっていることは要求しない。memo ラベルから出発してよい。
判断記録レイヤー(docs/a.- 系)への書き出しと、タスクレイヤーへの issue 化は、いずれも外部記憶への判断の固定である。どちらに書くかは永続化ティアリングで決める。
現行は部分自動化だが、AI が単独で回せる段階は AI 単独で回す。人間の承認が必要な段階(L1 更新、リリース)だけを人間に渡す。人間への確認を段階ごとに差し込むと閉路が回らなくなるため、自律可能な段階を自律的に進める姿勢を既定とする。
再構築・削除・最適化はすべて許容する。構造の一貫性のみ維持する。
この Wiki は、Li+ に基づく開発・運用を支えるための情報整理空間です。
数字で始まるページは、 Li+プログラムの各レイヤーの仕様を定義するページです。
- 要求(何を満たすか)と仕様(どう振る舞うか)を一体として記述する
- 実装前に作成または更新する
- issue群から採用された要件を集約する
これらのページは 安定性と一貫性を重視して管理されます。
アルファベットで始まるページは、 Li+の構想・設定・導入手順などの参照用ページです。
- 設計思想・背景
- 設定リファレンス・インストール手順
これらのページは 必要に応じて更新・拡張されます。
リポジトリ内の rules/**/*.md(L1–L4 の常時ロード分、subdir 含む)、skills/**/SKILL.md(トリガー起動分)、adapter/claude/CLAUDE.md、adapter/claude/hooks-settings.md、adapter/claude/hooks/*.sh、adapter/codex/AGENTS.md、およびルート直下の Li+config.md、Li+bootstrap.md は、
AIやランタイムが直接読む実行用プログラム / 定義ファイルです。
-
docs/は人間向けの仕様書・要求仕様・手順書 -
rules/,skills/および adapter/bootstrap は実行時に読み込まれる本体
両者は対応しているが、役割は同じではない。
Home | 1. Model | 2. Evolution | 3. Task | 4. Operations | A. Concept
要求仕様書 (1-6)
参考文書 (A-D)
判断記録 (a-)
- a. Decision Log
- b. spec vs implementation order
- c. semi auto release rule dogfood
- d. layer reorg rationale
- e. github app user-to-server token expiration
- f. sheepdog engineering concept
- g. prerelease tag recovery procedure
- h. release flip drift patterns
- i. Li+ long-term vision (feedback only)
- j. Master role as client-architect
- k. current architecture as concession
- l. Li+ license Apache-2.0 rationale
- m. Character_Instance evolution history
- n. prompt as emotion vector controller
- o. agentic-search five-phase refactor
- q. Li+ lightening L1 gate override