memex について
memex は、ソフトウェア開発エージェント向けのオープンソース MCP サーバーとフックサービスです。リポジトリの変更を時点と根拠を保ったコンテキストに変換し、Claude Code と Codex に届け、編集根拠の有効性も確認します。
主な機能
- 01リポジトリの二時点ナレッジグラフを構築
- 02セッション開始時に作業コンテキストを提供
- 03編集前にコンテキストの有効性を確認
- 04再開時に変更ファイルを通知
- 05並行ワークツリーごとに個別ビューを提供
- 06決定事項や問題を記録・検索
活用シーン
- 01コーディングエージェントに最新のコード背景を提供
- 02古いコード根拠に基づく編集を防止
- 03モジュール、シンボル、設計決定を検索
- 04ファイル変更の影響候補モジュールを特定
MCP 対応
MCP サーバーは、リポジトリのコンテキスト検索、影響予測、変更説明などのツールを提供し、決定事項や問題を記録する書き込みツールも備えます。MCP リソースも公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y stifler-memex-mcpNEO4J_URIBolt URI of your Neo4j instanceNEO4J_USERNeo4j usernameNEO4J_PASSWORDシークレットNeo4j passwordGEMINI_API_KEYシークレットGoogle Gemini API key for entity extractionローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
14掲載時のツール一覧 · 2 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| repo | string | いいえ | 結果の範囲を限定する任意のリポジトリの絶対パス。 |
| scope | string | いいえ | 概要を絞り込む任意の相対パス(例:'src/auth')。 |
| project | string | いいえ | 結果の範囲を限定する任意の project_id('repo' の代わり、またはこれと併用 — `memex init --project-id` を参照)。 |
詳細
memex:エージェント型ソフトウェアエンジニアリングのための信頼できるエンジニアリングコンテキスト
Claude Code と Codex のエンジニアリングコンテキストをコードの変更に合わせて最新に保ち、 根拠が変わった編集を保留する、オープンソースの MCP サーバーとフックサービスです。
コミットやファイル変更を構造化されたエンジニアリング知識に変換し、鮮度と出所を保ったままエージェントに届けるデーモン、フックサービス、MCP サーバーです。memex が個人の記憶や未加工のセッション状態の保存先になることはありません。
memex は、リポジトリの二時点知識グラフ(モジュール、シンボル、決定事項、問題、根拠、コードの変遷)を構築します。v1 では Claude Code と Codex にもフックします。各セッションは適切なコンテキストで始まり、各編集は現在のコードに照らしてチェックされ、何が変わったのかがエージェントに正確に伝えられます。
memex の公開先
| ウェブサイト | memex.stifler.in |
| ソースコード | github.com/STiFLeR7/memex |
| Python パッケージ | memex-mcp on PyPI |
| Node パッケージ | stifler-memex-mcp on npm |
| MCP レジストリ | registry.modelcontextprotocol.io。io.github.STiFLeR7/memex として掲載 |
| Claude Code プラグイン | STiFLeR7/claude-plugins |
| ディレクトリ | Glama · AI Agents Listing |
評価記録は BENCHMARK.md、リリース履歴は CHANGELOG.md、報告手順は SECURITY.md、 開発への参加方法は CONTRIBUTING.md をご覧ください。
https://github.com/user-attachments/assets/b14e3185-ea36-4ae5-bd18-2d34e6bf7be4
60 秒でわかる memex v1。プレーヤーが読み込まれない場合は、動画をダウンロードしてください。
ライブコンテキスト(v1)
コーディングエージェントは、コードのスナップショットをもとに作業します。チームメイトが変更をプッシュし、別のエージェントがファイルを編集し、ブランチが移動しても、エージェントは以前に読み取った内容をもとに作業を続けます。v1は、Claude CodeとCodex内でそのスナップショットを最新の状態に保ちます。
| タイミング | memexの動作 |
|---|---|
| セッション開始時 | タスクに必要な範囲に限定した作業セットを提供し、クライアント自身のセッション記録から提供を確認します |
| 各編集の前 | 編集の前提となるコンテキストが引き続き有効かを確認します。有効でない場合は編集を保留し、エージェントに範囲を絞った修正情報を提供して、エージェントが修正します |
| 再開時 | セッションを離れている間にコードが変更されていた場合、再読み込みが必要なファイルを提示します |
| 並行するエージェント | リンクされた各ワークツリーに個別のビューを提供するため、並行して作業する各エージェントがそれぞれのコードを確認できます |
| 試用 | memex v1 mode shadow は何も変更せず、修正される内容を記録します。フックはフェイルオープンで動作し、memex v1 rollback ですぐにmemexを停止できます |
uv tool install memex-mcp # installs the `memex` command
cd your-repo
memex v1 doctor # what is set up, what is missing, what to do next
memex v1 install claude # hooks in .claude/settings.json; global settings untouched
memex v1 install codex --neo4j-uri bolt://localhost:7687 # optional, for Codex
memexを使用するには、すでに稼働しているNeo4j 5サーバーが必要です(Dockerは必須ではありません)。フックはチェックアウト内のプロジェクト設定にのみ追加され、memexがクライアントの認証情報を要求したり保存したりすることはありません。完全なガイド、ホスト別の手順、ロールバックについては、docs/v1/25_ONBOARDING.mdをご覧ください。
flowchart LR
A[Your repository<br/>files + git] --> B[memex watcher<br/>tree-sitter + Gemini]
B --> C[Neo4j graph<br/>bitemporal facts]
C --> D[memex core<br/>ContextPacket selection]
D --> H[Hook service<br/>session start · edit checks · resume notice]
D --> E[Hermes MemoryProvider<br/>automatic read-only prefetch]
D --> F[MCP tools<br/>explicit lookup]
H --> G[Claude Code / Codex]
E --> G
F --> G
style B fill:#cfe8ff,stroke:#0066cc,color:#000
style C fill:#fff4cf,stroke:#cc9900,color:#000
style H fill:#d4f5d4,stroke:#2d8f2d,color:#000
インストール
Claude Codeマーケットプレイス経由
/plugin marketplace add STiFLeR7/claude-plugins
/plugin install memex-mcp@stifler-marketplace
Claude Codeのセッションを再起動してください。
インストールまたはアップグレード後の初回起動時に、memexのPython依存関係がダウンロードされます(約40秒)。この処理は一度だけClaude CodeのMCP接続タイムアウト時間を超えることがあります。先にウォームアップしてから、再起動してください。
npx -y stifler-memex-mcp --help # one-time download; later starts take a few seconds
Claude Codeに接続タイムアウトが引き続き表示される場合は、/mcp を開き、memex に再接続してください。ツールにNeo4jへ接続できないと表示された場合は、Neo4jを起動してください(例:docker start memex-neo4j)。ツールは再起動しなくても復旧します。
手動
docker compose -f docker/docker-compose.yml up -d
cat > .env <<EOF
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=memex-local
GEMINI_API_KEY=your-key-here
EOF
npx stifler-memex-mcp init --repo .
npx stifler-memex-mcp watch --repo .
npx stifler-memex-mcp serve --repo .
Hermesとの統合
Hermesとの統合は読み取り専用です。個人のメモリ、生のセッション状態、実行状態はHermesが保持します。memexは、範囲を限定した ContextPacket を通じてリポジトリのエンジニアリングコンテキストを提供します。Hermesの state.db、トランスクリプト、プロンプト、ツールの結果は取り込みません。
Hermesのプロファイル設定にmemexプロバイダーを追加してください。
memory:
provider: memex
plugins:
memex:
repo_path: /absolute/path/to/repository
prefetch_timeout_seconds: 7
max_items: 8
max_chars: 12000
Hermesがインストールされていない場合は、MCPの get_engineering_context ツールで同じコンテキストセレクターを使用してください。どちらの方法も、プロトコルに依存しないmemexコアを共有し、情報を取得できない場合はフェイルオープンで動作します。
| チャネル | コマンド |
|---|---|
| Claude Codeマーケットプレイス | /plugin install memex-mcp@stifler-marketplace |
| npx(インストール不要) | npx stifler-memex-mcp <cmd> |
| uv | uv add memex-mcp |
| pip | pip install memex-mcp |
| ソース | git clone github.com/STiFLeR7/memex && uv sync |
セルフホスト型のチームデプロイ
チームで共有する環境をセットアップする場合(Neo4jを1台、memex-serverを1台使用し、認証はデフォルトで有効、Neo4jのポートはホストに公開されません):
bash docker/bootstrap-team-env.sh
docker compose -f docker/docker-compose.team.yml up -d
初期管理者キーの取得方法や、避けるべき down -v の注意点を含む全手順については、docker/TEAM-DEPLOY.mdをご覧ください。
概要
| 項目 | 値 |
|---|---|
| 出力 | リポジトリから継続的にデータを取り込んだ Neo4j グラフ |
| ストレージ | Graphiti 経由の Neo4j。二時性:すべてのエッジに created_at と、任意で expired_at があります |
| コンテキスト | 範囲が限定され、ランク付けされ、出典を追跡できる ContextPacket |
| ライブコンテキスト(v1) | セッション開始時の作業セット、スコープ付き修正を伴う編集チェック、再開時の変更通知、ワークツリーごとのビュー(Claude Code と Codex のフック) |
| 統合 | Hermes MemoryProvider、MCP リソース/ツール、Claude Code、Cursor、Codex、Gemini CLI |
| 障害時の動作 | フェイルオープン。memex がなくてもエージェントの実行は継続します |
| 粒度 | 階層型 Leiden クラスタにより、50〜5000 以上のモジュールに対応 |
| 要約生成 | Gemini Flash がコミットを Decision ノードに要約し、根拠に基づく要約生成には Pro を使用します |
| 信頼度 | クエリ時に計算します。2種類の減衰方式(検証済みの半減期は約139日、未検証は30日で古い情報として扱います) |
| 書き込みガバナンス | ノードタイプごとの ACL、エージェントによる書き込み時の意図確認、明示的な corroborates/supersedes セマンティクス |
| Goal 10 のエビデンス | 有効なペア実行8/8件、処置群の失敗0件、処置群のリグレッション0件 |
ライフサイクル
flowchart TD
Init[memex init<br/>extract baseline] --> Watch[memex watch<br/>daemon + git hooks]
Watch -->|commit| Extract[tree-sitter extract<br/>symbols, imports, lockfile]
Extract --> Synth[Gemini Flash<br/>diff → Decision nodes]
Synth --> Write[Graphiti add_episode<br/>+ post-hoc bitemporal SET]
Write --> Decay[Scheduler<br/>nightly confidence decay]
Decay -->|stale edges| Archive[expired_at = now]
Serve[memex serve<br/>MCP stdio/HTTP] -.->|reads| Write
Agent[AI agent] -->|14 MCP tools| Serve
Serve -->|record_decision / record_problem| Write
Cluster[memex cluster<br/>Leiden over hybrid edges] -.->|every N commits| Write
style Init fill:#e8f4ff,color:#000
style Watch fill:#fff4cf,color:#000
style Synth fill:#ffe0cc,color:#000
style Serve fill:#d4f5d4,color:#000
MCP ツール
14個のツール:読み取り8個、書き込み4個、分析2個。
読み取り
| ツール | 使用するタイミング |
|---|---|
get_project_context | セッション開始時。リポジトリのサイズにかかわらず、1500トークン未満のクラスターレベルの概要を返します |
get_symbol_context | 関数またはクラスを編集する前。呼び出し元、呼び出し先、関連する決定を返します |
get_recent_decisions | 直近N日間のアーキテクチャ上の決定を返します。モジュールのスコープを任意で指定できます |
get_open_problems | 対応中のバグと技術的負債を、深刻度順に返します |
search_context | ハイブリッド検索:セマンティック検索 × キーワード検索 × グラフトラバーサル × RRF マージ |
get_stale_context | 複合信頼度がしきい値を下回ったエッジを返します |
explain_change | コミット SHA を指定すると、差分を関連する Decision/Problem ノードと照合し、Gemini Pro に根拠に基づく説明を依頼します |
predict_impact | ファイルパスを指定すると、グラフの結合度に基づいて影響を受ける可能性が高いモジュールをランク順に返します(LLM 呼び出しなし) |
書き込み
| ツール | 使用するタイミング |
|---|---|
record_decision | 技術的な選択を行った後。corroborates(補強)と supersedes(置き換え)をサポートします |
record_problem | バグまたは技術的負債を発見したとき |
resolve_problem | 追跡中の問題を修正したとき |
invalidate_edge | 保存された事実が正しくなくなったとき |
二時性信頼度
信頼度は、変化する保存済みの数値ではありません。base_confidence、検証ステータス、最後に補強されてからの経過時間、アクセス回数に基づいて、クエリ時に計算されます。
flowchart LR
Edge[Edge created<br/>base_confidence] --> Q{Validated by<br/>a human?}
Q -->|yes| Slow[Slow regime<br/>half-life ~139d]
Q -->|no| Fast[Fast regime<br/>stale at exactly 30d]
Slow --> Score[Composite score<br/>conf × recency × rehearsal]
Fast --> Score
Score -->|below floor| Stale[get_stale_context surfaces it]
Score -->|access| Bump[last_reinforced_at updated]
Bump --> Score
style Slow fill:#d4f5d4,color:#000
style Fast fill:#ffd4d4,color:#000
| 項目 | 値 |
|---|---|
| 検証済みの半減期 | 約139日 |
| 未検証の古さのしきい値 | 30日(複合信頼度 < 0.3) |
| 鮮度 τ | 90日(指数減衰) |
| 複合信頼度の式 | conf × recency × (1 + rehearsal_w × log(1 + access_count)) |
| 矛盾の類似度しきい値 | 0.4(これを下回り、有効期間が重複する場合は矛盾) |
| 意図確認のしきい値 | 0.85(MCP 書き込み時の類似度チェック) |
階層型クラスタ
memex cluster は、ハイブリッドエッジグラフに対して階層型 Leiden を実行します。
| エッジタイプ | 重み |
|---|---|
| ディレクトリの近接配置 | 1.0 |
| モジュールのインポート | 2.0 |
| シンボル呼び出し | log(1 + calls) |
| 項目 | 値 |
|---|---|
| アルゴリズム | 固定シードを使用する graspologic.partition.hierarchical_leiden |
| 命名 | モジュールの docstring とシンボル名に対する TF-IDF 上位3件。フォールバックは親ディレクトリ |
| ID の固定 | 再実行間で Jaccard ≥ 0.5(名前変更後もクラスタ名を安定させます) |
| ユーザーによる上書き | .memex/clusters.yaml。任意の割り当てをロックできます |
| コンテキストの予算 | リポジトリのモジュール数が50でも5000でも、get_project_context は1500トークン未満に収まります |
節約効果を測定する
memex は、トークン削減の指標と人間によるレビュー操作を SQLite データベース(~/.config/memex/telemetry.db)にローカル保存します。
CLI を使って、いつでも節約効果を確認できます:
memex stats
または、生の JSON ペイロードを表示できます:
memex stats --json
または、特定のリポジトリの範囲を指定できます:
memex stats --repo /path/to/repo
次の項目を集計して返します:
- 期間ごとの概要:
today、last 7 days、last 30 days、lifetimeにおける呼び出し数、返されたトークン数、推定トークン数(要求されたファイルのサイズ)、節約したトークン数、トークン削減率。 - 上位ツール:節約したトークン数の合計順に並べた、最も価値の高いツール。
- エージェントクライアント:アクティブなエージェント(Claude Code、Gemini CLI、Cursor、Codex)と、エージェントごとのトークン節約の内訳。
- 検証状況:検証済み、未検証、相互確認済みのノードの合計数と、前回のレビューから経過した日数。
同じ統計情報は、HTTP MCP トランスポートからも利用できます:
GET /stats?repo=/path/to/repo
Authorization: Bearer <your-key>
エージェントを接続する
Claude Code
上記のマーケットプレイスからインストールすると、自動的に設定されます。手動で設定する場合は、.claude/settings.json に追加します:
{
"mcpServers": {
"memex": {
"type": "stdio",
"command": "npx",
"args": ["-y", "stifler-memex-mcp", "serve", "--repo", "."]
}
}
}
Cursor
~/.cursor/mcp.json に追加します:
{
"mcpServers": {
"memex": {
"command": "npx",
"args": ["-y", "stifler-memex-mcp", "serve", "--repo", "."]
}
}
}
Gemini CLI
~/.gemini/settings.json に追加します:
{
"mcpServers": {
"memex": {
"command": "npx",
"args": ["-y", "stifler-memex-mcp", "serve", "--repo", "."]
}
}
}
Codex
~/.codex/config.toml に追加します:
[mcp_servers.memex]
command = "npx"
args = ["-y", "stifler-memex-mcp", "serve", "--repo", "."]
Anthropic memory tool (memory_20250818)
memex は Claude のネイティブなメモリツールをバックエンドとして利用できます。エージェントは、セッションごとのグラフ投影から読み取り、書き込み可能なスクラッチ領域に書き込みます。
memex memory-tool serve --repo . # in-process
memex memory-tool serve --repo . --transport http # FastAPI on :7464
from memex.memory_tool import MemexAsyncMemoryTool
memory_tool = MemexAsyncMemoryTool(repo_root=".")
client.beta.messages.run_tools(..., tools=[memory_tool])
運用原則
| # | 原則 | 方針 |
|---|---|---|
| 1 | 双時点管理、破壊的な変更はしない | エッジは削除せず、期限切れにします。WHERE r.expired_at IS NULL で有効な状態を絞り込みます |
| 2 | 信頼度は保存せず、計算する | 数値を変更すると、気付かないうちにずれが生じるおそれがあります。読み取りのたびに再計算します |
| 3 | 減衰には 2 つの方式がある | 検証済みの事実はゆっくり減衰します。未検証の事実は、アクセスされることで有用性を示す必要があります |
| 4 | 人間がプロセスに関与する | memex review は、信頼度が最も低い Decision ノードをキューに登録し、明示的な検証を促します |
| 5 | 書き込みを管理する | ノードタイプごとの ACL を設定します。Decision.policy = open、Module.policy = locked。類似コンテンツへの書き込み時には、意図の確認を行います |
| 6 | トークンは予算内に収める | Leiden クラスターを使い、リポジトリのサイズにかかわらず get_project_context を 1500 トークン未満に保ちます |
| 7 | 統合はコミット時のみ行う | ウォッチャーはデバウンス期間ごとにまとめて処理します。Gemini Flash がツール呼び出しのホットパスに入ることはありません |
| 8 | 統合には Pro、抽出には Flash | 根拠付けが重要なため、explain_change には Pro を使います。それ以外はすべて Flash を使います |
| 9 | 複数リポジトリに対応 | 1 つのウォッチャーと 1 つの MCP サーバーで、数百のリポジトリを管理できます。--repo で範囲を切り替えます |
| 10 | ローカルファースト | Neo4j は Docker 内で実行します。外部への呼び出しは Gemini のみで、コミット時に限られます |
memex を使う場面
| 使う場面 | 使わない場面 |
|---|---|
| 数週間から数か月にわたるプロジェクト | 一度きりのスクリプト、使い捨てのプロトタイプ |
| 複数のエージェント(Claude、Cursor、Codex)を使い、コンテキストを共有したい場合 | 1 つのタスクで 1 つのエージェントとしか作業しない場合 |
| アーキテクチャ上の決定を長期にわたって行い、記録しておく必要がある場合 | プロジェクト全体が 200k トークンのコンテキストウィンドウに収まる場合 |
| どのセッションからでも「X について何を決めたか」を確認したい場合 | リポジトリが十分に小さく、プロンプトに貼り付けられる場合 |
| 複数の開発者が同じコードベースで AI エージェントを使う場合 | /clear を一度も使わない単独作業の場合 |
プロジェクト構成
memex/
├── memex/
│ ├── extractor/ tree-sitter + lockfile parsers
│ ├── graph/ Neo4j writes, confidence, archive, cluster engine
│ ├── synthesizer/ Gemini Flash → Decision nodes
│ ├── mcp_server/ 14 MCP tools (read + write + analytic)
│ ├── memory_tool/ Anthropic memory_20250818 adapter
│ ├── watcher/ daemon + git hooks
│ └── cli.py init / watch / serve / review / graph / cluster
├── tests/ unit, integration, and objective evaluation suites
├── docker/ Neo4j compose
├── npm/ npx wrapper (publishes as stifler-memex-mcp)
└── Dockerfile introspection-only image for MCP directory sandboxes
コマンド
| コマンド | 説明 |
|---|---|
memex init | ベースラインのグラフ状態を抽出し、最初のクラスタリングを実行します |
memex watch | ファイルと Git のイベントを監視し、Neo4j に書き込むデーモンです |
memex serve | MCP サーバーを実行します(stdio、HTTP、または両方) |
memex review | 信頼度が最も低い判断を順に表示し、人が検証できる TUI です |
memex graph --output graph.html | クラスタのオーバーレイを備えた、自己完結型の D3 フォースレイアウトです |
memex cluster [--rerun] [--dry-run] | ハイブリッドエッジグラフに対して Leiden を実行します。Jaccard ≥ 0.5 でクラスタ ID を固定します |
memex memory-tool serve | グラフの投影を使って Anthropic の memory_20250818 ツールを支えます |
memex stats [--json] [--repo <path>] | コンテキストトークンの節約量とテレメトリ統計を表示します |
ライセンス
MIT。詳しくは LICENSE をご覧ください。
作者
Hill Patel (@STiFLeR7)
主な貢献者とメンテナー
- Hill Patel (@STiFLeR7)、アーキテクト兼メンテナー
- Nirvaan Lagishetty (@Nirvaan05)、主要な貢献者兼メンテナー
貢献
Issue または PR を作成してください。uv sync --all-extras で開発ツールチェーンをインストールできます。
オフラインテストスイートには uv run pytest -m "not integration" を実行し、PR を作成する前に uv run ruff check . を実行してください。バージョンを更新する場合は、pyproject.toml、
npm/package.json、server.json、およびチームの Docker イメージタグもあわせて更新してください。
リリース履歴は CHANGELOG.md にあります。v1 の設計と
評価記録は docs/v1/ に、v0.9 のアーキテクチャは
docs/architecture/v0.9/ にあります。
Vannevar Bush, 1945: 「個人が使う未来の装置を考えてみてください。それは、機械化された個人用ファイル兼図書館のようなものです。名前が必要ですが、思いつきで付けるなら、memex でよいでしょう。」
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。