mcpField
R
Rlm   Infinite Memory For Claude Code

Rlm Infinite Memory For Claude Code

ローカル
github.comAI・エージェント393 週間前に更新

Rlm Infinite Memory For Claude Code について

RLM は Claude Code 向けの MCP サーバーで、決定事項・事実・会話チャンクをセッションをまたいで保存します。チャンク化は利用者が意図的に行う方式で、保存されていないセッションを検出して通知するため、/compact 後も文脈を維持したい開発者に向いています。

主な機能

  1. 01重要度付きのインサイトの保存と検索
  2. 02peek と正規表現 grep による会話チャンクの管理
  3. 03BM25 とセマンティックベクトルのハイブリッド検索
  4. 04Model2Vec または FastEmbed の埋め込みプロバイダー選択
  5. 05活跃・アーカイブ・削除の三段階の保持ポリシー
  6. 06直近のチャンクがない場合に手動 compact を止めるフック

活用シーン

  1. 01/compact 後に以前のアーキテクチャ上の決定を取り戻す
  2. 02顧客の好みなど長期的な事実を保存し次のセッションで呼び出す
  3. 03プロジェクトやドメインで絞り込んで過去の会話を検索する

MCP 対応

RLM は MCP サーバーとして動作し、インサイト、チャンク、検索を操作する 14 のツールを Claude Code に公開します。

設定

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

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

RLM - Claude Code の無限メモリ

Claude Code のセッションは /compact の後にすべてを忘れてしまいます。RLM がそれを解決します。

License: MIT Python 3.10+ MCP Server CI codecov PyPI version

Français | English | 日本語


問題

Claude Code にはコンテキストウィンドウの上限があります。上限に達すると:

  • /compact によって会話履歴が消去されます
  • 以前の決定、知見、コンテキストが失われます
  • 同じことを繰り返し伝えることになります。Claude は同じ間違いを繰り返し、生産性が低下します。

解決策

RLM は、Claude Code にセッションをまたいで保持されるメモリを提供する MCP サーバーです:

You: "Remember that the client prefers 500ml bottles"
     → Saved. Forever. Across all sessions.

You: "What did we decide about the API architecture?"
     → Claude searches its memory and finds the answer.

インストールは3行。14個のツール。設定は不要です。


クイックインストール

要件:Python 3.10+(ダウンロード)、Claude Code CLI

PyPI 経由(推奨)
pip install mcp-rlm-server[all]

フックとテンプレートはパッケージに含まれています。pip でインストールするとリポジトリのチェックアウトは含まれないため、パッケージに配置先を確認してください:

python -m mcp_server --hooks-dir       # e.g. .../site-packages/mcp_server/hooks
python -m mcp_server --templates-dir

~/.claude/settings.json のフックコマンドをそのパスに設定するか(フックの設定を参照)、~/.claude/rlm/hooks/ にコピーしてください。

uv 経由(高速、グローバル環境を汚しません)
uv tool install mcp-rlm-server[all] --python 3.12
Git 経由(フックを含むフルインストール)
git clone https://github.com/EncrEor/rlm-claude.git
cd rlm-claude
./install.sh
Docker 経由
docker build -t rlm-server .
# Or pull from registry (when published):
# docker pull ghcr.io/encreor/rlm-claude

次に、Docker コンテナを使うよう Claude Code を設定します(下記のDocker のセットアップを参照)。

Claude Code を再起動すれば完了です。

v0.9.0 以前からのアップグレード

v0.9.1 では、ソースコードの場所が mcp_server/ から src/mcp_server/ に移動しました(PyPA のベストプラクティスに準拠)。既存のインストールが引き続き動作するよう互換性用のシンボリックリンクを含めていますが、インストーラーを再実行することをおすすめします:

cd rlm-claude
git pull
./install.sh          # reconfigures the MCP server path

データ(~/.claude/rlm/)は変更されません。更新されるのはサーバーのパスのみです。


仕組み

                    ┌─────────────────────────┐
                    │     Claude Code CLI      │
                    └────────────┬────────────┘
                                 │
                    ┌────────────▼────────────┐
                    │    RLM MCP Server        │
                    │    (14 tools)            │
                    └────────────┬────────────┘
                                 │
              ┌──────────────────┼──────────────────┐
              │                  │                   │
    ┌─────────▼────────┐ ┌──────▼──────┐ ┌──────────▼─────────┐
    │    Insights       │ │   Chunks    │ │    Retention        │
    │ (key decisions,   │ │ (full conv  │ │ (auto-archive,      │
    │  facts, prefs)    │ │  history)   │ │  restore, purge)    │
    └──────────────────┘ └─────────────┘ └────────────────────┘
気づかないうちに何も失われない

チャンク化は意図的に行う操作です。RLM が独自にチャンクを書き込むことはありません。未保存のセッションを見落とさないようにする仕組みを提供します:

  • /compact の前:過去15分以内にチャンク化されていない場合、手動の /compact はブロックされます。チャンク化して再実行すれば、実行できます。自動コンパクトは、セッションが完了できなくなることを避けるため、ブロックされず、警告のみが表示されます。
  • セッション終了後:フックが各セッションで操作されたもの(ファイルパスと許可リストに登録されたプログラム名。コマンドラインは記録しません)を追跡します。次回起動時、変更を加えた後にチャンク化せず終了したセッションは、そのトランスクリプトとともに一覧表示されるため、内容を復元できます。クラッシュやターミナルの終了も対象です。検出するのは正常終了したかどうかではなく、チャンクがないことです。
2つのメモリシステム
システム保存する内容使い方
インサイト重要な決定、事実、好みrlm_remember() / rlm_recall()
チャンク会話の全セグメントrlm_chunk() / rlm_peek() / rlm_grep()

機能

メモリとインサイト
  • rlm_remember - 判断事項、事実、好みをカテゴリーと重要度レベルを付けて保存します
  • rlm_recall - キーワード(複数語はトークン化)、カテゴリー、重要度でインサイトを検索します
    • クエリを指定しない場合、結果はまず重要度、次に新しさの順にランク付けされます。確定済みのcriticalルールは、今日のmediumメモより上位になります
    • 結果が切り詰められた場合は、その旨が示されます:一致した件数が応答に表示されるため、上限に達した検索結果をすべての結果であるかのように見せることはありません
  • rlm_forget - インサイトを削除します
  • rlm_status - システムの概要(インサイト数、チャンク統計、アクセス指標)を表示します
会話履歴
  • rlm_chunk - 会話のセグメントを、型付きの分類(snapshot、session、debug。insightはrlm_rememberに転送されます)で保存します
  • rlm_peek - チャンクを読み取ります(全体、または行範囲を指定した部分)
  • rlm_grep - すべてのチャンクを正規表現で検索します(誤字への許容性を高めるためのあいまい一致にも対応)
  • rlm_search - ハイブリッド検索:BM25 + セマンティックコサイン類似度(FR/EN、アクセント正規化、チャンク + インサイト)
  • rlm_list_chunks - メタデータ付きですべてのチャンクを一覧表示します
マルチプロジェクトの整理
  • rlm_sessions - プロジェクトまたはドメイン別にセッションを表示します
  • rlm_domains - 分類に使用できるドメインを一覧表示します
  • Gitまたは作業ディレクトリからプロジェクトを自動検出します
  • すべての検索ツールでプロジェクトをまたいだ絞り込みができます
スマート保持
  • rlm_retention_preview - アーカイブ対象をプレビューします(ドライラン)
  • rlm_retention_run - 古く未使用のチャンクをアーカイブし、非常に古いチャンクを削除します
  • rlm_restore - アーカイブ済みのチャンクを復元します
  • 3ゾーンのライフサイクル:アクティブ → アーカイブ(.gz)→ 削除
  • 免疫システム:criticalタグ、頻繁なアクセス、キーワードによってチャンクが保護されます
  • アーカイブは降格であり、削除ではありません:アーカイブ済みチャンクはアクティブインデックスから外れますが、rlm_searchでは要約とタグを使って引き続き検索され、archived_matchesとして返されます。rlm_peek(chunk_id)を使うと、チャンク全体を復元します
  • 検索での取得はすべてアクセスとしてカウントされます(peek、grep、searchのいずれも対象)。そのため、検索で繰り返し表示されるチャンクは、放置されたものとしてアーカイブされず、免疫を獲得します
安全策とメモリルーティング(フック)
  • PreCompactフック:直近15分以内にチャンクがない場合、手動の/compactをブロックします。自動コンパクトでは警告します(ブロックはしません)。このフック自体がチャンクを作成することはありません
  • PostToolUseフック(rlm_chunk):最後にチャンクが作成された時刻を記録します(PreCompactフックが読み取ります)。また、チャンクをそのセッションに関連付けます(インデックス内のsession_idとtranscript_path)
  • PostToolUseフック(Edit/Write/Bash) — セッションの記録:セッションが編集したパスと、実行した許可リスト登録済みプログラムのベース名を~/.claude/rlm/sessions/<session_id>.jsonlに追記します。コマンドラインは記録しません。コマンドラインにはパスワードが含まれる可能性があるためです
  • SessionStartフック — 未保存のセッション:変更を加えた後、チャンクも確認応答もないまま終了した過去のセッションを、トランスクリプトのパスとともに一覧表示します。python3 ~/.claude/rlm/hooks/session_orphans.py --ack <session_id> "reason"で確認できます
  • PostToolUseフック(Write/Edit):Claude Codeの自動メモリへの書き込みを検出し、判断事項、インサイト、セッションログにはRLMを使うよう促します
  • ユーザー主導の方針:チャンク化するタイミングはユーザーが決め、システムは失われる前に保存します
セマンティック検索(オプション)
  • ハイブリッドBM25 + コサイン類似度 - キーワード一致とベクトル類似度を組み合わせ、関連性を高めます
  • 自動埋め込み - 新しいチャンクは作成時に自動で埋め込まれます
  • 2つのプロバイダー - Model2Vec(高速、256d)またはFastEmbed(高精度、384d)
  • 適切な縮退動作 - セマンティック検索の依存関係がインストールされていない場合、純粋なBM25にフォールバックします
プロバイダーの比較(108チャンクでのベンチマーク)
Model2Vec(デフォルト)FastEmbed
モデルpotion-multilingual-128Mparaphrase-multilingual-MiniLM-L12-v2
次元数256384
108チャンクの埋め込み0.06s1.30s
検索レイテンシー0.1ms/query1.5ms/query
メモリ0.1 MB0.3 MB
ディスク(モデル)~35 MB~230 MB
セマンティック品質良好(キーワード重視)より高い(真のセマンティック検索)
速度21倍高速ベースライン

プロバイダー間の上位5件の結果の重複数:約1.6/5(8件のクエリのうち7件で異なる結果)。FastEmbedはより多くのセマンティックな意味を捉えますが、Model2Vecはキーワードの類似性を重視します。ハイブリッドのBM25+コサイン類似度の統合により、双方の弱点を補います。

推奨:まずはModel2Vec(デフォルト)を使用してください。より高いセマンティック精度が必要で、起動が遅くなっても問題ない場合にのみ、FastEmbedに切り替えてください。

# Model2Vec (default) — fast, ~35 MB
pip install mcp-rlm-server[semantic]

# FastEmbed — more accurate, ~230 MB, slower
pip install mcp-rlm-server[semantic-fastembed]
export RLM_EMBEDDING_PROVIDER=fastembed

# Compare both providers on your data
python3 scripts/benchmark_providers.py

# Backfill existing chunks (run once after install)
python3 scripts/backfill_embeddings.py
埋め込みのカバレッジを確認する

埋め込みはベストエフォートで行われます。プロバイダーを利用できない場合でも、チャンクは必ず書き込まれます。そのチャンクはベクトルが作成されるまでセマンティック検索に表示されないため、後になって判明することのないよう、未対応の範囲を報告します。

rlm_statusはカバレッジが不完全な場合に警告を出し、プロバイダーの読み込みに失敗した理由を示し、rlm.log(コンテキストディレクトリ内の追記専用ログ)の直近のエントリーを表示します。未対応の範囲を解消するには:

# Dry-run first: lists chunks that would be embedded
python3 scripts/reconcile_stores.py

# Re-embed everything missing, with timestamped backups
python3 scripts/reconcile_stores.py --apply

どちらもRLM_CONTEXT_DIRを使用します。サーバーと同じRLM_EMBEDDING_PROVIDERを使用してください。スクリプトはベクトルの次元数が異なるプロバイダーの混在を拒否します。

サブエージェントスキル
  • /rlm-analyze - 分離されたサブエージェントで単一のチャンクを分析します
  • /rlm-parallel - 複数のチャンクを並列に分析します(MIT RLM論文のMap-Reduceパターン)

比較

機能生のコンテキストLetta/MemGPTclaude-memRLM
永続メモリいいえはいはいはい
Claude Codeで動作該当なしいいえ(独自のランタイム)プラグイン(フック+ワーカー)ネイティブMCP+フック
保存されるものなしエージェントが管理すべてのツール呼び出しをLLMで圧縮選択したチャンク。未保存のセッションにはフラグが付けられます
バックグラウンドでのLLM呼び出しいいえはいはい(観察ごと)なし
コンパクト化前のガードいいえ該当なし該当なし(継続的に取得)あり(チャンクがないと手動の/compactはブロックされます)
検索(正規表現+BM25+セマンティック)いいえ基本的全文+オプションのベクトル検索あり
ファジー検索(タイプミス許容)いいえいいえ—あり
複数プロジェクトのサポートいいえいいえはいはい
スマートな保持(アーカイブ/削除)いいえ基本的—あり
サブエージェント分析いいえいいえ—あり
設定不要のインストール該当なし複雑1コマンド3行
FR/EN/JAのサポート該当なしENのみ多言語モード3言語
コスト無料セルフホスト可能LLMの利用料またはホスト型プラン無料

— =評価対象外です。claude-memの列は、2026年10月時点のドキュメントに基づいています。

claude-memとRLMは正反対のアプローチを採用しています。claude-memはすべてを自動的に記録し、モデルの呼び出しを使って圧縮します。一方、RLMはモデルのコストをかけず、残すものをユーザーが決めて保存します。また、保存し忘れたセッションがひっそり失われるのではなく、ユーザーに通知されるようにします。


使用例

セッション開始時(推奨)
# Load universal rules (apply regardless of topic).
# Pass a limit above your critical count — the default is 10, and a recall
# that returns 10 of 34 rules looks exactly like a complete one.
rlm_recall(importance="critical", limit=50)

# Load context for current topic
rlm_recall(query="deployment")

# Check memory status
rlm_status()
インサイトを保存して呼び出す
# Save a universal rule (loaded every session)
rlm_remember("Always deploy LOCAL → VPS, never direct",
             category="decision", importance="critical",
             tags="deploy,workflow")

# Save a topic-specific insight
rlm_remember("WeasyPrint requires inline CSS for PDF rendering",
             category="finding", importance="high",
             tags="weasyprint,pdf")

# Find insights later
rlm_recall(query="source of truth")
rlm_recall(category="decision")
rlm_recall(importance="critical", limit=50)   # all universal rules (mind the default limit of 10)
重要度レベル
レベル使用する場面読み込み
criticalあらゆる状況に適用される普遍的なルール毎回のセッション
high特定のトピックに関するルールそのトピックに取り組むとき
medium役立つ情報だが、なくても作業を妨げないもの明示的な検索時

テスト:「まったく別のトピックに取り組んでいるときでも、このルールは適用されますか?」はいの場合は → critical。

会話履歴を管理する
# Save important discussion (typed)
rlm_chunk("Discussion about API redesign... [long content]",
          summary="API v2 architecture decisions",
          tags="api,architecture",
          chunk_type="session")        # or "snapshot", "debug"

# Search across all history
rlm_search("API architecture decisions")      # BM25 ranked
rlm_grep("authentication", fuzzy=True)         # Typo-tolerant

# Read a specific chunk
rlm_peek("2026-01-18_MyProject_001")
複数プロジェクトの整理
# Filter by project
rlm_search("deployment issues", project="MyApp")
rlm_grep("database", project="MyApp", domain="infra")

# Browse sessions
rlm_sessions(project="MyApp")

プロジェクト構成

rlm-claude/
├── src/mcp_server/
│   ├── server.py              # MCP server (14 tools)
│   └── tools/
│       ├── memory.py          # Insights (remember/recall/forget)
│       ├── navigation.py      # Chunks (chunk/peek/grep/list)
│       ├── search.py          # BM25 search engine
│       ├── tokenizer_fr.py    # FR/EN tokenization
│       ├── sessions.py        # Multi-session management
│       ├── retention.py       # Archive/restore/purge lifecycle
│       ├── embeddings.py      # Embedding providers (Model2Vec, FastEmbed)
│       ├── vecstore.py        # Vector store (.npz) for semantic search
│       ├── diagnostics.py     # Warning log (rlm.log) — degraded ops stay visible
│       └── fileutil.py        # Safe I/O (atomic writes, path validation, locking)
│
├── hooks/                     # Claude Code hooks
│   ├── i18n.py                # Translations (EN/FR/JA) for hook messages
│   ├── pre_compact_chunk.py   # Guard before /compact (PreCompact hook)
│   ├── memory_write_redirect.py # Redirect auto-memory writes to RLM (PostToolUse hook)
│   ├── reset_chunk_counter.py # Last-chunk time + chunk ↔ session link (PostToolUse hook)
│   ├── session_trace.py       # What a session touches, metadata only (PostToolUse hook)
│   ├── session_orphans.py     # Unsaved past sessions at startup, --ack (SessionStart hook)
│   └── session_common.py      # Shared paths, config and lock-safe index update
│
├── templates/
│   ├── hooks_settings.json    # Hook config template
│   ├── CLAUDE_RLM_SNIPPET.md  # CLAUDE.md instructions
│   └── skills/                # Sub-agent skills
│
├── context/                   # Storage (created at install, git-ignored)
│   ├── session_memory.json    # Insights
│   ├── index.json             # Chunk index
│   ├── chunks/                # Conversation history
│   ├── archive/               # Compressed archives (.gz)
│   ├── embeddings.npz         # Semantic vectors (Phase 8)
│   └── sessions.json          # Session index
│
├── install.sh                 # One-command installer
└── README.md

設定

フックの設定

インストーラーは ~/.claude/settings.json のフックを自動的に設定します。

{
  "hooks": {
    "PreCompact": [
      {
        "matcher": "manual",
        "hooks": [{ "type": "command", "command": "python3 ~/.claude/rlm/hooks/pre_compact_chunk.py" }]
      },
      {
        "matcher": "auto",
        "hooks": [{ "type": "command", "command": "python3 ~/.claude/rlm/hooks/pre_compact_chunk.py" }]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "mcp__rlm-server__rlm_chunk",
        "hooks": [{ "type": "command", "command": "python3 ~/.claude/rlm/hooks/reset_chunk_counter.py" }]
      },
      {
        "matcher": "Write",
        "hooks": [{ "type": "command", "command": "python3 ~/.claude/rlm/hooks/memory_write_redirect.py" }]
      },
      {
        "matcher": "Edit",
        "hooks": [{ "type": "command", "command": "python3 ~/.claude/rlm/hooks/memory_write_redirect.py" }]
      },
      {
        "matcher": "Edit|Write|MultiEdit|NotebookEdit|Bash",
        "hooks": [{ "type": "command", "command": "python3 ~/.claude/rlm/hooks/session_trace.py" }]
      }
    ],
    "SessionStart": [{
      "matcher": "",
      "hooks": [{ "type": "command", "command": "python3 ~/.claude/rlm/hooks/session_orphans.py" }]
    }]
  }
}

同じブロックは templates/hooks_settings.json にあり、インストーラーはそこから読み込みます。

セッションのトレース

任意の ~/.claude/rlm/session_trace.json(すべてのキーは任意です):

{
  "notable_commands": ["ssh", "scp", "rsync", "psql", "kubectl", "terraform", "ansible-playbook", "deploy.sh"],
  "min_edits": 5,
  "idle_hours": 2,
  "retention_days": 30,
  "max_listed": 5
}
  • notable_commands:セッション中に実行されたプログラムのベース名を記録します(引数は記録されません)。注目すべきコマンドが一度実行されれば、そのセッションは対象となります。
  • min_edits:Edit/Write の回数がこの値を超えたセッションが対象となります。
  • idle_hours:この時間未満しかアイドル状態でないセッションは、まだ実行中とみなされます(並行セッションには影響しません)。
  • retention_days:この日数より古いトレースは削除されます。Claude Code の cleanupPeriodDays(デフォルトでは 30)に合わせてください。この期間を過ぎるとトランスクリプトが消去され、いずれにしてもセッションを復元できなくなります。
言語

フックのメッセージはデフォルトで英語です。フランス語にするには RLM_LANG=fr、日本語にするには RLM_LANG=ja を設定します。

# Option 1: Set globally in your shell profile (~/.zshrc, ~/.bashrc)
export RLM_LANG=fr   # or ja

# Option 2: Set per-hook in ~/.claude/settings.json
# Replace the command with:
"command": "RLM_LANG=fr python3 ~/.claude/rlm/hooks/pre_compact_chunk.py"

対応言語:en(デフォルト)、fr、ja。

ストレージディレクトリ

RLM はデフォルトで ~/.claude/rlm/context/ にデータを保存します。RLM_CONTEXT_DIR で変更できます。

export RLM_CONTEXT_DIR=/path/to/custom/storage

これは特に Docker でのデプロイに便利です(下記を参照)。

カスタムドメイン

カスタムドメインを使って、トピックごとにチャンクを整理できます。

{
  "domains": {
    "my_project": {
      "description": "Domains for my project",
      "list": ["feature", "bugfix", "infra", "docs"]
    }
  }
}

インストール後に context/domains.json を編集してください。


手動インストール

pip を使用する場合
pip install -e ".[all]"
claude mcp add rlm-server -- python3 -m mcp_server
uv を使用する場合
uv tool install mcp-rlm-server[all] --python 3.12
claude mcp add rlm-server -- ~/.local/bin/mcp-rlm-server
フックの設定(pip および uv でのインストールに必須)

./install.sh スクリプトがこの設定を自動的に処理します。手動でインストールする場合:

# Get hook scripts from the repo
git clone https://github.com/EncrEor/rlm-claude.git /tmp/rlm-setup

# Install hooks and i18n
mkdir -p ~/.claude/rlm/hooks
cp /tmp/rlm-setup/hooks/*.py ~/.claude/rlm/hooks/
chmod +x ~/.claude/rlm/hooks/*.py

# Install skills (optional)
mkdir -p ~/.claude/skills/rlm-analyze ~/.claude/skills/rlm-parallel
cp /tmp/rlm-setup/templates/skills/rlm-analyze/skill.md ~/.claude/skills/rlm-analyze/
cp /tmp/rlm-setup/templates/skills/rlm-parallel/skill.md ~/.claude/skills/rlm-parallel/

# Cleanup
rm -rf /tmp/rlm-setup

次に、~/.claude/settings.json でフックを設定します(上記のフックの設定を参照)。

Docker の設定

イメージをビルドします。

git clone https://github.com/EncrEor/rlm-claude.git
cd rlm-claude
docker build -t rlm-server .

Claude Code の MCP を Docker を使うように設定します。

claude mcp add rlm-server -- docker run -i --rm -v ~/.claude/rlm/context:/data rlm-server

または、~/.claude/settings.json で手動設定します。

{
  "mcpServers": {
    "rlm-server": {
      "type": "stdio",
      "command": "docker",
      "args": ["run", "-i", "--rm", "-v", "~/.claude/rlm/context:/data", "rlm-server"]
    }
  }
}

Docker イメージでは内部的に RLM_CONTEXT_DIR=/data を使用し、ボリュームマウントによってローカルストレージにマッピングします。

アンインストール

./uninstall.sh              # Interactive (choose to keep or delete data)
./uninstall.sh --keep-data  # Remove RLM config, keep your chunks/insights
./uninstall.sh --all        # Remove everything
./uninstall.sh --dry-run    # Preview what would be removed

セキュリティ

RLM には、安全に動作させるための保護機能が組み込まれています。

  • パストラバーサルの防止 - チャンク ID は厳格な許可リスト([a-zA-Z0-9_.-&])に照らして検証され、解決されたパスがストレージディレクトリ内にとどまることを確認します
  • アトミック書き込み - すべての JSON ファイルとチャンクファイルは、一時ファイルへの書き込み後に名前を変更して保存されるため、書き込みの中断やクラッシュによる破損を防ぎます
  • ファイルロック - 共有インデックスに対する並行読み取り・変更・書き込み操作では、fcntl.flock の排他ロックを使用します
  • コンテンツサイズの上限 - チャンクのサイズは 2 MB に制限され、リソース枯渇を防ぐため、gzip の展開(アーカイブの復元)は 10 MB に制限されます
  • SHA-256 ハッシュ - コンテンツの重複排除には SHA-256(MD5 ではありません)を使用します

すべての I/O 安全機能は mcp_server/tools/fileutil.py に集約されています。


トラブルシューティング

「MCP サーバーが見つかりません」
claude mcp list                    # Check servers
claude mcp remove rlm-server       # Remove if exists
claude mcp add rlm-server -- python3 -m mcp_server
「フックが動作しません」
cat ~/.claude/settings.json | grep -A 10 "PreCompact"  # Verify hooks config
ls ~/.claude/rlm/hooks/                                  # Check installed hooks

ロードマップ

  • フェーズ 1:メモリツール(remember/recall/forget/status)
  • フェーズ 2:ナビゲーションツール(chunk/peek/grep/list)
  • フェーズ 3:自動チャンク分割 + サブエージェントスキル
  • フェーズ 4:本番対応(自動要約、重複排除、アクセス追跡)
  • フェーズ 5:高度な機能(BM25 検索、あいまい grep、複数セッション、保持期間)
  • フェーズ 6:本番環境対応(テスト、CI/CD、PyPI)
  • フェーズ 7:MAGMA に着想を得た機能(時間フィルタリング、エンティティ抽出)
  • フェーズ 8:ハイブリッドセマンティック検索(BM25 + コサイン類似度、Model2Vec)
  • フェーズ 9:型付きチャンク分割 — chunk_type パラメーター(snapshot/session/debug/insight のリダイレクト)
  • フェーズ 10:自動メモリと RLM の共存 — Write/Edit フックで自動メモリを RLM にリダイレクト + 日本語 i18n
  • フェーズ 11:セーフティネット — PreCompact ガード v2、重要度順に並べた recall(切り詰めの報告付き)、セッショントレース + 未保存セッションのレポート

着想元

研究論文
  • RLM Paper (MIT CSAIL) - Zhang et al.、2025年12月 - 「Recursive Language Models」— 基盤となるアーキテクチャ(チャンク化/プレビュー/grep、サブエージェントによる分析)
  • MAGMA (arXiv:2601.03236) - 2026年1月 - 「Memory-Augmented Generation with Memory Agents」— 時間フィルタリング、エンティティ抽出(フェーズ7)
ライブラリとツール
  • Model2Vec - 高速なセマンティック検索のための静的単語埋め込み(フェーズ8)
  • BM25S - 純粋な Python による高速な BM25 実装(フェーズ5)
  • FastEmbed - ONNX ベースの埋め込み、オプションのプロバイダー(フェーズ8)
  • Letta/MemGPT - AI エージェント向けメモリフレームワーク — 初期の着想源
標準とプラットフォーム

貢献

翻訳

このリポジトリは英語で管理されています。ユーザー向けのファイルは、各言語に翻訳できます。

ファイル用途翻訳を歓迎
README.mdメインドキュメントREADME.xx.md(例:README.fr.md、README.ja.md)
templates/CLAUDE_RLM_SNIPPET.mdCLAUDE.md の指示CLAUDE_RLM_SNIPPET.xx.md

コード、コメント、コミットメッセージは英語のままにしてください。


作者

  • Ahmed MAKNI (@EncrEor)
  • Claude Opus 4.6(共同研究開発)

ライセンス

MIT License - LICENSE を参照してください。

コメント

MCP は初めてですか?

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

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