永久記憶と自己進化(memory)
核心原則:能動的に保存し、ユーザーに要求を待たせない。 ユーザー環境を「使えば使うほど自分を理解してくれるシステム」に変える: 3層粒度記憶(事実/パターン/教訓)+ セッションサマリー + 教訓ルーティング(自己進化)。
🚀 セッション開始(新規セッション毎)
~/.agents/memory/MEMORY.mdが存在すればまず読み込み、ユーザーの背景、好み、最近のセッションを素早く把握する。- 詳細が必要な場合は
memory.py get <id>またはmemory.py search <キーワード>で深掘りする。 - 覚えている重要な情報をユーザーに簡潔に提示し、継続性を示す。
📌 能動的保存(ALWAYS ACTIVE、遭遇したら即保存、セッション終了を待たない)
以下の状況が発生したら、即座に memory.py add <type> <内容> を呼び出して保存する:
| タイプ | 保存タイミング | 例 |
|---|---|---|
fact | ユーザーが好み/習慣/身分情報を明かす;プロジェクトの重要な決定、技術選定、取り決め;ユーザーが「覚えて」と明示する | 「ユーザーは中国語での返信を好む」「プロジェクトは pnpm + TypeScript」 |
pattern | 同じ行動/問題が2回以上発生(今回を含む) | 「ユーザーはスキルをインストールするたびに依存関係の評価を要求する」 |
lesson | 陥った穴から学んだ経験、トラブルシューティングの結論、発見した落とし穴 | 「DuckDuckGo の ddgs はデフォルトのバックエンドが Yandex にタイムアウトするため、backend='html' を使用しなければならない」 |
- 保存時に
--tag a,bを付けると検索が容易になる。 - ツールは自動的に近似重複排除を行い、重複内容は警告を表示して再保存しない。
🗂️ セッション終了(または「セッションを要約/定着化」とユーザーが要求した場合)
以下の順序で実行する:
- 今回のセッションを振り返り、2~5件の最も重要な情報を抽出する。
- 分類して保存:
fact(新しい好み/決定)→pattern(新しい規則)→lesson(新しい教訓)。 - 教訓ルーティング(自己進化):各 lesson に対して以下を判断する:
- 再利用可能な方法論に該当する場合(例:「ある種のタスクの標準フロー」)→
~/.agents/skills/下のスキルを新規作成または更新する(write/editツールを使用)。次回から自動適用される。 - 一度きりの事実に該当する場合 →
factとして保存する。 - 環境/アカウント固有の場合(例:あるツールの設定が必要)→
lessonとして保存するだけでよい。
- 再利用可能な方法論に該当する場合(例:「ある種のタスクの標準フロー」)→
memory.py session-save "<今回のセッションの一言要約>" --key キーワード1,キーワード2でセッション記録を保存する。memory.py syncを実行し、MEMORY.md の概要を更新する。
🔍 記憶の検索
ユーザーが「前に言った/前回/私の好み」などと言った場合 → memory.py search <キーワード>;全件表示 → memory.py list。
⚙️ ツールクイックリファレンス
P=~/.agents/skills/pi-memory-evo/memory.py
$P init # 初回初期化
$P add fact "内容" --tag 好み # 事実/パターン/教訓を保存
$P session-save "要約" --key a # セッション要約を保存
$P search キーワード # 検索
$P list # 全件表示
$P get <id> / update <id> <新しい内容> / delete <id> # 管理
$P stats # 統計
$P sync # 概要 MEMORY.md を更新
📂 保存場所
- データ:
~/.agents/memory/memory.json(4層記憶、JSON) - 概要:
~/.agents/memory/MEMORY.md(セッション起動時にこれを読む) - スキル本体:
~/.agents/skills/pi-memory-evo/(ツール + 本説明書)
⚠️ 境界
- 機密認証情報は保存しない:トークン、パスワード、鍵は一切保存しない。
- ユーザーの意向を尊重する:ユーザーが「これは記録しないで」と言った場合は保存しない;「X を忘れて」と言った場合は
deleteで該当エントリーを削除する。 - 記憶は補助であり、確認に代わるものではない:重要な操作は常にユーザーの現在の意図に従う。