Memorizer: コンテキスト管理
ファイル操作はすべて {BASE_DIR}/scripts/ のスクリプトに集約されている。
スクリプトがコンテキストルートを ./memory/contexts/(CWD基準)に固定するので、手で .md を作成・移動しない。
処理の詳細は各スクリプトを参照。
設計原則
1トピック = 1つの具体的な問題・機能・目的。 最小単位で管理し、必要なものを組み合わせてロードする。
✗ auth ← 広すぎ
✓ auth-jwt-refresh ← リフレッシュトークン設計
✓ auth-session-storage ← セッション保存方式
{topic}.md の構成
LLM が内容を埋めるセクション。各セクション最大5項目。
---
topic: {topic}
updated: {date}
depends_on: # 省略可。depended で補足読みされる
- {topic-a}
goal_doc: # 省略可。このトピックの不変ゴール・計画書の絶対パス。load 時に無条件で Read する。
/absolute/path/to/plan.md
---
## 現在の状態 # 1〜3行。index の summary はここの最初の非空行
## 有効なルール・制約
## 決定事項
## 次のアクション
完結した決定・古い経緯は context-log に移す。ただし現在も有効なルール・制約はサマリーから消さない。
context-log に記録する基準
{topic}/context-log.md はプロジェクト内側にしか無い情報の記録(明示時のみ読む)。
- 記録する: 固有の制約/Xを除外した理由/試して失敗したこと/意思決定の背景/発見した仕様の特殊性/再発防止に要る過去の失敗と原因(=そのプロジェクト固有の事実に限る)。
- 記録しない: 公開ドキュメントの内容/一般的ベストプラクティス/再検索可能なエラー解決策/自分(Claude)の行動ルール・作業手順の再発防止で次回も機械的に効かせたいもの(context-log は明示ロード時しか読まれず強制力がない。これは
/persist-check経由で CLAUDE.md・hook・skill 更新へ落とす)。
コマンド
/memorizer(引数なし)— 初期化
memory/contexts/index.md を Read し、トピック一覧を表示する。無ければ「コンテキストなし」。
/memorizer new <topic>
bash {BASE_DIR}/scripts/new-context.sh <topic>
/memorizer save [topic]
topic未指定なら会話からトピック名を推定(英小文字・ハイフン区切り)。既存への追記か新規かを判断。- 現在の作業を
{topic}.mdの構成に沿って要約し一時ファイルに書く。有効なルール・制約は残し、再発防止に要るルールを削らない。bash {BASE_DIR}/scripts/save-context.sh <topic> <body_tmp> - context-log に該当する内容(記録基準参照)があれば一時ファイルに書いて追記。無ければスキップ。
bash {BASE_DIR}/scripts/append-log.sh <topic> <text_tmp>
/memorizer handoff <parent-topic> <child-topic>
- 既存の
parent-topicから次フェーズ用のchild-topicを新規作成する。bash {BASE_DIR}/scripts/handoff-context.sh <parent-topic> <child-topic> - 子トピック本文には、親の
## 決定事項と## 次のアクションをスナップショットとして写す。子が単体で継続できるようにし、親へのライブ参照には依存しない。 - 子トピックのフロントマターには
depends_on:で<parent-topic>を付ける。depends_on:は lazy なポインタで、/memorizer dependedの補足読み対象になる。依存先の退避はしない。
/memorizer load <topic...>
bash {BASE_DIR}/scripts/load-context.sh <topic...>
出力された通常のパスを Read する。depends_on は load では自動で読まない。
フロントマターに goal_doc: があれば、そのファイルを無条件で Read してゴールとして採用する。ゴールを固定した上で ## 決定事項・## 次のアクション を実行前提として採用し、その後に要約・一覧提示へ進む。
MISSING:<topic> は memory/contexts/archive/ を確認し、あれば復元をユーザーに確認のうえ戻して再ロード、無ければスキップを報告。
merged_from があるトピックは、列挙された旧トピックの {old}/context-log.md も context-log として扱う。
全トピックを3〜5行で要約し、ロードしたトピック一覧を表示する。
要約・一覧提示で止めない。 ## 決定事項・## 次のアクション・本文中の前提値(base ブランチ・命名/設計規約・実験の狙い等)を、以後の作業の「実行の前提」として採用する。以降そのセッションでは、context 内で答えが出る事項をユーザーへ聞き返さない(「どこを見るか」が context に書いてあるなら自分で特定する)。実環境(worktree 一覧・別の計画書など)と食い違う場合も、まず context 記載を正として突き合わせてから動き、食い違いの解消をユーザーへ丸投げしない。
ロードしたトピックの内容だけでは明らかに情報が不足している場合、/memorizer depended <topic> の実行をユーザーに推奨として提示する。
モデル判断で自発的に depended を実行して読むことは控えめにするが、必要な場合は許容する。
/memorizer depended [topic...]
topic 未指定なら、このセッションでロード済みのトピック名をすべて渡す。
bash {BASE_DIR}/scripts/depended-context.sh <topic...>
出力された通常のパスを補足情報として Read する。起点トピック自身は出力されず、depends_on を再帰的にたどった依存先だけが出力される。
MISSING:<topic> は load と同様に扱う。
/memorizer list
bash {BASE_DIR}/scripts/list-context.sh
出力された index.md(Markdownテーブル)をそのまま提示する。整形・要約しない。
/memorizer archive [days]
bash {BASE_DIR}/scripts/archive.sh [days]
退避結果(件数・トピック名)を報告する。
/memorizer compact
index.mdと全{topic}.mdを Read し、重複・類似するトピック群(マージグループ)を特定する。- 各グループの内容を統合した本文(フロントマターに
merged_from:で旧トピックを列挙)を一時ファイルに書いて新トピックを作成し、旧トピックにmerged_intoを付与する。bash {BASE_DIR}/scripts/save-context.sh <merged-topic> <body_tmp> bash {BASE_DIR}/scripts/mark-merged.sh <merged-topic> <old-topic...> - 統合グループ数と新トピック名を報告する。