name: dream argument-hint: "" description: | 【将軍専用】三層記憶(記憶DB+セマンティック+Obsidian) + MEMORY.md + memory/*.mdの統合・整理(5 Phase REM型)。 三層記憶健全性チェック(2g)、層間整合(3d)、タイムスタンプ統一(ISO 8601秒精度+TZ)、 矛盾解消、重複排除、陳腐化検出、免疫系提案(自動化ターゲット発見)を行う。 Auto-dreamの4 Phaseを超える5 Phase設計: Orient/Gather/Consolidate/Prune/Immunize。 TRIGGER: /dream、メモリ整理、知識統合、記憶の清掃、夢、三層記憶整理 DO NOT TRIGGER: 知識棚卸し(→[[shogun-teire]])、教訓登録(→lesson-sort)、 PD反映(→shogun-pd-sync)、/clear前準備(→shogun-clear-prep)、Memory MCP単発操作 quality_metric: "当該スキル起点cmdのcmd_save.shチェック通過率(q1-q3 BLOCKなし、q4_depth WARNINGなしの割合)" allowed-tools: - Read - Grep - Glob - Bash - Edit - Write - mcp__memory__read_graph - mcp__memory__open_nodes - mcp__memory__search_nodes - mcp__memory__add_observations - mcp__memory__delete_observations
Script refs verified: 2026-06-27 cmd_3563/537008b08 + 4ca3c9de. semantic_search.sh 直近変更は(1) memory DB FTS fallback timeout既定値15s→5s、(2)既存cacheあり時の非同期refresh subshell stdout/stderrを/dev/nullへ切断しコマンド置換のpipe EOF待ちを解消。/dreamのPhase 2b/semantic search利用契約、引数、出力形式、memory DB検索の意味は変更なし。速度改善のみで手順変更不要。
Script refs verified: 2026-06-20 2088b6421+3867e2be2. gate_lesson_health.sh 直近変更はinfra教訓のcross-project注入をuseful率計測へ正しく反映する修正、memory_db_query.sh 直近変更はmodel_detect/SSOT検出/skill_routing三層貫通等の内部改善。dreamの読取・棚卸し・MCP操作手順への契約変更なし。
Script refs verified: 2026-06-21 0bb457ecf+7b329e854. gate_lesson_health.sh 直近変更はactive lesson抽出高速化、memory_db_query.sh 直近変更は運用auto-commit由来のmtime更新。/dreamの読取・棚卸し・MCP操作手順への契約変更なし。
Script refs verified: 2026-06-21 a46df2367. gate_lesson_health.sh 直近変更はLESSON_EFFECT_WINDOW_CMDSを30→10に縮小(計測窓調整)。/dreamの読取・棚卸し・MCP操作手順への契約変更なし。
Script refs verified: 2026-06-26 558ec6eae. gate_lesson_health.sh 直近変更は未振り分け教訓のID一覧をALERT出力に表示する改善。/dreamの読取・棚卸し・MCP操作手順への契約変更なし。
Script refs verified: 2026-06-26 364744210+955c2e756. gate_lesson_health.sh 直近変更はuseful率計測のpresence_file追加(active lesson抽出高速化)+min sample threshold調整。引数なし全project走査/METRIC行/WARN・ALERT出力契約は変更なし。
/dream — Memory Consolidation (5 Phase)
三層記憶(記憶DB+セマンティック+Obsidian) + MEMORY.md + memory/*.md の統合・整理を行う。REM睡眠に倣い、知識基盤を強化する。
Script refs verified: 2026-06-10. memory_db_query.sh の契約は変更なし。449dd3029でext4キャッシュ初期化タイムアウトを10s→30s(DB 198MB成長対応)に変更したが、クエリ引数・SQL実行・出力形式の契約は維持。
Script refs verified: 2026-06-12 cmd_karo_hotfix_skill_script_refs_20260612. insight_write.sh は保存I/F bash scripts/insight_write.sh "message" [priority] [source] と resolve I/F --resolve <id> を維持。直近変更(e59594dc8)は破損tail隔離、raw YAML appendのatomic replace、DB live insert非同期化、source repeat集計の単一pass化で、/dream側の呼び出し手順変更は不要。
Script refs verified: 2026-06-13 cmd_karo_hotfix_skill_refs_stale_20260613. gate_lesson_health.sh 直近変更(90c32efdd)はcheck_role_lesson_origins_batch()をPython3 heredocからbash for loopに変換(高速化)。引数なし全project走査/<project_id>単体走査、METRIC行、WARN/ALERT出力契約は維持。
Script refs verified: 2026-06-12. gate_lesson_health.sh はhotfix feedbackを長期useful率健康指標から除外する。自己修復hotfixの短期バーストで通常/full作業向けの教訓有用性をWARN化しないため。引数なし全project走査/<project_id>単体走査、METRIC行、WARN/ALERT出力契約は維持。
Script refs verified: 2026-06-16 cmd_karo_skill_refs_update_20260616. gate_lesson_health.sh 直近変更(fcec9b309)はmin_samples内部分離(health計測用LESSON_EFFECT_USEFUL_MIN=2新設、退役判定min_samples=5維持)。引数なし全project走査/<project_id>単体走査、METRIC行、WARN/ALERT出力契約は変更なし。
Script refs verified: 2026-06-11. gate_lesson_health.sh はlesson useful率集計の最小サンプルを5件へ戻し、退役スキャン確定閾値と揃えて少数feedbackノイズで退役候補0件のALERT/BLOCKを作らないようにした。引数なし全project走査/<project_id>単体走査、METRIC行、WARN/ALERT出力契約は維持。
Script refs verified: 2026-06-07 cmd_3206. gate_lesson_health.sh はrole lesson origin確認をbatch化したが、引数なし全project走査/<project_id>単体走査とOK/ALERT契約は維持。gate_shogun_memory.sh はreferenced_files取得cacheで高速化され、insight_write.sh は保存/resolve/source repeat通知の呼び出し契約変更なし。
Script refs verified: 2026-06-02T20:46:12+09:00 infra-bug audit after gate_lesson_health.sh inline-field parser fix.
核心原理: メモリ整理は目的ではなく手段。真の目的は因果推論能力の維持と免疫系(gate/hook)候補の発見。タイムスタンプは「後で読めるように」ではなく「因果推論を可能にするため」に付与する。
二大原則:
- 殿の時系列原則: 「LLMには時系列概念がない。タイムスタンプという外部記憶で因果推論を可能にする」
- 殿の免疫系原則: 「失敗→なぜなぜ→gate/hook→永続防御。メモリ整理で終わるな、防御層候補を出力せよ」
事前チェック
# dream実行条件チェック(24h経過 AND 前回dreamから変更あり)
bash scripts/should_dream.sh
PASSなら続行。FAILなら「前回dreamから24h未経過」と報告して終了。
殿が明示的に /dream を指示した場合はチェックをスキップして続行。
Phase 1 — Orient (状態把握)
- memory ディレクトリを
lsしてファイル一覧を取得 - MEMORY.md を読む — 現在の行数、200行制限との差分を記録
- 各 memory/*.md をスキャンし以下を記録:
- ファイル名、行数、最終更新日
- タイムスタンプなしのエントリ数
- 日付のみ(時刻なし)のエントリ数
- 相対日付("yesterday", "先週"等)のエントリ数
bash scripts/gates/gate_shogun_memory.shを実行 — memory健全度確認- Phase 1サマリを記録:
P1: files=N, total_lines=M, ts_coverage=X%, stale_candidates=K
Phase 2 — Gather Signal (信号収集)
3つのソースから、メモリに反映すべき新情報を収集する。
2a. 構造化YAML(一次ソース — 最優先)
# karo_workarounds: 直近20件の傾向
tail -80 logs/karo_workarounds.yaml
# gate_fire_log: 直近50 FAIL
grep "result: FAIL" logs/gate_fire_log.yaml | tail -50
# lesson effectiveness
bash scripts/gates/gate_lesson_health.sh
Script refs verified: 2026-05-29 cmd_3087 (lesson effectivenessは低サンプルも可視化対象だが、2026-06-11以降のWARN/ALERT判定母数は5 feedback以上。単発feedbackはMETRICのtotal_feedbackから除外される). 2026-05-22 cmd_2959 (cmd_2816: is_set_value関数の修正により未設定文字列を持つwhen/howフィールドは欠落扱いされなくなった。空文字のみが欠落/未設定扱い。PHANTOM extraction checks only top-level automated: true + enforcement: entries in infra lessons, and verifies referenced scripts under scripts/ and .claude/hooks/; lesson effectiveness scan remains pipefail-safe and excludes cmd_training* from the production effectiveness window. 2026-05-21: INSIGHT_REPEAT通知に10分デバウンス追加、massbatch時の掲示板洪水を防止。2026-05-22: insight_writeはdedup+append+source repeat countを単一Python passで処理).
- workaround のカテゴリ別頻度変化を検出
- gate FAIL の新パターンを検出
- lesson health の4系統を検出:
- SSOT lessons.md の conflict marker / ssot_path 不備
- lesson→context 未合流数(ALERT_THRESHOLD=5超でALERT)と未振り分け教訓数(UNSORTED_THRESHOLD=10超でALERT)
- when/how 欠落、注入10回以上かつ helpful_count=0 の教訓
- lesson effectiveness / useful率(WARN=50%未満、ALERT=30%未満)
- enforcement phantom(自動化済み教訓の
enforcementが存在しない.shを指していないか)
2b. セッションJSONL(二次ソース — grepで絞る)
TRANSCRIPTS_DIR="$HOME/.claude/projects/$(basename $(pwd))/"
# 殿の教えパターン(直近7日のセッションファイル)
find "$TRANSCRIPTS_DIR" -name "*.jsonl" -mtime -7 -exec \
grep -l '"role":"human"' {} \; | while read f; do
grep '"role":"human"' "$f" | grep -iE '覚えて|忘れるな|重要だ|原則|禁止|教訓' | tail -5
done
# CLAUDE.md/instructions変更
find "$TRANSCRIPTS_DIR" -name "*.jsonl" -mtime -7 -exec \
grep -l 'CLAUDE.md\|instructions/' {} \; | head -5
注意: JSONLを全文読むな。grepで絞ってからtailで制限。
2c. ドリフト検出(三次ソース — 現状との突合)
各memory topic fileの事実主張をランダムに2-3件検証:
- ファイルパス参照 →
[ -f path ]で存在確認 - 関数名参照 →
grep -r "function_name"で存在確認 - 数値主張 → 可能なら現在値と比較 ドリフト検出時は Phase 3 で修正対象としてフラグ。
2d. 研究日誌鮮度チェック
MEMORY.mdの研究日誌索引行から最新Phase番号を抽出し、研究日誌本体の最終Phase番号と突合:
# MEMORY.md索引のPhase番号
grep -oP 'Phase \d+' memory/MEMORY.md | tail -1
# 研究日誌本体の最終Phase番号
grep -oP '## .*Phase \d+' memory/dialogue_preprocessing_research_20260331.md | tail -1
不一致 → DREAM-STALE: 研究日誌Phase N だがMEMORY.md索引はPhase M をinsightに登録。
2e. 到達パス検証(保存=受動的に届くか)
「保存=いつでも意識も準備もせずに利用できる知識」(殿定義)。調べないと使えないものは存在しないのと同じ。
新規PI/知識の到達パス検証: config/projects.yamlのactive PJ一覧を取得し、各PJのprojects/{id}.yamlが以下の全復帰手順に到達パスがあるか検証:
- 将軍: CLAUDE.md Step 3.5
- 家老: CLAUDE.md karo Recovery Step 5
- 軍師: instructions/gunshi.md Recovery (4)
- 忍者: CLAUDE.md ninja Recovery Step 4
# active PJ一覧
grep -A1 'status: active' config/projects.yaml | grep 'id:' | awk '{print $NF}'
# 各復帰手順にprojects/{id}.yamlの参照があるか
grep -l 'projects/{id}.yaml\|projects/.*yaml' CLAUDE.md instructions/gunshi.md
穴 → DREAM-REACHABILITY: {project} は {role} に届かない をinsightに登録。
2f. Context健全度チェック(知識の網目密度)
context/*.md間の相互参照・孤立・陳腐化・対話到達性を検出する。 Karpathy Lint: 知識ベースの構造的健全性を定期チェック。
# 孤立context検出(他のcontextファイル・CLAUDE.mdから参照されていない)
for f in context/*.md; do
bn=$(basename "$f")
refs=$(grep -rl "$bn" context/*.md CLAUDE.md 2>/dev/null | grep -v "$f" | wc -l)
if [ "$refs" -eq 0 ]; then echo "ORPHAN: $bn"; fi
done
# 陳腐化検出(最終git commit 14日以上前)
for f in context/*.md; do
last=$(git log -1 --format="%at" -- "$f" 2>/dev/null)
now=$(date +%s)
if [ -n "$last" ] && [ $((now - last)) -gt 1209600 ]; then
echo "STALE(14d+): $(basename $f) — last: $(git log -1 --format='%ai' -- "$f")"
fi
done
# dialogue到達性(経験的知識がcontextから参照されていない)
for f in memory/dialogue_*.md memory/deepdive_*.md; do
bn=$(basename "$f" .md)
refs=$(grep -rl "$bn" context/*.md 2>/dev/null | wc -l)
if [ "$refs" -eq 0 ]; then echo "UNREACHABLE-DIALOGUE: $(basename $f)"; fi
done
重要: dialogue/deepdiveは経験的知識(過程が本体)。圧縮・吸収禁止。contextにはポインタのみ追加。 孤立・陳腐化・対話未到達 → Phase 5 で insight に登録:
bash scripts/insight_write.sh "DREAM-CONTEXT: orphan=${N}, stale=${M}, unreachable_dialogue=${K}" dream
2g. 三層記憶健全性チェック(三層貫通)
三層記憶(記憶DB+セマンティック+Obsidian)の各層が正しく接続されているか検証する。
# 第一層: 記憶DB(FTS5) — イベント数・raw_content充填率・概念紐付き率
bash scripts/memory_db_query.sh "SELECT COUNT(*) as total, SUM(CASE WHEN raw_content!='' THEN 1 ELSE 0 END) as with_raw FROM events"
bash scripts/memory_db_query.sh "SELECT COUNT(DISTINCT event_id) as linked FROM event_concepts"
# 第二層: セマンティックインデックス — 概念数・孤立概念
bash scripts/semantic_search.sh "--stats" 2>/dev/null || wc -l < docs/semantic-index/index.md
# 第三層: Obsidian — 昇格候補・昇格済み件数
bash scripts/memory_db_query.sh "SELECT state, COUNT(*) FROM events WHERE state IN ('obsidian_candidate','obsidian_promoted') GROUP BY state"
三層貫通チェック:
- 記憶DBのevent_concepts件数 > 0(第一層→第二層接続)
- セマンティック概念からcontext/*.mdへの参照が存在(第二層→知識層接続)
- obsidian_candidate > 0 かつ promote検討済み(第三層接続)
- 穴検出 →
DREAM-THREE-LAYER: {layer} 断絶 — {detail}をinsightに登録
Phase 3 — Consolidate (統合)
Phase 2 の発見事項をメモリに反映する。
3a. タイムスタンプ正規化 ★最重要
全エントリに ISO 8601 秒精度+TZ を付与する。
形式: [2026-03-27T01:30:00+09:00]
| 現状 | 変換ルール |
|---|---|
| タイムスタンプなし | [recorded: YYYY-MM-DDTHH:MM:SS+09:00] を付与(現在時刻) |
日付のみ 2026-03-25 |
[2026-03-25T00:00:00+09:00] (時刻不明はmidnight) |
| 相対日付 "yesterday" | セッションファイルのmtimeから絶対日付を算出 |
| 秒精度あり | そのまま維持。TZ未記載なら +09:00 を追加 |
二重タイムスタンプ(可能な場合):
event:— 事実がいつ起きたか(例: cmd_1082事故は2026-03-15)recorded:— いつ学んだか(例: 教訓登録は2026-03-16)- 両方わかる場合のみ付与。不明なら
recorded:のみ。
3b. 重複排除
- 新エントリ追加前に既存topic fileを検索
- 同一内容 → 既存エントリを更新(新規作成しない)
- 類似内容 → マージして1エントリに統合
- ソース帰属を保持:
(source: cmd_1413, 2026-03-27T01:30:00+09:00)
3c. 矛盾解消
優先順位(信頼度順):
- 殿の直接発言 — 最高信頼度
- 現物確認済み事実(コード読み、本番データ) — 高信頼度
- 忍者の報告 — 中信頼度
- 推論・想像 — 低信頼度
矛盾解消時: 旧エントリに [superseded: YYYY-MM-DDTHH:MM:SS+09:00, by: 新エントリの要約, reason: 理由] を付記。削除はしない。
3d. 層間整合チェック(三層記憶統合)
- MEMORY.md索引 ↔ memory/*.md実体 — 孤立ポインタを検出
- memory observations ↔ lessons.yaml — 矛盾があれば lessons を正とする(lessonsは家老がレビュー済み)
- memory内のファイル参照 ↔ 実ファイル — ドリフトを修正
- 記憶DB ↔ セマンティック: event_conceptsの概念がsemantic-map.mdに存在するか。孤立概念→セマンティック索引に追加
- セマンティック ↔ Obsidian: セマンティック概念のresourcesに[[リンク]]があるか。リンク切れ→修正または除去
- 記憶DB ↔ Obsidian: obsidian_candidateのeventがObsidian [[リンク]]で到達可能か。到達不能→promote検討
Phase 4 — Prune & Index (刈込)
MEMORY.md更新:
- 200行以内、~25KB以内を維持
- 1エントリ=1行、150文字以内:
- [Title](file.md) — one-line hook - MEMORY.mdにメモリ内容を直接書くな — 索引のみ
- 存在しないファイルへのポインタを削除
- 冗長なエントリ → 詳細をtopic fileに移動し、索引行を短縮
陳腐化マーク(削除ではなくマーク):
- 30日以上参照されていないエントリ:
[stale: YYYY-MM-DD, last_referenced: YYYY-MM-DD] - 矛盾解消で上書きされたエントリ:
[superseded]マーク済み(Phase 3c) - 削除はしない。マークのみ。復元可能性を維持。
- 30日以上参照されていないエントリ:
教訓Prune(参照ファイル存在検証): 各
projects/*/lessons*.yaml内の教訓エントリに含まれるtarget_path/source_file/enforcementフィールドのファイル参照が実在するかを検証する。# lessons*.yaml からファイルパス参照を抽出して存在確認 for f in projects/*/lessons*.yaml projects/infra/lessons_*.yaml; do [ -f "$f" ] || continue grep -oE '(target_path|source_file|enforcement):\s*\S+' "$f" | awk '{print $2}' | while read p; do p="${p//\"/}" # クォート除去 [ -z "$p" ] || [ "$p" = "null" ] && continue [ -f "$p" ] || echo "PRUNE-MISSING: $f → $p" done done見つかったMISSINGは
DREAM-PRUNE: {file} → {path} が存在しないとして insight に登録し、教訓エントリに[ref_missing: YYYY-MM-DD]を付記する(削除しない)。教訓矛盾検出: 同一 lesson ID が複数の lessons*.yaml に存在し、かつ
detailまたはtitleが実質矛盾している(「禁止」vs「必須」、正反対の数値等)場合を検出する。# 全lessonsファイルからIDを抽出して重複確認 grep -h "^ - id:" projects/*/lessons*.yaml projects/infra/lessons_*.yaml 2>/dev/null \ | sort | uniq -d | awk '{print $NF}'重複IDが見つかれば両エントリを読み比べ、矛盾があれば
DREAM-CONTRADICTION: {id} が {fileA} と {fileB} で矛盾として insight に登録。矛盾解消の優先順位はPhase 3cに従う。dream完了タイムスタンプ記録:
date -Iseconds > ~/.claude/skills/dream/.last-dream
Phase 5 — Immunize (免疫提案) ★Auto-dreamに存在しないフェーズ
Phase 2 の収集データを分析し、自動化ターゲット(gate/hook/lesson候補)を提案する。 メモリ整理で終わるな。防御層候補を出力せよ。
5a. Gate候補
karo_workaroundsの再発パターン(同カテゴリ3回以上):
GATE CANDIDATE: {category} — {N}回発生。
直近: {latest_cmd}。
提案: gate_{name}.sh で自動防止。
5b. Lesson候補
gate_fire_logの未カバーFAIL理由(lessons.yamlに対応教訓なし):
LESSON CANDIDATE: {fail_reason} — {N}回FAIL。
lessons.yamlに未登録。lesson_write.sh で登録推奨。
5c. メモリ品質メトリクス
DREAM METRICS:
timestamp_coverage: X% (秒精度+TZ)
staleness_rate: X% (30日以上未参照)
contradiction_count: N (未解決矛盾)
drift_count: N (現状と乖離)
memory_lines: L/200 (MEMORY.md)
reachability: X/Y active PJs fully reachable (2e)
journal_freshness: MEMORY.md Phase N = journal Phase M (2d)
context_orphans: N (他contextから参照なし) (2f)
context_stale: M (14日以上未更新) (2f)
dialogue_unreachable: K (contextから参照なし) (2f)
three_layer_db_events: N (記憶DBイベント総数) (2g)
three_layer_raw_content_rate: X% (raw_content充填率) (2g)
three_layer_concept_linked: N (概念紐付きイベント数) (2g)
three_layer_obsidian_candidates: N (昇格候補) (2g)
three_layer_断絶: N (層間接続切れ) (3d)
5d. 提案の永続化
# 各候補をinsightキューに登録
bash scripts/insight_write.sh "DREAM-GATE: {suggestion}" dream
bash scripts/insight_write.sh "DREAM-LESSON: {suggestion}" dream
insight_write.sh の現在仕様:
- 引数は
message [priority] [source]。priorityはhigh|medium|lowのみ、既定はmedium。source既定はmanual。 --resolve <id>で既存insightをstatus: doneにし、resolved_atを追記する。- queue/insights.yaml は全体YAML再書込みではなく、flock下で制御済み形状を行単位編集/追記する。
yaml.dumpは使わない。 - 通常追記はraw YAMLを保持したatomic replaceで行い、kill等で生じた不完全tail entryは隔離してから追記する。
- pending中の同一insight、または先頭50文字一致のinsightは重複登録せず
SKIP:<id>を返す。 修正済み/解消/登録済み/対処済みを含むmessageは登録時点でdone扱いにする。- 新規INSは
memory_db_live_insert_async.py優先で記憶DBへ非同期INSERTする。同期実行が必要な検証ではSHOGUN_MEMORY_DBを設定する。 - 同一
sourceのpending insightがINSIGHT_SOURCE_REPEAT_THRESHOLD(既定3)以上になると、bulletin_write.sh経由で将軍へaction_required掲示板通知する。掲示板失敗はinsight保存自体を失敗させない。 - INSIGHT_REPEAT通知は同一sourceに10分デバウンスを適用(massbatch時の掲示板洪水防止。2026-05-21 fix追加)。
- 2026-05-21 cmd_training_L7_v3_hanzo_6: dedup確認、pending source件数計算、YAML追記を単一Pythonプロセスへ統合し、保存経路は同じflock付き追記のまま高速化。
出力サマリ
Dream completed [ISO 8601 timestamp]
- Phase 1: N files, M lines, X% timestamp coverage
- Phase 2: N signals (YAML: A, JSONL: B, drift: C)
- Phase 3: N updated, M timestamps normalized, K contradictions resolved
- Phase 4: MEMORY.md L/200 lines, N stale marked
- Phase 5: N gate candidates, M lesson candidates → insights queue
Next dream eligible: [timestamp + 24h]
制約
- memory/ 以外のプロジェクトコードは読み取り専用
- 書き込み対象: memory/, MEMORY.md, ~/.claude/skills/dream/.last-dream, insights(スクリプト経由)
- メモリエントリを削除しない — [stale]/[superseded]マークのみ
- CLAUDE.md, instructions/, projects/, lessons.yaml は変更禁止(別パイプラインが管理)
- MCP Memory操作: read/open/searchは自由。add/deleteは確認済み修正のみ
Script refs verified: 2026-06-03 cmd_3144. insight_write.sh 直近変更(4dacb9c9)は運用ファイルauto-commit(mtimeのみ変化)。スクリプト本体の動作・インターフェース変更なし。SKILL.md記載の仕様(引数/priority/source/--resolve/dedup/source repeat通知)は現行と一致。
Script refs verified: 2026-06-10 karo. semantic_search.sh 直近変更(ffd1305de)はcache refresh内部実装のみ(cp生コピー→SQLite Backup API置換、malformed根治)。呼び出し契約(引数/--stats/出力形式)は変更なし。SKILL.md記載の使用方法は現行と一致。
- → [[gunshi_idle_dream_gate_analysis_20260507]] dreamゲート分析: Phase設計の品質検証