Perseus Vault
Perseus Vault
AIエージェントのための、持続的で暗号化された記憶。単一のRustバイナリ、単一のファイル、クラウド不要。
公開先 Official MCP Registry · Glama · mcpservers.org · Lulu MCPs · Docker (GHCR)
エージェントにセッションを超えて持続する記憶を与え、すでに学習したことを再導出する手間や、過去の過ちを繰り返すことを防ぎます。ハイブリッド検索(BM25 + 密ベクトル + RRF)、二時点履歴、保存時のAES-256-GCM暗号化を、168個の標準MCPツールとして公開し、任意のホストで動作します。レガシーな mimir_*/mneme_* エイリアスは2026-27メジャーリリースで削除され、別途カウントされません。LongMemEval公式ハーネスで73.8%(Zep 63.8%、Mem0 49.0%と比較)。
単一バイナリ。単一ファイル。Docker不要。Postgres不要。クラウド不要。 ローカルファースト、エアギャップ対応、MITライセンス。
一行インストール
curl -sSf https://raw.githubusercontent.com/Perseus-Computing-LLC/perseus-vault/main/scripts/install.sh | sh以上です。Perseus Vault は ~/.local/bin/perseus-vault にインストールされます。起動するには:
perseus-vault serve --db ~/.perseus-vault/data/perseus-vault.dbデフォルトインストールでは暗号化が自動的に有効になります。 初回実行時に、所有者のみアクセス可能な
~/.perseus-vault/secret.keyと、暗号化されたデータベースカナリアが作成されます。そのキーはバックアップしてください:復元は不可能です。明示的な--encryption-keyパスは引き続きサポートされており、既存のプレーンテキストデータベースはperseus-vault init --rekeyによる移行のために保持されます。doctorを使用して、実際のディスク上の状態を検査してください。
macOSに関する注意(Apple Silicon)。 新しくビルドまたはコピーしたバイナリは、OSのバイナリポリシーにより、初回実行時にSIGKILLされます(
Killed: 9、他の出力なし) — クォータニン属性がない場合でも同様です。一行インストーラーおよびbootstrap.shソースからビルドするインストーラーは、Perseus Vault をアドホックコード署名してくれます。自分でバイナリをビルドする場合は、ビルドのたびに一度署名してください:cargo build --release cp target/release/perseus-vault ~/.local/bin/perseus-vault codesign --force --sign - ~/.local/bin/perseus-vault # required on Apple Silicon; fixes "Killed: 9"
--forceは既に署名されたバイナリに再署名します(ビルドのたびに必要);この手順はIntel macOSでは無害であり、Linux/Windowsでは不要です。
次に、MCPクライアントと、完全な想起/キャプチャループを1つのコマンドで接続します:
perseus-vault install-client --hooks --rulesこれはClaude Code / Codex / Cursorを自動検出し(--client <name> でclaude-desktop, hermes, windsurf, vscode, zed, genericを指定可能; --all-detected で検出したすべてのクライアントを接続)、MCPサーバー登録をクライアントの設定にマージします(何も上書きせず、先に .bak-perseus バックアップを作成)、すべてのクライアントを1つの共有メモリデータベースに向け、セッションライフサイクルフック(SessionStartでの想起インジェクション、セッション終了時の衛生管理 — docs/lifecycle-hooks.md 契約を参照)を登録し、メモリ使用ルールを CLAUDE.md/AGENTS.md に追加します。再実行は何も変更しません; --dry-run を追加して、触れるすべてのファイルをプレビューできます。
または、任意のMCPホストに手動で接続します(Claude Desktop, Cursor, Hermes Agent, Perseusなど):
{
"mcpServers": {
"perseus-vault": {
"command": "perseus-vault",
"args": ["serve", "--db", "~/.perseus-vault/data/perseus-vault.db"]
}
}
}Related MCP server: GroundMemory
エージェント向け:MCP経由で接続
主要なコンシューマーがエージェントである場合、インターフェースはMCPです — エージェントはMCPクライアントを介してVaultを採用し、サーバー自体を実行する以外に、マシンごとのCLIインストールは必要ありません:
# 1. Run the server (one line)
perseus-vault serve --db ~/.perseus-vault/data/perseus-vault.db &
# 2. Register it in the agent's MCP client config
# { "mcpServers": { "perseus-vault": {
# "command": "perseus-vault",
# "args": ["serve", "--db", "~/.perseus-vault/data/perseus-vault.db"] } } }
# 3. Verify the agent-facing surface
perseus-vault doctorperseus-vault install-client --hooks --rules は、Claude Code / Codex / Cursor / Hermes 向けの想起/キャプチャループ全体を1つのコマンドで接続します。エージェント向け機能マップ — どのツールがどの役割を担い、計画境界パターンを — については、docs/integration/agent-adoption.md を参照してください。
30秒クイックスタート
# Start Perseus Vault
perseus-vault serve --db memory.db &
sleep 1
# Remember a fact (via MCP JSON-RPC on stdio)
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"perseus_vault_remember","arguments":{"category":"demo","key":"hello","body_json":"{\"text\":\"Hello from Perseus Vault!\"}"}}}' | perseus-vault serve --db memory.db
# Search for it
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"perseus_vault_recall","arguments":{"query":"Hello"}}}' | perseus-vault serve --db memory.dbメモリモデルと運用上の境界
Perseus Vault は3つのプレーンを明確に区別します:
暗黙的な作業コンテキスト は、ホストの現在のプロンプト、トランスクリプト、およびクライアントが注入することを選択した任意のコンテキストブロックです。これは一時的であり、ホストが所有します;Vaultがそれを返したという理由だけで永続化されるわけではありません。
明示的な永続メモリ は、明示的な
perseus_vault_remember、perseus_vault_capture、write、またはcapture操作によって書き込まれます。Vaultサーバーは、SQLiteレコード、履歴、ジャーナル、減衰、アーカイブ、パージのライフサイクルを所有します。派生プロジェクション には、統合または合成されたレコードやエクスポートされたMarkdownが含まれます。これらは来歴を持ちますが、永続的なソースレコードの代替ではなく、個別のクリーンアップが必要になる場合があります。
perseus-vault prepare と perseus_vault_context は永続レコードを読み取り、境界がありタスクに関連するアクティブな作業コンテキストを生成します。これはローリングスナップショットであり、バックグラウンド書き込みや、クライアントがそれを保持するという約束ではありません:タスクが変わったら更新し、明示的なキャプチャ/書き込み操作が成功しない限り、プロンプトテキストを永続メモリとして扱わないでください。想起ファーストの出力は予算化されています(デフォルト1500文字、大ウィンドウホストでは6000文字、または明示的な max_context_chars)。always_on セットは最大5つに制限されています。保持とコンテキストのセマンティクス を参照してください。
ライフサイクルフックとクライアントインストーラーはオプションのオーケストレーションです。これらはサーバーが所有する想起、キャプチャ、メンテナンス、リフレッシュ作業を要求します;これらが2番目のストアになったり、保持ポリシーを変更したりすることはありません。サーバーまたはフックが利用できない場合は、注入されたメモリなしでタスクを続行し、機能低下状態を表面化してください。ホスト統合には明示的に構成されたローカルフォールバックがある場合がありますが、そのフォールバックはローカルのみとラベル付けされ、永続的なVaultの想起として提示されてはなりません;失敗した明示的な書き込みが永続化されたと報告されてはなりません。アップグレード/リカバリ手順については、アップグレードと移行プレイブック を使用してください。
すべてのMCPクライアントで動作
Perseus Vault は標準のMCP stdio サーバーです — 同じ perseus-vault serve コマンドがどこでも動作します。perseus-vault doctor を実行してインストールを検証し、このマトリックスをローカルに出力します。
クライアント | ステータス | 設定 |
Claude Desktop | ✅ |
|
Claude Code / Hermes | ✅ |
|
Cursor | ✅ |
|
Windsurf | ✅ |
|
VS Code + Continue.dev | ✅ |
|
Zed | ✅ |
|
Codex CLI | ✅ |
|
各クライアントのコピーペースト用設定スニペット: docs/clients/。
次に、想起 → 作業 → キャプチャ → 統合 ループをクライアントのセッションイベントに接続します(Claude Code、Codex、Cursor向けのSessionStart/Stopフック、およびポータブルなAGENTS.mdフォールバック): docs/lifecycle-hooks.md。
メモリワッシャー(CoalWash)とランタイム出力コンパクター(Noisegate)と組み合わせて、エンドツーエンドのコンテキスト予算制御を行う方法: docs/integration/context-budget-stack.md。
Vaultが何を、どこから、どの権限で記憶しているかを監査する方法: docs/evidence-chain-guidance.md — エビデンスチェーン、書き込み時の来歴タグ、永続メモリの継続的アテステーション。
メモリバンク(クライアントごとの分離、単一プロファイル)
同じプレイブックで50のクライアントを運用していますか?プロファイルを複製しないでください — プロジェクトごとにメモリバンクを指定し、1つのHermesプロファイル、1つのVault、1つの共有スキルライブラリを維持します:
# .hermes.md
memory_bank: acme-seo # name → deterministic workspace hash
memory_bank_workspace: <64-hex> # optional explicit workspace overrideHermesメモリプロバイダー
(hermes plugins install Perseus-Computing-LLC/hermes-plugin-perseus-vault)
は、バンクをセッションごとに1回解決し、すべてのVaultの読み取りと書き込み(プリフェッチ想起、perseus_recall / perseus_remember / perseus_forget、セッション終了時のキャプチャ)を専用のワークスペースに範囲付けます。バンク名は決定論的にマッピングされるため(sha256("memory-bank:" + name))、同じ名前を指すすべてのインスタンスは、維持するレジストリなしで同じワークスペースをアドレス指定します。ワークスペースはサーバー上で第一級の存在です:範囲指定されたメンテナンス、バンク間の重複排除分離、ワークスペースごとの権限マニフェスト。ディスカバリはHermesプロジェクトコンテキストルールを反映します(最も近い .hermes.md が優先され、gitルートで境界が設定されます);ディレクティブのないコンテキストファイルはバンクなしを意味します — 構成されたワークスペースが引き続き有効です。
Perseus Vault を選ぶ理由
Perseus Vault は、MCPネイティブ、ローカルファースト、ゼロ依存、かつエージェントファーストを同時に満たす唯一のメモリエンジンです。
LongMemEval QA(公式ハーネス)
自前のスクリプトではなく、LongMemEvalの公式ハーネスで測定された想起品質:
メモリエンジン | QA精度 |
Perseus Vault | 73.8% |
Zep | 63.8%(公開値) |
Mem0 | 49.0%(公開値) |
longmemeval_s(500問)、gpt-4o-2024-08-06回答者 + LongMemEval公式判定者;競合他社の数値は公開値です。Perseus Vaultの73.8%は3回の実行の単純平均;公式CoTでは79.0%。方法論とコンテンツハッシュ(sha256)結果 →
LOCOMO(mem0自身のハーネス)
私たちのものではなく、mem0自身のLOCOMOハーネス(私たちのフォーク)で測定 — カテゴリ1~4、1,540問、top-200、gpt-5回答者 + 判定者:
エンジン | 全体 | 単一 | 時間 | 複数 | オープンドメイン |
Perseus Vault 2.20.2 | 87.9% | 89.1 | 92.2 | 85.1 | 70.8 |
Mem0 Platform Starter | 82.2% | 85.0 | 82.9 | 78.0 | 67.7 |
Zep Cloud Flex | 33.8% | 36.9 | 6.9 | 50.0 | 49.0 |
カテゴリ5 敵対的(446問):Perseus 63.5、Mem0 55.6、Zep 49.8。私たちのMem0測定値は、公開ファイルより9.4ポイント低いです(判定者/プラットフォームのドリフト — 開示済み)。完全なリーダーボード →
二時点タイムトラベル(三軸)
私たちの最も強力な構造的差別化要因 — 完全なSQL:2011 二時点履歴 (トランザクション時間 および 有効時間) — 再現可能で完全にオフラインのガントレットに対して測定。実際に出荷されるバイナリをMCP stdio経由で駆動し、単軸の競合他社が誤る難しいケース(遡及的修正、先行的な未来日付の事実、順序不同の到着、信念と真実の乖離、閉じられた期間)を処理します:
軸 | 答える質問 | チェック | 合格 |
有効時間 ( | "時刻Tにおいて世界で真実だったこと" | 10 | 10 |
トランザクション時間 ( | "時刻Tにおいて私たちが信じていたこと" | 1 | 1 |
バイテンポラル ( | "時刻Tの信念として、時刻Vにおいて真実だったこと" | 2 | 2 |
合計 | 13 | 13 (100%) |
1つのコマンドで再現(APIキー不要、ネットワーク不要、LLM不要):
cargo build --release
python benchmark/temporal/gauntlet.py --bin target/release/perseus-vaultPASS/FAILの判定は決定論的です(ウォールクロックのタイムスタンプは変動しますが、判定は変動しません)。そのため、正しいビルドを再実行すると同一のsignature_sha256になります。コミットされたgauntlet_report.jsonがリファレンスです。方法論とデータセット →
比較マトリクス
Perseus Vault | Mem0 | Letta | Zep | |
デプロイ | 単一バイナリ | クラウド + セルフホスト | Docker/Postgres | Docker/Neo4j |
依存関係 | なし(SQLite埋め込み) | Python + ベクトルDB | Postgres + Python | Neo4j + Go (Graphiti) |
MCPネイティブ | ✅ 157 canonicalツール | ❌ MCPネイティブではない | ❌ MCPネイティブではない | ❌ MCPネイティブではない |
オフライン/ローカル | ✅ 完全ローカル | クラウド依存 | Dockerが必要 | Dockerが必要 |
暗号化 | AES-256-GCM ✅ | ❌ | ❌ | ❌ |
ハイブリッド検索 | BM25 + デンス + RRF | ベクトルのみ | ベクトルのみ | ベクトル+グラフ |
エンティティライフサイクル | 減衰 + 昇格 + アーカイブ | ❌ | ❌ | ❌ |
エンティティグラフ | リンク + トラバース | ❌ | ❌ | ✅ |
ジャーナル監査証跡 | ✅ 不変 | ❌ | ❌ | ❌ |
状態管理 | ✅ キー値 + TTL | ❌ | ❌ | ❌ |
MCPツール | 103 canonical | 5 | 8 | 0 |
ライセンス | MIT | Apache 2.0 | Apache 2.0 | Apache 2.0 |
完全比較: Perseus Vault vs Mem0 → vs Letta → vs Zep →
ストレステスト: 100Kエンティティ
Perseus Vaultは控えめなハードウェアでも本番ワークロードを処理します。以下の数値はコミットされた成果物benchmark/scale/report.jsonからのものです。実際のリリースバイナリをMCP stdioで駆動(コーパスサイズごとに1つの永続プロセス)、AMD64 16コア、Windows 11、各書き込みは次の書き込みが送信される前に永続化されます。
メトリック | 10K | 100K |
書き込みスループット(持続的、MCP stdio) | 479 ドキュメント/秒 | 40 ドキュメント/秒 |
ハイブリッド再現率 p50 | 19.03 ms | 79.73 ms |
FTS5再現率 p50 | 3.14 ms | 15.67 ms |
完全なパーセンタイル、as_ofポイントルックアップ、テンポラル再現率、コールドスタートの数値はbenchmark/scale/にあります。
自分で実行:python benchmark/scale/run.py
スケールでの再現率精度: キーワードは崩壊、ハイブリッドは維持
速度は当然の前提です。エージェントメモリにとって重要な質問は正しいメモリが実際に表面化するのか? ということです。異なる内容のコーパス(ファーストパーティ、再現可能;benchmark/lambda/参照)で測定された、モード別のrecall@k:
100,000エンティティ(1×H100、nomic-embed-text on Ollama):
recall@k | キーワード (BM25/FTS5) | デンス | ハイブリッド (RRF) |
@1 | 0.003 | 0.680 | 0.785 |
@5 | 0.015 | 0.859 | 1.000 |
@10 | 0.029 | 0.899 | 1.000 |
100Kエンティティでは、ハイブリッド再現率は**@5で完全であり、キーワード検索は約1.5%の時間しかヒットしない** — 約66倍の差。そしてそれはスケールに応じて拡大します:10Kエンティティではキーワードrecall@5は0.008でしたが、ハイブリッドはすでに1.000でした。キーワードのみのメモリはエージェントが履歴を蓄積するにつれて静かに劣化しますが、ハイブリッド(BM25 + デンス + 相互ランク融合)は劣化しません。これがPerseus Vaultのハイブリッド検索の核となる主張です。
直接対決、同一マシン、同一コーパス、すべて完全ローカル(1×H100、Ollama — 全システムで同一の事実セット、クエリ、および部分文字列判定器):
システム | 再現率精度 | p50レイテンシ | 備考 |
Perseus Vault (ハイブリッド) | 1.00 | 35.6 ms | 単一の自己完結型バイナリ、インプロセス |
Letta (アーカイブ / pgvector) | 1.00 | 135.5 ms | サーバー + Postgres/pgvector |
Mem0 (ベクトル) | 0.60 | 37.9 ms | Python + ベクトルDB |
Zep (GraphitiテンポラルKG) | 0.20 | 49.7 ms | サーバー + Neo4j; ローカルモデルで抽出されたグラフ |
すべての競合他社は、同一マシンで立ち上げられ、実行され、同一のローカルOllama(qwen2.5:14b-instruct + nomic-embed-text)に対して — クラウドなし、捏造数値なし。Lettaはletta/lettaサーバー(バンドルされたPostgres/pgvector)として実行され、Perseus Vaultと1.00で一致しました。ZepのセルフホストCommunity Editionサーバーは非推奨であり、そのzep_pythonメモリAPIは現在Zep Cloud専用であるため、Zepの実際のOSSエンジン — Neo4j上のGraphitiテンポラルKG — を、エンティティ/エッジ抽出と埋め込みを同一のローカルOllamaで測定しました。その0.20は、ローカルモデルでナレッジグラフを構築する正直なコストを反映しています(構造化抽出はロスが多い:6つの事実から5エンティティ/2エッジ) — フロンティアモデルを使用するZep Cloudではありません。完全な成果物+方法論:benchmark/lambda/results/competitors.json。
コールドスタート: ベアGPUボックスは最初のgrounded RAG回答を3.3秒で到達します(モデルはディスク上にステージング)。
再現:benchmark/lambda/scale_bench.py および competitors_bench.py。
GPUホスト上のモデルサーバー(vLLM on MI300X/H100)の隣にデプロイする?AMD MI300Xデプロイメントリファレンスを参照 — 測定された共存数値と、/dev/shm、PID-1、バージョン固定の落とし穴(これらが実際にこれらのスタックを壊す)を含みます。
フレームワーク統合
Perseus Vaultを人気のあるAIエージェントフレームワークのデフォルトメモリバックエンドにする即使用可能なアダプター:
フレームワーク | 統合 | タイプ |
|
| |
| エージェントツール | |
|
|
各アダプター:
MCP stdioサブプロセスを介して接続(永続セッション)
フレームワークのメモリインターフェースをPerseus Vaultツールにマッピング
READMEクイックスタート付き(5分で動作開始)
モックされたMCPトランスポートで合格するテストあり
MCP互換のフレームワークはすべてPerseus Vaultと直接動作します。完全なリストはMCPクライアントとフレームワーク統合を参照してください。
150の正規MCPツール
正規の製品名とツール名。 Perseus Vaultは製品名であり、統合は正規の
perseus_vault_*ツール(例:perseus_vault_remember)を使用します。レガシーのmimir_*/mneme_*/plutus_*名は2026-27メジャーリリースで削除されました — 正規名が唯一のインターフェースです。 カウントはソースレジストリ内の一意の正規ツールの数です。互換性エイリアスは呼び出し可能ですが、個別にカウントされません。 レガシーのperseus_vault_*およびperseus_vault_*名は完全に呼び出し可能のままです — すべてのプレフィックスは同じハンドラーにディスパッチします — ただし、tools/listでアドバタイズされなくなっただけです。これにより、アドバタイズされるマニフェストはツールごとに1つの名前に保たれ、3倍(3倍のエイリアス膨張)にならないため、接続されたクライアントはリクエストごとに3倍のツールスキーマペイロードをリロードしません。3つすべてのプレフィックスをアドバタイズする過去の動作を復元するには、PERSEUS_VAULT_TOOL_ALIASES=allを設定します(レガシー環境変数PERSEUS_VAULT_TOOL_ALIASESも尊重されます;PERSEUS_VAULT_が優先されます)。クライアント互換性(#633)。 アドバタイズされたリストにゲートをかけるクライアント — つまり、呼び出し前に
tools/listをチェックし、見えないツールをスキップする — は、呼び出し自体は成功するにもかかわらず、2.xボールトに対するレガシーのperseus_vault_*呼び出しを静かにスキップします。既知のケース:perseusCLI ≤ 1.0.22 はperseus_vault_recallをハードコードし、空のローカルのみの再現に劣化します。どちらかの側で修正:CLIを**≥ 1.0.23**にアップグレードする(動的フォールバックで正規名を呼び出す)、または、古いクライアントがまだデプロイされている間のブリッジとして、ボールトにPERSEUS_VAULT_TOOL_ALIASES=allを設定する。
ツールスコープ(広告階層、#1051)
デフォルトでは、tools/listはすべての正規ツールをアドバタイズします。PERSEUS_VAULT_TOOL_SCOPEを設定して、トークンと注意に制約のあるエージェントクライアント向けにアドバタイズ範囲を狭めます:
設定 | アドバタイズ範囲 | カウント |
| すべて | 150 |
| エージェント表面 + 運用グルーミング、メンテナンス、ガバナンス、エクスポート | 140 |
| 日常メモリ + 調整表面(recall / remember / context / handoffs / state、およびエージェント側のAAR呼び出し) | 48 |
スコープはアドバタイズのみです:隠されたツールはtools/callを介して完全に呼び出し可能であり、認可はワークスペースバインディングと権限マニフェストに残ります。階層分類は1:1のサイドテーブル(src/mcp.rsのTOOL_SCOPES)であり、scripts/registry_metadata_check.pyによってCIで強制されます — 新しいツールはすべて分類されなければなりません。admin階層のツール(migrate、purge、erase、vault_import、authority_set / authority_revoke / authority_set_signed)はスコープ付きリストに決して表示されません。
エンティティCRUD
ツール | 説明 |
| エンティティの保存/更新。(category, key) で冪等。内容の変更は以前のバージョンを履歴にスナップショットします。 |
| FTS5/dense/hybrid モード、フィルター、ステミング展開による検索。クエリ契約 (#562): |
| カテゴリまたはストア全体の決定論的なページネーション列挙 (#562): 不変の |
| 読み取り専用の起動時メモリ衛生レポート (#675): アクティブな記憶を「アクション可能性」(具体的なアンカー — イシューキー、#refs、パス、URL、決定 — 対 曖昧/日付のみ/短い)でスコアリングし、最悪の違反者を理由とともにリストアップ。アーカイブ/統合キュレーション用。 |
| 特定の生体模倣層(world、episodic、semantic)からの想起。 |
| プロアクティブなジャストインタイム想起: |
| ID で1つのエンティティを完全な |
| トランザクション時刻のタイムトラベル: 過去の瞬間に 信じられていた 事実(category + key)のバージョン。 |
| 有効時刻ルックアップ: 現在の知識に基づき、ある瞬間に 実際に世界で真だった バージョン(SQL:2011 APPLICATION_TIME)。 |
| 完全な2軸バイテンポラルクエリ: 「トランザクション時刻 T 時点で、有効時刻 V に何が真だと信じていたか」— 正確な矩形セル。 |
| 事実(category + key)の置き換えられたバージョンを新しい順にリスト — ページネーション付き( |
| ソフトデリート(archived=1)。 |
検索 & RAG
ツール | 説明 |
| RAG: コンテキストを想起し、LLM にクエリし、ソース付きの根拠のある回答を返します。 |
| バンドルモデル、Ollama、または OpenAI 互換エンドポイントを介して密ベクトルを生成します。 |
| 密ベクトルのみのセマンティック検索ショートカット — 意味でエンティティを検索し、埋め込み類似度のみでランク付け(キーワードフォールバックなし)。 |
| セッションインジェクション用の事前フォーマット済みマークダウンブロック。デフォルトは想起優先: |
| コネクタ同期(GitHub、ファイルウォッチャー)をトリガー。変更のないコンテンツは包含リプレイによりスキップされます (#1050)。 |
| 抽出損失ネット (#1048): 抽出器が見逃した文を残余スパンとして、出典付きでそのまま保持します。 |
| 抽出損失ネット (#1048): 拒否をシグナルとして — スパンをクエリと再スコアリングし、リトライペイロードを返し、損失のあるユニットにフラグを立てます。 |
| 抽出損失ネット (#1048): リトライを確認 — 仮のクエリキーを添付し、同一の繰り返しクエリが初回パスとして機能するようにします。 |
| ドキュメントのテキストをローカルで抽出(プレーンテキスト/マークダウンは常に、DOCX/PDF は |
| テキストまたは保存されたエンティティからのローカルで決定論的なルールベースの知識抽出(事実 / 嗜好 / 時間的イベント / エピソード)。読み取り専用。 |
| オプトインのセッション内キャプチャ (#520): 問題が解決された瞬間に、トランスクリプト/インサイトペイロード(テキスト、マークダウン、または JSONL)を永続的なエンティティ(根本原因 / 落とし穴 / 決定 / パターン / 教訓)に蒸留します。デフォルトはローカルルールベースの蒸留器、オプションで |
| Anthropic メモリツール互換のファイルインターフェース( |
📖 docs/retrieval-modes.md — すべての検索モード(キーワード · 密 · ハイブリッド · グラフ · GraphRAG · プロアクティブ
recall_when· 時間的as_of)の列挙されたリファレンス: メカニズム、使用タイミング、呼び出し、および例。
Tool | Description |
| エンティティ間の型付き関係リンクを作成する。 |
| エンティティのリンクを削除する。 |
| 設定可能な深さまでエンティティリンクグラフを辿る。 |
| リンクグラフ上のGraphRAGコミュニティ検出(決定論的ラベル伝播または貪欲モジュラリティ「louvain」;純粋Rust、オフライン)。 |
| 1つのコミュニティの抽出要約(オプションでLLMで洗練)、メンバーへの |
| GraphRAGグローバル検索:コミュニティ要約を広く探索し、最良のコミュニティのメンバーを深く掘り下げる—クラスター全体の総合的な回答。 |
| 読み取り専用のグラフ/エンティティ/インデックス/レシートのドリフトレポート(#869):未証明、ぶら下がり、アーカイブ/期限切れターゲット、クロスワークスペースエッジ、古いコミュニティメンバーシップ、FTSドリフト、欠落エンティティへのジャーナル参照。 |
| レガシーエッジにfrom側のエンティティIDを証拠アンカーとしてスタンプし、グラフリコールアームで利用可能にする(#869);ドライランプレビュー、ジャーナル記録。 |
ジャーナル
Tool | Description |
| アクター属性付きの構造化イベントを追加する。 |
| デジャブガード:再試行前に、以前記録された障害(ジャーナル+失敗/落とし穴エンティティ)に対してアクションをチェックする。読み取り専用。 |
| フィルター付きで時間範囲によるジャーナルをクエリする。 |
状態
Tool | Description |
| オプションのTTL付きでキー・バリュー状態を設定する。 |
| 状態値を取得する。期限切れの場合はnullを返す。 |
| 状態エントリを削除する。 |
| 状態キーを一覧表示する。オプションでプレフィックスでフィルタリング。 |
ライフサイクル
Tool | Description |
| エビングハウス忘却曲線スコアを再計算する(1000エンティティ単位のバッチトランザクション)。 |
| カテゴリ、減衰しきい値、または経過時間による一括アーカイブ。 |
| アーカイブされたエンティティを完全に削除+VACUUM。破壊的操作。 |
| 時間ベースのライフサイクルスイープ:本文の |
| コンテンツ編集:ワークスペーススコープのエンティティの本文をハッシュのみのマーカーに削除し、履歴+FTSテキストを削除、メタデータは保持(再取り込み可能)。明示的な |
| ワークスペーススコープのエンティティをすべての派生レイヤー(FTS、履歴、コミュニティ、リンク、ジャーナル)から物理的に消去+永続的な再取り込み抑制。明示的な |
| 自律的な一貫性グルーミングパス—昇格、減衰、リンク、アーカイブ。 |
| 完全な原子的グルーミング:cohere → decay → compactを1パスで実行(ドライラン対応)。 |
| 減衰しきい値以下のエンティティをアーカイブする。 |
| entitiesテーブルからFTS5検索インデックスを再構築する。 |
| カテゴリ内の重複/重複エンティティを、耐久性のある証跡付き観測に統合( |
| 睡眠時LLM統合:設定されたLLMを介して関連するエピソード記憶のクラスターを熟考し、すべてのソースに provenance リンクされた耐久性のある意味的洞察を書き戻す。冪等(証拠セットハッシュ)、矛盾認識、制限付き; |
品質
Tool | Description |
| 品質スコア(0.0-1.0)を割り当てる。 |
| トライグラム類似度による競合エンティティの検出;オプトインの |
| エラーから学習するための構造化訂正キャプチャ。 |
| 新しい事実を古い事実を置き換えるものとしてマーク(古いエンティティを |
| エンティティが実際にFOLLOWEDかMISSEDかを記録—減衰スコアリングと結果加重リコールランキングの両方に供給されるフォロー率効果シグナル(#681)。 |
キーストーン(ポリシールール)
Tool | Description |
| キーストーンを作成する—コンテキスト圧縮後も存続する必須ポリシールール(#683)。スコープ付き(テナント/フリート/エージェント)、重量順位付け、すべての変更で暗号チェーン;作成は信頼階層でゲート制御。 |
| スコープのマージされたキーストーンを取得、重量順(高い順)次にスコープ特異性順—リコールに対する決定論的セッション開始対応物。レンダラーはこれらを他のすべてのコンテキストより先に注入する。 |
| マルチエージェントレジストリでエージェントを登録/更新または検索(#684):アイデンティティ+信頼階層(0-3)+フリート。信頼階層は機密操作をゲート制御(例:キーストーン作成には階層≥2が必要)し、リコール時の可視性強制を駆動する。 |
金庫とフェデレーション
ツール | 説明 |
| エンティティをYAMLフロントマター付きの.mdファイルにエクスポートします。 |
| .mdボールトディレクトリからインポートします(冪等)。 |
| エンティティをワークスペース間でコピーします。これはローカルエクスポート/ワークスペース名変更/再インポートです(ファイルベースで、ネットワークピアはありません)。Windowsで安全なデフォルトパスは#704で追跡されています。 |
| 1つのエンティティ(カテゴリ+キー指定)を別のワークスペースに共有し、コンテンツを保持します。 |
| すべての異なるエンティティカテゴリを一覧表示します。 |
メトリクスと運用
ツール | 説明 |
| 全テーブルにわたる完全なDB統計。 |
| サーバーとDBのヘルスチェック。 |
| パフォーマンスベンチマークの追跡。 |
| DBメンテナンス:重複排除、孤立検出、VACUUM、FTS5再インデックス(ドライラン対応)。 |
| LLMセッションの統合 — トランスクリプトから教訓を抽出します。 |
| v0.1.xのDBを現在のスキーマに移行します。 |
ジョブ別ツール(エージェントチートシート)
カテゴリ一覧ではありません。ジョブ一覧です。エージェントが実行しようとしている内容に該当する行を選んでください:
ジョブ | ツール |
永続的な事実/決定/修正を記憶する |
|
計画前に思い出す |
|
開発のナラティブを再構築する(意図の軌跡、次の作業) |
|
決定:上書きと権限 |
|
「当時は何を信じていたか?」と問う |
|
記録の修正/矛盾の表面化 |
|
圧縮に耐えるポリシー |
|
運用、信頼、スコープ |
|
CLI
# Server
perseus-vault serve --db /data/perseus-vault.db
perseus-vault serve --web --port 8767 --encryption-key ~/.perseus-vault/secret.key
perseus-vault serve --llm-endpoint http://localhost:11434/api/generate --llm-model llama3
perseus-vault serve --transport sse --port 8787 --mcp-token my-secret-token
# Maintenance (operate directly on DB, no server needed)
perseus-vault stats --db /data/perseus-vault.db
perseus-vault forget --db /data/perseus-vault.db --category decision --key stale-choice --reason "superseded"
perseus-vault prune --db /data/perseus-vault.db --category junk --min-decay 0.1 --dry-run
perseus-vault purge --db /data/perseus-vault.db --dry-run
perseus-vault decay --db /data/perseus-vault.db
perseus-vault reindex --db /data/perseus-vault.db
perseus-vault vault-export --db /data/perseus-vault.db --vault-dir ./export/
perseus-vault vault-import --db /data/perseus-vault.db --vault-dir ./export/
perseus-vault obsidian-sync ~/obsidian-vault/Perseus Vault/ # one-shot export to an Obsidian vault
perseus-vault obsidian-sync ~/obsidian-vault/Perseus Vault/ --watch # continuous sync on every memory change
# Key management
perseus-vault keygen --key-file ~/.perseus-vault/secret.key
# #918: read-only TUI inspector (retrieval telemetry, claim cards, entity
# state, decay, bi-temporal history). Never writes; repairs go through the
# governed MCP tools. Requires the default `tui` feature.
perseus-vault inspect --db /data/perseus-vault.db --key-file ~/.perseus-vault/secret.keyセッションを再起動せずにライブ更新
perseus-vault serve は、自身のバイナリがセッション中にディスク上で置き換えられた(通常の cargo build / 再インストールの流れ)ことを検出し、古いプロセスイメージからの結果提供を拒否します — すべてのツールは空の結果に劣化する代わりに、明示的なエラーメッセージを返します(#858、#1045)。同じ stdio 接続上で2つの復旧パスがあります(クライアントの再起動は不要):
明示的:
perseus_vault_handoff_restart {"confirm": true}を呼び出すと、プロセスが新しいバイナリにホットスワップされ、MCPセッション状態(初期化 + エージェントID)を保持したままセッションが継続します。自動(オプトイン):
PERSEUS_VAULT_AUTO_HANDOFF=1を設定してサーバーを起動すると、次のツール呼び出し時に透過的にスワップが行われ、新しいバイナリが直接応答します。
macOS/Linuxでは、スワップは真の exec(同じPID、同じパイプ)です。Windowsでは実行中の実行ファイルがロックされるため、セッション途中での置き換えは不可能です。セッション境界をまたいで更新を行ってください。完全な契約とローカル開発ワークフローは docs/specs/live-update-handoff.md を参照してください。
手動DB編集。 上記のメンテナンス動詞と通常のMCP書き込みパスは、FTS5インデックスを自動的に同期します。
entitiesテーブルをsqlite3で直接編集する(手動のDELETE/UPDATE)と、その同期をバイパスし、孤立したインデックス行が残る可能性があります — すでに存在しないコンテンツに対する「ゴースト」再現ヒットです。直接SQL編集を行った後は、perseus-vault maintain --db <path>(またはperseus-vault reindex)を実行してFTSインデックスを調整してください。
フラグ
フラグ | 説明 |
| SQLiteデータベースパス(デフォルト: |
| Webダッシュボードを起動 |
| ダッシュボードのポート(デフォルト:8767) |
| ダッシュボードのバインドアドレス(デフォルト:127.0.0.1) |
| MCPトランスポート: |
| SSE/HTTPトランスポート認証用のBearerトークン |
| AES-256-GCMキーファイルのパス |
|
|
| LLMモデル名(デフォルト:llama3) |
| LLMエンドポイント(OpenAI、Azureなど)のAPIキー |
| OpenAI互換の埋め込みエンドポイント |
| connectors.yamlへのパス |
データベースの場所
正規のデータベースパスは:
~/.perseus-vault/data/perseus-vault.dbスクリプト、MCPホスト設定、cron/ハーベストジョブでは常に --db を渡す(または $PERSEUS_VAULT_DB_PATH を設定する)ことで、すべての呼び出しが同じファイルを対象にします。どちらも設定されていない場合、Perseus Vault は以下の順序でデフォルトを解決し、既に存在する最初のものを使用します(そのため、アップグレードユーザーや従来のシングルユーザーインストールが空の状態でサイレントに起動されるのではなく、検出されます):
~/.perseus-vault/data/perseus-vault.db— 正規(現在の名前)~/.perseus-vault/data/perseus-vault.db— 名前変更前~/.perseus-vault/data/perseus-vault.db— 名前変更前~/perseus-vault.db— 従来のシングルユーザーインストール場所
いずれも存在しない場合は、~/.perseus-vault/data/perseus-vault.db を作成します。これらのうち複数が存在し、かつ --db/$PERSEUS_VAULT_DB_PATH を渡していない場合、Perseus Vault は選択したファイルと無視した他のファイルをstderrに警告として出力するため、あいまいなマルチデータベース状態がサイレントではなく表示されます。--db または $PERSEUS_VAULT_DB_PATH を明示的に設定すると常に優先され、警告は抑制されます。
Obsidian でのAIメモリ
Perseus Vault はAIエージェントの長期記憶であり、同時にあなたの第二の脳としても機能します。エージェントが記憶したすべてのエンティティは、YAMLフロントマター付きのプレーンなMarkdownノートとしてエクスポートされるため、AIの記憶は、すでに使用しているObsidian、Logseq、Notionなどのツール内でナビゲート可能なパーソナルナレッジベースになります。
# Export your entire memory to an Obsidian vault as linked Markdown notes
perseus-vault obsidian-sync ~/obsidian-vault/Perseus Vault/
# Keep it live — re-export automatically on every memory change
perseus-vault obsidian-sync ~/obsidian-vault/Perseus Vault/ --watchボールトをObsidianで開くと、エージェントの知識のグラフが表示されます。
WikiLinkバックリンク。 あるエンティティが別のエンティティにリンクしている場合(perseus_vault_link または depends_on / implements / references 関係を介して)、エクスポートされたノートには ## Links セクションが追加され、[[WikiLink]] バックリンクがObsidianのグラフビューでネイティブに解決されます:
---
id: cli-de8dfb8364b6
category: architecture
key: api
type: insight
decay_score: 0.5000
---
{"content":"axum service"}
## Links
- [[cli-99756b494c7d|database]] (depends_on)リンクはエンティティIDで解決されます(ノートは <id>.md として書き込まれる)ため、壊れることはなく、Obsidianはリンクラベルとして人間が読める key を表示します。グラフビューを開けば、エージェントのアーキテクチャ、決定、洞察がクリック可能なナレッジマップになります。
--watch は、安価で決定論的な状態ダイジェストを一定間隔でポーリングし、メモリが実際に変更された場合にのみ再エクスポートします。ファイルシステム監視の依存関係やサーバーとの結合なしに、すべての perseus_vault_remember 書き込みを自然にキャッチします。間隔は PERSEUS_VAULT_SYNC_INTERVAL_SECS で調整できます(デフォルト:2秒)。
その他のPKMツール
ツール | 方法 |
Obsidian |
|
Logseq |
|
Notion |
|
クラウド専用の「第二の脳」ツールとは異なり、Perseus Vault は100%ローカルで動作し、Rust で書かれ、AES-256-GCM で保存時に暗号化し、減衰スコアリングを適用して古い記憶を薄れさせます — 知識ベースはあなたのものであり、新鮮さを保ちます。
機能
セマンティック検索(デフォルトでオン)
バンドル済みインプロセス埋め込み — 量子化された all-MiniLM-L6-v2 モデル(384次元)がバイナリにコンパイルされているため、密ベクトル/意味検索は設定不要かつネットワーク不要で動作します:Ollama、APIキー、モデルのダウンロードは一切不要です。これがデフォルトのビルド(
bundled-embeddingsフィーチャー)です。書き込み時の自動埋め込み(#271) —
perseus_vault_rememberは、新しい(または内容が変更された)エンティティを書き込み時に同期的に埋め込み、バンドルモデルを使用します。単一エンティティの埋め込みは決定論的でLRUキャッシュされるため、処理は軽量でバックグラウンドタスクは追加されません。埋め込みの失敗は致命的ではありません(stderrにログ出力);書き込みは常に成功します。ハイブリッドがデフォルトの検索モード(#271) —
modeフラグなしのperseus_vault_recall(query=...)は、埋め込みが存在する場合は自動的にハイブリッド(RRFで融合された密ベクトル+キーワード)を選択し、埋め込みがない場合は透過的に fts5 キーワード検索にフォールバックします。手動のperseus_vault_embedステップや覚えるべきフラグは不要です。perseus_vault_semantic_search(query, limit)— 「これに似たものを見つける」だけを行いたい場合の、純粋な密ベクトルベースの意味検索(キーワードフォールバックなし)のためのワンツールショートカット。オプションの代替埋め込みエンジン — バンドルモデルの代わりにOllamaまたはOpenAI互換の
/v1/embeddingsエンドポイントを使用するには、--llm-endpoint(および必要に応じて--embedding-endpoint/--llm-api-key)を設定します。これは完全にオプションです;デフォルトではバンドルモデルが使用されます。cargo build --no-default-featuresでバンドル埋め込みなしの軽量バイナリをビルド — その場合、リモート埋め込みエンジンが設定されていない限り、検索はデフォルトでキーワード検索になります。
ハイブリッド検索の内部
FTS5キーワード検索 — LIKEフォールバックとPorterステミング展開を備える
密ベクトル検索 — 保存された埋め込みに対するコサイン類似度による
相互ランク融合(RRF) — キーワードとベクトルの結果を結合
クエリ拡張 — より広範な検索のための自動ステミングバリアント
メモリライフサイクル
Perseus Vaultは、人間の記憶経路に着想を得た3つの生体模倣層を使用してメモリをモデル化します:
世界(コア) — 減衰が遅い、環境に関するグローバルな事実。
エピソード(バッファ) — 減衰が速い、セッション固有の対話履歴。
意味(ワーキング) — 減衰が中程度の、一般的な知識と学習された概念。
これらの層とは、perseus_vault_recall_layer ツールを使用するか、perseus_vault_remember で layer パラメータを指定することで直接対話できます。
エビングハウスの忘却曲線 — 記憶は取得されない限り自然に薄れます(アクセス時にリフレッシュ)
層の昇格 — アクセス頻度に基づいてバッファ → ワーキング → コアへ昇格
自動アーカイブ — 古いエンティティはアーカイブ;パージで完全に削除+VACUUM
常時オンエンティティ — セッションインジェクションのためにアイデンティティに重要なメモリを固定(検索ファーストではハードキャップあり;
recall_whenトリガーを推奨)プロスペクティブクエリヒント(#919) — エンティティごとにオプションで1~3の自然言語フレーズ(
perseus_vault_rememberのhints)を本文とともにFTS5にインデックス化し、平易なクエリと保存された表現の間の語彙ギャップを埋めます。デフォルトではオフ(PERSEUS_VAULT_HINTS_ENABLED=1);無効時は拒否されます。詳細は docs/specs/prospective-query-hints.md を参照。
検索ファーストコンテキストインジェクション
Vaultはクエリ層です — ターンに必要な少数の事実を取得し、ホストにすべてのシステムプロンプトに貼り付けるための固定ブロブを渡すことはしません。
perseus_vault_context と perseus-vault prepare はデフォルトで検索ファーストです:
関連性ゲーティング —
query(現在のタスク/メッセージ)を渡すと、そのrecall_whenトリガーまたはインデックス化されたコンテンツが一致するエンティティのみが注入されます。クエリがない場合、トピックに基づく注入は行われません:ブロックはコンパクトな検索ポインタとなり、無関係なVault書き込み間でバイト安定(プレフィックスキャッシュに優しい)。モデルごとの検索予算 — 出力はホストモデルから解決された文字数予算に制限されます:デフォルト/リーンプロファイルは1500文字;大ウィンドウ(「opus」)プロファイルは6000文字;
max_context_charsは両方を上書きします。上限付き常時オン —
always_on: trueはアイデンティティに重要な事実に対して引き続き機能しますが、検索ファーストセットはハードキャップ(上位5件)され、オーバーフロー時にはrecall_whenトリガーを促す警告が出力されます。レガシーオプトイン — 古い無条件のトップNダンプは、
mode: "always_inject"(prepareの場合は--legacy-context)で引き続き利用可能で、予算を渡さない限り制限はありません。
perseus-vault prepare --task "deploying the payments service" --model claude-sonnet-4-6
perseus-vault prepare --task "..." --max-context-chars 800 # explicit budget
perseus-vault prepare --task "..." --legacy-context # old dump, opt-inRAGと埋め込み
perseus_vault_ask— 任意のLLM(Ollama、OpenAIなど)を介した、保存されたメモリに対する自然言語Q&Aperseus_vault_embed— OllamaまたはOpenAI互換の/v1/embeddingsを介した密ベクトルの生成と保存単一エンティティおよびバッチカテゴリの埋め込みをサポート
暗号化
AES-256-GCM によるエンティティ
body_jsonの透過的暗号化新規インストールではデフォルトで有効 — 標準キーは最初の書き込み時に
~/.perseus-vault/secret.keyに自動生成されます明示的なキーには
--encryption-keyフラグ;カスタムキー生成にはperseus-vault keygen既存の平文データベースは、
init --rekey移行パス(または明示的なPERSEUS_VAULT_ALLOW_PLAINTEXT=1)でクローズドに失敗しますFTS5インデックスは検索のために平文のままです
Webダッシュボード
組み込みのAxum HTTPサーバー(
perseus-vault serve --web --port 8767)ダークテーマのダッシュボード:検索、エンティティテーブル、vis.jsグラフ、タイムライン
デフォルトのバインド:
127.0.0.1(公開するには--web-bind 0.0.0.0を使用)同時読み取りのためのWALモードの個別SQLite接続
外部コネクタ
GitHub issuesコネクタ — リポジトリごとにIssue/PRを取り込み、レート制限対応
ファイルウォッチャー — コンテンツハッシュによる重複排除で
.md/.txt/.jsonファイルのディレクトリをスキャンYAMLベースのコネクタ設定(
--connectors-config経由)
マルチトランスポート
stdio(デフォルト) — 設定不要、任意のMCPホストで動作
SSE — HTTPベースのMCPクライアント向けサーバー送信イベント
HTTP — REST形式のMCPエンドポイント
Bearerトークン認証 — SSE/HTTPトランスポート用
Perseus統合
Perseus Vaultは、Perseus のデフォルトメモリバックエンドです:
perseus_vault:
enabled: true
transport: "stdio"
command: ["perseus-vault", "serve", "--db", "~/.perseus-vault/data/perseus-vault.db"]
timeout_s: 30.0
merge_strategy: "local_first"
fallback_to_local: true
context_categories: ["decision", "architecture", "convention"]
context_limit: 10政府および連邦調達
Perseus Vaultは、政府での展開を前提にゼロから構築されています。
機能 | ステータス |
ライセンス | MIT — コピーレフトなし、GPL/AGPLなし |
SBOM | 公開済み — NTIA最小要素 |
エアギャップ対応 | 完全オフライン — デフォルトではテレメトリ、APIコール、ネットワークなし |
保存時の暗号化 | ボディに対するAES-256-GCM、新規インストールではデフォルトで有効 |
監査証跡 | チェーン・オブ・カストディを備えた不変ジャーナル |
サプライチェーン | SLSAアテステーション進行中 |
連邦政府の購入者向け: 調達情報、コンプライアンスステータス、展開モデル(エアギャップ、オンプレミス、機密環境)については docs/federal-buyers.md を参照してください。
Perseus Computing LLCは米国所有の小規模企業です。SAM.gov登録進行中。 NAICS: 541715, 541511, 541512。
プライバシーポリシー
Perseus VaultはローカルファーストのMCPサーバーです — 完全にあなたのマシン上で動作します。
データ収集
データ収集は行いません。 Perseus Vaultは、ユーザーデータ、使用統計、テレメトリを収集、送信、またはホームコールすることはありません。
すべてのデータはローカルのSQLiteデータベースファイルに残ります。
データの使用と保存
すべてのメモリエンティティ、ジャーナルエントリ、状態は、
--dbで指定したパスのローカルSQLiteデータベースに保存されます。オプションの保存時のAES-256-GCM暗号化が利用可能です — 有効にすると、エンティティのボディは保存前に暗号化されます。
Perseus Computing LLCまたは第三者とデータが共有されることはありません。
第三者との共有
なし。 Perseus Vaultはデフォルトで完全にエアギャップされています。APIコール、クラウドサービス、外部ネットワークリクエストはありません。
オプションの密ベクトル埋め込み機能は、ローカルでコンパイルされたモデルを使用します — 外部の埋め込みAPIは呼び出されません。
データ保持
4つの異なるライフサイクル操作で保持を制御します(詳細は
docs/specs/data-boundaries-retention-lifecycle.mdを参照):ソフトデリート(perseus_vault_forget、コンテンツは復元可能)、期限切れ(perseus_vault_expire、時間ベースのstatus='expired'、コンテンツは保持)、編集(perseus_vault_redact、コンテンツはハッシュのみにスクラブ、メタデータは保持)、物理的消去(perseus_vault_erase、すべての派生層から削除、永続的な再取り込み抑制)。perseus_vault_purgeはアーカイブされた行からスペースを再利用します。自動的なマシン外へのバックアップは実行されません。
連絡先
リリース検証
リリースバイナリは、GitHub Actions を介してタグ付けされたコミットからビルドされます。すべてのリリースには以下が含まれます:
アーティファクト | 説明 | 検証 |
| フルビルド(バンドル埋め込み、glibc) |
|
| 軽量ビルド( |
|
SLSA provenance attestation | Sigstore署名のビルド証明 |
|
リリースバイナリの検証
# 1. Verify SHA-256 checksum
sha256sum -c perseus-vault-lite-x86_64-unknown-linux-musl.tar.gz.sha256
# 2. Verify SLSA build provenance (requires gh CLI + OIDC session)
gh attestation verify perseus-vault-lite-x86_64-unknown-linux-musl.tar.gz \
--repo Perseus-Computing-LLC/perseus-vault
# 3. Confirm the binary identity
./perseus-vault --version
# Should show both the release version AND the git commit hash, e.g.:
# perseus-vault 2.20.2 (v2.20.2-0-gabcdef1)
# 4. Confirm the doctor reports the same identity
./perseus-vault doctor --db /tmp/test.db | head -1
# perseus-vault doctor — v2.20.2 (v2.20.2-0-gabcdef1)ソースからの再現可能なビルド
# The exact same binary (bit-for-bit) requires matching:
# - Rust toolchain version (see rust-toolchain.toml)
# - Locked dependencies: `cargo build --locked`
# - Build flags: `--release` for release builds
cargo build --locked --release
./target/release/perseus-vault --versionライセンス
MIT — LICENSE を参照。
Available Tools
43 toolsmimir_askARead-only
Ask a natural language question and get a grounded answer from stored memories via RAG. Internally recalls top-k entities, assembles context, and queries the configured LLM (Ollama) for an answer with cited sources. Requires --llm-endpoint to be set.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language question to answer from stored memories | |
| top_k | No | Number of top entities to use as context (max 20) |
Output Schema
| Name | Required | Description |
|---|---|---|
| answer | No | Grounded answer with cited sources |
| sources | No | Cited source entities used in the answer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint and destructiveHint annotations by detailing the internal process: recalling top-k entities, assembling context, and querying the configured LLM (Ollama) for an answer with cited sources. It also discloses the dependency on the '--llm-endpoint' configuration, which is critical for the tool's operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences. The first sentence clearly states the primary function, and the second adds important internal details and a requirement. No extraneous words; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 parameters, full schema coverage, and an output schema (indicated by context), the description covers the key aspects: purpose, internal process (RAG, top-k, LLM), and a configuration requirement. It lacks explicit mention of which memories are queried (e.g., current workspace) but remains sufficiently complete for an agent to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides full descriptions for both parameters ('query' and 'top_k'), achieving 100% schema coverage. The description mentions 'Internally recalls top-k entities' which adds marginal context to the 'top_k' parameter but does not significantly enhance understanding beyond the schema. Given high schema coverage, the description adequately complements but does not surpass the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: ask a natural language question and get a grounded answer from stored memories via RAG. It uses a specific verb ('ask') and resource ('stored memories'), and the wording distinguishes it from sibling tools like 'mimir_recall' or 'mimir_synthesize' by emphasizing the natural language Q&A nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a prerequisite ('Requires --llm-endpoint to be set') but does not provide explicit guidance on when to use this tool versus alternatives (e.g., mimir_recall for raw retrieval, mimir_synthesize for generation without memories). The usage context is somewhat implied through the tool's purpose, but lacking explicit when-not-to-use or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_as_ofARead-only
Bi-temporal time-travel: return the version of a fact (category + key) that Mimir believed at a given past instant. When a fact is overwritten, the prior version is kept in history; this returns whichever version was live at as_of_unix_ms. Use to answer 'what did we believe about X back then?' or to audit how a fact changed. Returns found=false if the fact had not been recorded yet at that time.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Entity key within the category | |
| category | Yes | Entity category | |
| as_of_unix_ms | Yes | Transaction-time instant (unix ms) to travel to |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| key | No | |
| found | No | False if the fact had not been recorded by as_of_unix_ms |
| status | No | |
| category | No | |
| body_json | No | The fact's content as it was at as_of_unix_ms |
| entity_type | No | |
| as_of_unix_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds valuable context about history retention ('when a fact is overwritten, the prior version is kept') and the return behavior ('Returns found=false if not recorded yet'). This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise sentences, each adding value: purpose, history explanation, use cases, return behavior. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but indicated), the description covers purpose, behavior, and return field ('found'). It lacks mention of error conditions but is sufficiently complete for a time-travel query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description mentions 'category + key' and 'as_of_unix_ms' but uses similar wording as the schema. It does not add significant new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb ('return the version of a fact') and resource ('category + key') and distinguishes from siblings by highlighting time-travel and history. It also gives concrete use cases like 'what did we believe about X back then?'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use to answer...' providing clear context for when to use this tool. It does not explicitly exclude alternatives but implies that for current versions other tools would be used. This is sufficient for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_autocohereADestructive
Run a full atomic grooming pass: cohere (promote, link, archive), then decay (recalculate Ebbinghaus decay), then compact (archive below threshold). Returns a summary report. Use dry_run=true to preview without changes.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, preview changes without writing |
Output Schema
| Name | Required | Description |
|---|---|---|
| dry_run | No | |
| decay_updates | No | Entities whose decay score was updated |
| links_created | No | Auto-links created during cohere |
| archived_entities | No | Entities archived (cohere + compact) |
| promoted_entities | No | Entities promoted during cohere |
| db_size_delta_bytes | No | Change in SQLite file size in bytes |
| compact_archived_count | No | Entities archived during compact step |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, and the description elaborates on the specific operations (promote, link, archive, recalculate decay) and the atomicity of the pass. It provides behavior beyond annotations, though it could detail what gets archived or destroyed more precisely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences: the first states the action and steps, the second provides the dry_run option. No wasted words, front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the composite nature of the tool and the presence of an output schema, the description adequately covers the operation, steps, atomicity, and dry_run feature. It provides sufficient context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the single dry_run parameter (100% coverage). The description reinforces its purpose but adds little new meaning beyond the schema's description. Baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs a full atomic grooming pass consisting of cohere, decay, and compact steps, and returns a summary report. This distinguishes it from sibling tools that operate individually (e.g., mimir_cohere, mimir_decay, mimir_compact).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It mentions using dry_run=true to preview without changes, offering conditional guidance. However, it does not explicitly state when to use this composite tool versus running the individual steps separately, leaving some ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_benchADestructive
Record a performance benchmark data point. Tracks task metrics (turns taken, tokens used, success) alongside whether memory recall was used — enabling measurement of Mimir's impact on agent performance. Aggregate with mimir_recall to analyze trends.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags for categorization | |
| session_id | No | Session identifier for traceability | |
| tokens_used | Yes | Total tokens consumed by the task | |
| turns_taken | Yes | Number of conversation turns the task took | |
| recall_count | No | How many times memory was recalled during this task | |
| task_success | No | Whether the task completed successfully | |
| task_description | Yes | Description of the task being measured | |
| memory_recall_used | Yes | Whether memory recall (mimir_recall) was used during this task |
Output Schema
| Name | Required | Description |
|---|---|---|
| entity_id | No | Created benchmark entity ID |
| created_at_unix_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states that the tool records a data point, which aligns with the destructiveHint annotation (modifying state). No contradictions; the annotation handles the behavioral trait, and the description adds the context of what is recorded. However, it does not disclose additional side effects like persistence or idempotency, which is acceptable given annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences (40 words), front-loaded with the action verb 'Record', and contains no redundant information. Every sentence adds value: the first states the primary purpose, the second explains the metrics and relation to mimir_recall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters (4 required) and an output schema (not shown), the description covers the core purpose and the relationship to sibling tools. It mentions the metrics being tracked but does not elaborate on the output schema or optional parameters like tags and session_id, which are adequately documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds collective meaning by mentioning the key metrics (turns, tokens, success, memory recall) but does not provide new details beyond what the schema offers. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Record' and clearly identifies the resource as a 'performance benchmark data point'. It lists the tracked metrics (turns, tokens, success, memory recall) and explicitly distinguishes from sibling mimir_recall by noting aggregation for trend analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for recording benchmark data to measure Mimir's impact and directs users to aggregate with mimir_recall for analysis. While it does not list exclusions or alternatives beyond mimir_recall, the context is sufficient for an agent to decide when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_cohereADestructive
Run an autonomous coherence grooming pass over the memory. Promotes buffer entities to working layer, applies decay, auto-links related entities, and archives stale ones below the decay threshold. Use dry_run=true to preview without making changes.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, count what would be done without making changes | |
| max_links | No | Maximum auto-links to create (default 20, max 100) | |
| archive_threshold | No | Decay score below which entities are auto-archived (default 0.05) | |
| promote_threshold | No | Retrieval count threshold for buffer to working promotion (default 3) |
Output Schema
| Name | Required | Description |
|---|---|---|
| linked | No | Number of auto-links created |
| decayed | No | Number of entities whose decay score was reduced |
| dry_run | No | |
| archived | No | Number of entities archived due to low decay |
| promoted | No | Number of entities promoted from buffer to working |
| entities_examined | No | Total non-archived entities examined |
| completed_at_unix_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool modifies memory (promotions, decay, auto-links, archives), which aligns with the 'destructiveHint: true' annotation. It adds context beyond the annotation by specifying what changes occur, though it could mention potential side-effects more explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first clearly defines purpose and actions, the second adds a practical tip. No extraneous information, highly front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and 100% schema description coverage, the description adequately covers the tool's behavior, parameters, and usage. It lacks nothing essential for an autonomous grooming pass.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 4 parameters with descriptions (100% coverage). The description adds only a minor hint about dry_run. Baseline 3 is appropriate since the schema already provides adequate parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Run an autonomous coherence grooming pass over the memory.' It lists specific actions (promotes buffer entities, applies decay, auto-links, archives) that distinguish it from siblings like mimir_compact, mimir_decay, or mimir_prune.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage hint: 'Use dry_run=true to preview without making changes.' It implies the tool is for grooming memory but does not explicitly compare to alternatives or state when not to use it. This is sufficient but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_compactADestructive
Archive entities whose decay score has fallen below a threshold. Supports dry-run mode to preview without making changes. Run periodically or threshold-triggered to keep the database focused on active, high-value memories.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, report what would be archived without making changes | |
| min_decay | No | Decay threshold — entities with decay score below this are archived |
Output Schema
| Name | Required | Description |
|---|---|---|
| dry_run | No | Whether this was a dry run |
| entities_archived | No | Number of entities actually archived (0 in dry-run mode) |
| entities_examined | No | Number of entities checked |
| completed_at_unix_ms | No | Completion timestamp |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description confirms destructive behavior via 'archive', aligning with the destructiveHint annotation. It adds the dry-run behavioral trait but does not disclose what archiving entails (e.g., reversibility, data loss). More transparency about consequences would improve this score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose and dry-run support, second suggests usage pattern. No redundant words or fluff; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of output schema (not shown but indicated), the description covers the core action and usage pattern adequately. It could detail consequences of archiving (e.g., recoverability), but overall it is sufficiently complete for a tool with well-documented parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with clear explanations for both parameters ('dry_run' and 'min_decay'). The tool description does not add new meaning beyond reiterating the decay threshold and dry-run mode, so value is marginal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Archive' and the resource 'entities whose decay score has fallen below a threshold'. It specifies the dry-run mode and mentions periodic/threshold-triggered usage, distinguishing it from sibling tools like mimir_prune or mimir_purge.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises to run 'periodically or threshold-triggered' and mentions dry-run mode for previewing. It does not explicitly state when not to use this tool or list alternatives, but the given context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_conflictsA
Detect conflicting entities in the same category — pairs with low trigram similarity in their body_json. Flags potential contradictions, duplicate-but-divergent entries, and stale-overwritten facts. Read-only by default. Opt in with resolve=true to actively invalidate the lower-certainty side of clear conflicts (superseding it into history, reversible + time-travelable via mimir_as_of); that path defaults to dry_run=true so you preview first, and never resolves pairs whose certainties are within certainty_margin.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of conflicts to return / resolve | |
| offset | No | Number of entities to skip for pagination | |
| dry_run | No | When resolve=true, only report what would be invalidated unless set false | |
| resolve | No | Opt-in: invalidate the lower-certainty side of clear conflicts instead of only reporting them | |
| category | Yes | Category to scan for conflicts | general |
| threshold | No | Similarity threshold — pairs below this are flagged as conflicts | |
| certainty_margin | No | Minimum certainty gap to auto-resolve; closer pairs are skipped as ambiguous |
Output Schema
| Name | Required | Description |
|---|---|---|
| conflicts | No | Conflict pairs with similarity scores (detection mode) |
| invalidations | No | Winner/loser pairs invalidated or previewed (resolve mode) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Contradiction: description claims 'Read-only by default' but annotations set readOnlyHint=false, indicating the tool may cause side effects. This inconsistency undermines transparency. Otherwise, description explains behavior well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with main purpose upfront, then details on resolve mode. A bit lengthy but each sentence adds value. Could be slightly more concise, but still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive for a complex tool with 7 parameters and output schema. Covers both detection and resolution, safety mechanisms, and parameter behavior. No gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 7 parameters have descriptions in schema (100% coverage). Description adds value by explaining how parameters interact (e.g., dry_run with resolve, certainty_margin for ambiguity) and the trigram similarity context for threshold.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool detects conflicting entities in the same category using trigram similarity on body_json. It distinguishes itself by offering both read-only detection and optional conflict resolution, specifying the exact purpose and key actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: read-only by default, opt-in with resolve=true, dry_run preview, and certainty_margin to avoid ambiguous resolutions. Could explicitly state when not to use, but still strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_contextARead-only
Return a pre-formatted markdown context block of the most important entities for session injection. The downstream system (Perseus) uses this to pre-load AI agent context with relevant memories before work begins.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of entities to include in the context block | |
| categories | No | Categories to include. Empty array = all categories. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | No | Markdown-formatted context block with entity details |
| total_chars | No | Character count of the markdown content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds behavioral context by specifying the output is pre-formatted markdown and the downstream use case. It does not contradict annotations and provides useful information beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core purpose, and every word adds value. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a full input schema (100% coverage), an output schema, and readOnlyHint annotation, the description is sufficient. It explains the output format and use case, but could optionally include details about the structure of the markdown or how 'most important entities' are determined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters (limit and categories). The description does not add additional meaning beyond what the schema already provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a pre-formatted markdown context block of important entities for session injection, naming the downstream system Perseus. It is specific about the verb (return) and resource (context block), and the purpose is distinct from sibling tools like mimir_recall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for pre-loading AI agent context before work begins (session injection). However, it does not explicitly state when to avoid using this tool or mention alternatives among the many sibling mimir tools. The guidance is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_correctADestructive
Capture a user correction to the agent. Stores what went wrong, what the user said, and the lesson learned — as both a 'correction' entity and a journal entry. Use this every time the user corrects your approach. Enables the self-improving feedback loop: the agent learns from mistakes across sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags for categorization | |
| category | No | Entity category (default: 'correction') | correction |
| session_id | No | Session identifier for traceability | |
| visibility | No | Visibility: 'private', 'workspace', or 'public' | workspace |
| task_context | Yes | What task was being attempted when the correction occurred | |
| wrong_approach | Yes | What the agent did that was wrong (the mistaken approach) | |
| user_correction | Yes | What the user said to correct the agent (the right way) |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | No | |
| category | No | |
| entity_id | No | Created correction entity ID |
| journal_id | No | Created journal entry ID |
| created_at_unix_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations give destructiveHint: true, which the description aligns with by stating it stores entities. The description adds value beyond annotations by explaining the dual storage (correction entity and journal entry) and the self-improving feedback loop across sessions. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences, front-loading the purpose and usage. Every sentence is informative and necessary: first sentence defines the action and storage, second covers when to use and the learning benefit. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters and an output schema (not shown), the description covers the main action, usage, and outcome. It could mention side effects or prerequisites, but the core functionality is well explained for an AI agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well documented. The description reinforces the key parameters (wrong_approach, user_correction, task_context) by naming them in prose, adding context that they capture what went wrong and what the user said.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Capture' and the resource 'user correction'. It distinguishes from siblings like mimir_remember and mimir_journal by specifying it stores corrections, not general facts. The phrase 'Use this every time the user corrects your approach' reinforces the specific purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool: 'every time the user corrects your approach'. It does not explicitly list alternatives or when not to use, but the context implies other tools for other purposes, making it clear enough for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_decayADestructive
Recalculate Ebbinghaus decay scores for all entities based on time since last access. Auto-archives entities that have fully decayed (score < 0.05). Run periodically to keep memory fresh — decayed entities surface less often in recall results.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| auto_archived | No | Entities auto-archived because decay fell below 0.05 |
| entities_checked | No | Total entities evaluated |
| entities_updated | No | Entities whose decay score changed |
| completed_at_unix_ms | No | Completion timestamp |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral detail beyond the destructiveHint annotation by explaining auto-archiving of low-score entities and the effect on recall results. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently front-load the main action and then provide usage and consequence. Every sentence is valuable, with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, clear destructive side effect) and the existence of an output schema, the description covers all necessary aspects: what it does, when to use it, and behavioral outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage, the description's baseline is 4. It adds no parameter information because none is needed, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it recalculates Ebbinghaus decay scores and auto-archives fully decayed entities, specifying both the verb and resource. This distinguishes it from sibling tools like mimir_forget or mimir_purge by its specific decay recalculation purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises running periodically to keep memory fresh, providing clear usage context. However, it does not explicitly exclude use cases or compare alternatives among siblings, so guidance is good but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_embedADestructive
Generate and store dense vector embeddings for entities via Ollama /api/embed. Supports single entity (category+key) or batch mode (batch_category). Requires --llm-endpoint to be set.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Entity key for single mode | |
| text | No | Text to embed (omit to use entity body_json) | |
| category | No | Entity category for single mode | |
| batch_limit | No | Max entities in batch mode | |
| batch_category | No | Embed all entities in this category lacking embeddings |
Output Schema
| Name | Required | Description |
|---|---|---|
| embedded | No | Number of entities embedded |
| dimensions | No | Vector dimensions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, so the description's addition of 'Generate and store' and the dependency on Ollama adds some context. But it doesn't detail what gets overwritten or the exact side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that front-load the purpose and then detail modes and requirements. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 optional parameters and an output schema, the description covers operation modes and prerequisites. It doesn't describe return values, but the output schema likely handles that. It's mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description adds minimal value beyond the overview of modes. It reiterates the mode logic but doesn't enhance parameter understanding significantly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates and stores dense vector embeddings for entities, distinguishes between single and batch modes, and mentions the Ollama endpoint. This differentiates it from sibling tools like mimir_recall or mimir_remember.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains when to use single mode (category+key) vs batch mode (batch_category) and notes the requirement for --llm-endpoint. However, it lacks explicit exclusions or alternatives, so it's not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_extractARead-only
Extract structured knowledge — facts, preferences, temporal events, episodes — from raw text or a stored entity, using a fully local, deterministic rule-based extractor (no cloud LLM, no embedding/API call, no network). Read-only: never writes to the store. Provide text, or category + key to extract from a stored entity.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Key of a stored entity to extract from (requires category). | |
| text | No | Raw text to extract from. If omitted, category + key of a stored entity are used. | |
| category | No | Category of a stored entity to extract from (requires key). | |
| strategy | No | Extractor strategy: 'rule_based' (local heuristics) or 'none' (no-op). | rule_based |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | Extracted items, each an object with `kind` and `text`. |
| total | No | Number of items extracted |
| strategy | No | Extractor strategy used |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true), description adds 'never writes to the store' and details on deterministic, local, no-network operation. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences, front-loaded with main purpose. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description covers inputs, usage, and behavioral traits sufficiently. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 100%, description adds clarification on usage of `text` vs `category`+`key` and explains `strategy` enum values (local heuristics vs no-op). Adds meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'extract' and resource 'structured knowledge' from raw text or stored entity. Distinguishes from siblings by specifying local, deterministic rule-based extractor. No tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains usage options: provide `text` or `category`+`key` directly. Does not explicitly list when not to use or alternatives, but clear context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_federateADestructive
Federate entities from one workspace to another. Exports entities scoped to from_workspace, remaps their workspace_hash to to_workspace, and imports them — effectively copying or moving knowledge between workspaces. Use this for cross-agent or cross-project knowledge sharing without manual file transfer.
| Name | Required | Description | Default |
|---|---|---|---|
| vault_dir | No | Temporary vault directory for the intermediate .md export files | /tmp/mimir-federate |
| to_workspace | Yes | Target workspace hash to import entities into | |
| from_workspace | Yes | Source workspace hash to export entities from |
Output Schema
| Name | Required | Description |
|---|---|---|
| exported | No | Number of entities exported from the source workspace |
| imported | No | Number of entities imported into the target workspace |
| remapped | No | Number of entities whose workspace_hash was remapped |
| import_errors | No | Any errors encountered during import |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint: true, so description doesn't need to repeat that, but the description says 'copying or moving' without clarifying whether source entities are preserved. No mention of authorization or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: purpose, mechanism, use case. Front-loaded with action verb. No unnecessary words. Efficient and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists and parameter coverage is high. However, the tool involves data transfer and potential destructiveness; the description should clarify what happens to source entities and handling of duplicates. Lacks these details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good parameter descriptions. The tool description reiterates the purpose of each parameter without adding new details beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it federates entities between workspaces via export, remap, import. It distinguishes from manual file transfer but does not explicitly name sibling tools like mimir_vault_export/import or mimir_share, though the usage hint helps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this for cross-agent or cross-project knowledge sharing without manual file transfer', indicating when to use. Lacks explicit when-not-to-use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_forgetADestructive
Soft-delete an entity by setting archived=1. The entity is hidden from queries but recoverable. Use this to clean up stale or incorrect facts without permanent data loss.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Entity key to archive | |
| reason | No | Reason for archiving, logged for audit trail | |
| category | Yes | Entity category to archive |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | No | Entity key |
| found | No | Whether the entity was found and archived |
| category | No | Entity category |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description adds that it is a soft-delete (recoverable) and that the entity becomes hidden from queries. This provides useful behavioral context that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the key action and effect. Every sentence adds value: the first explains what it does, the second when to use it. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, presence of an output schema, and full schema parameter descriptions, the description adequately covers purpose, behavior, and usage context. It is sufficient for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already includes descriptions for all three parameters. The description adds no additional meaning beyond what the schema provides, meeting the baseline for this score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('soft-delete an entity'), the mechanism ('setting archived=1'), and the effect ('hidden from queries but recoverable'). It implies a contrast with permanent deletion tools like purging, distinguishing its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it to 'clean up stale or incorrect facts without permanent data loss,' providing clear context. It does not, however, mention when not to use it or list alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_get_entityARead-only
Get an entity by ID with its full body_json content. Use after mimir_recall with preview_cap to read the complete body of a truncated result. The drill-down footer embedded in preview-capped results references this tool with the entity ID to use.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entity ID to retrieve (from recall result id field or preview cap footer) |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| key | No | |
| layer | No | |
| status | No | |
| category | No | |
| always_on | No | |
| body_json | No | Full entity body content |
| certainty | No | |
| decay_score | No | |
| entity_type | No | |
| retrieval_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with the readOnlyHint annotation by stating 'Get an entity'. It adds behavioral context that the tool retrieves full body_json content, which is beyond what the annotation provides. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each providing essential information: purpose, usage recommendation, and parameter source. It is efficient with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema present), the description fully covers purpose, usage context, and parameter explanation. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 100%, so baseline is 3. The description adds extra context by explaining that the ID comes from a recall result or preview cap footer, which goes beyond the schema description alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get an entity by ID with its full body_json content', using a specific verb and resource, and distinguishes it from the sibling tool mimir_recall which returns preview-capped results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use after mimir_recall with preview_cap to read the complete body of a truncated result', providing clear context for when to use this tool, though it does not explicitly mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_healthARead-only
Check whether the Mimir server and its SQLite database are healthy. Returns a simple healthy/unhealthy status. Use this for health checks and monitoring, not for detailed stats (use mimir_stats).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | Server health status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds that it checks server and DB, and returns simple status, which is useful context but doesn't go beyond what's expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with purpose and usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully covers what the tool does, when to use it, and what it returns. Output schema exists, so no need to detail return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; baseline 4 applies as description doesn't need to add parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb (check), resource (Mimir server and its SQLite database), and output (healthy/unhealthy). Distinguishes from sibling mimir_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use for health checks and monitoring, and not for detailed stats, naming the alternative tool mimir_stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_ingestADestructive
Sync external data connectors (GitHub issues, file watcher) into Mimir. Call with no arguments to run all enabled connectors, or specify a connector name to run only that one. Use dry_run=true to preview without storing.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview documents without storing them | |
| connector | No | Specific connector to run (omit for all enabled) |
Output Schema
| Name | Required | Description |
|---|---|---|
| errors | No | Error messages from connectors that failed |
| dry_run | No | Whether this was a dry run |
| ingested | No | Number of documents ingested (or would be ingested in dry run) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint: true, indicating mutation. The description adds context about preview mode (dry_run) and connector selection, but does not detail potential side effects like overwriting or merging behavior, which would be useful. Overall, it adds some value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (two sentences), front-loads the main purpose, and avoids any unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations and output schema present, the description adequately covers the tool's purpose, invocation patterns, and preview capability. It does not explain the exact behavior of syncing (e.g., upsert vs replace), but that is likely implied by the tool's name and common patterns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description reiterates the dry_run and connector usage but does not add significant new semantic information beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool syncs external data connectors (GitHub issues, file watcher) into Mimir, distinguishing it from many sibling tools that are about querying, managing, or modifying Mimir data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to call with no arguments (run all enabled connectors) and when to specify a connector, and mentions dry_run for preview. It does not explicitly discuss when not to use it or alternatives, but the context is sufficient for an AI agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_ingest_fileADestructive
Ingest a document file into memory by extracting its text LOCALLY (no cloud, no network). Plaintext/markdown/structured-text work in any build; DOCX and PDF require a binary built with --features multimodal (otherwise a clear error is returned). The extracted text is stored as a normal entity (recallable via mimir_recall). category defaults to 'document', key defaults to the file name.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Entity key (default: the file name) | |
| path | Yes | Path to the document file to ingest | |
| tags | No | Optional tags | |
| category | No | Entity category (default 'document') |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Stored entity id |
| key | No | |
| chars | No | Characters of text extracted |
| action | No | created or updated |
| category | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond the destructiveHint annotation: it is local-only ('no cloud, no network'), describes format support (plaintext/markdown/structured-text work always, DOCX/PDF require a feature flag), and explains that extracted text is stored as a normal entity recallable via mimir_recall. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact (three sentences) and front-loaded with the core action. Every sentence adds essential information: what it does, where it runs, format quirks, defaults, and recall mechanism. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (format-dependent behavior, local processing, default values), the description covers all necessary aspects: processing location, format support with fallback, default values, and integration with recall. The presence of an output schema is noted but not required for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds valuable defaults: key defaults to file name, category defaults to 'document'. This enriches the schema-defined parameters. The description also implies that path is the primary parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool ingests a document file into memory by extracting text locally. It specifies the verb 'Ingest', the resource 'document file', and the scope (local extraction, no cloud/network). It distinguishes from siblings like mimir_ingest (general ingest) by focusing on file-based ingestion with local text extraction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use the tool (ingesting document files) and mentions limitations (DOCX/PDF require --features multimodal, otherwise error). It does not explicitly list when not to use, but the context is sufficient. It implies an alternative (mimir_recall for retrieval) but does not contrast with other ingest tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_journalADestructive
Append a structured decision/observation log entry. Uses evaluated/acted/forward pattern: what was considered, what was done, and what happens next. Essential for audit trails and timeline reconstruction.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Related entity key for linking | |
| acted | No | What action was taken and why | |
| forward | No | What the plan is going forward | |
| agent_id | No | Agent identity (v1.2.0). Records which agent created this journal event. | |
| category | No | Related entity category for linking | |
| entity_id | No | Related entity ID for linking | |
| evaluated | No | What was evaluated: options considered, context, constraints | |
| event_type | No | Event type: 'decision', 'observation', 'action', 'error' | decision |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Journal event ID |
| event_type | No | Event type recorded |
| created_at_unix_ms | No | Creation timestamp in unix milliseconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint: true, suggesting the tool may have destructive side effects, but the description only says 'Append,' which implies additive behavior. No explanation of why it's destructive, what gets destroyed, or other behavioral traits beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: the first states the purpose, the second explains the pattern. No superfluous content. Front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (not shown but present), the description does not need to explain return values. Parameter count is 8, all described in schema and enriched by pattern explanation. The description is complete for a logging tool with clear audit trail purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 8 parameters. The description adds value by explaining the 'evaluated/acted/forward' pattern, which provides context for how parameters like 'evaluated', 'acted', and 'forward' relate to each other, enriching the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Append a structured decision/observation log entry.' It uses specific verbs ('append', 'log') and names the resource ('decision/observation log entry'). Sibling tools like mimir_recall and mimir_context are differentiated by this logging focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'essential for audit trails and timeline reconstruction' but does not explicitly state when to use this tool versus alternatives (e.g., mimir_recall for retrieval, mimir_context for context). No exclusions or alternative suggestions are provided, leaving ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_linkADestructive
Create a relationship link from one entity to another. Builds a knowledge graph that mimir_traverse can walk. Use 'depends_on', 'implements', 'extends', 'references', or custom relationships.
| Name | Required | Description | Default |
|---|---|---|---|
| to_id | Yes | Target entity ID (from mimir_remember return value) | |
| from_key | Yes | Source entity key | |
| relationship | No | Relationship type: 'depends_on', 'implements', 'extends', 'references', or custom | related |
| from_category | Yes | Source entity category |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | No | Target entity ID |
| from | No | Source as 'category/key' |
| success | No | |
| relationship | No | Relationship type set |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description confirms the link creation is destructive (as per destructiveHint) but adds no further behavioral context beyond building a graph. Since annotations already flag destructiveness, the description provides marginal added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, front-loading the key action and purpose. Every sentence adds necessary context without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 4 parameters and an output schema. The description covers the core functionality and relationship types, but omits prerequisites (e.g., entities must exist) and potential side effects. Given the output schema exists, the gap is moderate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already documented. The description mentions relationship types, which are also in the schema's 'relationship' parameter description. Thus, no significant extra meaning is added beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') and resource ('relationship link from one entity to another'), clearly stating the purpose. It distinguishes from sibling tools like mimir_unlink and mimir_traverse by explaining that it builds a knowledge graph for traversal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly lists allowed relationship types ('depends_on', 'implements', 'extends', 'references', or custom) and connects it to mimir_traverse. While it doesn't state when not to use, the sibling name mimir_unlink implies the complementary operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_maintenanceADestructive
Database maintenance operations: deduplicate entities with identical (category, key), detect orphan journal entries and links, vacuum (reclaim disk space), reindex FTS5. Set dry_run=true to preview. Use 'all' to run everything.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Run all maintenance operations (dedup, orphans, vacuum, reindex) | |
| dedup | No | Find duplicate (category, key) entities and archive the oldest | |
| vacuum | No | Run SQLite VACUUM to reclaim disk space | |
| dry_run | No | If true, preview changes without writing | |
| orphans | No | Detect journal entries and links pointing to non-existent entities | |
| reindex | No | Rebuild the FTS5 search index from entities table |
Output Schema
| Name | Required | Description |
|---|---|---|
| errors | No | Errors encountered during maintenance |
| dry_run | No | |
| dedup_archived | No | Number of duplicate entities archived |
| orphan_links_found | No | Orphan links detected |
| reindex_rows_affected | No | Rows reindexed into FTS5 |
| vacuum_reclaimed_bytes | No | Disk space reclaimed by VACUUM |
| orphan_journal_entries_found | No | Orphan journal entries detected |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that deduplication archives the oldest entity, vacuum reclaims disk space, and reindex rebuilds FTS5. It also mentions dry_run for preview. This adds detail beyond the 'destructiveHint' annotation, though it does not specify whether orphan detection deletes or only lists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The first immediately states the tool's purpose and lists operations, the second gives actionable usage tips. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a maintenance tool with 6 boolean parameters and an output schema, the description covers the key operations and gives usage hints. It doesn't mention prerequisites or safety notes, but the destructiveHint annotation and dry_run option partially address that. Overall, it is sufficient for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, each parameter already has a description. The description adds value by showing how to combine parameters (dry_run with all) and the general usage pattern, providing context beyond the schema's individual definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly lists the specific maintenance operations (deduplicate, detect orphans, vacuum, reindex) and states it covers database maintenance. This clearly distinguishes it from sibling tools like mimir_ask or mimir_compact by its domain and actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives basic usage tips (dry_run=true to preview, use 'all' to run everything) but does not explain when to prefer this tool over individual siblings like mimir_prune or mimir_reindex. There is no explicit when-not or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_migrateADestructive
Migrate a v0.1.x Mimir database to the current v0.5.0 schema. Reads the old database, converts memories to the entity model, and merges into the current database. Use this once per legacy database during upgrade.
| Name | Required | Description | Default |
|---|---|---|---|
| from_path | Yes | Absolute path to the v0.1.x SQLite database file to migrate |
Output Schema
| Name | Required | Description |
|---|---|---|
| errors | No | Any errors encountered during migration |
| entities_created | No | New entities created from old memories |
| entities_updated | No | Existing entities updated during merge |
| total_old_memories | No | Number of memories found in the old database |
| completed_at_unix_ms | No | Completion timestamp |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the process (reads old DB, converts, merges) adding behavioral context beyond the destructiveHint annotation, confirming it modifies the current database.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the main action without any extraneous words, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description covers purpose, process, and usage comprehensively for a one-time migration tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage and only one parameter fully described in the schema, the description adds no additional parameter meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool migrates a v0.1.x Mimir database to v0.5.0 schema, distinguishing it from siblings that perform other operations like ask or forget.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this once per legacy database during upgrade' provides explicit when-to-use context, but no exclusions or alternatives are mentioned, which is acceptable given the one-time migration nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_pruneADestructive
Bulk archive entities by category, decay threshold, or age. Use dry_run=true to preview without archiving. Useful for cleaning stale or low-quality memories.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entities to prune (0 = unlimited) | |
| dry_run | No | Preview without archiving | |
| category | No | Archive entities in this category | |
| min_decay | No | Archive entities with decay_score below this threshold | |
| older_than_days | No | Archive entities older than this many days |
Output Schema
| Name | Required | Description |
|---|---|---|
| reason | No | |
| dry_run | No | |
| archived | No | |
| examined | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint=true; description adds that dry_run allows preview and mentions cleaning purpose, but does not detail what 'archive' entails (e.g., reversibility, side effects) or how entities are affected beyond filtering criteria.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states action and criteria, second provides a tip and use case. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, destructive behavior, and an output schema, the description covers core action and a preview tip but omits behavioral details (e.g., what 'archive' means, error handling, or output format). Output schema exists, so return values need not be explained, but other gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions for all parameters. Description adds context for dry_run and relates cleaning to decay/age, but this is minimal beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it bulk archives entities by category, decay threshold, or age, with the verb 'archive' and resource 'entities'. It hints at cleaning stale memories but does not explicitly distinguish from siblings like mimir_forget or mimir_purge.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance to use dry_run=true for preview and states it's useful for cleaning stale memories, but lacks explicit when-not-to-use or alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_purgeADestructive
Permanently delete all archived entities and run VACUUM to reclaim disk space. This is the only operation that actually removes entities — prune/forget only soft-archive. Archived entities are DELETED and NOT RECOVERABLE. Supports dry_run=true to preview first.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, report what would be deleted without making changes |
Output Schema
| Name | Required | Description |
|---|---|---|
| dry_run | No | Whether this was a dry run |
| bytes_freed | No | Bytes reclaimed after VACUUM (0 in dry-run mode) |
| entities_deleted | No | Number of archived entities permanently deleted |
| completed_at_unix_ms | No | Completion timestamp |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description explicitly states that archived entities are deleted and NOT RECOVERABLE, and that VACUUM is performed. This adds crucial behavioral context not captured by annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences convey the core action, context, sibling differentiation, and parameter hint. No wasted words; front-loaded with the primary function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema covers return values, the description fully addresses what the tool does, side effects (irreversibility), comparison to siblings, and parameter usage. Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds value by explaining that dry_run=true allows preview without changes, which clarifies the parameter's purpose beyond its schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: permanently delete archived entities and run VACUUM. It distinguishes from sibling tools (prune/forget) by specifying that it is the only operation that actually removes entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that this tool is for permanent deletion versus soft-archive from prune/forget, and mentions dry_run preview. It does not explicitly state prerequisites or when not to use, but the contrast with siblings provides sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_recallARead-only
Search entities with FTS5 keyword search. Words are OR'd together. Returns entities sorted by relevance with expanded content/summary fields at top level. Use this to find previously stored facts, decisions, or architecture notes. When encryption is enabled, body_json is decrypted transparently.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Search mode: 'fts5' (keyword), 'dense' (vector), or 'hybrid' (fused via RRF) | fts5 |
| type | No | Filter by entity type, e.g. 'insight' or 'reference' | |
| limit | No | Maximum number of results to return (max 1000) | |
| query | Yes | Search query — words are OR'd together for broad recall | |
| offset | No | Number of results to skip for pagination | |
| agent_id | No | Agent identity filter (v1.2.0). When set, only entities with a matching agent_id are returned. Omit for no agent filtering. | |
| category | No | Filter by category, e.g. 'decision' or 'architecture' | |
| expansion | No | Configuration for FTS5 query expansion using Porter stemming | |
| min_decay | No | Minimum decay score threshold 0.0–1.0 — higher values return fresher results | |
| topic_path | No | Filter by topic path prefix, e.g. 'architecture/' | |
| preview_cap | No | If set, truncate body_json at N chars and append drill-down footer. Use mimir_get_entity to read full body. | |
| trust_weight | No | Additive boost for provenance/trust (default 0.15, on by default) — verified sources rank above unverified AI drafts on the same topic. Verified entities get the full boost; unverified ones are scaled by certainty. Set 0 to disable. Never penalizes. | |
| content_weight | No | Additive boost for content witness — rewards entities whose body text literally contains query terms. Damped by body length. Never penalizes. | |
| workspace_hash | No | Workspace scope filter (v1.2.0). When set, only entities with a matching workspace_hash are returned. Omit for no workspace filtering. | |
| include_archived | No | Include archived (soft-deleted) entities in results | |
| diversity_halving | No | Per-keyword diversity quota factor (1.0=disabled). Each distinct matched keyword gets ceil(N x halving^n) slots — first keyword N, second N/2, etc. | |
| recency_half_life_secs | No | Time-aware ranking for mode='hybrid' (default off). When set, each fused result's score is multiplied by 0.5^(age / this), where age is seconds since the memory was created — so a memory this many seconds old keeps half its weight and recent context outranks older but similar hits. Omit for relevance-only ranking. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | Matching entities with expanded body_json fields at top level |
| total | No | Number of results returned |
| variants | No | Number of query variants used when expansion is enabled |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true; description adds valuable behavioral details: OR'ing of words, relevance sorting, expanded fields, and transparent decryption of body_json, which is beyond what annotations offer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with key information, no fluff. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite a complex tool with 17 parameters and output schema, the description omits mention of search modes (fts5, dense, hybrid) and filtering capabilities, leaving gaps for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter already described; the tool description adds no extra meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it searches entities with FTS5 keyword search, but does not explicitly differentiate from sibling tools that may offer alternative search methods like vector or hybrid.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides use cases (find facts, decisions, architecture notes) but lacks explicit guidance on when not to use or when alternatives like mimir_recall_when might be better.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_recall_whenARead-only
Search entities whose recall_when triggers match a given context. Use this for proactive just-in-time memory injection — before writing code, before plans, at session start. Pass the current task description as context and get back memories that declared they should be recalled in similar situations.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum entities to return (default 10, max 100) | |
| context | Yes | The current task or context description to match against recall_when triggers |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | |
| total | No | |
| context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is clear. The description adds behavioral context (proactive, context-matching) but does not detail edge cases (e.g., no match behavior, performance). With annotations covering the main safety aspect, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence defines the function, the second gives concrete usage scenarios. Front-loads key information efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity (2 params, output schema present), the description covers purpose, usage, and context. With output schema, return details are not needed. Some might expect a note on default limit, but schema covers that. Score 4 reflects slight gap in explaining the 'recall_when trigger' concept.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are documented. The description adds minimal extra meaning beyond the schema: it reinforces that 'context' is the task description to match triggers. This is marginal improvement, hence baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches entities based on recall_when triggers matching a given context. It uses specific verb and resource ('Search entities whose recall_when triggers match') and distinguishes from sibling tools like mimir_recall by focusing on trigger-based recall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use: 'for proactive just-in-time memory injection — before writing code, before plans, at session start.' It implies usage context but does not explicitly mention when not to use or name alternatives like mimir_recall.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_reindexADestructive
Rebuild the FTS5 search index from the entities table. Repairs index drift — e.g. after a direct SQLite write, an interrupted archive, or a legacy database written before the atomic prune/forget fixes — so archived entities stop surfacing in recall/search. Returns the number of entities reindexed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| reindexed | No | Number of non-archived entities indexed into FTS5 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true. The description adds the return value (number reindexed) and specific triggers, but does not disclose other behavioral traits like potential locking, idempotency, or performance impact, which would be helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence states the action, the second provides context and return. Efficiently front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with destructive hint and output schema, the description covers purpose, triggers, and return. Could mention whether it is safe to run repeatedly, but overall sufficient given low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so no parameter documentation is needed. Baseline is 4 for zero-parameter tools, and the description does not need to add parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool rebuilds the FTS5 search index, with specific triggers like direct SQLite writes or interrupted archives. It distinguishes from siblings by focusing on index drift repair for recall/search, though it could explicitly contrast with other maintenance tools like mimir_compact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly lists when to use the tool (after direct SQLite write, interrupted archive, legacy database). It does not provide when-not-to-use or alternatives, but the context is sufficiently clear for the intended use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_rememberADestructive
Store or update an entity by (category, key). Idempotent — call as often as you want, same key returns an update. Optional always_on=true injects entity into every mimir_context. Optional certainty (0.0-1.0) is used by mimir_conflicts for typed-entity conflict detection. Use this for saving facts, decisions, architecture notes, and conventions. When encryption is enabled, body_json is encrypted at rest with AES-256-GCM.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Unique key within the category, e.g. 'use-postgres-16' or 'deployment-strategy' | |
| tags | No | Tags for categorization and cross-referencing | |
| type | No | Entity type: 'insight', 'architecture', 'decision', 'reference', 'convention' | insight |
| status | No | Entity status: 'active', 'draft', 'deprecated' | active |
| agent_id | No | Agent identity (v1.2.0). Tracks which agent wrote this entity. Used for agent attribution and context filtering. | |
| category | Yes | Entity category: 'decision', 'architecture', 'convention', 'insight', or custom | |
| body_json | Yes | JSON object with the entity body — store content, summary, and any custom fields here | |
| importance | No | Initial importance 0.0–1.0 — sets the starting decay score | |
| topic_path | No | Hierarchical topic path, e.g. 'architecture/database/postgres' | |
| workspace_hash | No | Workspace scope identifier (v1.2.0). Empty = global. Entities with a workspace_hash are invisible to recall queries scoped to a different workspace. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Entity ID, e.g. 'mem-a1b2c3d4e5f6' |
| key | No | Entity key |
| action | No | 'created' for new entities, 'updated' for existing ones |
| category | No | Entity category |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral details beyond the annotations: idempotency, encryption at rest (AES-256-GCM) when enabled, and the effect of always_on=true injecting into mimir_context. This complements the destructiveHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of four clear sentences. It front-loads the core function and immediately follows with key behaviors and use cases. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (10 parameters, 3 required), the description covers essential aspects: idempotency, encryption, always_on, certainty usage, and appropriate use cases. An output schema exists, so return values need not be described. It could mention behavior on conflict or error, but overall it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the schema already documents all parameters. The description adds context for key parameters (e.g., key as unique within category, body_json as JSON object) and explains the purpose of optional fields like always_on and certainty. It does not cover every parameter in detail but provides meaningful usage guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Store or update an entity by (category, key)' and lists specific use cases such as saving facts, decisions, architecture notes, and conventions. This distinguishes it from sibling retrieval or deletion tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions when to use the tool ('for saving facts, decisions, architecture notes, and conventions') and describes optional parameters like always_on and certainty. However, it does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_scoreADestructive
Assign a quality score (0.0–1.0) to an entity. Verified entities with high scores resist decay and rank higher in recall results. Use this to mark entities as accurate, verified, or deprecated.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Entity key to score | |
| score | Yes | Quality score 0.0–1.0. 1.0 = verified, 0.5 = neutral, 0.0 = low quality | |
| category | Yes | Entity category to score |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | No | Entity key |
| found | No | Whether the entity was found |
| score | No | Quality score assigned |
| category | No | Entity category |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds that high scores resist decay and rank higher, but lacks details on idempotency, reversibility, or required permissions. The behavioral context is sufficient but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the action and followed by consequences. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple scoring tool, the description covers purpose, effect, and usage. It does not explain the output format, but an output schema exists. It could mention prerequisites or error cases, but overall it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. The description does not add new meaning beyond what the schema provides for the three parameters. The baseline of 3 is appropriate as the schema already documents parameters clearly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Assign', the resource 'entity', and the score range 0.0-1.0. It explains the effect on decay and recall ranking, and lists usage scenarios (mark as accurate, verified, deprecated). This distinguishes it well from the many sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the tool (to assign quality scores and mark entities) and hints at the consequences. However, it does not explicitly state when not to use it or compare to alternatives, which would further improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_state_deleteADestructive
Delete a state entry by key. Permanent removal — unlike mimir_forget which is a soft-delete. Use this to clean up expired or unused state entries.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | State key to permanently delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | No | Key that was deleted |
| found | No | Whether the key existed and was deleted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, indicating the tool is destructive. The description adds that deletion is permanent and contrasts with soft-delete, providing useful context beyond the annotation. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each serving a distinct purpose: first states the action, second adds usage guidance and sibling differentiation. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with an output schema (present), the description adequately covers purpose, usage, and behavioral nuance. It is complete for the agent to correctly select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already describes the key parameter as 'State key to permanently delete'. The description mentions 'by key' but does not add substantial meaning beyond the schema, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deletes a state entry by key, using a specific verb and resource. It distinguishes from the sibling tool mimir_forget, which is a soft-delete, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use: 'Use this to clean up expired or unused state entries.' Also clarifies when not to use by contrasting with mimir_forget, providing clear context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_state_getARead-only
Get a state value by key. Returns null if the key has expired or doesn't exist. Use this instead of mimir_recall for transient session state that doesn't need FTS5 search.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | State key to retrieve |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | No | State key requested |
| found | No | Whether the key exists and hasn't expired |
| value | No | JSON value if found |
| created_at_unix_ms | No | Creation timestamp |
| expires_at_unix_ms | No | Expiration timestamp if TTL was set |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds behavioral detail beyond annotations by stating 'Returns null if the key has expired or doesn't exist,' which informs the agent about return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The description is front-loaded with the action, then provides return behavior and usage guidance, all in a compact form.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, output schema exists), the description covers purpose, null handling, and when to use, which is adequate. A minor gap is no mention of expiration behavior details, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents the 'key' parameter. The description does not add extra meaning beyond what is in the schema, meeting the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a state value by key' with a specific verb and resource. It distinguishes itself from the sibling tool mimir_recall by mentioning transient session state and FTS5 search, ensuring no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use this instead of mimir_recall for transient session state that doesn't need FTS5 search.' This clearly tells the agent when to use this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_state_listARead-only
List all state keys, optionally filtered by a key prefix. Use this to discover what state entries exist without knowing exact keys ahead of time.
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No | Only return keys that start with this prefix |
Output Schema
| Name | Required | Description |
|---|---|---|
| keys | No | Matching state keys |
| total | No | Number of keys returned |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so description adds value by specifying the listing behavior and prefix filtering, but could mention potential limits or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences: first defines action, second provides use case. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given presence of an output schema and single optional parameter, description is mostly complete; could explicitly state that it returns a list of keys.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a documented prefix parameter; description restates the parameter briefly but adds no new details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists all state keys with optional prefix filtering, distinguishing it from sibling tools like mimir_state_get, mimir_state_set, and mimir_state_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context about when to use (discover state entries without exact keys) but does not explicitly mention when not to use or contrast with alternatives like mimir_state_get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_state_setADestructive
Set a key-value state entry with optional TTL for auto-expiration. Use this for session state, temporary flags, or configuration values that should expire after a set time.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | State key — unique identifier for this state entry | |
| value_json | Yes | JSON value to store | |
| ttl_seconds | No | Time-to-live in seconds. Entry auto-expires and returns null after this duration. Omit for permanent state. |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | No | State key set |
| ttl_seconds | No | TTL that was set, if any |
| expires_at_unix_ms | No | Expiration timestamp in unix milliseconds, if TTL was set |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark destructiveHint=true. Description adds TTL auto-expiration and permanent state option. Does not explicitly mention overwriting behavior, but that is implied by 'Set' and output schema may cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. First sentence states function, second gives usage context. Perfectly compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple setter with 3 parameters. Covers purpose, use cases, and TTL behavior. Output schema likely handles return values. Missing explicit overwriting note, but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. Description reinforces TTL parameter purpose and connects to use cases, adding marginal semantic value beyond schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Set a key-value state entry' with a specific verb and resource. It distinguishes itself from sibling state tools (get, delete, list) by focusing on creation/update with optional TTL.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases: session state, temporary flags, configuration values with TTL. Does not specify when not to use or contrast with alternatives like mimir_remember, but the context is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_statsARead-only
Return comprehensive database statistics: entity counts by category, type, and decay layer; journal event count; state entry count; database file size; and date range of stored data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| by_type | No | Entity counts grouped by type |
| by_layer | No | Entity counts grouped by decay layer (buffer/working/core) |
| by_category | No | Entity counts grouped by category |
| newest_unix_ms | No | Newest entity creation timestamp |
| oldest_unix_ms | No | Oldest entity creation timestamp |
| total_entities | No | Total entities in the database |
| db_file_size_bytes | No | Database file size on disk in bytes |
| total_state_entries | No | Total state entries (including expired) |
| total_journal_events | No | Total journal events recorded |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, which is consistent with the description. The description adds value by detailing exactly what statistics are returned, which goes beyond the annotation's simple read-only indication. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently enumerates all returned statistics without redundancy. It is front-loaded with the main verb and resource, and every phrase adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists (as per context signals), the description is complete. It covers all aspects of the output, and the agent can rely on the output schema for detailed structuring.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so the description doesn't need to explain parameters. However, it compensates by describing the output, which is useful for an agent. Baseline for 0 params is 4, and this description meets that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('Return') and clearly lists the types of statistics (entity counts by category, type, decay layer; journal count; state count; file size; date range). It distinguishes itself from sibling tools like 'mimir_health' which likely focuses on system status, whereas this focuses on database content statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly states its purpose (obtaining comprehensive stats), and given there are no parameters or configuration, the use case is clear. It doesn't explicitly state when not to use, but the context of sibling tools provides differentiation. A score of 4 is appropriate as it's clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_supersedeADestructive
Create a 'supersedes' relationship from a new fact to an old one, setting the old entity's status to 'deprecated'. Use this when a newer entity makes an older one obsolete.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Reason for superseding (recorded in archive_reason) | |
| to_key | Yes | Key of the NEW entity that supersedes | |
| from_key | Yes | Key of the OLD entity being superseded | |
| to_category | Yes | Category of the NEW entity that supersedes | |
| relationship | No | Link relationship type (default: 'supersedes') | supersedes |
| from_category | Yes | Category of the OLD entity being superseded |
Output Schema
| Name | Required | Description |
|---|---|---|
| relationship | No | |
| to_entity_id | No | ID of the new (superseding) entity |
| to_entity_key | No | |
| from_entity_id | No | ID of the old (superseded) entity |
| status_updated | No | New status of the old entity (always 'deprecated') |
| from_entity_key | No | |
| to_entity_category | No | |
| from_entity_category | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate destructiveHint=true, but the description adds that the old entity's status becomes 'deprecated', which is valuable behavioral context. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Purpose and usage are front-loaded, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description doesn't need to explain return values. It completely covers purpose, effect, and usage for this focused tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline 3. The description does not add extra meaning beyond the schema; the schema already describes each parameter clearly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it creates a 'supersedes' relationship from new to old fact and sets old entity to 'deprecated'. The verb 'Create' and resource 'supersedes relationship' are specific, distinguishing it from generic linking tools like mimir_link.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this when a newer entity makes an older one obsolete.' Provides clear context for when to use. No exclusions or alternatives mentioned, but the sibling tools list includes many others, so this is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_synthesizeADestructive
LLM-driven session synthesis. Reviews a session transcript and extracts structured lessons: what worked (success), what failed (failure), what was corrected (correction), what was abandoned (dead_end), and key decisions made (decision). Each lesson becomes an entity linked to a synthesis journal entry. Requires --llm-endpoint to be configured. This is the Perplexity-Brain-style overnight synthesis loop for agent self-improvement.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags applied to all synthesized entities | |
| session_id | No | Session identifier for traceability | |
| visibility | No | Visibility for synthesized entities | workspace |
| session_content | Yes | Full session transcript to synthesize lessons from |
Output Schema
| Name | Required | Description |
|---|---|---|
| dry_run | No | |
| lessons | No | Extracted lessons with type, summary, evidence, and confidence |
| journal_id | No | |
| entities_created | No | Number of lesson entities created |
| completed_at_unix_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true. The description adds that the tool creates entities linked to a journal entry, implying state mutation. But it does not detail the extent of destruction (e.g., whether prior entities are overwritten) or other side effects beyond creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences) and front-loads the core purpose. Every sentence adds value: describing the action, the output structure, a prerequisite, and the broader goal. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 params, output schema exists), the description covers the synthesis process and prerequisite. It does not need to explain return values due to output schema. Minor gap: no mention of error conditions or performance implications.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter having a description. The description adds minimal extra meaning beyond listing the lesson types and mention of tags/session_id/visibility in context, but does not significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs 'session synthesis' and extracts specific structured lessons (success, failure, correction, dead_end, decision). It distinguishes itself from sibling tools like mimir_ask or mimir_ingest by focusing on post-session analysis and entity creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It mentions the prerequisite 'Requires --llm-endpoint to be configured' and positions the tool as an 'overnight synthesis loop for agent self-improvement', implying a use case. However, it lacks explicit when-not-to-use or alternatives, leaving interpretation open.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_timelineARead-only
Query journal events by time range with optional filters for event type, category, or entity. Use this to reconstruct the decision history and understand what happened when.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of events to return (max 1000) | |
| to_ms | No | End time boundary in unix milliseconds | |
| offset | No | Number of events to skip for pagination | |
| from_ms | No | Start time boundary in unix milliseconds | |
| category | No | Filter by related entity category | |
| entity_id | No | Filter by related entity ID | |
| event_type | No | Filter by event type: 'decision', 'observation', 'action', 'error' |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | Journal events matching the query |
| total | No | Number of events returned |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, and the description's 'Query' aligns with that. The description adds context about reconstructing history but does not disclose additional behavioral traits like rate limits or data retention. With annotations present, the description provides marginal extra value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences that efficiently convey the tool's purpose and recommended use. No superfluous information; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 optional parameters with defaults) and the availability of an output schema, the description covers the core use case. It does not mention pagination or time format details, but the schema handles those. Slight lack of completeness in explaining how filters combine.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description summarizes optional filtering by event type, category, or entity but does not add deeper semantics or syntax details beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Query' and resource 'journal events' with time range and optional filters. It provides a specific use case ('reconstruct decision history') but does not explicitly differentiate from sibling tools like mimir_journal or mimir_recall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description suggests using the tool to reconstruct decision history, implying a usage context. However, it does not specify when not to use it or mention alternative tools for related queries, leaving room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_traverseARead-only
Walk the entity link graph starting from a given entity up to a configurable depth. Returns a chain of linked entities — useful for exploring dependencies, decision trees, and relationship graphs built via mimir_link.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Starting entity key | |
| category | Yes | Starting entity category | |
| max_depth | No | Maximum traversal depth from the starting entity | |
| max_nodes | No | Maximum total nodes to traverse before stopping |
Output Schema
| Name | Required | Description |
|---|---|---|
| entity | Yes | Root entity with its links |
| traversed | Yes | Linked entities traversed from root |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating no side effects. The description adds that the tool walks the graph to a configurable depth and returns a chain of linked entities, which provides additional behavioral context beyond the annotation. It also mentions stopping conditions (max_depth, max_nodes). No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and result. Every sentence adds value: first sentence describes what the tool does, second gives use cases. No redundancy or unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters and an output schema exists, the description adequately covers the input (starting entity, configurable limits) and purpose (exploring graphs). It omits details about output format but that's acceptable since an output schema is present. Missing explicit mention of dependency on mimir_link, but it's implied in 'relationship graphs built via mimir_link.'
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions for all 4 parameters. The overall description adds little beyond the schema: it restates that the traversal starts from a given entity and is configurable. Baseline is 3 due to high schema coverage; the description does not significantly enhance parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Walk the entity link graph') and resource ('starting from a given entity'), clearly distinguishing it from siblings like mimir_link (which creates links) and mimir_get_entity (which retrieves a single entity). It also mentions the configurable depth and return type, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the tool is 'useful for exploring dependencies, decision trees, and relationship graphs,' which gives clear context for when to use it. However, it does not explicitly mention when not to use it or direct alternatives, such as using mimir_get_entity for a single node or mimir_link for building the graph first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_unlinkADestructive
Remove a relationship link from one entity to another. Use this to correct outdated or incorrect links in the knowledge graph.
| Name | Required | Description | Default |
|---|---|---|---|
| to_id | Yes | Target entity ID to unlink | |
| from_key | Yes | Source entity key | |
| from_category | Yes | Source entity category |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | No | Target entity ID |
| from | No | Source as 'category/key' |
| success | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint=true, so the destructive nature is already known. Description adds the corrective purpose but no additional behavioral details (e.g., side effects, permissions). No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Purpose is front-loaded, followed by usage guidance. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, destructive tool with three required parameters and output schema present, the description provides purpose and usage context. Could be marginally improved by noting typical use cases, but it's complete for most needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters (100% coverage) with descriptions. Description does not add extra meaning beyond telling which is source and target, which can be inferred from the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action ('Remove a relationship link') and the resource ('from one entity to another'), distinguishing it from siblings like mimir_link that likely create links.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use for 'correcting outdated or incorrect links,' giving clear context. Does not mention when not to use or alternatives beyond the implied opposite (mimir_link), but the guidance is specific and useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_vault_exportADestructive
Export all non-archived entities to .md files with YAML frontmatter in a vault directory. Files are human-readable, git-trackable, and Obsidian-compatible. Use this for backup, transfer between workspaces, or offline review.
| Name | Required | Description | Default |
|---|---|---|---|
| vault_dir | No | Directory path to write .md files. Created if it doesn't exist. Use ~ for home directory. | ~/.mimir/vault |
Output Schema
| Name | Required | Description |
|---|---|---|
| errors | No | Any errors encountered during export |
| vault_dir | No | Absolute path to the vault directory |
| files_created | No | Number of new .md files created |
| files_updated | No | Number of existing .md files updated |
| completed_at_unix_ms | No | Completion timestamp |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint: true, and the description adds that files are human-readable, git-trackable, and Obsidian-compatible, which complements the annotation. However, it does not clarify whether exporting overwrites existing files, which would be useful for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the main action and output format. Every word adds value, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple single-parameter interface and the presence of an output schema, the description covers the tool's purpose, output format, use cases, and parameter details adequately. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter vault_dir is fully described in the schema with default and path handling. The tool description adds context about writing to the vault directory, reinforcing its purpose beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool exports non-archived entities to .md files with YAML frontmatter, specifying a concrete verb and resource. It differentiates from siblings like mimir_vault_import.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly lists use cases ('backup, transfer between workspaces, or offline review'), providing clear usage context. It does not mention when not to use or alternatives, but the purpose is specific enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_vault_importADestructive
Import .md files from a vault directory into the database. Reads YAML frontmatter for metadata and markdown body for content. Idempotent — re-running on the same vault won't duplicate entities. Pair with mimir_vault_export for transfer.
| Name | Required | Description | Default |
|---|---|---|---|
| vault_dir | No | Directory path to read .md files from. Use ~ for home directory. | ~/.mimir/vault |
Output Schema
| Name | Required | Description |
|---|---|---|
| errors | No | Any errors encountered during import |
| vault_dir | No | Absolute path of the vault directory read |
| files_created | No | Number of new entities created from files |
| files_updated | No | Number of existing entities updated |
| completed_at_unix_ms | No | Completion timestamp |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive (destructiveHint: true). The description adds important behavioral context: idempotency (re-running doesn't duplicate) and the specific processing of frontmatter and body. This goes beyond the annotation and provides reassurance and clarity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences, no wasted words. It front-loads the purpose and adds essential details in the second sentence. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, clear operation), the description covers purpose, idempotency, pairing, and what is read. An output schema exists (not shown but present), so return values are covered elsewhere. It is complete enough for the agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with a clear description for the only parameter 'vault_dir'. The tool description does not add additional parameter-specific details beyond the schema. Since schema coverage is high, the baseline is 3, and the description does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: importing .md files from a vault directory into the database. It specifies the file type (.md), what it reads (YAML frontmatter and markdown body), and distinguishes itself from the sibling mimir_vault_export by naming it. The verb is specific and the resource is well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions idempotency, telling the agent it is safe to re-run. It also pairs the tool with mimir_vault_export for transfer, providing a usage context. However, it does not explicitly state when not to use this tool or list alternatives among the many siblings, but the pairing note is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimir_workspace_listARead-only
List all distinct entity categories present in the database. Use this to discover what knowledge domains exist before querying with mimir_recall or mimir_context.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | Number of categories |
| categories | No | All distinct categories in the database |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, so the description adds value by specifying the scope (distinct entity categories) and usage context. However, it does not disclose any additional behavioral traits (e.g., speed, permissions, or result format).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: first states the action, second provides usage guidance. No wasted words, perfectly front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no params, read-only), the description fully covers its purpose and usage context. Output schema exists, so no need to describe return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description has no burden. The mention of 'distinct entity categories' clarifies the scope beyond the schema, meeting the baseline for 0 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists distinct entity categories (specific verb+resource) and explains its role in discovering knowledge domains, distinguishing it from siblings like mimir_recall and mimir_context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using this tool before querying with mimir_recall or mimir_context, providing clear context. No when-not or alternatives listed, but for a simple discovery tool it's sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v2.5.0- Changed
mimir_conflicts6 fields changed- added
Input schema / properties / certainty_marginAdded value: +{ + "default": 0.2, + "description": "Minimum certainty gap to auto-resolve; closer pairs are skipped as ambiguous", + "type": "number" +} - added
Input schema / properties / dry_runAdded value: +{ + "default": true, + "description": "When resolve=true, only report what would be invalidated unless set false", + "type": "boolean" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of conflicts to return"New value: +"Maximum number of conflicts to return / resolve" - added
Input schema / properties / resolveAdded value: +{ + "default": false, + "description": "Opt-in: invalidate the lower-certainty side of clear conflicts instead of only reporting them", + "type": "boolean" +} - changed
Output schema / properties / conflicts / descriptionPrevious value: -"Conflict pairs with similarity scores"New value: +"Conflict pairs with similarity scores (detection mode)" - added
Output schema / properties / invalidationsAdded value: +{ + "description": "Winner/loser pairs invalidated or previewed (resolve mode)", + "items": { + "type": "object" + }, + "type": "array" +}
2 tool updates
v2.4.0- Added
mimir_as_of - Added
mimir_ingest_file
2 tool updates
v2.2.1- Added
mimir_extract - Changed
mimir_recall1 field changed- added
Input schema / properties / recency_half_life_secsAdded value: +{ + "description": "Time-aware ranking for mode='hybrid' (default off). When set, each fused result's score is multiplied by 0.5^(age / this), where age is seconds since the memory was created — so a memory this many seconds old keeps half its weight and recent context outranks older but similar hits. Omit for relevance-only ranking.", + "minimum": 0, + "type": "number" +}
40 tool updates
v0.1.0- First observed
mimir_ask - First observed
mimir_autocohere - First observed
mimir_bench - First observed
mimir_cohere - First observed
mimir_compact - First observed
mimir_conflicts - First observed
mimir_context - First observed
mimir_correct - First observed
mimir_decay - First observed
mimir_embed - First observed
mimir_federate - First observed
mimir_forget - First observed
mimir_get_entity - First observed
mimir_health - First observed
mimir_ingest - First observed
mimir_journal - First observed
mimir_link - First observed
mimir_maintenance - First observed
mimir_migrate - First observed
mimir_prune - First observed
mimir_purge - First observed
mimir_recall - First observed
mimir_recall_when - First observed
mimir_reindex - First observed
mimir_remember - First observed
mimir_score - First observed
mimir_share - First observed
mimir_state_delete - First observed
mimir_state_get - First observed
mimir_state_list - First observed
mimir_state_set - First observed
mimir_stats - First observed
mimir_supersede - First observed
mimir_synthesize - First observed
mimir_timeline - First observed
mimir_traverse - First observed
mimir_unlink - First observed
mimir_vault_export - First observed
mimir_vault_import - First observed
mimir_workspace_list
TDQS
Scored across 43 tools
Many tools have clearly distinct purposes (e.g., mimir_remember vs mimir_state_set), but there are clustered groups with fuzzy boundaries: prune/compact/decay/cohere/autocohere all perform overlapping maintenance, share/federate both transfer between workspaces, and recall/ask/recall_when all retrieve memories. The detailed descriptions help, but an agent could easily misselect among these sets.
All tools share the mimir_ prefix and use snake_case, which creates a strong sense of predictability. Most are verb-first (remember, recall, ingest, traverse) or verb_noun (state_get, vault_export, workspace_list), with only a few noun-only names (context, stats, health) as minor deviations. Overall naming is consistent and readable.
43 tools is well above the 25+ threshold and feels bloated for a memory server, even one that spans storage, retrieval, graph, state, maintenance, import/export, and LLM features. The scope is broad, but many tools could be consolidated (e.g., compaction/grooming operations, sharing/federation), so the count is excessive for the apparent domain.
The tool set covers the full memory lifecycle: create/update (remember, state_set, journal), read/search (recall, get_entity, ask, timeline), soft-delete (forget, prune), hard-delete (purge), graph relations (link, unlink, traverse, supersede), import/export (vault_import/export), sync (ingest), maintenance, health, and even feedback loops (correct, synthesize, bench). No obvious dead ends or missing operations for the stated purpose.
Maintenance
Related MCP Connectors
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Persistent memory for AI agents. Semantic search, memory graph, W3C DID identity.
Persistent, portable memory for AI assistants — your private memory graph, from any MCP client.
Persistent memory for AI agents across Claude, ChatGPT and any MCP client.
Related MCP Servers
AlicenseAqualityBmaintenanceSelf-hosted MCP-native agent memory server. Gives AI agents persistent, decay-weighted memory via 83 MCP tools — no cloud, full control. RocksDB+HNSW backend. Works with Claude Code, Cursor, and any MCP-compatible agent.148MIT- AlicenseNot gradedqualityAmaintenanceAn MCP-native, local-first memory server that gives AI agents persistent, structured memory across sessions and tools, enabling them to maintain identity and context without reconfiguration.3MIT
- AlicenseNot gradedqualityCmaintenancePersistent memory for AI coding agents. Enables agents to save and recall decisions, patterns, bugs, and context across sessions via an MCP server with local SQLite storage.19 npm2MIT
- AlicenseNot gradedqualityAmaintenanceMCP server providing persistent AI memory with four-tier retrieval (SQLite FTS5, graph, vector, LLM agent) to give AI assistants structured, long-term memory without RAG.1Apache 2.0