memory-gardener について
現在の環境で利用できる機能に応じて、エージェントの永続メモリを定期的に整備するストレージ非依存のスキルです。予算内で再開可能な処理を行い、不確かな破壊的変更は提案に留め、毎回監査レポートを作成します。
主な機能
- 01利用可能なメモリストア機能の検出
- 02重複の発見と古い項目の処理
- 03長い記録の分割と孤立ノードの再接続
- 04置き換えられた事実の記録と変更の要約
- 05操作予算の設定と監査レポートの作成
活用シーン
- 01エージェントメモリの定期メンテナンス
- 02適用前のマージや削除案の確認
- 03メモリグラフの整理と最新状態の維持
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ thorinside/ skills --skill memory-gardenerインストール後、Claude Code で/memory-gardenerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
prompts/bloat-scan.mdbloat-split.mddedup-cluster.mddedup-confirmed.mddedup-validate.mdREADME.md詳細
メモリーガーデナー
永続的なエージェントメモリーは、放置すると劣化します。重複が蓄積し、事実は気付かれないまま古くなり、個々の項目はがらくた置き場のように膨れ上がり、グラフのノードは孤立し、要約されることもありません。ほとんどのメモリーシステムには、衛生管理のための基本機能(重複チェック、無効化、再リンク)が用意されていますが、それらを実行する仕組みはありません。
このスキルはガーデナーです。現在の環境で利用できるメモリーストアを対象に、予算を設けた冪等な作業を定期的に実行します。意図的にストレージに依存しない設計です。各実行の開始時にツールの機能を確認し、存在するものを手入れし、存在しないものはスキップして、すべてを報告します。リスクの高い呼び出しに使う判断プロンプトはprompts/にあり、Jeremy Scherer(MIT)がEIで実施してきた、実績のある夜間作業を引き継いでいます。
基本ルール — 安全性の取り決め
これらのルールは、このドキュメントのほかの内容よりも優先されます。
- 変更モード。 デフォルトは手入れして提案です。削除や確信の持てないマージは、実行せずレポートで提案します。オペレーターの実行指示で自律モードが明示的に許可されている場合は、明確なケースの削除やマージを直接実行します。これは上流のEIが独自に行っている作業に沿ったものであり、プロンプトの慎重な方針(コアの意味が85%以上一致する場合のみマージし、デフォルトでは両方を残す)が重要な安全策となります。どちらのモードでも、ストアで使い分けられる場合は削除より無効化/アーカイブ/期限切れを優先します。また、プロンプトで確信が持てないとされたものは決して実行しません。手入れして提案モードでは提案し、自律モードでは注記を付けて保留します。
- 実行ごとに予算を設けます。 デフォルトは、実行ごとに変更25件、判断比較50件です。予算を使い切ったら、フェーズの途中でも停止し、レポートに再開地点を記録して、次回の実行で続行します。古いもの、または状態の悪いものから処理すれば、自然に再開できます。
- 冪等性を保ちます。 問題なく完了した直後に再実行しても、処理が必要なものはほとんど見つからないはずです。2回目の実行でも同じ「問題」が見つかる場合は、修正方法が誤っています。停止して提案に切り替えてください。
- まずスナップショットを作成します。 環境にバックアップ機能がある場合、手入れして提案モードでは初回実行の前に、自律モードでは毎回の実行前にバックアップします。これは無人で整理を行った場合に元へ戻すための手段です。
- 機能がない場合は、そのフェーズをスキップして記録します。 存在しない基本機能を、破壊的な回避策で代用してはいけません(例:更新を装うために削除してから再作成する)。
フェーズ 0 — 調査
ツール名を決めつけないでください。環境によって異なります。利用可能なツールをスキャンし、機能に対応付けます。
| 機能 | 次のようなツールを探します… |
|---|---|
| メモリ検索 | 類似度、テキスト、タグによって保存済みメモリを検索または一覧表示する |
| メモリの変更 | メモリを作成/更新する(削除できる場合もありますが、呼び出しません) |
| 重複チェック | テキストを指定すると、類似重複を返す。または、スコア付き類似度検索で代用する |
| ナレッジグラフ | 事実の追加/検索、リンクや事実の廃止/無効化、タイムラインや履歴の表示を行う |
| グラフ構造 | コンテナ(コレクション、ルーム、引き出し)、リンク/エッジの一覧表示、たどる、再接続する |
| 日記/ジャーナル | 日付付きの自由記述エントリーを追記する |
| 統計 | アイテム数、グラフ統計などを取得する — 変更前と変更後に取得します |
| バックアップ | ストアのスナップショットを作成する |
| アーティファクト/レポートの保存 | テキスト文書を永続化する |
どのストアが存在するかを記録します。多くの環境では、高速なベクトルストアと構造化ナレッジグラフの 2 層構成を採用しています。両方を管理してください。ベースライン統計を取得します。「いつから」を確認するために、前回の整理レポートや日記エントリーを探し、その時点から現在までの期間を整理します。初回実行の場合は、全履歴ではなく、直近約 200 件に対象を絞ります。
環境にツールのマッピング検索機能がある場合、機能が欠けていると判断する前に、実際の変更操作を検索して確認してください。「ナレッジの関連性を無効化」「ナレッジリンクを削除」「メモリをアーカイブ」などの意図で検索し、返されたスキーマを確認して、マッピングされたツールを直接呼び出します。ツール名が文字どおり invalidate である必要はありません。多くのシステムでは、プロバイダーに依存しないリンクリソースへの削除/廃止操作として、グラフの無効化が公開されています。環境がそれらの生のツールのみを明示的に公開している場合を除き、バックエンドプロバイダーのツール名は実装上の詳細として扱ってください。
フェーズ 1 — 重複排除
まず、未完了の処理を済ませます。前回のレポートに、実行可能な未処理の Proposed 項目がある場合は、prompts/dedup-confirmed.md を使って、今すぐマージを実行します。tend-and-propose モードでは人間が承認した項目、自律モードでは単に未処理の項目が対象です。次に、それらのレポートを実行済みとしてマークし、二度と実行されないようにします。
次に、前回の実行以降に追加または更新された項目について、重複チェック機能(または類似度検索)を使って類似重複を探します。類似度が 0.90 以上のものを候補とし、同梱の手順プロンプトに従って判断します。
- 候補が 2 件以上のクラスター →
prompts/dedup-cluster.md— キュレーター:コアの意味が 85%以上重なるものをマージします。最優先の指針はデータを一切失わないことです。 - レコードが 2 件ちょうどで、新しいレコードと既存レコードの場合 →
prompts/dedup-validate.md— ゲート:デフォルトでは両方を保持します(「誤ったマージは情報を永久に破壊しますが、誤って両方を保持しても問題ありません」)。
各プロンプトの update 出力を適用します。remove 出力は変更モードに従います。tend-and-propose では、レポートの Proposed キューに追加します。自律モードでは実行し(完全削除よりもアーカイブ/無効化を優先)、各削除をレポートに記録します(prompts/README.md を参照)。マージルールの早見表:強度/信頼度/露出度のようなフィールドには HIGHER、感情のようなフィールドには AVERAGE、説明に含まれる固有の詳細は統合します。
フェーズ 2 — 減衰
古い項目とは、30 日間、言及も取得も更新もされていない項目を指します(ストアの運用ペースに合わせて調整してください)。古い項目は、重要度/優先度/露出度を 1 段階下げます。ただし、最低値を下回らないようにします。ストアが有効期限に対応している場合、削除を提案する代わりに、重要度の低い項目に有効期限を設定します。ストアがピン留め済み、重要、または保護対象としている項目は、決して減衰させないでください。
フェーズ 3 — 肥大化を分割する
テキストが約750文字を超える項目は、通常、1つの ID に複数の事実が詰め込まれています。まずは最も問題の大きいものから、1回の実行につき最大5件を分割します。
- 個別の事実を抽出し、焦点を絞った新しい項目にします。
- ストアで利用できる方法(エッジ、トンネル、タグ、メタデータ内の
parent:参照など)で、子項目を親項目にリンクします。 - 親項目を書き直し、実際の要点だけを残します。
EI と同様に、付属のプロンプトを使って2段階で実行します。
prompts/bloat-scan.md で埋もれた題材を検索フレーズとして抽出します(スキャンでは何も変更しません。人物に関するレコードには、コーヒーショップテストを適用します。半年後に偶然会ったときでも、この詳細は重要でしょうか?)。各フレーズでストアを検索してから、
prompts/bloat-split.md で元の項目を簡潔にし、内容を一致するレコードまたは新しいレコードに再配分します。
これは最もコストのかかるフェーズです。より良い分割を少数行うだけでも、常に問題ありません。
フェーズ 4 — 古くなった情報を無効化する
ナレッジグラフストアのみが対象です。前回の実行以降に変更された事実をクエリし、矛盾がないか確認します。主語と述語が同じで、目的語が異なり、時期も異なるものを探します。古い事実は置き換えられたものとして無効化します(タイムラインは維持されます)。完全に削除してはいけません。
ストレージ方式に依存しないようにしつつ、操作の分類は正確に行います。
- 調査したスキーマにネイティブの無効化/アーカイブ/廃止操作がある場合は、それを優先します。
- スキーマ上、リンクまたは事実リソースを削除することで無効化を行う場合も、それが正しい無効化機能です。ツールの説明またはプロバイダーの動作から、履歴全体を破棄するのではなく、グラフ上のアサーションを廃止するものだと分かる場合は、それを使用します。
- 古くなったアサーションが主語+述語+目的語で特定されている一方、変更スキーマで不透明なリンク ID または事実 ID が必要な場合は、まずグラフのクエリ、隣接ノード、パス、タイムライン、または検索機能を使って正確な ID を取得します。トリプルから作業を始めたというだけの理由で、無効化は利用できないと判断してはいけません。
- 手入れして提案するモードでは、オペレーターがその古くなったアサーションをすでに承認していない限り、無効化を提案します。自律モードでは、明白に置き換えられたものだけを実行し、廃止したアサーションを正確に記録します。
ストアに無効化機能が本当にない場合は、訂正内容を新しい事実として追加し、古いものを提案中に記載します。
フェーズ 5 — 孤立した項目を再接続する
グラフストアでは、リンクのないノードや、明らかに誤ったコンテナーに格納された項目を見つけます。格納場所を修正し、曖昧さのない不足リンクを1つ追加します。ストアに再接続ヘルパーがある場合は、それを使用します。1回の実行につき最大10件を再接続します。 項目の適切な配置先が明らかでない場合は、そのままにして記録します。誤ったリンクは、リンクがない状態よりも悪いためです。
フェーズ 6 — 対象期間を要約する
日記/ジャーナルの項目を1件作成し、前回の実行以降に追加された注目すべき知識について2~6文で記述し、さらにガーデンの状態を示す行を1行追加します(例:「トピック X で重複の圧力が高まっている」)。日記機能がない場合は、代わりに garden-summary タグを付けたメモリー項目を作成します。
フェーズ 7 — 報告する(省略禁止)
他のすべてのフェーズを省略した場合でも、報告を作成します。アーティファクト/レポート機能があれば、それを使って保存します。さらに、必ず最終出力として報告を出力します。
# Gardening report — <ISO timestamp>
Stores tended: <store: capability summary, per store>
Stats: <counts before → after, per store>
Actions: merges N · decays N · splits N · invalidations N · reconnects N
Destructive ops (mode: tend-and-propose | autonomous):
- PROPOSED DELETE <id> "<short preview>" — duplicate of <id> (tend-and-propose)
- EXECUTED MERGE <id> ← <id> — "<short preview>" (autonomous)
Deferred (uncertain): <pairs the prompts declined to merge, one line each>
Skipped: <phase> — <missing capability>
Budget: <used>/<max> mutations · resume point: <store / cursor or "clean">
手入れして提案するモードでは、破壊的操作のセクションが人間によるレビューキューになります。ガーデナーが手入れし、人間が剪定します。 自律モードではガーデナーも剪定し、報告が監査ログになります。すべての削除を追跡可能にし、不確実なものは無理に判断せず、保留にします。
Substrate セマンティック補完
このスキルが Substrate ランナーまたはワークフロージョブとして実行される場合、ガーデニングレポートは引き続き人間が読める出力ですが、機械向けの成功シグナルではありません。
レポートとワークフロー固有のステータスフィールドを出力した後、最後の空でないアシスタントの行として、SUBSTRATE_OUTCOME_V1= 宣言を必ず1つだけ出力してください。
セレモニーが予算内に完了し、利用できなかったすべてのフェーズがスキップとして正直に記録され、実行したすべての変更が監査され、アーティファクト機能が利用可能な場合はレポートが保存されて読み戻された場合にのみ、outcome: "succeeded" を宣言してください。自律モードでの必須バックアップの失敗、報告されていない部分的な変更、必須レポートの保存失敗は、outcome: "failed" です。ブロックされた作業や人間の対応が必要な作業も失敗です。メモリとナレッジの変更は Git の変更ではないため、changes.status: "notApplicable" を使用してください。
成功行の例(プレースホルダーを実際の証拠に置き換えてください):
SUBSTRATE_OUTCOME_V1={"version":1,"outcome":"succeeded","summary":"Completed memory gardening and persisted report <artifact-id>","evidence":{"changes":{"status":"notApplicable","reason":"Memory-store mutations are not Git changes"},"verification":{"status":"passed","commands":["read back report artifact <artifact-id>"]}}}
2つ目の宣言は出力せず、その後に何も出力しないでください。Substrate ジョブ以外では、このプラットフォーム固有の行を追加しないでください。
定期的な実行
このスキルを使ってエージェントを呼び出せるホストであれば、どのようなホストでも毎日程度の無人実行ができるように設計されています。エージェントジョブを起動するスケジューラー、エージェントハーネス独自の cron、または通常の crontab エントリーを利用できます。活発なストアには毎日、利用頻度の低いストアには毎週が適しています。 各実行には予算上限があるため、頻度を高くしても安全です。最悪の場合でも、「クリーン」と報告されるだけです。
memory-collector との連携
memory-collector はこのペアを成すもう一方のスキルです。コーディングエージェントのセッショントランスクリプト(Claude Code、Codex、OpenCode、 Cursor、Pi)を収集し、このスキルが手入れするのと同じストアにトピック、人物、出来事、引用を登録します。コレクターは意図的に、ほぼ重複した内容や過剰な蓄積を許容します。そのため、validate ゲート、重複排除キュレーター、肥大化の分割機能は、まさにそうした流入に対応するためにあります。コレクターが登録し、ガーデナーが刈り込みます。おすすめのリズムは、コレクターを毎日実行し、その後にガーデナーを毎晩実行することです。
出典とクレジット
セレモニーの構成(重複排除 → 減衰 → 書き換え → 振り返り)、運用上のしきい値(重複候補は0.90、核心的な意味を85%以上維持する統合、肥大化の目安は約750文字)、およびprompts/の判断プロンプトは、Jeremy Scherer による Flare576/ei の夜間セレモニーに由来します(MIT、© 2026 Jeremy Scherer)。Jeremy は実際の個人メモリを使ってプロンプトを作成し、調整しました。このスキルは、その周辺の仕組みをストレージに依存しない形に一般化したものです。ガーデナーが役に立つなら、上流プロジェクトである、ペルソナコンパニオンシステムを備えたローカルファーストの AI メモリレイヤーもぜひご覧ください。