Mnemos について
Mnemosは、Markdown、コード、OKFナレッジベースを索引化する、AIエージェント向けのローカルメモリーMCPサーバーです。全文検索とオプションのセマンティック検索で、ファイル・セクション・行を示す引用を返し、制御された書き込みにも対応します。
主な機能
- 01Markdown、コード、OKFコンテンツの索引化
- 02SQLite FTS5による全文検索
- 03オプションのセマンティック検索とハイブリッド検索
- 04ファイル・セクション・行を示す検索結果
- 05メモリーの書き込みと管理
活用シーン
- 01プロジェクトの決定事項や設計文書の検索
- 02コーディングエージェントによる資料の検索と引用
- 03長期保存するプロジェクト情報の記録と整理
MCP 対応
組み込みのMCPサーバーが、MCPクライアントに検索、読み取り、メモリー管理機能を提供します。書き込みは既定で制限され、設定で許可できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mnemos
AI エージェントに、引用可能なメモリを与えましょう。
AI エージェントのためのローカルメモリ。出典の引用付きです。
Claude Code は強力ですが、プロジェクトのコンテキストを忘れてしまいます。
- アーキテクチャを却下した理由を忘れる
- ADR を見落とす
- ドキュメントを読む代わりに、答えをでっち上げる
- 主張の出典を確実に引用できない
mnemos は、次の情報をローカルに保存し、出典を引用できるメモリとして提供します。
- ADR と設計ドキュメント
- メモとランブック
- ソースコード
- OKF ナレッジベース
ベクトルデータベースは不要です。Ollama も不要です。Python や Node のサービスも不要です。ファイルをインデックス化する cgo 不使用の Go バイナリが 1 つあるだけです。プレーンな Markdown のフォルダーなら、そのまま使えます。情報を MCP 経由で提供するので、Claude は推測する代わりに、独自のナレッジを検索、読み取り、引用できます。回答には、正確な file#section と行範囲が示されます。
60 秒で試す
# 1. install — one cgo-free binary into $GOBIN (requires Go 1.25+)
git clone https://github.com/arhuman/mnemos.git && cd mnemos
make install
# 2. index a project
cd ~/work/myproject
mnemos init # creates ./.mnemos/ (mnemos.toml, kb, db, models)
mnemos add docs --collection myproject # copy a directory into the kb and index it
mnemos search "why did we choose this architecture"
$PATHに追加せずに使うには、make build(→./bin/mnemos)をおすすめします。デフォルトのビルドは純粋な Go で、cgo を使用しません(CGO_ENABLED=0)。
search は開くことのできる引用を表示します。
1. security/scim.md#Provisioning
lines 42-88
score 12.7
次に、Claude Code に接続します(--config には絶対パスを指定してください)。
claude mcp add mnemos -- mnemos serve --config /abs/path/to/myproject/.mnemos/mnemos.toml
これで Claude は推測ではなくプロジェクトの情報に基づいて回答し、その出典も示します。
あなた: 失われたコミットを復元するにはどうすればよいですか?
Claude:
recovery/reflog.mdによると、reflog にはHEADと各ブランチの先端が指していた場所が記録されています。ハードリセット後も記録は残るため、失われたコミットのハッシュを確認してチェックアウトできます。(recovery/reflog.md — 「Reflog:失われたコミットを復元する」)
これが一連の流れです。インデックス化 → 質問 → 引用付きの回答。 以下では、この設計にした理由、仕組み、そしてすべての機能を詳しく説明します。
⚠️ 注意点:add はファイルを kb にコピーします。追跡するわけではありません
mnemos は管理対象のストアです。参照可能なコンテンツは .mnemos/kb/ に格納され、ドキュメントの URI はその kb ルートからの相対パスです。mnemos add docs は docs/ のスナップショットを kb/docs/ に作成するため、元の docs/ に加えた変更は、再度 mnemos add を実行するまで反映されません。(mnemos ingest <kb-subpath> は kb 内にすでにあるコンテンツを再インデックス化します。kb の外にあるパスは拒否します。)
同じ kb サブパスに複数のソースを追加すると衝突し、後から追加したものが優先されます。--into を使って、それぞれに異なる保存先を指定してください。
mnemos add ~/work/api/docs --into api
mnemos add ~/work/infra/docs --into infra
その場所に置いたままにする必要があるツリーの場合は、コピーする代わりにオリジンとして登録します。登録したツリーはその場所で読み取り専用としてインデックス化され、独自の URI 名前空間に置かれます。
mnemos origin add ~/work/spec --prefix spec --collection spec
mnemos origin reindex spec # picks up new files, evicts deleted ones
登録した 2 つのツリーに同じ相対パスがあっても衝突しないため、仕様ツリーとソースツリーを 1 つのストア内でまとめて検索できます。mnemos は登録されたオリジンに書き込みません。
詳しくは docs/paths-and-indexing.md をご覧ください。
- 真のローカルファースト:すべてお使いのマシン上で動作します。ネットワーク通信もテレメトリーもなく、プロジェクトのデータが外部に出ることはありません。
- 依存関係ゼロ:単一の自己完結型でcgo不使用のGoバイナリです。Python、Docker、Qdrant、Ollamaは必要ありません。
- あらゆるMCPクライアントに対応:Claude Code向けに構築されていますが、MCPを話すあらゆるものと連携します。
- 出典付きの回答:すべての結果に正確な
file#sectionと行範囲へのリンクが含まれるため、主張を検証できます。 - 高速な検索がデフォルト:SQLite FTS5 / bm25をすぐに利用できます。ビルドタグを指定すると、オプションでローカルのセマンティック検索とハイブリッド検索も利用できます。
- 読み書き可能なメモリー:エージェントは永続的なメモを記録でき(
remember)、ツリーはユーザーが管理できます(forget、move、list)。 - デフォルトで安全:オプトインしない限り読み取り専用です。書き込み先は指定パス内に限定され、インデックスへの取り込み時(記録と取り込みの両方)にコンテンツのシークレットスキャンが行われます。この機能は
exclude_secretsで制御できます。
仕組み
your files → mnemos index (SQLite/FTS5) → Claude Code memory → cited answers
設定すると、曖昧な回答ではなくプロジェクトの情報に基づいてClaudeが回答し、 情報源も示せるようになります:
- 「なぜこのアーキテクチャを選んだのですか?」
- 「ルールエンジンについてのADRはどこにありますか?」
- 「SCIMプロビジョニングについて分かっていることを要約してください。」
- 「このプロジェクトのメモリーに最近どのような変更がありましたか?」
内部では、このバイナリにMCPサーバー、インデックス作成パイプライン、SQLite ストア、全文検索、増分ファイルウォッチャー、管理用CLIが組み込まれています。 docs/architecture.mdをご覧ください。
実際に検索できるのでしょうか?
すぐに出典付きの検索結果が得られます(デフォルトの字句検索ビルド、同梱のサンプルバンドルを使用):
$ mnemos add examples/git-recipes/bundle --into . --collection git
$ mnemos search "recover lost commits" --limit 1
1. recovery/reflog.md#Gotcha
lines 24-28
score 7.8
すべての結果は実際のfile#sectionと行範囲を示しており、その場所を開けます。それがこのツールの目的です。
測定済みの検索品質。 mnemos evalは、OKFバンドルから検証用のクエリ→ソースのペアを自動生成します(各サンプルブロックをそれぞれのドキュメントから取り除き、検索で正しいドキュメントを見つけられるかを確認します)。そのうえで、ドキュメント単位の指標を報告します。同梱のexamples/git-recipesバンドル(レシピ6件、キーワード形式のクエリ)での結果:
| 検索方式 | Hit@1 | Recall@12 | MRR@12 |
|---|---|---|---|
| 字句検索、デフォルト(FTS5 / bm25) | 0.83 | 0.83 | 0.83 |
セマンティック検索+ハイブリッド検索(--semantic) | 1.00 | 1.00 | 1.00 |
3つの指標はいずれも**[0,1]の範囲の割合**です(パーセンテージにするには×100)。値が大きいほど良好です。@Kは検索の深さを示します。Hitでは上位1件、それ以外では上位12件を対象とします:
- Hit@1 — 1位の結果が正しいドキュメントであるクエリの割合(
0.83= 5/6)。 - Recall@12 — 正しいドキュメントが上位12件のいずれかに含まれる割合。
- MRR@12 — 平均逆順位:上位12件における「最初に正しいドキュメントが現れる順位」の逆数の平均(
1.0= 常に1位)。
デフォルトの字句検索ビルドでも、キーワード検索では十分な結果が得られます。オプションのembedビルド(セマンティック検索を参照)が真価を発揮するのは、より難しい、構造化データを対象にした自然言語クエリです。examples/onpage-seoバンドルでは、検証用の回答がJSON-LD / sitemap-XMLブロックで、説明文とキーワードがまったく一致しません。字句検索のスコアが0.00である一方、--semanticではHit@1 0.57 / Recall@12 0.86を達成します。再現するには次を実行してください(Nはそれぞれ6と7です。これは動作確認の目安であり、ベンチマークではありません):
mnemos eval examples/git-recipes/bundle # lexical → 0.83
make build-embed && mnemos models install all-MiniLM-L6-v2
mnemos eval examples/git-recipes/bundle --semantic # hybrid → 1.00
mnemos eval examples/onpage-seo/bundle --semantic # the hard case → 0.57
Claude Code に接続する
上記の60秒でできる方法では、絶対パスの --config を指定して claude mcp add を使用しました。
claude mcp add mnemos -- mnemos serve --config /abs/path/to/project/.mnemos/mnemos.toml
リポジトリで共有するには、代わりに .mcp.json をコミットします。
{ "mcpServers": { "mnemos": { "command": "mnemos", "args": ["serve", "--config", "/abs/path/to/project/.mnemos/mnemos.toml"] } } }
claude mcp list で確認してください(mnemos ✓ connected と表示されます)。また、セッション内で /mcp を実行して確認できます。以降、Claude はツールを自動的に呼び出します。機能を参照してください。
別のマシンにあるワークスペースを使用するには、SSH 経由で stdio を実行してください。mnemos はネットワークリスナーを開きません。docs/remote-access.mdを参照してください。
--config のパスを絶対パスにする必要がある理由
Claude Code はサーバーを起動する作業ディレクトリを保証しないため、設定ファイルを基準にすることで、検索が確実に行われます。--config <file> を渡すと、そのファイルのディレクトリが MNEMOS_DIR になり、すべての場所がその固定サブパスになります。そのため、絶対パスの --config だけで十分です。ナレッジベース(kb/)、データベース(state/index.db)、モデルディレクトリはすべてそのファイルの隣を基準とするため、Claude Code がどこからサーバーを起動しても変わりません。引数なしの mnemos serve は自動検出にフォールバックします(最も近いプロジェクトの .mnemos、それがなければ ~/.mnemos)。サーバーの作業ディレクトリがたまたまプロジェクト内にある場合にしか、データは見つかりませんが、Claude Code はそれを保証しません。解決順序の詳細はdocs/paths-and-indexing.mdを参照してください。
コマンド1つで接続できます。Claude Code に mnemos ✓ connected と表示されます。
セマンティック検索:質問には、ノートのどこにも出てこない単語 「disappeared」 が含まれていますが、それでも Claude は recovery/reflog.md を見つけて引用します。
この動画ではオプションのセマンティックビルド(
make install-embed+mnemos models install all-MiniLM-L6-v2+use_vectors = true。セマンティック検索を参照)を使用しています。デフォルトのmake installバイナリは語彙検索のみのため、この例のようなキーワードを含まない質問には答えられません。代わりにキーワードで検索してください(例:mnemos search "recover lost commits"を実行すると、同じドキュメントが見つかります)。
Claude にメモリを自動的に使わせる(オプションのスキル)
MCP ツールは受動的です。利用可能ではありますが、回答前に mnemos.search を呼び出したり、保存に値する情報を伝えたときに mnemos.remember を呼び出したりするかどうかは、Claude が判断する必要があります。モデルはそうしないことがよくあります。同梱の mnemos-okf スキルは、メモリを使うタイミングを定めることで、このギャップを埋めます。前提に基づいて回答する前に情報を呼び戻し、長期的に役立つ事実を記録し、OKF ツールを使います。
これはオプションで、Claude Code 専用です。このスキルがなくても、サーバーはあらゆる MCP クライアントで動作します。すべてのプロジェクトで使えるように、ユーザー全体にインストールします。
make install-skill # copies skills/mnemos-okf -> ~/.claude/skills/ and merges its hooks
または、手動で配置することもできます。たとえば、このリポジトリだけで使う場合はプロジェクトレベルに配置します。
mkdir -p .claude/skills && cp -r skills/mnemos-okf .claude/skills/mnemos-okf
記録は慎重に行われます(長期的に役立つ事実のみを対象とし、秘密情報をスキャンします)。また、allow_write/allow_delete が有効な場合に限って許可されます。このスキルが、設定で許可されていないアクセス権を付与することはありません。skills/mnemos-okf/SKILL.mdを参照してください。
メモリループ
mnemos は、コーディングエージェント向けのローカルなプロジェクトメモリです。出典付きの想起、永続的なプロジェクト状態、知識の統合を提供します。
prompt
-> recall (search first, cite)
-> act
-> capture durable facts to the inbox
-> update project/task state
-> consolidate raw captures into canonical docs
-> cite everything
同梱の mnemos-okf スキルでは、これを RECALL、CAPTURE、OKF、RESTORE、TASK、CONSOLIDATE の6つのモードとして実装しています。タスクは Task ドキュメントで、mnemos task list でまとめて表示できます。統合で情報が黙って上書きされることはありません。競合は明示され、各処理はジャーナルに記録されます。
参照用のレイアウトは、架空のプロジェクトを使った examples/project-memory/bundle/ にあります。ステータス、制約、決定事項、タスク(状態と履歴を分離)、統合ジャーナルが含まれています。これを取り込んで、mnemos task list の動作を確認してください。
mnemos add examples/project-memory/bundle --into aurora --collection aurora
mnemos task list
in_progress (1)
aurora/tasks/rate-limit-ingest.md Rate-limit the ingest endpoint
todo (1)
aurora/tasks/csv-export.md Add CSV export
done (1)
aurora/tasks/fix-auth-timeout.md Fix auth token timeout
フックによる自動化
スキルは参考情報であり、各モードをいつ実行するかはモデルが判断します。Claude Code のフックを使うと、メモリループを確実に実行できます。make install-skill(または make install-hooks 単独)を実行すると、skills/mnemos-okf/hooks/settings.example.json が ~/.claude/settings.json に冪等にマージされ、.bak が保持されます。無効にするには SKIP_HOOKS=1 を指定してください。プロジェクト単位の .claude/settings.json にファイルを手動でマージすることもできます。有効になるフックは3つです。
| フック | マッチャー | 効果 |
|---|---|---|
SessionStart | startup|resume|compact | セッション開始時に、作業セット(mnemos task list と最近の決定事項(mnemos ls decisions))を注入します。compact マッチャーは、コンテキストが圧縮された後にもこれを再注入します。 |
UserPromptSubmit | (すべてのプロンプト) | mnemos hook recall は、プロンプトに想起の手がかり(「as we decided」「what was」「remember when」とそのフランス語表現)が含まれる場合、または疑問符で終わる場合に語彙検索を実行し、出典付きの上位3件を注入します。2000文字を超えるプロンプト(貼り付けられた資料)はスキップされます。条件に該当しない場合や一致がない場合は何もせず、通知も表示しません。 |
Stop | (すべてのターン) | mnemos hook stop は、各ターンにつき1件のジャーナルエントリ(リクエスト、変更されたファイル、最終的なアシスタントのテキスト)を journal/<date>/ に書き込みます。ジャーナルエントリは検索対象から除外され、CONSOLIDATE によって昇格された場合にのみ kb に登録されます。allow_write = true が必要です。それ以外の場合は何もせず、通知も表示しません。 |
PreCompact による永続化(セッションの要約、キャプチャのフラッシュ)は、そのフックイベントではモデルにコンテキストを注入できないため、スキル内で行います。
opencode を接続する
すべてのプロジェクトで使えるグローバルエントリを1つ設定します。~/.config/opencode/opencode.json に追加してください。
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mnemos": { "type": "local", "command": ["mnemos", "serve"], "enabled": true }
}
}
既存のファイルに冪等にマージすることもできます(jq が必要です。JSONC ではなく、通常の JSON のみ対応しています)。
f=~/.config/opencode/opencode.json
[ -f "$f" ] || echo '{"$schema":"https://opencode.ai/config.json"}' > "$f"
jq '.mcp.mnemos = {type: "local", command: ["mnemos", "serve"], enabled: true}' "$f" > "$f.tmp" && mv "$f.tmp" "$f"
opencode mcp list を実行して確認してください(✓ mnemos connected と表示されます)。
Claude Code とは異なり、ここでは --config は不要です。opencode はプロジェクトディレクトリでローカル MCP サーバーを起動するため、引数なしの mnemos serve は、プロジェクトに .mnemos/ があればそこを使用し、なければ ~/.mnemos にフォールバックします。opencode は環境全体をサーバーに渡すため、この探索結果を上書きするものが2つあります。エクスポートされた $MNEMOS_DIR または $CLAUDE_PROJECT_DIR があると、すべてのプロジェクトが1つのワークスペースに固定されます。意図的に特定のワークスペースを使用するには、command に "--mnemos-dir", "/abs/path/.mnemos" を追加してください(opencode は ~ を展開しません)。opencode はツール名のドットを置き換えるため、ツールは mnemos_mnemos_search などの名前で表示されます。
機能
Claude は MCP ツールを通じてメモリにアクセスします(ユーザーは対応する CLI コマンドを使ってアクセスします)。表記の違いに注意してください。mnemos.search は Claude が呼び出す MCP ツールで、mnemos search はユーザーが実行する CLI コマンドです。
クエリ(読み取り専用、ゲートなし)
mnemos.search:引用付きのランキング済み・フィルタリング済み検索です。mnemos.read:chunk_idを指定して正確なチャンクを、またはuriを指定してドキュメント全体を読み込みます。follow_links: trueを渡すと、ドキュメントの1ホップ先のリンク近傍も添付されます。mnemos.context:LLM がそのまま使えるコンテキストブロックとして、上位 k 件の結果を返します(uri:start-end→ コンテンツ)。follow_links: trueを渡すと、各ブロックのドキュメントの1ホップ先のリンク近傍も添付されます。mnemos.related:ドキュメントのリンクグラフ上の近傍、つまりドキュメント単位で1ホップ先の外向きリンクと被リンクを返します。リンク先が存在しない外向きリンクはresolved: falseとして返されます。direction(outbound/inbound/both)とlimitでフィルタリングできます。mnemos.list:ディスク上の OKF ツリーをたどり、各ファイルにインデックスのメタデータ(タイトル、タイプ、タグ、コレクション)とindexedフラグを付けて表示します。インデックス済みと未インデックスのファイルの両方を確認できます。path、collection、type、またはインデックス状態でフィルタリングできます。mnemos.journal_pending:まだレビューされていないセッションジャーナルのエントリを、古い順に一覧表示します。ジャーナルのエントリは検索対象から除外されます。CONSOLIDATE はこの方法でエントリを見つけます。
書き込み(allow_write = true が必要)
mnemos.remember:メモリにノートを書き込みます。任意のpath(例:"adr/0003-rule-engine.md")を渡すと、自動命名してkb/capture/以下に保存する代わりに、OKF ツリー内の明示した場所に配置できます。書き込みとインデックス作成の前に、コンテンツのシークレットスキャンが行われます。mnemos.okfy:ツリー内の既存の.txt/.mdファイルを、out(既定ではソースパスに.md拡張子を付けたパス)に OKF ドキュメント(フロントマター+本文)として変換してインデックスに追加します。ソースはそのまま残ります。最初にソース本文のシークレットスキャンが行われます。mnemos.journal_promote:ジャーナルのエントリをレビューしたことを記録します。エントリの内容を保持するナレッジベースドキュメント(先にmnemos.rememberで書き込み済み)のパスをpromoted_toに設定するか、noneを設定します。ナレッジベースドキュメント自体は書き込みません。また、すでにスタンプ済みのエントリは拒否されます。
mnemos edit <uri> は人間向けの代替手段です。allow_write フラグによる同じ制限が適用される、1つのドキュメント用のターミナルエディターです。独自の MCP ツールはありません。ドキュメントを対話的に編集するを参照してください。
管理(allow_delete = true が必要)
mnemos.forget:OKF ツリーからファイルを削除し、インデックスから除外します。冪等です。mnemos.move:ツリー内のファイルまたはディレクトリを移動し、新しいパスで再インデックスします。ディレクトリを移動すると、サブツリー全体が移動し、各ドキュメントのコレクションは保持されます。古いパスへのインバウンドの Markdown リンクは V0 では書き換えられず、警告としてログに記録されます。
ジャーナルには CLI での操作方法もあります。mnemos journal pending は未レビューのエントリを一覧表示し、mnemos journal promote <entry-uri> <target|none> はエントリにスタンプを付けます(allow_write が必要)。mnemos journal prune --older-than 30d は期間を過ぎたレビュー済みエントリを一覧表示し、--apply を付けると削除します(allow_delete が必要)。未レビューのエントリが削除されることはありません。
メモリを最新の状態に保つ
変更時に再インデックスするウォッチャーを実行します(差分更新、削除されたファイルも除去):
mnemos watch . --collection myproject
Claude がノートを記録・管理できるよう、.mnemos/mnemos.toml で書き戻しを有効にします:
[mcp]
allow_write = true # gates mnemos.remember and mnemos.okfy
allow_delete = true # gates mnemos.forget and mnemos.move
ツリーに対してウォッチャーを実行している場合、forget/move 操作もウォッチャーによって検知されます(重複しますが、冪等です)。ツールはインデックスを直接更新するため、ウォッチャーなしでも動作します。ウォッチャーが kb/capture/ を監視する場合は、記録したノートの二重インデックスを避けるため、[capture] defer_to_watcher = true を設定します。
ドキュメントを対話的に編集する
mnemos edit <uri> は、OKF ドキュメントを一度に 1 つ開くターミナルエディターです。画面は 3 つのペインに分かれています。
- NAV:ドキュメントからの外部リンク、ドキュメントへの被リンク、および(埋め込みビルドでコーパスの埋め込みが計算済みの場合は)意味的に類似したドキュメントを表示します。それ以外の場合、このセクションには検索結果の代わりに利用不可を示すヒントが表示されます。
- METADATA:ドキュメントの OKF
typeに応じた型のフロントマター項目です。既知の列挙値(タスクのstatusやpriorityなど)は矢印キーで切り替えられ、tagsはリスト全体として再入力されます。未知のフィールドは自由入力となり、typeなどインデックスが管理するフィールドは読み取り専用です。 - CONTENT:本文を
$EDITORに渡して編集し、終了時に再読み込みします。
mnemos edit tasks/ship.md
キー操作:tab でフォーカス、↑↓ で移動、enter で開く/編集、←→ で列挙値を切り替え、e で $EDITOR、m で移動/名前変更、s で保存、b/backspace で戻る、q で終了します。保存時はまずファイルを書き込み、その後、そのドキュメントだけを再インデックスします。そのため、再インデックスに失敗しても編集内容が失われることはありません。フロントマターの書き込みでは、ファイル全体を書き換えるのではなく、それ以外の部分(コメント、キーの順序、無関係なフィールド)を保持します。現在のドキュメントに未保存の変更がある状態で別のドキュメントに移動すると、先に保存されます。
m は、開いているドキュメントを移動または名前変更します。現在の uri が表示されるので、自由に編集するか、tab を押して、すでにドキュメントを格納しているディレクトリの曖昧一致フィルター付きピッカーを開きます(enter で選択したディレクトリの下にファイル名を移動し、esc でプロンプトに戻ります)。確定すると、ディスク上のファイル名が変更され、新しい uri で再インデックスされた後、その場所でエディターが再度開きます。古いパスを指している被リンクは書き換えられず、報告されます。mnemos mv と同様に、古いインデックスエントリが削除されるため、[mcp].allow_delete = true が必要です。
uri の指定が必要です。引数なしの mnemos edit はエラーになり、ツリーを参照するピッカーはまだありません。mnemos.remember/mnemos.okfy と同じ方法で制限されています。
[mcp]
allow_write = true # also gates mnemos edit
対応する MCP ツールはありません。mnemos edit は CLI 専用で、キーボードを使う人間向けです。
セマンティック検索(オプション)
デフォルトのバイナリは字句検索のみ(FTS5/bm25)に対応し、小さく、cgo に依存しません。ローカルのセマンティック検索とハイブリッド検索は完全に実装されていますが、embed ビルドタグの背後でコンパイルされるため、ONNX/トークナイザーの依存関係がデフォルトのバイナリに含まれることはありません。有効にするには、次のようにします。
make build-embed # or: make install-embed (still cgo-free, CGO_ENABLED=0)
mnemos models install all-MiniLM-L6-v2 # downloads the embedding model into ~/.mnemos/models
mnemos reindex --embeddings # compute vectors for already-indexed chunks
mnemos search "why did we choose this architecture" --semantic
--semantic は bm25 とベクトル類似度を融合するため、字句インデックスでは見つからない自然言語のクエリでも結果を得られます。embed ビルドがない場合(またはモデルがインストールされていない場合)、このフラグは明確なメッセージとともに拒否されます。通常の mnemos search は常に使用できます。
内部の仕組み(モデル、純粋な Go による ONNX 推論、RRF 融合)については、docs/architecture.md をご覧ください。
OKF のサポート
mnemos は OKF(Open Knowledge Format)バンドルと、YAML フロントマターおよび相互リンクを含む任意の Markdown ボルトを、特別なモードなしでネイティブに理解します。
- フロントマターの
tags/typeは、FTS の曖昧一致ランキング用シグナルになります。 - Markdown リンクはエッジとして取り込まれ、たどることができます。
mnemos related(およびmnemos.relatedツール)は、ドキュメントからの外部リンクとドキュメントへの被リンクをたどります。follow_linksはリンクを読み取りまたはコンテキスト呼び出しに付加し、[search] graph_expansion = trueは検索結果の空き枠を、上位結果の 1 ホップ先の近傍で埋めます。 index.mdファイルは構造のみとして扱われます(FTS とリンクグラフには含まれません)。
OKF バンドルは mnemos eval のコーパスとしても使われます。これは、評価用に保留されたクエリ→ソースのペアを自動生成し、コミット済みのベースラインに対する Hit@1/Recall@12/MRR@12 を報告します。docs/architecture.md をご覧ください。
参照
- docs/commands.md — すべての CLI コマンドとそのフラグ。
- docs/configuration.md:すべてのデフォルト値を含む、階層化された
<MNEMOS_DIR>/mnemos.toml。 - docs/paths-and-indexing.md — 状態の保存場所、インデックス対象、書き込み先、冪等性と URI のルール。
- docs/architecture.md — 設計原則と検索評価の手法。
- docs/remote-access.md:SSH 経由で別のマシン上のワークスペースを使用する方法、キーの制限方法、HTTP/SSE トランスポートがない理由。
セキュリティ
- ネットワーク通信もテレメトリーもありません。MCP サーバーは stdio 専用です。
- 配布バイナリには SBOM(syft で生成)が付属し、cosign(キーレス OIDC)で署名されています。
- デフォルトでは読み取り専用です。書き戻しはオプトインです(
allow_write = true)。破壊的な操作(forget、move)には別途オプトインが必要です(allow_delete = true)。 - 呼び出し元が指定したすべてのパスは、ディスク操作の前に制限ガードで検証されます。
..による上位ディレクトリへの移動、ツリーのルート外を指す絶対パス、シンボリックリンクによる逸脱、.mnemos/へのアクセス、[security].excludeの glob はすべて拒否されます。 - 登録済みの外部オリジンは読み取り専用です。すべての書き込み動詞は、登録済みの名前空間にある uri を拒否し、所有するオリジンを示します。登録済みオリジン外のすべてに対するガードは変更されていないため、未登録のシンボリックリンクによる逸脱はこれまでと同様に拒否されます。
- コンテンツはインデックス作成前に、キャプチャ経路(拒否する
remember、okfy)と取り込み経路(マッチしたルール名を含む警告を出してファイルをスキップし、処理を続行するingest、add、watch、reindex)の両方でシークレットスキャンされます。無効にするには[security] exclude_secrets = falseを設定してください。 - パスおよびシークレットの除外パターンにより、
.env、キー、シークレット用ディレクトリはインデックスに含まれません。
ポリシーの全文は SECURITY.md を参照してください。
開発
make build # cgo-free binary -> bin/
make test # go test -race ./...
make audit # golangci-lint (incl. govet + staticcheck) + govulncheck + race tests
make tools # install pinned dev tools (golangci-lint, govulncheck)
make help # list all targets
アーキテクチャ、設計原則、検索評価の手法については docs/architecture.md を参照してください。設計上の決定事項は ADR として記録されています。コントリビューションを歓迎します。CONTRIBUTING.md をご覧ください。
ライセンス
mnemos は MIT License の下でライセンスされています。このライセンスは mnemos 独自のコードとコンテンツに適用されます。リポジトリには、MIT License の対象外であり、各素材独自の条件が適用されるサードパーティ素材も含まれています。詳細は THIRD-PARTY-NOTICES.md をご覧ください(特に examples/onpage-seo/bundle/ の OKF サンプルバンドル)。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。