Infinite Code Next
AIコーディングエージェントにコードベースの永続的で検証可能な記憶を与える、ゼロ設定のMCPサーバー。コードの背後にある決定、すでに試されて却下されたこと、決して壊してはならないこと——それらをコードに固定し、コードが移動するにつれて一緒に運ぶ。
クイックスタート · エクスプローラー · 共有 · エージェント向け · 仕組み · ブランド
git blame は、行を変更したのが誰かを教えてくれる。 これはエージェントにコードがなぜ存在するのか、何がすでに試されて 却下されたのか、何が真実であり続けなければならないのかを伝える——そして 自身の知識が古くなったことを自覚している。
問題
毎セッション、AIエージェントは記憶なしでやってくる。ファイルを読んで、前のエージェントがすでに知っていたことを再導出する。そして3ヶ月前に却下された修正を再提案する。なぜなら、それが試されたという記録がリポジトリのどこにもないからだ。
高価な知識は決してコードの中にはない:
コードが示すこと | 決して示さないこと |
| なぜか——gitがMCPパイプを継承し、すべての呼び出しを20秒間停止させること |
| ここでの |
コーディネータークラス | Redisミューテックスが最初に試され、パーティションでデッドロックすること |
このサーバーはその層を保存し、コードに結びつけたままにし、もはや保証できないときにそれを伝える。
Related MCP server: lore
クイックスタート
pip install -e .MCPクライアントに一度登録するだけ——2番目のステップはない。管理パネルも、ポートも、デーモンも、リポジトリごとの設定もない。
claude mcp add icn -- infinite-code-next[mcp_servers.icn]
command = 'infinite-code-next'
args = []{ "mcpServers": { "icn": { "command": "infinite-code-next" } } }サーバーは作業ディレクトリから自分がどのリポジトリにいるかを判断し、すべての応答は解決したルートをエコーするので、間違ったワークスペースはすぐに明らかになる。
ループ
workspace(action="open") → a briefing: rules, prior failures, what is unverified
investigate("what you're doing") → code + rationale + blast radius, budgeted
... do the work ...
record(summary=..., warnings=[...], failed_attempts=[...])生産的になるための2回の呼び出し。次のエージェントを賢くするための1回。
ナレッジエクスプローラー
サーバーが知っているすべて——リポジトリ、ファイル、シンボル、メモリ、そしてそれらの間のすべてのエッジ——を1つのインタラクティブなグラフとして。
./explore.sh # macOS / Linux
explore.bat # Windows
icn-explore # if the package is on your PATH上:全グラフ上にエクスポートメニューが開いている状態。
フィルター | ノードタイプ、メモリの重大度、アンカーステータス、またはエッジの種類で——カウントはライブ更新される |
検索 | 名前、パス、または本文のテキストで任意のノードを検索 |
検査 | ノードをクリックすると、完全な本文、メタデータ、およびすべての型付き接続が表示される |
ナビゲート | 任意の接続をクリックしてそこへジャンプ——警告から、それが守るコードへ、それをカバーするテストへ歩いていく |
ズーム&パン | スクロールとドラッグ;ノードサイズは呼び出し次数なので、負荷のかかるコードは負荷がかかっているように見える |
エクスポート | マークダウン、グラフJSON、ページ自体、PNG、または現在画面に表示されているものだけ |
自己完結型:データがインライン化された1つのHTMLファイル。CDNなし、ビルドステップなし、npmなし。保存しても、メールしても、コミットしても——それでも動作する。
icn-explore --no-serve -o graph.html # just write the file
icn-explore --port 8080 # pick the port
icn-explore --include-deleted # include tombstoned code知識の共有
別のコードベースの苦労して得た知識を他の誰かに——または別のエージェントに——渡す。
エクスプローラーから
エクスポートボタンは、ページを離れることなく以下のすべてを提供する。すべてブラウザ内で埋め込まれたグラフに対してオフラインで実行される——サーバー呼び出しはないので、保存されたページでもエクスポートできる。
マークダウン | どこでも読める、そして再インポート可能 |
グラフJSON | ノードとエッジ、生のまま |
このページ | 自己完結型エクスプローラー、誰かに送る用 |
画像 | 現在のビューのPNG |
表示中のコピー | 画面に表示されているものだけ——最初にフィルターと検索を行い、フィルターされたビューが共有可能なサブセットになる |
CLIから
icn-explore export -o knowledge.md # readable markdown, renders anywhere
icn-explore export -o knowledge.icn # bundle: markdown + graph
icn-explore export -o graph.json # raw graphマークダウンが正規の共有形式であり、単独で読める——エディタでも、diffでも、wikiでも、プルリクエストでも。ツールなしでは誰も読めないナレッジベースは、誰もチェックしないナレッジベースだ。最後のJSONブロックがインポートをロスレスにする。
icn-explore import knowledge.icn # bring it in
icn-explore import ./team-knowledge/ # a whole directory of .md / .icn
icn-explore import shared.md --preview # look first, import nothingインポートは決して上書きしない。 外部からのすべてはauthority='imported'として、その出所を添えて保存され、ここに一致するシンボルが実際に存在する場所にのみ固定される。あなたが持っていないコードについてのメモリも保存する価値はある——しかし、それが見たこともないスパンを記述していると主張してはならない。
AIエージェント向けガイド
最初の呼び出しの前にこのセクションを読むこと。
1. まずオープン——方向確認のためにファイルを読まない
workspace(action="open")ブリーフィングを返す:このコードを支配するルール、すでに試されて却下されたもの、現在未検証のもの、知識が集中している場所。見出しとIDのみ——本文は含まれず、investigate()は1回の呼び出しで実行できる。
これは測定された失敗が存在するからだ。このサーバーを構築するすべてのセッションは、すでに存在する知識を再導出するためにファイルを読むことから始まった。openはかつてシンボル数を報告していたが、それはあなたが何に足を踏み入れようとしているかを何も教えてくれない。棚に何があるかを知る前に、正しい質問はできない。
2. プレーンな言葉で調査——grepではなく
investigate("I need to change refresh token rotation. What will I break?")1回の呼び出しで、語彙検索、シンボルルックアップ、コードグラフ走査、メモリグラフ走査、アンカーステータス、git履歴を融合し、トークン予算の下でコンパクトなカプセルを返す。コードと知識を一緒に検索するので、警告が存在するファイルに名前を付けなくても、警告があなたを見つける。
引数 | 使用目的 |
|
|
| おおよそのトークン上限(デフォルト9000) |
| コントラクトを他のリポジトリへ追跡する |
| 絞り込まれたサブグラフに対するターゲット診断 |
3. 荷重のかかるものを削除する前に、なぜかを尋ねる
investigate(action="why", symbol="RefreshCoordinator.acquire")decision: Use refresh-token rotation
--was followed by--> bug_history: Parallel refresh requests invalidate each other
--was followed by--> failed_attempt: Redis mutex could deadlock during a partition
--was followed by--> * invariant: All refreshes pass through RefreshCoordinator
may reintroduce: Parallel refresh requests invalidate each other
regression tests: test_parallel_refresh_regression5つのメモリのフラットなリストでは、ストーリーを再構築しなければならない。チェーンはそれを手渡す。
4. 学んだことを記録する——特に失敗を
record(
kind="bug_fix",
summary="Serialize refresh requests per session",
reasoning="Parallel requests rotated the same token.",
invariants=["All refreshes for one session pass through RefreshCoordinator"],
warnings=["Do not bypass RefreshCoordinator for new refresh entry points"],
failed_attempts=["Redis mutex deadlocks during a network partition"],
symbols=["RefreshCoordinator.acquire"],
tests=["test_parallel_refresh_regression"],
caused_by=[previous_memory_id],
)failed_attemptsはシステム全体で最も価値の高いフィールドだ。 あなたのツールチェーンの他の何も、試されて却下されたものを記録しない。そしてそれは、将来のエージェントが再発見するのに最もコストがかかるものだ。
record()はprimary_memory——このイベントを表すID——を返す。それを次のcaused_byとして渡す。
フィールド | 記録するもの |
| 真であり続けなければならないこと |
| 将来のエージェントがしてはならないこと |
| 試されて却下されたもの、そしてその理由 |
| 下された選択、そして却下された代替案 |
| 他のコードが依存している前提 |
| セキュリティ関連の事実 |
| 測定されたパフォーマンスの事実 |
| このコードが以前に引き起こしたバグ |
| マイグレーション手順または順序の制約 |
| 従う価値のあるローカルな慣習 |
| コードがこのように形作られている理由 |
| これをカバーするテスト—— |
| クロスリポジトリの依存関係 |
| このイベントが続くメモリID |
5. ラベルを信頼する
すべてのメモリはanchor_statusを持つ。ACTIVE以外のものは、現在のコードに対して検証されていない——それを事実ではなく手がかりとして扱う。
memory(action="verify", memory_id=..., reason="confirmed it still applies")
memory(action="guard", memory_id=rule_id, body=test_memory_id)
memory(action="supersede", memory_id=..., body="what is true now")仕組み
自分が古くなったことを知るアンカー
メモリはsrc/auth/oauth.ts:193に保存されるわけではない。行番号はレンダリングの詳細だ。各メモリはセマンティックアンカーに付着する:シンボルパス、ASTパス、コンテンツフィンガープリント(構造+識別子)、スケルトンフィンガープリント(構造のみ)、そしてその周囲のコンテキスト。
コードが変更されると、カスケードがアンカーを再配置する——最も安価なテストから最初に:
ステップ | テスト | 結果 |
1 | 同じフィンガープリント、同じ場所 |
|
2 | 同じフィンガープリントが別の場所、 |
|
3a | 同じ場所、スケルトンが同一 — 名前変更 |
|
3b | 同じ場所、構造が変更 |
|
4 | シンボルが消えた、強い類似性マッチ |
|
5 | 基準を満たすものがない |
|
この仕組みを信頼できるものにしているのは、次の2つのルールです。
検証はタイマーではなく、ドリフトを引き起こした編集に対して発火します。
カスケードは信頼を下げることしかできず、上げることは決してありません。 一度
DRIFTEDまたはNEEDS_REVIEWになると、明示的なmemory(action="verify")だけがアンカーをACTIVEに戻します。そうでなければ、次のパスで再アンカーされたばかりのフィンガープリントが一致し、「変更なし」と報告され、誰も確認したことのないメモリが静かに再信頼されてしまいます。
問題検出
investigate() はまずサブグラフに絞り込み、そのサブグラフに対して意図を絞った質問を行います。ワークスペース全体のスキャンは決して行いません。これらがリンターと異なるのは、知識を認識することです。リンターは関数にテストがないことを見ますが、このグラフだけが、その関数が本番インシデント後に記録された不変条件によって管理されていることを知っています。
検出項目 | それが答える質問 |
| どのメモリが、それらが記述するコードからドリフトしたか |
| 呼び出し元がコーディネーターやガードを迂回して到達しているか |
| 管理されたルールがどのテストからも到達可能でないか |
| 非推奨のシンボルにまだアクティブな呼び出し元がいるか |
| 構造的に同一の兄弟がルールを欠いているか |
| コードが決定事項から逸脱したか |
| 2つのメモリが互いに矛盾しているか |
| アクティブな知識が削除されたコードを指しているか |
| クロスリポジトリの依存関係が現在チェック不能か |
| メモリが検証された後に呼び出し元が現れたか |
| コードがカスケードが追従しない場所に移動した可能性があるか |
検出器が失敗しても検索は壊れません。診断は回答を強化するものであり、回答の前提条件ではありません。
ループ内にLLMなし
record() は完全に決定論的です。エンティティ解決、エッジ導出、矛盾検出はグラフ操作であり、モデル呼び出しではありません。APIキーもネットワークもトークンコストもありません。 ランキングは意図ごとの重みを持つ静的で検査可能な式です。新しいローカルインストールには、リランカーを訓練するためのラベル付き関連性データがないからです。
人間の入力方法を許容する検索
完全一致とプレフィックス一致が最初に実行され、何も見つからない場合に近似パスが引き継ぎます。そのため、subproces でも subprocess 警告を見つけられます。ハイフンは両方向で橋渡しされます。reanchor は re-anchor と書かれたテキストを見つけ、その逆も同様です。FTS5 のトークナイザーがハイフンで分割するため、どちらの表記も他方に到達できないからです。
フォールバックは意図的にフォールバックです。FTS ランキングは、ヒットがある場合、ローカルで計算されたものより優れています。そのため、デフォルトでファジーマッチングを実行すると、緩い一致が正確な一致を上回ってしまいます。
ランキングは使用から学習する
すべてのメモリは、表示された回数と、エージェントが完全に開いた回数を追跡します。開くことははるかに重みを持ちます。表示されることはクエリが一致したことを意味するだけですが、開くことはエージェントが見たすべての中からそれを選んだことを意味します。
ブーストは0.5で制限され、45日の半減期で減衰します。頻度は証拠であり、権威ではありません。無制限であれば、先月の人気メモリが昨日記録された重大な警告の上に固定されてしまいます。
ストレージ
%LOCALAPPDATA%\InfiniteCode\ (Windows)
$XDG_DATA_HOME/infinite-code/ (Linux)
~/Library/Application Support/InfiniteCode/ (macOS)
catalog.db repositories, aliases, checkouts, cross-repo edges
data/repos/<id>/repo.db DURABLE code graph, memories, anchors, events
cache/repos/<id>/ REBUILDABLE safe to delete at any time
<repo>/.agit/ agent git, gitignored
<repo>/.icn.toml optional, committed, tinyルートを INFINITE_CODE_HOME で上書きします。
アイデンティティはパスでもリモートURLでもありません。両方とも可変だからです。ルートコミット、オプションのコミットされたプロジェクトID、正規化されたリモートから導出されるため、クローンを移動したり git remote set-url を実行したりしても、既存の知識に再アタッチされます。フォークはアップストリームのルートコミットを共有するため、アップストリームのメモリを黙って継承するのではなく、明示的に分割されます。
何も破壊されない
削除されたシンボルは、最後に知られていたパスと、それらを削除したコミットとともにトゥームストーンになります。
エッジは
valid_from_commit/valid_until_commitを持ち、消えるのではなくHISTORICALになります。消えたチェックアウトは
MISSING、マウントされていないドライブはOFFLINEです。どちらも何も削除しません。修正は以前のテキストをバージョン管理します。置き換えは両方のメモリとそれらの間のリンクを保持します。
エージェントは人間が作成したメモリを書き換えることはできません。置き換える必要があり、不一致を可視化したままにします。
purgeは唯一の破壊的操作であり、confirm=Trueが必要です。
ルックアップは、例外を決して発生させないリゾルバーを通過します。「現在解決できません」は、最後に知られていた情報とともにデータで返されます。
ブランド
マークは製品の唯一のアイデアです。知識(バイオレット)がコード(グリーン)にアンカーされており、コードはそれについての記憶を持ちません。リングは開いたままです。知識の検証が完了することは決してないからです。
ストロークの太さは、16px のファビコンでも形状が保たれるように設定されています。メモリノードが支配的なままで、リングがぼやけても3つのアンカーが三角形として読めることができます。
Hex | 意味 | |
| メモリ、アンカリング — 知識 | |
| シンボル、テスト — 検証済みコード | |
| ファイル — 構造 | |
| リポジトリ、注意 | |
| クリティカル、因果チェーン | |
| カード表面 | |
| グラウンド |
UI全体を支配するルールは一つです。構造は静かに、知識は目立つ。 CALLS と DEFINES は背景に退き、アンカーと因果エッジ — 他のツールが表示できないもの — が色を担います。
アセットは assets/ にあります。エクスプローラーのソースは src/icn/web/ です:
src/icn/web/
explorer.html shell and markup
explorer.css the design system above, as custom properties
explorer.js force layout, canvas rendering, inspector
mark.svg logo
banner.svg header文字列リテラルではなく実際の .html、.css、.js を使用するため、エディターはそれらを本来のものとして扱います。公開されたページが単一の自己完結型ファイルである必要があるため、レンダリング時にインライン化されます。
ツール
ツール | アクション |
|
|
| search · |
| 1つのイベント → 多くのアンカーされた事実 |
|
|
|
|
agit はエージェントのチェックポイントを .agit/ に保持し、ユーザーの .git とは完全に分離されています。リスクのある作業をチェックポイントし、復元し、ユーザーの履歴には決して触れません。
テスト
python -m pytest172のテスト、stdio で実際のサーバーを起動し、ワイヤープロトコルを通じて完全なエージェントワークフローを駆動するライブ MCP スイートと、未コミットの編集でカスケード動作を検証するダーティワークツリーハーネスを含みます — 再フォーマット、名前変更、本文の変更、ファイル間移動、削除、弱いマイグレーション。
この手法は公開された文献では検証されておらず、文献は事後的なコミット履歴マイニングのみを測定するため、ここで直接測定されます。
ライブテストはその価値を証明します。プロセス内テストでは見えないバグを発見しました。サブプロセス呼び出しがサーバーの stdin を継承しており、これは まさに MCP プロトコルパイプです。Git は、すべてのツール呼び出しで20秒のタイムアウト全体にわたってそれでブロックされ、プロトコルバイトを飲み込む可能性がありました。修正により、ツールのレイテンシは 20秒から0.2秒 に短縮されました。
実際の4,621ファイルのリポジトリで測定
フルインデックス | 593秒 → 34,747シンボル、58,857エッジ、43,038コールエッジ |
ウォームオープン | 0.77秒 |
クエリ | 1.48秒 |
デザイン
各決定の背後にある理由は、それが管理するコードの隣にあります。すべてのモジュールの docstring は、それが何をするか、そしてより重要なことに、どの失敗を防ぐために存在するかを述べています。anchors.py はカスケードが信頼を下げることしかできない理由を説明し、briefing.py は open が要約を提供する理由を、causal.py は因果関係が推論ではなく断言される理由を説明します。
計画ノートはローカルに保持され、出荷される成果物には含まれません。
作者: Ranit Bhowmick
エージェントがコードベースを理解するために読まなければならなかったなら、その知識はセッションとともに失われます。これがその修正です。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- -licenseBqualityNot gradedmaintenanceA memory system for AI coding tools that stores and retrieves codebase context with project isolation. Enables coding assistants to maintain searchable memory of code snippets, comments, and runtime traces with full source traceability.2727
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query project memory by linking code changes to the conversations that produced them, allowing retrieval of past decisions and constraints directly from the codebase.7Apache 2.0
- AlicenseAqualityCmaintenanceGives AI coding agents persistent, evolving knowledge about a codebase, enabling them to store and retrieve observations about architecture, conventions, gotchas, and recent work context.10291MIT
- AlicenseNot gradedqualityAmaintenanceProvides persistent, anchored memory for AI coding agents, binding every decision to specific lines of code and delivering relevant context just-in-time via the Model Context Protocol.1MIT
Related MCP Connectors
Shared debugging memory for AI coding agents
Give your AI agent a persistent map of your project's structure, dependencies, and bugs.
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Kawai-Senpai/Infinite-code-next'
If you have feedback or need assistance with the MCP directory API, please join our Discord server