Memory Engine は何をしますか?
手動メモリシステムのための拡張レイヤー。このスキルは既存の自動メモリ動作を置き換えるものではなく、その上に構造、予算認識、そしてセッション終了時のチェックポイントを追加します。
核となる哲学: 提案はするが、自動保存はしない。何を保持する価値があるかは人間が決定します。
メモリディレクトリ
すべてのメモリファイルは ~/.claude/projects/-Users-coni/memory/ に保存されます。
インデックスファイル: MEMORY.md(常に読み込まれ、純粋なポインタのみ、内容は含まれない)
フェーズ 1: メモリキャプチャ
メモリを保存するとき(トリガーがあなた自身であれセッションチェックポイントであれ)、毎回以下のフローに従ってください。
ステップ 1 — 分類
5つのタイプ。適切なものを選んでください:
| タイプ | キャプチャする内容 | シグナル |
|---|---|---|
user | アイデンティティ、好み、価値観、知識 | 「私は...」「私は...が好き」、性格の変化 |
feedback | ユーザーとの協業方法 — 訂正と確認の両方 | 「そうじゃなくて」「そう、それでいい」、アプローチの検証 |
project | アクティブな作業コンテキスト、締め切り、目標 | 「Xを木曜までにやる」、マイルストン達成 |
reference | 外部知識、ツール設定、ポインタ | 新しいツールを発見、APIを設定 |
decision | YではなくXを選んだ理由 | 「Xを選びYは選ばなかった」、トレードオフの比較、アーキテクチャ上の判断 |
decision タイプの場合: references/decision-type-spec.md を読み、フロントマタースキーマと本文構造(コンテキスト → オプション → 決定 → いつ再検討すべきか)を確認してください。
ステップ 2 — 重複排除
書き込む前に、MEMORY.mdインデックスをスキャンして重複エントリがないか確認:
- 同じトピックがすでにカバーされているか? → 新しいファイルを作成せず、既存のファイルを更新
- CLAUDE.mdのルールと重複しているか? → 保存しない(ルールが優先される)
- 一時的なタスクの詳細か? → 保存しない(git log / コードが信頼できる情報源)
feedback-memory-hygiene.md のすべてのルールを適用 — これらは引き続き権威があります。
ステップ 3 — トークンコストの見積もり
計算: file_bytes / 3.2(整数、切り捨て)。これにより、外部依存関係なしでCJK/英語混在コンテンツに対して妥当な近似値が得られます。
ステップ 4 — 書き込み
- YAMLフロントマター(name、description、type)でメモリファイルを作成
- MEMORY.mdインデックスを更新 — 正しいセクション見出しの下にエントリを追加
- トークン見積もりを追加: インデックス行の末尾に
`~NNNNtk`
インデックス行の例:
- [decision-deploy-cloudflare.md](decision-deploy-cloudflare.md) — 国内デプロイはVercelではなくCF Pagesを選択 `~280tk`
保存してはならないもの
これらのルールは交渉不可です(メモリ衛生 + 自動メモリシステムより):
- コードパターン、アーキテクチャ、ファイルパス — コードから導出可能
- Git履歴、最近の変更 —
git logが信頼できる情報源 - デバッグ解決策 — 修正はコード内にある
- CLAUDE.md または
~/cc-personal/rules/にすでにあるもの - 一時的なタスク状態 — 現在のセッションでのみ有用
- プロジェクトステータスのスナップショット — コードとgitから読む
フェーズ 2: メモリメンテナンス
/memory-check
監査スクリプトを実行し、結果を表示:
bash ~/.claude/skills/memory-engine/scripts/memory-health-check.sh
スクリプトは構造化レポートを出力します:
- 予算: 総トークン vs 40,000tk上限(200Kコンテキストの20%)
- タイプ分布: タイプごとのカウントとトークン
- サイズ上位5: 最も多くの予算を消費している大きなファイル
- 問題: 古いファイル(>30日)、孤立ファイル、壊れたリンク、空のタイプ、予算警告
レポートを提示した後、見つかった各問題に対して具体的なアクションを提案:
| 問題 | アクション |
|---|---|
| STALE | 「確認またはアーカイブ: {file} — まだ関連性がありますか?」 |
| ORPHAN | 「MEMORY.mdインデックスに追加、または不要であれば削除」 |
| BROKEN LINK | 「MEMORY.mdから削除、またはファイルを再作成」 |
| NO ENTRIES | 情報提供 — すべてのタイプが常にエントリを必要とするわけではありません |
| BUDGET WARNING | 「最大のファイル: ... — 圧縮または分割を検討」 |
問題を解決した後、MEMORY.mdの予算コメントを更新:
<!-- budget: ~NNNNtk / 40000tk (NN%) | updated: YYYY-MM-DD -->
トークン注釈フォーマット
すべてのMEMORY.mdインデックスエントリにはトークン見積もりのサフィックスが付いています:
- [filename.md](filename.md) — 説明 `~NNNNtk`
予算コメントはMEMORY.mdの最上部(見出しの前)にあります。 これはHTMLコメントです — レンダリングされたマークダウンでは不可視ですが、スクリプトで解析可能です。
フェーズ 3: 7次元統合チェックポイント
トリガー(二重保障)
主力トリガー — Promptベース(CLAUDE.mdルール): 会話中に以下のシグナルを感知した場合、積極的に7次元スキャンを実行:
- ツール呼び出しが密集(>15回のツール呼び出し)
- 実質的な成果物(コード、分析、提案)を完了
- 話題が大きく切り替わった
- ユーザーが明示的に「まとめて」「振り返って」「総括して」と言った
セーフティネットトリガー — Stopフック(settings.json):
consolidation-trigger.sh がagent stopのたびに実行され、停止回数と時間間隔を追跡します。
停止回数が ≥ 20 かつ前回のトリガーから ≥ 30 分経過した場合、7次元スキャンプロンプトを出力します。
状態ファイル: ~/.claude/projects/-Users-coni/memory/.consolidate-state
7次元スキャン
現在の会話を1次元ずつスキャンし、ヒットするか判断:
| # | 次元 | ヒットシグナル | 対応する記憶タイプ |
|---|---|---|---|
| 1 | タスク完了 | 完全なタスクが依頼から納品まで完了 | project (マイルストン) |
| 2 | CLAUDE.mdの更新 | 新しい汎用動作ルールを発見 | 直接CLAUDE.mdに書き込み |
| 3 | ルールの蓄積 | ドメイン/ツール/ファイルタイプ関連のルールを発見 | ~/cc-personal/rules/ に書き込み |
| 4 | アーキテクチャ上の決定 | ツール選定、技術方式、デプロイ戦略など、自明でない選択を実行 | decision |
| 5 | プロジェクトマイルストン | プロジェクトステータスが実質的に前進(リリース、公開、主要機能完了) | project |
| 6 | 協業のキャリブレーション | ユーザーがやり方を訂正、または自明でないやり方を確認 | feedback |
| 7 | 高価値分析 | セッションをまたいで再利用可能な分析フレームワーク、洞察、モデルを生成 | reference または user |
実行フロー
7次元をスキャン → ヒット数をカウント
ヒット 0-1 → スキップ(何もしない)
ヒット 2以上 → チェックポイント提案を出力
ルール
- 「保存してはならないもの」リストを厳格に適用 — チェックポイント時も例外なし
- 提案前に既存のMEMORY.mdエントリを確認 — 重複禁止
- チェックポイントごとに最大3候補 — 質より量
- 該当するものがなければ何も出力しない(サイレントスキップ、強制提案なし)
- チェックポイント中にファイルを書き込まない — 承認のために候補を提示するのみ
- 各候補にはヒットした次元番号を必ず付記
出力フォーマット
[定着チェック] 今回の会話は 3/7 次元にヒット(④⑥⑦)、定着を提案:
1. [decision] ④ Stopフック + prompt の二重トリガー方式を選択、純粋なフックではない — フックは会話のセマンティクスを認識できない
2. [feedback] ⑥ ユーザー確認: フライホイールの中核は自動トリガーであって記憶分類ではない
3. [reference] ⑦ 主体の生命力フレームワーク: 人/会社/AI の3主体における時間とエネルギーの配分モデル
どれを保存しますか?番号で返信(例: 1,2)、または "skip" でスキップ。
ユーザーが番号を確認したら、選択された各アイテムに対してフェーズ1の保存フローを実行します。 ユーザーが "skip" または同等のことを言った場合、何もしません。
注意点
- 保存のたびにMEMORY.mdの予算コメントを更新しない — /memory-check のときのみ。 頻繁な更新はキャッシュを壊し、git差分にノイズを追加します。
- トークン見積もりは近似値です — 正確なものとして扱わないでください。/3.2 方式は 混在CJK/ENコンテンツに対して約90%の精度があり、予算認識には十分です。
- decisionタイプは重要な選択のために — 「vimの代わりにnanoを使った」は保存する価値のある 決定ではありません。将来のセッションに影響を与える選択のために予約してください。
- Stopフックはセーフティネットであり主力ではない — ユーザーがCtrl+Cで終了した場合、 フックはトリガーされません。能動的なスキャンがフライホイールのエンジンです。
- 能動的なスキャンでユーザーのフローを妨げない — タスクの合間(段階完了時、話題切り替え時)に トリガーし、実行途中に割り込まないでください。