
エビングハウスの忘却曲線による減衰を採用したエージェント型AIメモリ。Mem0と比較してLoCoMoでのリコールが16pp向上。

AIエージェントのための持続的で自己改善する記憶 — 人間の記憶の科学に基づいて構築されました。
毎朝、あなたのAIエージェントはあなたを他人扱いします。同じコンテキストを再説明され、同じ好みを忘れられます。毎回のセッションはゼロから始まります。
ほとんどの「メモリ」ツールはベクターデータベースをエージェントに取り付けて完了と呼びますが、それは単なるストレージです。ニアデュプリケートをため込んで、検索がノイズに溺れるまでになります。より大きなボウルを持った金魚です。
YourMemoryは違います:データベースではなく、脳のように機能するメモリです。
flowchart LR
A["🧠 You tell your<br/>AI something"] --> B["Extract durable<br/>facts"]
B --> C["Dedup + embed<br/>+ graph-link"]
C --> D[("Memory<br/>store")]
D -->|"related facts pile up"| E["✨ Consolidate<br/>N → 1 summary"]
D -->|"stale + unused"| F["📉 Decay<br/>+ prune"]
D -->|"new session"| G["♻️ Recall<br/>hybrid + graph"]
E --> D
G --> H["🤖 Your agent<br/>picks up where<br/>it left off"]
style D fill:#0a2540,stroke:#19cdff,color:#fff
style E fill:#0c2b3a,stroke:#5eead4,color:#fff
style H fill:#0c2b3a,stroke:#19cdff,color:#fff
インストールは1コマンド。デフォルトはDuckDB(セットアップ不要)、チーム向けにPostgres + pgvector。
3つの外部データセット。すべての数値は独立して再現可能 — ベンチマークコードはリポジトリにあります。完全な方法論はBENCHMARKS.mdにあります。
xychart-beta
title "Recall@5 · LoCoMo-10 (高いほど良い)"
x-axis ["Mem0", "Zep Cloud", "Supermemory", "YourMemory"]
y-axis "Recall@5 percent" 0 --> 70
bar [18, 28, 31, 59]
Zep Cloudよりも2倍高い再現率を全10サンプルで達成。*SupermemoryとMem0はベンチマーク中に無料枠のクォータを使い切りました。スコアは全1,534ペアで計算されています。
長期記憶の最も厳しい標準ベンチマーク。各質問は約53のディストラクターセッションに埋もれています。
| 指標 | スコア |
|---|---|
| Recall@5 (トップ5にいずれかのゴールドセッション) | 89.4% |
| Recall-all@5 (トップ5にすべてのゴールドセッション) | 84.8% |
| nDCG@5 (ランキング品質) | 87.4% |
| システム | BOTH_FOUND@5 |
|---|---|
| YourMemory (ベクター + BM25 + エンティティグラフ) | 71.5% |
| YourMemory (エンティティエッジなし) | 59.5% |
エンティティグラフのエッジは**+12ポイント**を追加 — Fact 2の埋め込み類似度がクエリに対して低くてもFact 1からFact 2へとトラバースします。
解説: AIエージェントのための記憶減衰を構築しました(エビングハウスの忘却曲線を使用)
Python 3.11–3.14。Docker不要、データベース設定不要。すべてのメモリはローカルの~/.yourmemory/に保存されます。
pip install yourmemory
yourmemory-register <your-token>
yourmemory-setup
トークンを取得: yourmemoryai.xyz にアクセス → メールアドレスを入力 → 6桁のコードで確認 → トークンをコピー。
yourmemory-setupは自動検出し、Claude Code、Claude Desktop、Cursor、Windsurf、Clineを接続してから、使用するバックエンドを尋ねます:
DATABASE_URLを指定 (pgvector拡張が必要)オプション — よりスマートなローカル抽出: YourMemoryは組み込みのヒューリスティックでそのまま動作します。より高品質で完全にローカルな事実抽出には、Ollamaをインストールすると、
yourmemory-setupが自動的にモデル(qwen2.5:7b、約4.7GB)をプルします。クラウドがお好みですか?YOURMEMORY_EXTRACT_BACKEND=anthropicを設定してください。
pipを使いたくないですか?お使いのプラットフォーム用のスタンドアロンバイナリを最新リリースから入手してください:
| プラットフォーム | アセット |
|---|---|
| macOS (Apple Silicon) | yourmemory-macos-arm64.tar.gz |
| macOS (Intel) | yourmemory-macos-x86_64.tar.gz |
# macOS / Linux — download, extract, run
tar -xzf yourmemory-macos-arm64.tar.gz
./yourmemory-macos-arm64 register <your-token>
./yourmemory-macos-arm64 setup
./yourmemory-macos-arm64 # start the server
1つの実行ファイルがすべてのコマンドを処理します:register、setup、ask "<question>"、path、そして(引数なしで)サーバーを起動します。
完全に自己完結&オフライン — バイナリにはPython、すべての依存関係、そして両方のMLモデル(埋め込みモデル + spaCy)がバンドルされています。初回実行時にダウンロードされるものはありません。トレードオフはサイズ(約2GB)です。単一のコマンド — ./build-binary.sh — で独自のバイナリをビルドでき、マルチプラットフォームのリリースバイナリはビルドワークフローによって自動生成されます。
YourMemoryはメモリを生きたシステムとして扱います — 脳と同じように成長し、統合し、忘れ、つながります。
ほとんどのメモリツールはただ増え続けるだけです。YourMemoryは関連する事実のクラスターを監視し、十分に蓄積されると、それらを1つのクリーンなサマリーに圧縮 — 元のものはアーカイブ(決して削除しないため、何も失われません)。
flowchart LR
subgraph before [Related facts pile up]
A1["Railway uses Nixpacks"]
A2["Railway on Pro plan"]
A3["Railway env vars hold<br/>the Postgres URL"]
A4["Deploys on Railway<br/>with Postgres"]
end
before --> C{"cluster +<br/>LLM summarize"}
C --> S["✨ Summary<br/>Deploys on Railway (Pro,<br/>Nixpacks) with Postgres<br/>via env vars"]
C -.->|"archived, recoverable"| ARC[("archive")]
style S fill:#0a2540,stroke:#5eead4,color:#fff
style C fill:#0c2b3a,stroke:#19cdff,color:#fff
あるプロダクションストアからの実際の例:444の記憶 → 16のサマリー — 同じ知識で、ノイズのごく一部。統合はイベント駆動型(関連記憶が蓄積されたときにトリガー)、盲目的な夜間ジョブではありません。
記憶の強度は指数関数的に減衰します。重要度と想起頻度がその減衰を遅らせます:
effective_λ = base_λ × (1 − importance × 0.8)
strength = clamp(importance × e^(−effective_λ × active_days) × (1 + recall_count × 0.2), 0, 1)
active_daysはアクティブだった日のみカウント — 休暇で記憶が失われることはありません。強度0.05未満の記憶は自動的に剪定されます。各カテゴリは独自の速度で老化します:
チェーン認識剪定: 減衰した記憶は、グラフの近傍がまだ強い場合に保持されます — 直接照会されることがまれでも、負荷のかかるコンテキストは存続します。
想起は2ラウンドで実行され、あなたが尋ねたこととあなたが尋ねるのを忘れたことの両方を表面化します:
flowchart LR
Q["query"] --> R1["Vector + BM25<br/>hybrid search"]
R1 --> R2["Graph expansion<br/>(what you forgot to ask)"]
R2 --> S["rank by<br/>similarity × strength"]
S --> OUT["🎯 Ranked memories"]
style OUT fill:#0a2540,stroke:#19cdff,color:#fff
サブジェクト認識重複排除はすべての保存前に実行 — 各文のサブジェクトを埋め込み、"Sachit uses DuckDB"と"YourMemory uses DuckDB"は別々に保ち(異なるエンティティ)、"YourMemory uses DuckDB"と"YourMemory stores data in DuckDB"はマージされます(同じエンティティ)。ハードコードされた単語リストはなく、任意の言語に一般化されます。
企業は不透明なブラックボックスにデータを保存させようとはしません。そのため、すべての操作 — 読み取り、書き込み、更新、削除、統合 — は、ハッシュチェーンによる改ざん防止監査ログに追加されます。
flowchart LR
E0["GENESIS"] --> E1
subgraph E1 [Event 1]
H1["row_hash =<br/>sha256(prev + data)"]
end
E1 --> E2
subgraph E2 [Event 2]
H2["row_hash =<br/>sha256(#1.hash + data)"]
end
E2 --> E3
subgraph E3 [Event 3]
H3["row_hash =<br/>sha256(#2.hash + data)"]
end
E3 --> V{"GET /audit/verify"}
V -->|chain intact| OK["✅ verified"]
V -->|any row altered| BAD["❌ chain breaks<br/>at that row"]
style OK fill:#0a2540,stroke:#5eead4,color:#fff
style BAD fill:#3a0c14,stroke:#fb7185,color:#fff
各行には、タイムスタンプ、アクターユーザー+エージェント、アクション、操作、ターゲットメモリ、ソース(http vs mcp)、および前の行のハッシュが記録されます。過去のレコードを変更すると、verify_chain()はチェーンが壊れた正確な場所を特定します。
GET /audit # browse the trail (filter by user / action / operation)
GET /audit/verify # cryptographically verify the chain is untampered
POST /audit/prune # retention-based cleanup (90-day minimum, never lower)
監査ログはフェイルオープン — メモリ操作をブロックすることは決してありません — また、ダッシュボード自身のレンダリングループからの読み取り/リストイベントは除外されるため、トレイルはノイズではなくシグナルを保ちます。
チーム全体のエージェントに1つの共有された脳を与えます — 個人のプライベートコンテキストを漏洩することなく。記憶は共有(プールに表示)またはプライベート(所有者のみ表示)です。
flowchart TB
P(("🧠 Team Pool<br/>shared memory"))
A["Alice's agent"] <-->|shared| P
B["Bob's agent"] <-->|shared| P
C["Carol's agent"] <-->|shared| P
A -. private .-> AP["🔒 Alice-only"]
B -. private .-> BP["🔒 Bob-only"]
style P fill:#0a2540,stroke:#19cdff,color:#fff
style AP fill:#0c1424,stroke:#5a6b80,color:#8294a8
style BP fill:#0c1424,stroke:#5a6b80,color:#8294a8
ロールベースのアクセスはエージェントごとに強制されます — あるエンジニアのエージェントが学習したことは、チーム全体が即座に利益を得ます。機密コンテキストは所有者のスコープに留まります。
POST /pools # create a pool
POST /pools/{id}/members # add a member (with role)
POST /pools/{id}/memories # contribute a shared memory
POST /pools/{id}/retrieve # recall across the pool
実際のデータを保存するメモリには、信頼されるための制御が必要だからです:
ハッシュチェーン監査証跡と90日間の保持下限と組み合わせることで、これらはSECURITY.mdに文書化された制御(SOC 2準拠)に直接マッピングされます。
2つの組み込みブラウザUI — 追加設定不要で、サーバー起動時に自動的に開始されます。
http://localhost:3033/uiメモリ · 監査 · プールタブを備えた完全な読み取り/書き込みビュー:統計バー(強/減衰/剪定間近)、エージェント別タブ、ライブ強度バー付きメモリカード、カテゴリフィルター、監査トレイル、プール管理。
http://localhost:3033/graph記憶がどのように接続するかを示すインタラクティブなフォース指向マップ — ルートメモリは明るいノード、近傍はカテゴリ別に色分け、エッジの太さ = 接続強度。ドラッグ、ズーム、任意のノードをクリックして完全なコンテンツを表示。
http://localhost:3033/graph?memoryId=42&userId=alex&depth=2
3つのツールが、AIによって自動的に呼び出されます。
| ツール | AIが呼び出すタイミング | 説明 |
|---|---|---|
# 空間コンテキスト付きで保存
store_memory(
"Alex prefers tabs over spaces in Python",
importance=0.9, category="fact",
context_paths=["/projects/backend"],
)
# 次のセッション — そのディレクトリで作業中に空間ブーストが発動
recall_memory("Python formatting", current_path="/projects/backend")
# → {"content": "Alex prefers tabs over spaces in Python", "strength": 0.87}
質問にLLM API呼び出しを行わずに回答できる唯一のメモリシステム:
yourmemory ask "what database does this project use"
# → YourMemory uses DuckDB locally and Postgres in production.
yourmemory ask "how do I fix a kubernetes deployment"
# → Not enough memory context to answer without an LLM.
記憶が十分に強いときは即座に回答 — トークン0、クラウドコスト0、レイテンシ0。そうでない場合は、幻覚を起こさずにきれいに断ります。クエリは決してマシンの外に出ません。
MCPツールはAIの裁量で呼び出されます。APIプロキシはその不確実性を取り除きます — すべてのLLM呼び出しをインターセプトし、関連する記憶を自動的に注入し、モデル設定なしでstore_memory/update_memoryを処理します。
サーバーを起動(yourmemory)し、クライアントをlocalhost:3033に向けます:
from anthropic import Anthropic
client = Anthropic(
api_key="sk-ant-...",
base_url="http://localhost:3033/proxy/anthropic",
default_headers={"X-YourMemory-User": "alex"}, # ユーザーごとのメモリ
)
# メモリは自動的に注入される — 他の変更は不要
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[{"role": "user", "content": "What database do I use?"}],
)
OpenAIも同様にbase_url="http://localhost:3033/proxy/openai"で動作します。
flowchart LR
C["Your AI client<br/>Claude · Cursor · any MCP"] <--> Y["🧠 YourMemory"]
Y --> M[("Memory<br/>store")]
Y --> A[("Audit<br/>ledger")]
style Y fill:#0a2540,stroke:#19cdff,color:#fff
style M fill:#0c1a2c,stroke:#5eead4,color:#fff
style A fill:#0c1a2c,stroke:#5eead4,color:#fff
書き込みがハング/タイムアウト(DuckDB単一書き込みロック)。 MCPサーバーとHTTPサーバーの両方が同時に実行されている場合、DuckDB書き込みロックを競合します。修正方法:
pkill -f yourmemory 2>/dev/null || true
rm -f ~/.yourmemory/memories.duckdb.wal ~/.yourmemory/memories.duckdb.lock 2>/dev/null || true
# restart your client
Claude Desktop (MCP)とClaude Code (hooks)を同時に実行していますか?代わりにSQLiteを使用 — 同時読み取り/書き込みをクリーンに処理します:DATABASE_URL=sqlite:///~/.yourmemory/memories.db
PR歓迎 — CONTRIBUTORS.mdを参照。
Copyright 2026 Sachit Misra — Licensed under CC-BY-NC-4.0.
無料:個人使用、教育、学術研究、オープンソースプロジェクト。 商用利用には別途書面による合意が必要 → [email protected]
pip install yourmemory| 機能 | 説明 |
|---|
| 🧠 | 統合 | 十分な関連事実が蓄積されると、1つのクリーンなサマリーに圧縮され、元のものはアーカイブされます。メモリは時間とともにより鮮明になり、肥大化しません。 |
| 📉 | 生物学的減衰 | すべての記憶はエビングハウスの忘却曲線に従って老化します。古くて使われない事実は薄れ、重要で頻繁に想起されるものは持続します。 |
| 🔗 | エンティティグラフ | 記憶は共有する人、場所、概念でリンクされます。そのため、想起はあなたが聞き忘れたことも表面化させます。 |
| ♻️ | コンテキストリセットに耐性 | コンテキストウィンドウが圧縮されると、YourMemoryは作業中のコンテキストを返します — どこまで進んだかを知るためにファイルを読み直す必要はありません。 |
| 🔒 | 改ざん防止監査証跡 | すべての読み取り/書き込み/削除はハッシュチェーン台帳に記録されます。1つのレコードを改ざんするとチェーンが壊れます。 |
| 👥 | チームメモリプール | ロールベースの共有メモリにより、チーム全体のエージェントが同じ組織の知識を活用でき、プライベートな記憶は非公開のままです。 |
| 🛡️ | データ権限を内蔵 | ワンコマンドでエクスポート(アクセス権)と忘れる権利(パージ)、さらにSOC 2準拠の制御機能を備えています。 |
| 🔌 | MCPネイティブ&ローカルファースト | Claude、Cursor、Cline、Windsurf、または任意のMCPクライアントで動作します。完全にマシン上で実行 — APIキー不要、何もシステム外に出ません。 |
| Linux (x86-64) | yourmemory-linux-x86_64.tar.gz |
| Windows (x86-64) | yourmemory-windows-x86_64.exe.zip |
| カテゴリ | 半減期 | 最適 |
|---|
strategy | 約38日 | うまくいったパターン、アーキテクチャ上の決定 |
fact | 約24日 | 好み、アイデンティティ、安定した知識 |
assumption | 約19日 | 推測されたコンテキスト、不確かな信念 |
failure | 約11日 | エラー、間違ったアプローチ、環境固有の問題 |
| 権利 | エンドポイント | 説明 |
|---|
| アクセス (DSARエクスポート) | GET /users/{id}/export | ユーザーに保存されているすべての完全エクスポート |
| 消去 (忘れる権利) | DELETE /users/{id}/memories | ユーザーの記憶を一括パージするワンコマンド |
| 移植性 | POST /users/{id}/import | 以前のエクスポートを再インポート |
| 復旧可能性 | GET /users/{id}/archive | 統合でアーカイブされたオリジナルを取得 |
recall_memory(query, current_path?) |
| 各タスクの開始時 |
| 類似度×減衰強度でランク付けされた記憶を表面化; パス一致記憶に空間ブースト |
store_memory(content, importance, category?, context_paths?) | 新しいことを学習した後 | 埋め込み、重複排除、減衰付きで保存; オプションでファイル/ディレクトリパスをタグ付け |
update_memory(id, new_content, importance) | 保存された事実が古くなったとき | 再埋め込みして置き換え; 変更を監査証跡に記録 |
| コンポーネント | 役割 |
|---|
| DuckDB | デフォルトのベクターストア — セットアップ不要、ネイティブコサイン類似度 |
| PostgreSQL + pgvector | オプション — チームや大規模データセット向け |
| NetworkX | デフォルトのグラフバックエンド (~/.yourmemory/graph.pkl) |
| Neo4j | オプションのグラフバックエンド |
| sentence-transformers | ローカル埋め込み (multi-qa-mpnet-base-dot-v1, 768次元) |
| spaCy | ローカルNLP (重複排除とエンティティ抽出用) |
| APScheduler | 自動減衰 + 剪定 |