executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
prune-agent-memory保存されたメモリを監査、分類し、選択的に忘却します。タイプ/年齢/アクセス頻度 によるメモリの列挙と分類、古い参照に対する陳腐化検出、外部アンカーを使用した フィデリティチェック、選択的削除のデシジョンツリー、削除しなければ再導出 されてしまう失敗戦略に対するカウンターメモリ・イノキュレーション、永続メモリ にすべきでないものに対する予防フィルタリングルール、および忘却自体がレビュー 可能な監査証跡をカバーします。メモリが大きくキュレーションされていない場合、 プロジェクトの状態がメモリの書き込み以来大幅に変化した場合、検索品質が低下 した場合、または manage-memory と一緒に定期的なメンテナンスとして使用します。
Independent GitHub snapshot · Automated classification · Original documentation governs
保存されたメモリを監査、分類し、選択的に忘却します。メモリはインフラストラクチャです。忘却はポリシーです。このスキルはそのポリシーを定義します。
manage-memory がメモリの整理と成長(何を保持するか、どのように構造化するか)に焦点を当てているのに対し、このスキルはその逆に焦点を当てています:何を破棄するか、劣化を検出する方法、忘却が偶発的ではなく意図的であることを保証する方法。2つのスキルは相補的であり、定期的なメンテナンス中に一緒に使用する必要があります。
~/.claude/projects/<project-path>/memory/)すべてのメモリファイルを読み、各エントリを4つの次元で分類します。
# Inventory the memory directory
ls -la <memory-dir>/
wc -l <memory-dir>/*.md
# Count total entries (approximate by counting top-level bullets and headers)
grep -c "^- \|^## " <memory-dir>/MEMORY.md
for f in <memory-dir>/*.md; do echo "$f: $(grep -c '^- \|^## ' "$f") entries"; done
各メモリエントリを以下のタイプのいずれかに分類します:
| タイプ | 説明 | 例 | デフォルト保持 |
|---|---|---|---|
| Project | プロジェクト構造、アーキテクチャ、規約に関する事実 | 「skills/ には55のドメインにわたって310のSKILL.mdファイルがある」 | 陳腐化が確認されるまで保持 |
| Decision | 行われた選択とその根拠 | 「レビューチームにsequentialよりhub-and-spokeを選んだ理由は...」 | 無期限保持 |
| Pattern | デバッグソリューション、ワークフローの洞察、繰り返し発生する動作 | 「Exit code 5はクォートエラーを意味する — 一時ファイルを使用する」 | 置き換えられるまで保持 |
| Reference | リンク、バージョン番号、外部リソース | 「mcp-toolsのドキュメント: https://...」 | 陳腐化が確認されるまで保持 |
| Feedback | ユーザーの好み、修正、スタイルガイダンス | 「ユーザーはファイル名にケバブケースを好む」 | 無期限保持 |
| Ephemeral | 永続メモリに漏れたセッション固有のコンテキスト | 「現在、issue #42に取り組んでいる」 | 即座にプルーニング |
各エントリについて、以下も記録します:
期待結果: タイプ、年齢、アクセス頻度の推定で分類されたすべてのメモリエントリの完全なインベントリ。エフェメラルエントリはすでに即座の削除のためにフラグが立てられている。
失敗時: メモリファイルが大きすぎるかエントリごとに分類するには構造化されていない場合は、セクションレベルで作業します。個々の箇条書きではなく、セクション全体を分類します。目標はカバレッジであり、粒度ではありません。
メモリの主張を現在のプロジェクト状態と比較します。陳腐化はメモリ劣化の最も一般的な形式です。
これらの陳腐化パターンを確認します:
# Spot-check counts against source of truth
grep -oP '\d+ skills' <memory-dir>/MEMORY.md
grep -c "^ - id:" skills/_registry.yml
# Check for references to files that no longer exist
grep -oP '`[^`]+\.(md|yml|R|js|ts)`' <memory-dir>/MEMORY.md | sort -u | while read f; do
path="${f//\`/}"
[ ! -f "$path" ] && echo "STALE: $path referenced but not found"
done
# Check for references to old names/paths
grep -i "old-name\|previous-name\|renamed-from" <memory-dir>/*.md
各陳腐化エントリを陳腐化のタイプと現在の正しい値でマークします。
期待結果: 何が変わったかの具体的な証拠を持つ陳腐化エントリのリスト。各陳腐化エントリに推奨アクション: 更新(正しい値がわかっている場合)、確認(不確実な場合)、またはプルーニング(エントリ全体が廃止されている場合)。
失敗時: 外部状態(API、サードパーティのドキュメント、デプロイメントステータス)を参照しているため主張を確認できない場合は、正しいと仮定するのではなく unverifiable とマークします。確認不能なエントリは、積極的に役立っていなければプルーニングの候補です。
メモリが検索されたときに有用なコンテキストを生成するかどうかをテストします。エージェントは自分自身の圧縮されたメモリが忠実であるかどうかを確認することができないため、これが最も難しいステップです — 外部アンカーが必要です。
フィデリティチェックの方法:
ラウンドトリップ検証: メモリエントリを読み、それが説明する実際のプロジェクト状態を確認します。メモリは正しいファイル、正しいパターン、正しい結論に導いていますか?
圧縮損失の検出: メモリのサマリーを元のソース資料と比較します。50行の議論が2行のメモリに圧縮されたとき、圧縮は実行可能な洞察を保存しましたか、それともトピックラベルだけですか?
# Find the source that a memory entry was derived from
# (git log, old PRs, original files)
git log --oneline --all --grep="<keyword from memory entry>" | head -5
矛盾スキャン: 互いに矛盾するメモリ、またはCLAUDE.md/プロジェクトドキュメントと矛盾するメモリを検索します。
# Look for potential contradictions in counts
grep -n "total" <memory-dir>/MEMORY.md
grep -n "total" CLAUDE.md
# Compare the values — they should agree
ユーティリティテスト: 各メモリエントリについて、「このエントリが削除されたとしたら、次の5セッションで何か問題が起こるか?」と尋ねます。答えが「おそらくない」であれば、エントリは精度に関係なく低フィデリティ値です。
期待結果: 各メモリエントリに今やフィデリティ評価がある: high(検証済みで正確かつ有用)、medium(おそらく正確で時々有用)、low(未確認または稀にしか有用でない)、または failed(検証済みで不正確または矛盾している)。
失敗時: 多くのエントリについてフィデリティチェックが決定的でない場合は、最も高いポテンシャル影響のあるエントリに焦点を当てます。プロジェクトアーキテクチャに関する誤ったメモリは、デバッグトリックに関する誤ったメモリより危険です。詳細レベルよりもスケルトンレベルの事実を優先して確認します。
優先順位順に何をプルーニングするかを決定するためにこのデシジョンツリーを使用します:
プルーニングデシジョンツリー(順番に適用):
1. EPHEMERALエントリ(ステップ1の分類)
→ 即座に削除。これらは永続化されるべきではなかった。
2. FAILEDフィデリティエントリ(ステップ3)
→ 即座に削除。不正確なメモリはメモリがないよりも悪い。
3. DUPLICATES
→ 最も完全/正確なバージョンを保持し、他を削除。
→ MEMORY.mdとトピックファイルにまたがる重複がある場合は、トピックファイルのバージョンを保持。
4. 既知の修正を持つSTALEエントリ(ステップ2)
→ エントリが他の点では有用な場合はUPDATE(陳腐化した値を現在のものに変更)。
→ エントリ全体が廃止された場合はDELETE(トピックはもはや重要でない)。
5. 低フィデリティ、低アクセス頻度エントリ
→ 削除。これらはスペースを取っているが価値を提供していない。
6. 完了/クローズした作業についてのMEDIUMフィデリティエントリ
→ アーカイブまたは削除。過去のスプリントの詳細、解決されたインシデント、マージされたPR。
→ 例外: 解決に再利用可能なパターンが含まれている場合は保持。
7. 自由に入手可能なソースを持つREFERENCEエントリ
→ Googleで検索できれば削除。
→ 見つけにくいか、プロジェクト固有のコンテキストがある場合は保持。
各削除について、エントリ、その分類、および削除の理由を記録します(ステップ7で使用)。
このツリーから DELETE アクションを適用する前に、エントリがイノキュレーション(ステップ5)に値するかどうかを確認します。失敗した戦略、放棄されたアプローチ、危険なパターンは、削除のみではなく削除+イノキュレートの候補です。
期待結果: 削除、更新、保持するエントリの明確なリスト — それぞれに文書化された理由がある。保持/削除の比率はメモリの健全性に依存する。維持されているメモリは5〜10%をプルーニングするかもしれず、放置されたものは30〜50%をプルーニングするかもしれない。
失敗時: デシジョンツリーが多くのエントリについて曖昧な結果を生み出す場合は、より厳しいフィルターを適用します: 「今知っていることを知っていたとしたら、このエントリを今日書くか?」そうでなければ、削除の候補です。プルーニングに傾けます — 間違ったメモリに対処するより事実を再学習する方が簡単です。
放棄された結論の中には、安全に削除できないものがあります。メモリを生成する条件が依然として存在する場合、削除のみでは失敗します — システムは同じ入力から同じ推論経路を辿って削除されたメモリを再構築してしまいます。これらのケースでは、削除と並行して(または削除の代わりに)再導出を防ぐカウンターメモリを書きます。
判断ルール — 削除のみ vs 削除+イノキュレート vs イノキュレートのみ:
| メモリのカテゴリ | アクション | 理由 |
|---|---|---|
| 陳腐化した事実、古いポインタ、期限切れのコンテキスト | 削除のみ | 検索のクリーンアップ;再生成されても行動上のリスクはない |
| 失敗した戦略、危険なパターン、トリガーが持続する放棄されたアプローチ | 削除+イノキュレート | そうしなければ推論経路が結論を再生成してしまう |
| 後に覆されたが元の根拠が重要な決定 | イノキュレートのみ | 元のエントリを保持し、それを指す SUPERSEDED カウンターメモリを追加する |
SUPERSEDED レコード形式(auto-memory のフロントマター;他のメモリシステムには構造を適応させる):
---
name: superseded-<short-id>
description: Counter-memory preventing re-derivation of <pattern>
type: superseded
---
SUPERSEDED <YYYY-MM-DD>
Pattern: <what was tried — describe the conclusion or strategy>
Period: <start> to <end>
Evidence: <what happened — concrete data, not narrative>
Abandonment reason: <specific cause; not "did not work">
Do not re-derive from: <signal types or input patterns that previously led here>
Supersedes: <path to original memory if delete + inoculate, or N/A>
SUPERSEDED レコードはメモリディレクトリ内に独自のファイル(例:superseded_strategy_X.md)として配置し、アクティブなメモリと並んで検索結果に表示されるようにします。カウンターメモリが実行される変更メカニズムになります:類似のシグナルが到着すると、SUPERSEDED レコードが浮上し、再生成経路をブロックします。
イノキュレートしない場合:
イノキュレーションの衛生:
Pattern と Do not re-derive from を具体的に保ちます。曖昧なカウンターメモリ(「複雑な解決策を試さない」)はノイズです。期待結果: ステップ4の削除候補のうち、放棄された戦略や危険なパターンに関わるすべてに対して、対応する SUPERSEDED カウンターメモリファイルが元のエントリの削除前に作成されている。プルーニングログには削除とイノキュレーションの両方が記録されている。アクティブなメモリは無駄なくスリムなまま、再生成経路はブロックされている。
失敗時: エントリがイノキュレーションに値するかどうか不明な場合は、デフォルトでイノキュレートします。冗長な SUPERSEDED レコードのコストは小さいですが、再生成された悪いパターンのコストははるかに大きいです。SUPERSEDED リスト自体がノイズになるほど大きくなる場合、それは繰り返される放棄を生み出している上流の条件を調査する合図です — 修正はメモリ層ではなく入力層にあります。
将来のメモリ汚染を防ぐために「保存しないもの」のルールを定義します。書き込み時にフィルタリングされるべきだったパターンについて既存のメモリを確認します。
永続メモリになるべきでないパターン:
| パターン | なぜ | 例 |
|---|---|---|
| セッション固有のタスク状態 | 次のセッションまでに陳腐化 | 「現在、issue #42をデバッグしている」 |
| 中間的な推論 | 結論ではない | 「アプローチAを試したが、...のために機能しなかった」 |
| デバッグ出力/スタックトレース | エフェメラルな診断データ | 「エラーは: 234行目のTypeError...」 |
| 正確なコマンドシーケンス | 脆弱で、バージョン依存 | 「npm install foo@3.2.1 && ... を実行する」 |
| 感情的/トーン的なノート | アクション可能でない | 「ユーザーはイライラしているようだった」 |
| CLAUDE.mdの複製 | すでにシステムプロンプトにある | 「プロジェクトは依存関係にrenvを使用している」 |
| 未確認の単一の観察 | 誤っている可能性がある | 「APIレート制限は100/分だと思う」 |
これらのパターンのいずれかが既存のメモリに見つかった場合は、ステップ4の削除リストに追加します。
将来のセッションが新しいメモリを書く前に参照できるように、MEMORY.mdまたは retention-policy.md トピックファイルにフィルタールールを文書化します。
期待結果: メモリディレクトリに文書化された予防フィルタールールのセット。これらのパターンに一致する既存エントリは削除フラグが立てられる。
失敗時: フィルタールールの文書化が時期尚早に感じられる場合(メモリが小さく、汚染が最小限)、文書化をスキップしますが、既存の違反を見つけるためにフィルターを適用します。ルールはメモリディレクトリが成熟したときに後で形式化できます。
忘却自体がレビュー可能になるように、すべての削除をログに記録します。プルーニングログを作成または更新します。
<!-- In <memory-dir>/pruning-log.md or appended to MEMORY.md -->
## Pruning Log
### YYYY-MM-DD Audit
- **Entries audited**: N
- **Entries pruned**: M (X%)
- **Entries updated**: K
- **Staleness found**: [list of stale patterns detected]
- **Fidelity failures**: [list of entries that failed verification]
#### Deletions
| Entry (summary) | Type | Reason |
|-----------------|------|--------|
| "Currently working on issue #42" | Ephemeral | Session-specific, stale |
| "skills/ has 280 SKILL.md files" | Project | Count drift: actual is 310 |
| "Use acquaint::mcp_session()" | Pattern | Package renamed to mcptools |
プルーニングログを簡潔に保ちます。それは説明責任のために存在し、考古学のためではありません。ログ自体が大きくなった場合は、古いエントリを要約します: 「2025: 3回の監査、合計47エントリがプルーニングされた(主にカウントのドリフトとエフェメラルの漏れ)。」
期待結果: 何が削除されたかとその理由を文書化したタイムスタンプ付きのプルーニングログエントリ。ログはメモリ自体と一緒にメモリディレクトリに保存される。
失敗時: 別のログファイルを作成することが過剰に感じられる場合(1〜2エントリのみがプルーニングされた)、代わりにMEMORY.mdに簡単なノートを追加します: <!-- Last pruned: YYYY-MM-DD, removed 2 stale entries -->。どんな記録も黙って削除するよりは良い。
特定のメモリエントリは、年齢、アクセス頻度、またはフィデリティスコアに関係なく、プルーニングから免除されるべきです。これらは、失われた場合に再構築するのに多大な労力を必要とする代替不能なコンテキストを表しています。
保護されたメモリの基準:
| カテゴリ | 例 | なぜ保護されるか |
|---|---|---|
| アーキテクチャの決定 | 「ネストではなくフラットなスキルディレクトリを選んだ」 | 根拠は後で再導出された場合に失われる |
| ユーザーアイデンティティの好み | 「常にケバブケースを使用する」、「自動コミットしない」 | 明示的なユーザーの意図、推測できない |
| セキュリティ監査の結果 | 「最後の監査: 2025-12-13 — PASSED」 | タイムスタンプ付きのコンプライアンス証拠 |
| リネーム/マイグレーションの記録 | 「リポジトリはX日Y日にYにリネームされた」 | クロスリファレンスの整合性はこれに依存する |
指定方法: 保護されたエントリを <!-- PROTECTED --> インラインでマークするか、プルーニングログに protected リストを維持します。ステップ4のデシジョンツリーは削除ルールを適用する前に保護状態を確認する必要があります。
保護の解除: 保護されたエントリをプルーニングするには、最初に指定を明示的に削除し、プルーニングログに理由を文書化します。この2ステッププロセスにより、高価値なメモリの偶発的な削除を防ぎます。
期待結果: 保護されたエントリはすべてのプルーニングパスを生き残る。プルーニングログは保護の追加または削除を記録する。
失敗時: 保護されたセットが大きくなりすぎる場合(総エントリの30%以上)、基準を見直します — 保護は「重要な」エントリのためではなく、代替不能なコンテキストのためです。重要だが再構築可能な事実は通常のプルーニング対象のままにしておくべきです。
削除後、残りのメモリは断片化している可能性があります — クロスリファレンスが削除されたエントリを指し、トピックファイルが一貫性を失い、MEMORY.mdにギャップが生じる可能性があります。再合成は構造的な整合性を回復します。
再合成チェックリスト:
期待結果: プルーニング後のメモリは構造的に健全 — 孤立した参照なし、冗長な断片なし、一貫性のないトピックファイルなし。コールドエントリは将来のプルーニング決定のために分類されている。
失敗時: 再合成によってプルーニングが積極的すぎた(重要なコンテキストが失われた)ことが明らかになった場合は、プルーニングログを確認し、監査証跡から再構築します。これが監査証跡が存在する理由です。
メモリドリフトは、保存された事実が黙って誤りになるときに発生します — 常に誤っていたからではなく、根底にある現実が変化したのにメモリが更新されなかったからです。ドリフトの回復は、プルーニングする代わりにインプレースでメモリを修正しようとします。
ドリフト検出のトリガー:
回復プロシージャ:
[corrected YYYY-MM-DD] アノテーションを付けて現在の値でインプレースでメモリエントリを更新するunverifiable とマークし、プルーニングのためにフラグを立てる期待結果: ドリフトしたメモリは可能な場合はインプレースで修正され、コンテキストが保存される。修正できないエントリはプルーニングのためにフラグが立てられる。予防ルールにより将来のドリフトが減少する。
失敗時: ドリフトが広範囲にわたる場合(エントリの20%以上)、メモリは段階的な修正ではなく完全な再構築が必要かもしれません。その場合は、現在のメモリディレクトリをアーカイブし、最初から始め、検証を通過したエントリのみを選択的に再インポートします。
manage-memory — メモリを整理して成長させるための補完スキル。完全なメモリメンテナンスのために一緒に使用するmeditate — どのメモリがノイズを作り出しているかを明らかにするかもしれないクリアリングとグラウンディングrest — 時には最良のメモリメンテナンスはメモリメンテナンスをしないことassess-context — 推論コンテキストの健全性の評価。メモリの品質が直接影響する