mcpField
M
Memex - Giving Claude a memory

Memex - Giving Claude a memory

ローカル
github.com/dioniipereyraaAI・エージェント516 週間前に更新

Memex - Giving Claude a memory について

MemexはClaudeユーザー向けのローカル優先MCPサーバーです。Claude.aiの会話とClaude Codeやターミナルのセッションを同じ検索可能なストアに索引化し、Claude Codeからローカル利用、Claude.aiからリモート利用できます。

主な機能

  1. 01Claude.aiとClaude Codeの履歴を索引化
  2. 02意味検索とキーワード検索
  3. 03自動キャプチャと要約
  4. 04会話とリポジトリの関連付け
  5. 05セッション取り込み時のシークレット除去

活用シーン

  1. 01Claude CodeからClaude.aiの過去の決定を検索
  2. 02作業に関連する会話を取得
  3. 03ターミナルやコーディングセッションを検索
  4. 04複数デバイスで検索可能な履歴を保持

MCP 対応

MCP stdio経由でClaude CodeとClaude Desktopに検索、取得、最近の会話、セッション索引化のツールを提供し、Streamable HTTPでClaude.aiコネクターに接続します。同期などのローカル専用ツールはリモート公開されません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"memex": {
"command": "uvx",
"args": [
"memex-chats"
]
}
}
}
起動コマンドuvx memex-chats

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypimemex-chats0.2.3

ツール

4

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
modestringいいえ検索戦略。'hybrid'(デフォルト。ほとんどの場合に推奨)、'semantic'(ベクトルのみ。概念的な類似性のみを調べる場合)、'lexical'(FTS5 BM25 のみ。正確な固有名詞や技術用語に最適)。
repoanyいいえ任意です。リポジトリ内で実行していて、関連するチャットを優先したい場合は、絶対パス(例:"d:/dionisio/memex")または Git リモート URL を渡してください。形式は問いません。Memex が正規化します。リポジトリに関連付けられたチャットは、マッチングの確度に応じて順位が上がります。リポジトリ外のチャットも下位に表示されます(フィルターではありません)。事前に `memex repos add` でリポジトリを登録する必要があります。
limitintegerいいえ結果数(デフォルト 5、最大 50)。
querystringはい検索するテキスト(自然言語)。`hybrid` モード(デフォルト)は、セマンティック検索と FTS5 の語彙検索を組み合わせるため、説明的なフレーズにも珍しい固有名詞(例: "Amarok")にも適しています。
sourceanyいいえ任意のチャット元フィルター。有効な値: 'conversations'(単独の claude.ai チャット)、'design_chat' (Claude.ai Project 内のチャット)、'memory'(厳選されたメモリー)、 'claude_code'(ローカルの Claude Code / ターミナルセッション)。

詳細

Memex

CI License: MIT Python 3.12+

Claude.ai のチャットと Claude Code のセッションは、互いに連携しない別々の世界にあります。Memex はそれらを、どちらからも検索できるひとつのメモリにまとめます。

Claude.ai のチャット履歴とローカルの Claude Code/ターミナルのセッションをインデックス化し、Claude Code(stdio)と Claude.ai(リモート MCP コネクター)に公開する、ローカルファーストの MCP サーバーです。

ステータス: アルファ版、PyPI で 0.3.1。フェーズ 0 から 7 まで完了し、セキュリティ監査済み(さらに、敵対的なレッドチーム演習を 4 回実施)。提供機能:ハイブリッド検索、ライブキャプチャ、自動要約、チャットとリポジトリの関連付け、Claude.ai リモートコネクター(GitHub OAuth)、シークレットのマスキングを伴う Claude Code/ターミナルからの取り込み、ワンコマンドセットアップ、クロスプラットフォームの自動起動、ワンクリックでの claude.ai 履歴のバックフィル。

Claude Code から claude.ai のチャットを呼び出す Memex

エンドツーエンドのデモ:Claude Code から、claude.ai で話し合った内容について質問します。Memex がチャット履歴(search_chats)を検索し、Claude が実際の会話に基づいて回答します。コピー&ペーストや、手動でのコンテキスト引き継ぎは不要です。

インストール

1 つのコマンドで uv と Memex をインストールし、memex setup を実行します(MCP サーバーを登録し、常時稼働するキャプチャサービスをインストールし、ローカルセッションをインデックス化して、ペアリングトークンを表示します)。

# macOS / Linux
curl -LsSf https://raw.githubusercontent.com/dioniipereyraa/memex/main/scripts/install-pypi.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://raw.githubusercontent.com/dioniipereyraa/memex/main/scripts/install-pypi.ps1 | iex"

続いて、ターミナルではできないブラウザーでの手順を実施します。Chrome 拡張機能をインストールし、表示されたトークンを貼り付けて、「Backfill claude.ai history」をクリックします。その他の方法(pipx、uv tool install、ソースからのインストール)については、インストールをご覧ください。

課題

ブレインストーミングや計画は Claude.ai で行い、実行は Claude Code で行います。この 2 つの世界は連携していません。Claude Code は、Claude.ai でのあなたのチャットを読むことができず、現在取り組んでいるタスクの発端となったチャットでさえ読めません。Anthropic が Claude.ai に実装したメモリ(2026 年 3 月)は、全履歴ではなく選別された内容であり、Claude.ai の中だけに隔離されています。

Memex はこの隔たりを埋めます。ローカルで動作し、チャット全体をインデックス化して MCP ツールとして公開するため、Claude は必要なときに過去のコンテキストを検索して取得できます。

仕組み

[Claude.ai]
    ↓  (official JSON export / Chrome ext)
[Ingestor]  →  [SQLite + sqlite-vec]  →  [local embeddings (fastembed / Ollama)]
                                    ↓
                          [core: storage + retrieval]
                                    ↓
                  [MCP stdio]  ───→  Claude Code, Claude Desktop
                  [MCP Streamable HTTP] ─→ Claude.ai connector

設計:純粋なコア(ストレージ、取り込み、埋め込み、検索)をトランスポート層から分離しています。同じエンジンが、書き換えなしで stdio とリモート MCP の両方に対応します。

インストール

クイックインストール(ワンコマンド)

必要に応じて uv(適切な Python も一緒にインストールされます)をインストールし、PyPI から Memex をインストールして、memex setup を実行し、Claude Code に組み込みます(MCP サーバー+常時稼働するキャプチャサービス+ローカルセッションのインデックス化+ペアリングトークン)。git clone は不要です。

# macOS / Linux
curl -LsSf https://raw.githubusercontent.com/dioniipereyraa/memex/main/scripts/install-pypi.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://raw.githubusercontent.com/dioniipereyraa/memex/main/scripts/install-pypi.ps1 | iex"

ターミナルではできない手順は、ブラウザーでの操作だけです。Chrome 拡張機能をインストールし、インストーラーが表示したトークンを貼り付けて、「Backfill claude.ai history」をクリックすると、履歴がインポートされます。埋め込みはそのまま使えます(量子化された 130 MB の fastembed モデルが初回の取り込み時にダウンロードされます。Ollama も API キーも不要です)。

pipx install memex-chats(または uv tool install memex-chats)を実行してから memex setup を実行する方法でも、同じことを 2 ステップで行えます。ホイールからのインストールでも自動起動サービスが 生成されるため(launchd/systemd/ログオン時に実行するスケジュール済みタスク)、そのためにリポジトリをクローンする必要はありません。

ソースからインストール(開発向け)

リポジトリをクローンすると、編集可能なインストールに加えて、拡張機能のソースとサービスのテンプレートを取得できます。git が必要です。スクリプトが uv と固定バージョンの Python をインストールします。

macOS / Linux
git clone https://github.com/dioniipereyraa/memex
cd memex
./scripts/install.sh

install.sh は、まだインストールされていない場合は uv をインストールし、uv sync を実行して、memex doctor でインストールを確認します。セットアップはこれで完了です。

Windows(PowerShell)
git clone https://github.com/dioniipereyraa/memex
cd memex
powershell -ExecutionPolicy Bypass -File .\scripts\install.ps1

macOS のスクリプトと同じ 3 つの手順(uv のインストール、同期、確認)です。git がインストールされていない場合は、先に git-scm.com から入手してください。

手動(明示的な手順を希望する場合は、どの OS でも可)
# 1. Install uv (skip if you already have it):
#    macOS/Linux:  curl -LsSf https://astral.sh/uv/install.sh | sh
#    Windows:      powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
git clone https://github.com/dioniipereyraa/memex
cd memex
uv sync               # installs Python 3.13 + dependencies into .venv
uv run memex doctor   # verify
アップグレード(すでに memex をお持ちの場合)

インストールに使用した同じツールでアップグレードしてください。そうしないと、新しいバージョンが PATH に反映されません。以前のインストールが memex 実行ファイルを所有しているため、別のマネージャーで再インストールすると「Executables already exist」というエラーになり、memex は古いバージョンを実行し続けます。(アップグレード後に memex sync が「存在しない」ように見えるのは、通常、古い pipx 管理の memex が新しい uv tool のインストールを隠しているためです。)

# 1. Find which tool owns it:
which memex            # macOS / Linux
Get-Command memex      # Windows (PowerShell)

# 2. Upgrade with that tool:
pipx upgrade memex-chats        # if pipx owns it
uv tool upgrade memex-chats     # if uv owns it

マネージャーを切り替える場合は、先に古い方をアンインストールしてから(pipx uninstall memex-chats または uv tool uninstall memex-chats)、再インストールしてください。アップグレード後、memex --version に新しいバージョンが表示され、memex doctor が成功するはずです。

複数デバイス(任意)

Claude のメモリを複数のマシンで共有するには、先に Tailscale をインストールし(各デバイスに安定したプライベートアドレスを割り当てるため)、デバイスごとに一度だけオプトインします。

memex setup --sync     # opt-in, persisted: the always-on service is sync-reachable

他のデバイスで実行する memex sync connect ... の 1 行が表示されます。この選択は保存されるため、何も再実行しなくても、再起動後もサービスは同期可能な状態を保ちます。一連の手順、セキュリティモデル、手動で一度だけ実行する代替方法については、デバイス間で同期するを参照してください。

デュアルブートマシン(Linux と Windows を同時に起動することがない環境)では、代わりにファイルベースの同期を使用します。各 OS で memex setup --sync-dir <shared-folder> を実行し、同じフォルダーを指定してください。Tailscale は不要で、2 台のデバイスを同時にオンラインにする必要もありません。デュアルブート環境、または同時にオンラインにならない環境を参照してください。

初回実行

最短の方法は、次のコマンドを 1 つ実行することです。

uv run memex setup

memex setup はすべてを一通り設定し、何度でも安全に再実行できます。Claude Code に MCP サーバーを登録し(claude mcp add)、常時稼働するライブキャプチャサービス(macOS では launchd、Linux では systemd、Windows ではスケジュールされたタスク)をインストールし、ローカルの Claude Code セッションをインデックス化して、Chrome 拡張機能に貼り付けるアクセストークンを表示します。各手順で問題が発生しても、残りの処理は中断せず、警告を表示します。フラグ:--no-mcp、--no-autostart、--no-ingest、--remote(claude.ai コネクターエージェントもインストール)、-y(プロンプトを表示しない)。

これで、残る手動の手順はChrome 拡張機能をインストールしてトークンを貼り付けることだけです。これにより、新しいチャットがそのままキャプチャされます。

手動での手順(自分で実行したい場合)
# 1. Request your official Claude.ai export (Settings → Privacy → Export data),
#    then ingest it (first run downloads the embedding model, ~30s):
uv run memex ingest /path/to/your-export.zip

# 2. Optionally index your local Claude Code / terminal sessions:
uv run memex ingest-claude-code

# 3. Search, or wire it into Claude Code (see "Wiring it into Claude Code"):
uv run memex search "your query" -n 5
uv run memex stats

(スクリプトを使ってインストールした場合は、上記のコマンドをそのまま実行できます。公開されている PyPI パッケージをインストールした場合は、uv run のプレフィックスを省略してください。)

データの保存場所。 リポジトリをクローンした場合、データベースとエクスポートは <repo>/data に保存されます。uvx/pip でインストールした場合は、OS のデータディレクトリに保存されます(macOS では ~/Library/Application Support/memex、Windows では %LOCALAPPDATA%\memex、その他では ~/.local/share/memex)。MEMEX_DB_PATH/MEMEX_EXPORTS_DIR で上書きできます。解決されたパスは memex doctor で確認できます。

Memex の使用方法(セットアップ後)

memex setup が完了すると、ほかに起動するものはありません。キャプチャサーバーとインデクサーはバックグラウンドで実行されます。Memex は 3 つの方法で使用できます。

1. Claude Code から使用する(主な方法)。 セットアップ時に MCP サーバーが登録されるため、Claude Code は次のツールを使って、履歴全体を検索し、最新の状態に保てます。

ツール機能
search_chatsclaude.ai のチャットと Claude Code のセッションを対象に、セマンティック検索とキーワード検索を実行します
get_chatID を指定して会話全体を取得します
list_recent_chats最近の会話を一覧表示します
find_relatedトピックやスニペットに関連する会話を検索します
index_terminal_sessionsローカルの Claude Code セッションを今すぐインデックス化します(現在のセッションを検索可能にします)
sync_nowほかのデバイスと今すぐ同期します(ペアリング済みのデバイスと、デュアルブート共有フォルダー)

Claude Code に自然な言葉で質問するだけで(「claude.ai のチャットで X について何を決めましたか?」「このセッションをインデックス化して」「これをほかのデバイスと同期して」など)、これらのツールが呼び出されます。index_terminal_sessions と sync_now はローカルでのみ使用できます(リモートの claude.ai コネクターには公開されません)。sync_now では、すでにインデックス化されたデータが送信されます。そのため、現在のセッションを含めるには、先に Claude に index_terminal_sessions を実行するよう依頼してください。セッション開始時にコンテキストを自動的に注入するには、オプションの SessionStart フックを追加してください。

2. ターミナルから使用する。 memex search "..."、memex stats、memex doctor、memex token(拡張機能のペアリングトークンを再表示)、memex --version を実行します。

3. キャプチャ(自動、操作不要)。 Chrome 拡張機能は、claude.ai のチャットを開いたり再読み込みしたりするとインデックス化します(「Backfill」ボタンを使うと、過去の履歴を一度だけインポートできます)。Claude Code のセッションは、セッション終了時にインデックス化され、さらに 15 分ごとの補完処理でもインデックス化されます。

データはどのくらい新しいですか(リアルタイムですか)?
経路遅延
claude.ai のチャットからローカルインデックスへの取り込みほぼ瞬時:チャットを開く/再読み込みするとキャプチャされます(数秒以内に埋め込み)
Claude Code のセッションからローカルインデックスへの取り込みセッション終了時に加え、15 分ごとの補完処理
同じマシン上での Claude Code からの利用即時(キャプチャによって書き込まれるローカル DB をそのまま読み取ります)
デバイス間リアルタイムではありません。 定期的な同期と重複期間については、以下を参照してください

同じマシン上では、実質的にリアルタイムです。デバイス間の同期はライブ中継ではありません(クラウドを使わないピアツーピア方式です)。ペアリング済みのデバイスが両方ともオンラインの場合、15 分ごとに自動で整合されます。また、memex sync now を実行すると、すぐに同期できます。claude.ai のチャットは開いたとき/再読み込みしたときに拡張機能がキャプチャします。進行中のチャットの最新のやり取りを同期するには、チャットを再読み込みして(拡張機能に再度キャプチャさせて)から、memex sync now を実行してください。ターミナルから claude.ai を直接読み取ることはできないため、キャプチャは常に拡張機能が行います。同期によって伝播されるのは、ローカルですでにインデックス化されたデータだけです。

埋め込みのバックエンド

デフォルトは fastembed(設定不要)です。代わりにローカルの Ollama 経由で処理するには(たとえば、ほかのモデル用にすでに実行している場合):

export MEMEX_EMBED_BACKEND=ollama
ollama pull nomic-embed-text          # install Ollama first: https://ollama.com/download

Windows では、MEMEX_EMBED_BACKEND=ollama を設定する前に、ollama.com/download から Ollama をインストールしてください。これは任意の設定です。fastembed では何も必要ありません。

診断

正常に動作しないときは、いつでも memex doctor を実行してください。Python のバージョン、データベース、埋め込み処理、ライブキャプチャサーバー、要約機能の設定、登録済みリポジトリ、インデックス化済みのコーパスを確認します。各項目の結果として OK/WARN/FAIL を報告します。

トラブルシューティング

まず memex doctor(上記)を実行してください。以下の問題の大半も、ここに表示されます。

インストール直後に memex: command not found と表示される。 memex 実行ファイルはツールの bin ディレクトリにあります。このディレクトリが現在のシェルの PATH にまだ含まれていない場合があります。新しいターミナルを開くか、今すぐ次のように追加してください。

  • macOS / Linux:export PATH="$HOME/.local/bin:$PATH"
  • Windows:インストーラーによる PATH の変更を反映するため、ターミナルを再度開いてください(uv tool の場合は bin ディレクトリが %USERPROFILE%\.local\bin、pipx の場合は Scripts ディレクトリです)。 次に、正しいバイナリを確認してください:which memex(macOS/Linux)または where memex(Windows)。uv-tool / pipx のインストール先を指している必要があり、古いクローンを指していてはいけません。

拡張機能でサーバーが応答なしと表示される、または取り込み時に 401 が返されます。

  • サーバーは起動していますか?curl -s http://127.0.0.1:5777/health で JSON が返されるはずです。返されない場合は、サーバーを起動する(memex serve)か、下記の自動起動サービスを確認してください。
  • 401 は、ペアリングトークンがないか、古くなっていることを意味します。memex token を実行し、値をコピーして拡張機能のポップアップに貼り付け、トークンを保存をクリックしてください。

自動起動サービスが起動しませんでした。 ステータスを確認してから、ログを読んでください:

  • Linux:systemctl --user status memex-serve、ログは ~/.local/share/memex/serve.log にあります。Failed to connect to bus は、このセッションにユーザー用 systemd マネージャーがないことを意味します(通常の SSH 接続でよく発生します)。loginctl enable-linger "$USER" を実行し、XDG_RUNTIME_DIR=/run/user/$(id -u) が設定されていることを確認してから、memex install-service を再実行してください。
  • macOS:launchctl list | grep memex、ログはデータディレクトリにあります(PyPI からインストールした場合は ~/Library/Application Support/memex/com.memex.serve.log、ソースから実行した場合は <repo>/data/serve.log)。
  • Windows:タスクスケジューラ、または schtasks /Query /TN MemexServe /V を確認してください。ログは %LOCALAPPDATA%\memex\serve.log にあります。以前のインストールで同じ名前のタスクが残っていると、新しいタスクが気づかれないまま妨げられることがあります。そのタスクを削除し(schtasks /Delete /TN MemexServe /F)、memex install-service を再実行してください。

Linux で、自動起動がログアウトや再起動後に維持されません。 systemd のユーザーユニットは、リンギングが有効になっていない限り、セッション終了時に停止します:loginctl enable-linger "$USER"。

ワンコマンドインストーラーがシェルエラーで失敗します。 インストーラーは POSIX sh を使用します。非常に古いシェルや特殊なシェルを使っていてパイプが失敗する場合は、代わりに bash で取得して実行してください:curl -LsSf <url>/install-pypi.sh | bash。

Windows:uv tool install が memex-mcp.exe のコピー時に "Acceso denegado (os error 5)" で失敗します。 通常、次の2つの原因が同時に起きています:

  • Claude Code / Claude Desktop が実行中で、MCP 子プロセスが実行中の .exe を使用しています。Claude Code と Claude Desktop を終了してから、再試行してください。
  • Windows Defender が、新しい .exe の書き込みをブロックしています。ほかのプロセスが使用していない場合でも発生します。コピー先のファイルがまだ存在しない(Test-Path "$env:USERPROFILE\.local\bin\memex-mcp.exe" が False を返す)のにコピーが失敗するのが目印です。%USERPROFILE%\.local\bin と %APPDATA%\uv を Defender の除外に追加してください。

その後、uv tool install --force memex-chats を再実行してください(ブランチから更新する場合は uv tool install --reinstall --refresh <spec> を使用します)。

Windows:ペアリング済みデバイスが同期ポート(5777)への接続時にタイムアウトします。 同期到達可能モードでは、常時稼働サーバーは 0.0.0.0:5777 にバインドされますが、ポートを許可するルールがないと、Windows ファイアウォールが受信接続を通知なく破棄します(接続先では「接続拒否」ではなく、単にタイムアウトします)。memex setup --sync を実行するとルールが追加されます(冪等で、ベストエフォートです)。管理者権限でセットアップを実行していない場合は、自分で実行するための一度限りの管理者コマンドが表示されます:New-NetFirewallRule -DisplayName "Memex sync 5777" -Direction Inbound -Protocol TCP -LocalPort 5777 -Action Allow。

tailscale ping は成功するのに、同期がタイムアウトします。 tailscale ping <peer> は成功するものの、通常の ping/TCP(および memex の同期)が両方向でタイムアウトする場合、問題は memex やファイアウォールルールではなく、どちらかのマシンにおけるローカルの TUN/ルーティング競合です。別の VPN 形式のアダプター(Hamachi、別の VPN、仮想スイッチ)が、Tailscale インターフェイスを経由するはずの OS トラフィックを横取りしています。別のアダプターを無効化または削除し、Tailscale サービスを再起動してください。(実際に確認されたケース:ゲームのホスティング用にインストールされた Hamachi アダプターにより、tailscale ping は引き続き機能しているにもかかわらず、Windows マシンの Tailscale トラフィックが途絶えました。)

初回のバックフィル(または初回の取り込み)が遅いです。 初回の埋め込み時に約130 MBの量子化モデルがダウンロードされます。これは一度だけで、以降の実行は高速です。バックフィルは差分処理で、何度でも安全に再実行できるため、初回の処理が遅い場合や中断された場合も、中断したところから再開します。 取り込みでメモリを使いすぎます。 ピーク時のRAM使用量は埋め込みのバッチサイズに比例します。環境変数または .env に MEMEX_EMBED_BATCH_SIZE=1 を設定して減らしてください(ピーク時は約0.67 GB)。

データはどこにありますか? memex doctor を実行すると、データベースのパスが表示されます。PyPI からインストールした場合、デフォルトのパスは Linux では ~/.local/share/memex、macOS では ~/Library/Application Support/memex、Windows では %LOCALAPPDATA%\memex です。リポジトリをクローンした場合は <repo>/data です。MEMEX_DB_PATH / MEMEX_EXPORTS_DIR で上書きできます。

MCP サーバーツール(v1)

  • search_chats(query, limit=5, source?, mode="hybrid", repo?) はコーパスを検索します。モードは hybrid(デフォルト。ベクトル検索と Reciprocal Rank Fusion による FTS5 BM25 を組み合わせます)、semantic(ベクトルのみ)、lexical(FTS5 のみ。固有名詞や完全一致する語句に最適)です。source は出所(conversations、design_chat、memory)で絞り込みます。repo は登録済みリポジトリに関連する結果を優先します(下記の「リポジトリとの関連付け」を参照)。会話ごとに重複を除外します。
  • get_chat(uuid, messages_limit=10, messages_offset=0) は会話とメッセージをページネーションで取得します。raw_content は省略されます。クライアントのトークン予算内に収めるため、各メッセージは1500文字に切り詰められます(最悪の場合の応答は約17k文字)。長いチャットは messages_offset でページネーションできます。messages_limit の最大値は100です。
  • list_recent_chats(limit=10, source?) は、最終更新日時の新しい順にチャットを一覧表示します。
  • find_related(context, limit=5, repo?) は自由形式のテキスト(段落、ファイルの内容、現在の議論など)を受け取り、意味的に関連するチャットを返します。ベクトル検索のみで、FTS は使用せず、入力は最大4000文字です。キーワードを入力せずに「これに似たもの」を探したいときに便利です。

stdio サーバー(Claude Code で使用する memex-mcp)には、メモリを最新の状態に保つために Claude に依頼できる 書き込み/メンテナンス ツールも2つあります。ターミナルから実行する必要はありません。これらは ローカル専用 で、リモートの claude.ai コネクターには登録されません(ストアを変更し、ネットワークに接続するためです)。

  • index_terminal_sessions() は増分の ingest-claude-code スキャンを実行します(現在のセッションを含む、ローカルの Claude Code セッションのうち、新規または変更されたものをインデックス化します。現在のセッションについては、トランスクリプトに書き込まれた内容までが対象です)。単一実行の取り込みロックを共有し、件数を返します。
  • sync_now() は、ペアリングされたすべてのデバイスとの即時双方向調整を実行し、共有フォルダーが設定されている場合はファイル同期も行います。同期が有効になっている必要があります。すでにインデックス化されたデータを伝播するため、現在のセッションを含めるには、先に index_terminal_sessions を呼び出してください。

memex search "query" --mode {hybrid|semantic|lexical} を使って、CLI からも検索できます。ハイブリッド FTS5 対応以前に作成したデータベースでは、memex reindex-fts を一度実行して、語句検索用インデックスを作成してください。

Claude Code への接続

ローカルデータベースにデータを取り込んだら(memex ingest)、uv run memex-mcp で MCP サーバーを起動します。Claude Code が自動的に検出できるようにするには、プロジェクトのルートに .mcp.json ファイルを追加するか(または ~/.claude.json にユーザーレベルのサーバーを設定します)。

{
  "mcpServers": {
    "memex": {
      "command": "uv",
      "args": ["run", "memex-mcp"],
      "cwd": "/absolute/path/to/the/memex/repo"
    }
  }
}

cwd には、Memex をクローンした絶対パス(pyproject.toml がある場所)を設定してください。Claude Code を再起動すると、セッション内で search_chats、get_chat、list_recent_chats ツールを利用できるようになります。

Claude Code の外で使いたい場合は、同じ検索を uv run memex search "..." で CLI から実行することもできます。

claude.ai から接続する(リモート MCP、フェーズ 4)

memex serve-remote は、claude.ai 向けのカスタムコネクタとして、同じ 4 つのツールを公開します。1 つのコネクタで claude.ai のウェブ版、Claude Desktop、モバイルアプリ全体に接続できます。接続は Claude アカウントを介して中継され、必ず Anthropic のクラウドから発信されます。お使いのデバイスから直接発信されることはありません。これには次の 2 つの影響があります。

  1. サーバーにはパブリック HTTPS URL(パブリック IPv4 A レコードを持つホスト名)で到達できる必要があります(設計上、localhost とプライベート IP は拒否されます)。想定される構成は、TLS を終端し、ループバック上の Memex にプロキシするトンネルです。
  2. 認証方式は なし または 完全な OAuth 2.0 のいずれかです(claude.ai にはトークンを貼り付ける欄がありません)。Memex は GitHub OAuth App を利用した OAuth を使用し、GitHub ユーザー名の許可リストでアクセスを制限します。OAuth の手続きを完了しても、許可リストにないユーザーはすべてのリクエストで 401 を受け取ります。コネクタが応答するには、お使いのマシンが稼働し、トンネルが起動している必要があります。
1. Tailscale Funnel で URL を公開する

Tailscale をインストールしてログインし、次を実行します。

tailscale funnel --bg 8377

TLS 込みのパブリック URL(例:https://my-mac.my-tailnet.ts.net)が表示されます。ngrok や Cloudflare Tunnel など、ほかのトンネルでも同様に機能します。Memex に必要なのは、最終的な https:// URL だけです。

2. GitHub OAuth App を作成する

github.com/settings/developers > OAuth Apps > New OAuth App で、次のように設定します。

  • Homepage URL:Funnel の URL。
  • Authorization callback URL:<funnel URL>/auth/callback。

Client ID をコピーし、Client Secret を生成します。

3. 設定して実行する

.env ファイルで設定します(.env.example を参照)。

MEMEX_REMOTE_BASE_URL=https://my-mac.my-tailnet.ts.net
MEMEX_GITHUB_CLIENT_ID=Iv1.xxxxxxxxxxxx
MEMEX_GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxx
MEMEX_REMOTE_ALLOWED_GITHUB_LOGINS=your-github-username
uv run memex serve-remote   # listens on 127.0.0.1:8377, endpoint at /mcp

設定が不完全な場合、サーバーは起動を拒否します(安全でないデフォルト設定はありません。許可リストが空の場合、あらゆる GitHub アカウントにチャット履歴全体が公開されてしまいます)。

4. claude.ai にコネクタを追加する

Settings > Connectors > Add custom connector で、URL に https://my-mac.my-tailnet.ts.net/mcp を指定します。claude.ai は動的クライアント登録によって自身を登録し、GitHub の認証画面に進んだあと、チャットにツールが表示されます。OAuth の状態は暗号化してディスクに保存されるため、serve-remote を再起動しても接続は切れません。

セキュリティモデルの要点:ループバックへのバインドとトンネル、GitHub を介した OAuth プロキシ(すべてのリクエストでユーザー名の許可リストを適用。GitHub でアプリを取り消すと、直ちにアクセスを遮断できます)、パブリックホスト名に固定した TrustedHostMiddleware、そして stdio トランスポートと同じ、ツールの結果に対する間接的プロンプトインジェクション対策のエンベロープです。

Claude Code/ターミナルのセッションをインデックス化する(Phase 6)

Memex は、ローカルの Claude Code セッションとターミナルセッションもインデックス化するため、claude.ai で話した内容と Claude Code で作成したものの両方をまとめて検索できます。Claude Code は各セッションを ~/.claude/projects/ の下に JSONL ファイルとして記録します。Memex はそれらを直接読み込みます(拡張機能もネットワークも不要です)。これにより、Claude Code を実行する環境を問わず、ターミナル CLI と VS Code/JetBrains 拡張機能のどちらも対象になります。いずれも同じトランスクリプトを書き込みます。

uv run memex ingest-claude-code        # scans ~/.claude/projects/**/*.jsonl
uv run memex ingest-claude-code --path /custom/path   # alternate root

これらのセッションは claude_code ソースの下に保存され、ほかのチャットと同じように検索できます(source="claude_code" で絞り込むこともできます)。詳細:

  • 増分処理。 内容ハッシュによって変更のないセッションはスキップされるため、作業を進めた後に再実行しても低コストです。セッションは追記のみで増えていくため、再スキャンすると新しいターンとセッションが取り込まれます。更新したいときにいつでも再実行するか、スケジュールに組み込んでください。
  • リポジトリを自動で関連付け。 すべてのセッションには作業ディレクトリが含まれるため、その cwd に対応する登録済みリポジトリに自動で関連付けられます(先に memex repos add <path> を実行してください)。その後、search_chats(repo=...) を使うと、そのプロジェクトで作業したセッションが優先されます。
  • インデックス化される内容: プロンプト、アシスタントの返信、[tool_use: ...]/[result] マーカーとして記録されたツール呼び出しです。対象外:アシスタントの内部推論(thinking)、並行して実行されるサブエージェントの別スレッド、CLI の処理内容(スラッシュコマンドのエコー、bash のラッパー)。データはすべてローカルの SQLite DB に保存されます。
  • シークレットのマスキング。 セッションログには、認証情報を含むことの多い実際のターミナル出力やファイルの内容が記録されています。保存前に Memex は、一般的な形式のシークレット(API キー、Bearer/JWT トークン、PEM 秘密鍵、KEY=/SECRET= 形式の代入、パスワードを埋め込んだ URL)を [REDACTED:...] としてマスキングし、このソースについてはブロックの生データを保存しません。これは可能な範囲での対策であり、保証ではありません。よく知られた形式を検出して、実際には会話に含まれていなかったサードパーティの認証情報がインデックスに入らないようにします(リモートコネクターがインデックス化されたテキストを claude.ai に提示する可能性があるため、これは重要です)。
Claude Code のセッションをインデックスに登録する

セッションのトランスクリプトをスキャンすると、検索可能になります。日常的に、自分でこれを開始する方法は 3 つあります。

  • Claude に頼む。 「このセッションをインデックスに登録して」と伝えると、Claude が index_terminal_sessions MCP ツールを呼び出します(現在の会話は、その時点までに Claude Code がトランスクリプトへ書き出した内容まで取り込まれます)。すぐにほかのマシンでも利用したい場合は、「デバイスを同期して」(sync_now)と続けて伝えます。
  • 会話を終了する。 以下の SessionEnd フックをインストールしておくと、Claude Code のチャットを終了したとき(ターミナル全体ではなく、会話だけ)、閉じた時点でそのセッションが取り込まれます。
  • コマンドを実行する。 memex ingest-claude-code は、現時点で新しいものをすべてスキャンします。

これらを行わなくても、以下の定期的なバックストップが、最終書き込みから約 15 分以内に新しいセッションや更新されたセッションを取り込みます。2 つの自動化の仕組みは相互に補完します(どちらもバックグラウンドで低優先度で実行され、新しいデータがあるときだけ埋め込みモデルを読み込むため、負荷はほとんどありません)。

  1. SessionEnd フック — セッションが閉じた時点で取り込みます(遅延も取りこぼしもありません)。~/.claude/settings.json に追加します。

    {
      "hooks": {
        "SessionEnd": [
          { "matcher": "*", "hooks": [
            { "type": "command", "command": "/absolute/path/to/memex/scripts/session-end-hook.sh" }
          ] }
        ]
      }
    }
    

    このフックは終了したセッションの transcript_path を読み取り、そのセッションだけを切り離して取り込み、すぐに戻ります(SessionEnd フックは Claude Code をブロックできません)。

  2. 定期的なバックストップ — フックが取り込めなかったもの(クラッシュなど)を検出するスケジュール済みスキャンです。macOS では、launchd を使用します。

    sed "s|__REPO__|$(pwd)|g" scripts/com.memex.ingest-claude-code.plist.template \
      > ~/Library/LaunchAgents/com.memex.ingest-claude-code.plist
    launchctl load ~/Library/LaunchAgents/com.memex.ingest-claude-code.plist
    

    低優先度のバックグラウンドジョブとして、15 分ごとに scripts/scheduled-ingest.sh を実行します。macOS または Windows では、PyPI からインストールした場合に手動で設定する必要はありません。memex setup(または memex install-service)が、すでにバックストップをスケジュールしています(com.memex.ingest-claude-code launchd エージェント/MemexIngest スケジュール済みタスク)。Linux ではインストーラーが serve のみを設定するため、memex ingest-claude-code を実行する systemd ユーザータイマーまたは cron を使って、バックストップを自分で設定してください。

    OS ごとの 2 つの仕組みの状態:SessionEnd フックのスクリプトは bash なので、macOS と Linux で動作します。Windows では session-end-hook.sh に相当する PowerShell 版が必要ですが、まだ含まれていません。そのため Windows では、バックストップタスク、Claude への依頼、または手動コマンドで取り込めます。

デバイス間で同期する

複数のマシン(ノート PC とデスクトップ PC など)で memex を実行している場合、memex sync を使うと、Claude のメモリーをそれらの間で共有できます。一方のデバイスでチャットをインデックスに登録し、もう一方から検索できます。各デバイスは独自のローカルストアを保持し、中央サーバーを介さず、データがハードウェアの外に出ることもなく、ピアツーピアで同期します。同期には、両方のデバイスの電源が入っており、同時に到達可能である必要があります(クラウド経由の中継ではなく、デバイスが同時に接続している間に同期します)。この機能は memex 0.4.0 以降に含まれています。古いバージョンをインストールしている場合は、先にアップグレードしてください(uv tool upgrade memex-chats)。

この機能はデフォルトではオフで、有効にするまで何も公開されません。オフの間は、同期エンドポイントは 404 を返し、同期コマンドは実行されないため、通常の単一デバイスへのインストールで攻撃対象領域が増えることはありません。

一度設定するだけ(推奨)

まず各デバイスに Tailscale をインストールし、その後一度だけ有効にします。

memex setup --sync

これは通常の設定に加えて、同期を有効にし、常時稼働のキャプチャサービスをこのデバイスの Tailscale アドレスから同期できるようにします(0.0.0.0 にバインドするため、1つのサーバーでローカル拡張機能にも引き続き応答します。Host の許可リストはループバックと、起動時に解決される Tailscale IP に固定され、インストールごとのトークンによってアクセスが制御されます)。この選択は保存されます。一度設定すれば、再起動のたびにサービスが同期可能な状態で起動するため、サーブコマンドを手動で実行する必要はありません。ほかの各デバイスで実行する1行のコマンドが表示されます。

memex sync connect --url http://100.x.y.z:5777 --token <TOKEN> --name my-mac

connect はそこで同期を有効にし、ペアリングして、双方向の調整を実行するため、そのデバイスの設定と最新状態への更新が一度に完了します。

設定したらあとはおまかせ: memex setup --sync は自動同期も有効にするため、ペアリング済みのデバイスが両方オンラインの間、15分ごとに自動で調整されます(環境変数も cron も不要です)。これはデバイス間の同期であり、クラウドリレーではありません。もう一方のデバイスがオフの場合、その回の同期はスキップされ、次に両方がオンラインになったときに追いつきます。タイマーに加えて、キャプチャが保存されてから数秒後にも同期がトリガーされます。Chrome 拡張機能がチャットをキャプチャし、Memex がインデックスを作成すると、その新しい会話はすぐにほかのデバイスへ送信されます(何も実行する必要はありません)。キャプチャが続けて発生した場合(バックフィルや複数のタブを開いた場合など)は、落ち着いた時点で1回の同期にまとめられます。また、両方のデバイスがオンラインの間だけ実行されます(デュアルブートの場合、もう一方の OS は次回の起動時に変更を取り込みます)。これだけを無効にするには MEMEX_SYNC_ON_CAPTURE=false を設定します。まとめる時間は MEMEX_SYNC_ON_CAPTURE_DEBOUNCE_SECONDS で調整できます(デフォルトは 10)。同期の間隔を待たずに手動ですぐ同期することもできます(たとえば、今やり取りしているチャットを送信する場合)。

memex sync now          # immediate two-way reconcile with every paired device

memex sync now は、ローカルでインデックス済みのデータを伝播します。claude.ai のチャットは、拡張機能がキャプチャした時点(開いたとき、または再読み込みしたとき)でインデックスが作成されるため、進行中のチャットの最新のやり取りも含めたい場合は、まず再読み込みしてください。memex sync status では、ペアリング済みのデバイスと最後の同期を確認できます。memex sync reconcile は now と同じです。すべて無効にする(ループバックのみ、同期と自動同期をオフにする)には memex setup --no-sync を実行します。間隔は MEMEX_SYNC_INTERVAL_SECONDS で調整できます(デフォルトは 900)。

セットアップを変更せずに一度だけ実行する

サービスを常時アクセス可能な状態にしたくない場合は、会話データのあるデバイスで一時的な エンドポイントを起動します。

# SOURCE device:
memex sync serve
# -> Memex sync serve reachable at http://100.x.y.z:5777
#    On the other device, run this one command:
#      memex sync connect --url http://100.x.y.z:5777 --token <TOKEN> --name my-mac

memex sync serve は macOS、Linux、Windows で同じように動作します(Tailscale のアドレスを使用するため、OS ごとのネットワーク設定や --host/許可リストの調整は不要です)。Tailscale を使用していない場合は、--host <address the other device can reach> を指定してください。そのアドレスのみにバインドされ、ループバックのキャプチャサーバーとポートが競合することなく並行して動作します。もう一方のデバイスが接続する間は起動したままにし、接続後に Ctrl+C で停止してください。その後、memex sync reconcile を実行すると、すでにペアリング済みのデバイスが再同期されます。

通常使用するコマンドは reconcile です。双方向に同期して2台のデバイスの状態を一致させ、両方に存在するデータについては新しいほうのコピーを保持します(更新時刻に基づく最終書き込み優先)。同じ会話が両方のデバイスで編集され、タイムスタンプも完全に同じ場合は競合です。reconcile は両方のコピーに手を加えず、競合を報告します。その後、一方向の memex sync pull --peer mac(相手側のコピーを取得)または push --peer mac(自分のコピーを送信)で、どちらを採用するか選択してください。

同期のたびに転送されるのは、新規または変更された会話のみです。埋め込みも合わせて転送されるため、マシン上で再度埋め込みを生成する必要はありません。また、同期は冪等です(再実行しても新たに転送されるものはありません)。大量の履歴はサイズ上限のあるバッチに自動分割して転送されるため、会話の件数にかかわらず動作します(目標サイズは MEMEX_SYNC_MAX_BATCH_BYTES で調整できます。デフォルトは 8 MB です。相手側の MEMEX_INGEST_MAX_BODY_BYTES を超えるサイズの会話は、明確なメッセージとともにスキップされます)。両方のデバイスで同じ埋め込みモデルを使用する必要があります(モデルが一致しない場合、同期は拒否されます)。相手側のトークンは DB の隣にユーザーのみがアクセスできる権限(0600)で保存されます。ペアリングは信頼に関わる判断です(アクセストークンを共有します)。自分が管理するデバイスのみをペアリングしてください。SQLite ファイル自体をフォルダー同期ツールで同期することは絶対に避けてください。会話単位で一貫性を保つ memex sync を必ず使用してください。

自動同期(15分ごとの reconcile)は、memex setup --sync を実行すると有効になります。環境変数を設定する必要はありません。内部では、起動時と MEMEX_SYNC_INTERVAL_SECONDS ごと(デフォルトは 900 秒)に、ペアリング済みの各相手側と reconcile を行います。オフラインの相手側はスキップし、取り込み処理の実行中は再試行間隔を延ばします。setup --sync を使用していない場合(例:手動/開発用のセットアップ)でも、memex serve の実行前に MEMEX_SYNC_AUTO=true を設定すれば有効にできます。保存済みのフラグまたは環境変数のどちらかが設定されていると、ループが開始されます。同期が有効な間のみ実行されます。機能全体を再び無効にするには、memex sync disable(または memex setup --no-sync)を実行してください。

デュアルブート、または同時にオンラインにならない場合(ファイルベースの同期)

ネットワーク同期には、両方のデバイスが同時にオンラインである必要があります。デュアルブートマシン(同じディスクに Linux と Windows があり、一度にどちらか一方だけが起動している)ではそれが起こりません。また、同時に使うことがほとんどないデバイスの組み合わせでは不便です。そのような場合に備えて、memex にはライブ接続の代わりに共有フォルダーを使う第 2 の同期モードがあります。各 OS は自身のストアのスナップショットをフォルダーにエクスポートし、他の OS のスナップショットをインポートします。サーバーも、ポートも、トークンも、3 台目のデバイスも必要ありません。memex 0.4.4 以降に搭載されています。

すべての OS で同じ共有フォルダーを指定します(OS ごとにコマンドを 1 つ実行します)。

# On Linux (the Windows partition mounted at, e.g., /mnt/windows):
memex setup --sync-dir /mnt/windows/memex-sync --device-name linux

# On Windows (the SAME physical folder, its path there):
memex setup --sync-dir C:\memex-sync --device-name windows

これだけです。以降、各 OS は起動時にフォルダー経由で自動同期し(起動中は 15 分ごと)、memex sync now を実行するとすぐに同期します。フォルダーが存在しない場合は自動的に作成され、この設定は保存されるため、設定は一度だけで済みます。

デュアルブートでフォルダーを置く場所:両方の OS から読み取れる必要があるため、Windows/NTFS パーティションに置いてください。Linux は標準で NTFS の読み書きができますが、Windows は Linux の ext4 を読み取れません。(同時に使うことがほとんどない別々のマシン 2 台の場合は、USB ドライブや Dropbox などのクラウド同期フォルダーといった、任意の共有場所を使えます。)

デュアルブートでの注意点:Windows の高速スタートアップ(および休止状態)を使うと、NTFS パーティションがダーティー状態になるため、Linux はそれを読み取り専用でマウントします。ファイル同期ではそこにスナップショットを書き込む必要があるため、書き込めない場合は初回のエクスポートがエラーになります。Linux でフォルダーが読み取り専用でマウントされる場合は、Windows で高速スタートアップを無効にする(または powercfg /h off を実行する)とともに、Windows を一度完全にシャットダウンしてください。

同期の収束方法:デバイスが書き込むのは自身の <device>.memexsync.gz だけで、他のデバイスのものは読み取るだけなので、競合は起きません。ネットワークモードと同様、同期では更新時刻が新しい方が優先されます。同じタイムスタンプで競合(分岐)が発生した場合は、変更せずにそのままにして報告します。他の OS の新しい会話は次回の起動時に届きます(その OS がスナップショットをディスクに残しているため)。あなたの会話は、その OS の次回起動時に届きます。ホスト名が同じ場合は、2 つの OS に異なる --device-name の値を指定してください。指定しないと、互いのスナップショットを上書きしてしまいます。スナップショットには会話のテキストとベクトルが含まれるため、共有フォルダーは自分だけが読み取れる場所に置いてください(ピアとのペアリングと同じ「自分が管理するものだけを共有する」というルールです)。2 つのモードは独立しているため、ファイル同期、ネットワーク同期、またはその両方を使えます。

トークンのローテーション

各デバイスにはアクセストークンが 1 つあります(データベースと同じ場所にある ingest_token ファイルです。フォルダーは memex doctor で確認できます)。チャット、スクリーンショット、チケットなど、本来置くべきでない場所に貼り付けてしまった場合は、トークンをローテーションしてください。現時点ではローテーション用のコマンドはありません。また、実行中のサーバーはファイルを一度しか読み込まないため、手順の順序が重要です。

  1. トークンファイルを削除します(rm <data-dir>/ingest_token。PowerShell の場合: Remove-Item -Force $env:LOCALAPPDATA\memex\ingest_token)。
  2. 常時稼働している serve を再起動します(macOS:com.memex.serve に対して launchctl unload を実行してから load。Linux:systemctl --user restart memex-serve。Windows:schtasks /End /TN MemexServe を実行してから schtasks /Run /TN MemexServe)。これを省略すると、古いトークンが引き続き受け入れられ(メモリにキャッシュされています)、新しいファイルは無視されます。
  3. memex token を実行して新しい値を確認します。その値を、そのマシンの Chrome 拡張機能のポップアップに貼り付け直し、このデバイスに接続するすべてのデバイスと再ペアリングします。 memex sync connect --url http://<this-device>:5777 --name <name> --token "..." (--token を渡すと、入力し間違えやすい非表示のプロンプトを回避できます。)

常時実行

memex serve(claude.ai キャプチャ)は長時間稼働するサーバーで、Claude Code の取り込みバックストップは定期的に実行されます。ログイン時に起動してクラッシュした場合も再起動するようにするには、memex setup にサービスをインストールさせるか、次のコマンドを任意の OS で直接実行します。

memex install-service            # install (launchd / systemd / Scheduled Task)
memex install-service status     # show what is registered
memex install-service uninstall  # remove it

クロスプラットフォームに対応しています。macOS では launchd エージェント、Linux では systemd ユーザーユニット、Windows ではスケジュールされたタスクを使用します。デフォルトでは、ライブキャプチャサーバーと、15 分ごとに実行される Claude Code の取り込みバックストップを管理します。アイドル時のコストは低く、実際の処理が発生するまで、どちらも埋め込みモデルを読み込みません。PyPI/pipx/uv tool からのインストール(インストール済みの memex serve を直接実行する、自己完結型の launchd/systemd/スケジュールされたタスク)でも、リポジトリをクローンした場合でも、同じように動作します。サービスが起動時に安定したインタープリターを実行できるように、一時的な uvx ではなく、永続的なインストール方法(pipx または uv tool)を使用してください。

claude.ai リモートコネクターもサービスとして実行するには、--remote を渡します(macOS):memex install-service --remote。.env に MEMEX_REMOTE_* 設定があり、同じポートで Tailscale Funnel が起動している場合(tailscale funnel --bg 8377)にのみ使用できます。そうでないと、エージェントがクラッシュを繰り返します。そのため、このオプションはデフォルトで無効になっています。

launchd の手動セットアップ(macOS、明示的な手順で設定したい場合)
cd /path/to/memex
for svc in serve ingest-claude-code; do
  sed "s|__REPO__|$(pwd)|g" "scripts/com.memex.$svc.plist.template" \
    > ~/Library/LaunchAgents/com.memex.$svc.plist
  launchctl load ~/Library/LaunchAgents/com.memex.$svc.plist
done
launchctl list | grep memex

サービスを停止するには、launchctl unload ~/Library/LaunchAgents/com.memex.<name>.plist を実行します。

自動要約(フェーズ 3、任意)

search_chats が、まだ要約のないチャットを返した場合、Memex は Claude Haiku を使ってその場で要約を生成できます。要約は保存されるため、同じチャットを次回検索するとキャッシュが使われ、API の再利用料はかかりません。これにより、コーパス全体ではなく、実際に閲覧したチャットの分だけ料金が発生します。

オプトイン方式です。デフォルトでは無効です。上限:レイテンシーとクエリごとのコストを抑えるため、search_chats の呼び出しごとに生成される要約は最大 3 件(並列)です。

  1. 追加パッケージをインストールします(anthropic SDK が追加されます)。
    uv sync --extra summaries
    
  2. .env(または環境変数)に次を設定します。
    ANTHROPIC_API_KEY=sk-ant-...
    MEMEX_SUMMARY_ENABLED=true
    
  3. Claude Code から通常どおり search_chats を使用します。キャッシュ済みの要約がないチャットが検索結果に初めて表示されたとき、Memex が要約を生成します。次回以降の検索では、キャッシュされた要約がすぐに返されます。

環境変数で設定できます:MEMEX_SUMMARY_MODEL(デフォルトは claude-haiku-4-5-20251001)、MEMEX_SUMMARY_MAX_TOKENS(デフォルトは 200)。特定のチャットで API エラー(キーなし、レート制限、ネットワークエラーなど)が発生した場合、その結果は要約なしで返されます。検索自体が中断されることはなく、警告がログに記録されます。

コストの目安:74 件のチャットを含むエクスポートを一括で取り込む場合、コストは $0 です(取り込み時に要約は生成されません)。検索で実際に開いたチャット 1 件あたりのコストは、およそ $0.01 です(Haiku、入力約 5,000~10,000 トークン、出力約 200 トークン)。API クレジット $5 あれば、数か月間十分に使えます。

リポジトリとの関連付け(フェーズ 3)

Memex は各チャットを、そのチャットで扱ったローカルのコードリポジトリに関連付けることができ、リポジトリ内から search_chats を呼び出したときに、関連するチャットの順位を上げます。そのため、たとえば Claude Code に「話し合った認証のリファクタリングを覚えてる?」と尋ねると、同じキーワードを含む無関係なチャットよりも、現在のリポジトリを扱ったチャットが上位に表示されます。

仕組みは次のとおりです。

  1. リポジトリを登録します。

    uv run memex repos add /path/to/your/repo
    

    Memex は .git/config(origin URL)と、pyproject.toml / package.json / Cargo.toml(パッケージ名)を読み取ります。正規キーでは、パスよりも git リモート(クローン間で安定)を優先します。

  2. すでに取り込んだチャットを一度だけスキャンします。

    uv run memex repos scan
    

    各チャットを、登録済みのすべてのリポジトリと照合します。照合には 4 つのシグナルを使い、最も高いものが採用されます。チャット本文中のリモート URL のリテラル(信頼度 1.0)、絶対パスのリテラル(0.9)、マニフェスト名の単語境界一致(0.8)、表示名の単語境界一致(0.5)です。0.5 未満のものは除外されます。リポジトリの登録後に取り込まれた新しいチャットは、取り込み時に自動でスキャンされます。

  3. Claude Code から、リポジトリの引数を指定して検索します。

    search_chats(query="auth refactor", repo="d:/dionisio/memex")
    

    git リモート URL、または memex repos list で確認できる正規キーを渡すこともできます。リポジトリに関連付けられたチャットは、距離が 0.3 * confidence だけ小さくなります。リポジトリ外のチャットも下位に表示されます(これはブーストであり、フィルターではありません)。

CLI ヘルパー:

uv run memex repos list           # show registered repos
uv run memex repos remove <key>   # unregister + cascade-remove associations
uv run memex tag <chat-uuid> <repo-key>    # manual override (sticky vs auto-scan)
uv run memex untag <chat-uuid> <repo-key>  # remove an association

manual タグは、その後の自動スキャン後も保持されます。チャットに手動でタグを付けると、照合処理で上書きされなくなります。

プロアクティブなコンテキストの注入(SessionStart フック)

Claude Code は、セッションの開始時と終了時にシェルコマンドを実行するフックに対応しています。Memex には memex session-context が用意されています。これは SessionStart フックに組み込むことを想定しており、登録済みリポジトリで新しい Claude Code セッションを開始するたびに、関連度の高い過去のチャットを一覧にした Markdown のテキストを表示します。クエリは不要です。

有効にするには、.claude/settings.json(プロジェクトローカル)または ~/.claude/settings.json(ユーザー全体)に次の設定を追加します。

{
  "hooks": {
    "SessionStart": [{
      "command": "uv run memex session-context"
    }]
  }
}

このコマンドは cwd から上の階層へたどり、.git が見つかるとアクティブなリポジトリを自動検出します。そのリポジトリが Memex に登録されていて、関連付けられたチャットがある場合は、上位 N 件(デフォルトは 5 件)のチャットを短い Markdown のテキストとして出力します。並び順は、まず manual、次に信頼度順の auto です。何らかの理由で失敗した場合(.git がない、リポジトリが未登録、関連付けがない場合)、標準出力には何も表示せず(診断情報は標準エラーにのみ出力)、フックは何もせずに終了します。

デバッグのために、コマンドを手動で実行することもできます:uv run memex session-context [--repo <path>] [--limit N]。

ライブキャプチャ(フェーズ 2)

新しい Claude.ai のチャットを手動でエクスポートせずに Memex に取り込むには、次の手順を実行します。

  1. ターミナルでローカル HTTP サーバーを起動します。

    uv run memex serve
    

    デフォルトでは 127.0.0.1:5777 で待ち受けます。claude.ai を閲覧している間は、起動したままにしてください。起動時にアクセストークンが表示されます。拡張機能はこのトークンを送信する必要があります(ループバックの Origin チェックだけでは、ほかのローカルプロセスを認証できません)。uv run memex token を実行すれば、いつでも再表示できます。

  2. Chrome 拡張機能を読み込みます。

    • 近日公開:Chrome ウェブストアからインストールできます(アルファ版の審査中です)。
    • 現時点では、展開済みの拡張機能を読み込みます。
      • chrome://extensions/ を開きます
      • デベロッパー モードを有効にします
      • パッケージ化されていない拡張機能を読み込む → リポジトリ内の chrome-extension/ を選択します
      • Memex アイコンをクリックし、「Server」チップに応答中(緑色)と表示されていることを確認します。
  3. アクセストークンで拡張機能をペアリングします。 uv run memex token を実行し、値をコピーして拡張機能のポップアップにあるトークン欄に貼り付け、トークンを保存をクリックします。これはマシンごとに 1 回だけ必要です(トークンは DB の隣にあるユーザー専用の場所に保存されます)。設定しない場合、取り込みリクエストは 401 で拒否されます。

  4. 履歴全体をインポートします(ワンクリック)。 claude.ai のタブを開いた状態で、ポップアップのclaude.ai の履歴を遡って取り込むをクリックします。チャット一覧をページごとに確認し、すでにインデックス化され、変更されていない会話はスキップしながら、すべての会話を Memex に取り込みます。そのため、再実行しても処理はすぐに終わり、タブを閉じた場合も次回のクリックで続きから再開できます。進行状況はポップアップに表示されます。これにより、手動でエクスポートしなくても、新規インストール直後から検索できるようになります。

  5. あとは claude.ai を使うだけです。 新しく開くチャットも作成するチャットも、自動的に取り込まれます。memex stats を実行するか、Claude Code から search_chats を呼び出して確認してください。

詳しくは chrome-extension/README.md をご覧ください。

自動起動(macOS + Windows + Linux)

ログインするたびに手動で memex serve を実行する必要がなくなります(memex setup でも同じ設定が行われます)。

memex install-service          # default action: install
memex install-service status   # check current state
memex install-service uninstall

CLI は OS に適したインストーラーを呼び出します。

  • macOS:serve と、15 分ごとに実行される Claude Code 取り込みのバックストップ用に launchd エージェントを書き込み、launchctl load で読み込みます。ログはデータディレクトリに保存されます(リポジトリのクローンでは <repo>/data/serve.log、PyPI からインストールした場合は ~/Library/Application Support/memex/com.memex.serve.log)。claude.ai コネクターも実行するには --remote を追加します(MEMEX_REMOTE_* の設定が必要です)。常時実行をご覧ください。
  • Windows:ログオン時に memex serve を実行するスケジュールタスク(MemexServe)を登録します。管理者権限は不要で、コンソールウィンドウも表示されず、VS Code を閉じても実行されます。ログは %LOCALAPPDATA%\memex\serve.log に保存されます。停止した場合は最大 3 回まで自動的に再起動します。
  • Linux:systemd のユーザーユニットを ~/.config/systemd/user/memex-serve.service に書き込み、有効化して、ただちに起動します。ログは ~/.local/share/memex/serve.log に保存されます。ログアウト後も実行し続けるには、loginctl enable-linger $USER を実行してください。状態は systemctl --user status memex-serve で確認できます。

クローンしたリポジトリを使わない pip/pipx からのインストールでも、memex install-service は macOS、Linux、Windows で同様に動作します。インストール済みの memex serve を直接実行する、自己完結型のエージェント(launchd/systemd/ログオン時のスケジュールタスク)を生成し、データベースをユーザーごとのデータディレクトリに保存します。サービスが起動時に安定したインタープリターを使えるよう、一時的な uvx ではなく pipx を使用してください。

Claude に Memex を積極的に使わせる

デフォルトでは、LLM はツールの使用に慎重で、何かを呼び出す前に尋ねる傾向があります。「X について話したこと、覚えてる?」と尋ねると、検索せずに「覚えていません」と答えることがあります。

4 つのツールの docstring にはすでに「積極的に使用する」ための指示が含まれていますが、CLAUDE.md に次のスニペットを追加すると、さらに強化できます(すべてのセッションに適用する場合は ~/.claude/CLAUDE.md、特定のプロジェクトに適用する場合は <project>/CLAUDE.md に置きます)。

## Memex: persistent memory of Claude.ai chats

There is an MCP server `memex` with 4 tools: `search_chats`, `get_chat`, `list_recent_chats`, `find_related`.
They index ALL of the user's Claude.ai history, reachable via hybrid search
(semantic + lexical FTS5).

**Operational rule:** before answering "I have no record", "I don't remember", "this is
the first time I hear about this", or anything equivalent, call `mcp__memex__search_chats`
with the relevant query. Claude Code's native memory starts clean every session; Memex
is the only path into the user's real history.

Typical triggers: "remember when...", "did I tell you about...", "we already talked about...",
"the other day we discussed...", or any reference to a project / person / decision that might
live in history.

ロードマップ

フェーズ、完了基準、現在の状況については ROADMAP.md をご覧ください(スペイン語で書かれた内部ジャーナルです)。

開発ログ

決定事項、ブロッカー、進捗の記録については、DEVLOG.md(スペイン語)をご覧ください。

インスピレーションと参考資料

ライセンス

MIT。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。