Skip to main content
Glama
Kawai-Senpai

Infinite Code Next

by Kawai-Senpai

AIコーディングエージェントにコードベースの永続的で検証可能な記憶を与える、ゼロ設定のMCPサーバー。コードの背後にある決定、すでに試されて却下されたこと、決して壊してはならないこと——それらをコードに固定し、コードが移動するにつれて一緒に運ぶ。

tests python mcp no llm

クイックスタート · エクスプローラー · 共有 · エージェント向け · 仕組み · ブランド


git blame は、行を変更したのが誰かを教えてくれる。 これはエージェントにコードがなぜ存在するのか何がすでに試されて 却下されたのか何が真実であり続けなければならないのかを伝える——そして 自身の知識が古くなったことを自覚している。


問題

毎セッション、AIエージェントは記憶なしでやってくる。ファイルを読んで、前のエージェントがすでに知っていたことを再導出する。そして3ヶ月前に却下された修正を再提案する。なぜなら、それが試されたという記録がリポジトリのどこにもないからだ。

高価な知識は決してコードの中にはない:

コードが示すこと

決して示さないこと

stdin=subprocess.DEVNULL

なぜか——gitがMCPパイプを継承し、すべての呼び出しを20秒間停止させること

if touched:

ここでのor Noneが「すべてを解決する」を意味し、数分かかること

コーディネータークラス

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履歴を融合し、トークン予算の下でコンパクトなカプセルを返す。コードと知識を一緒に検索するので、警告が存在するファイルに名前を付けなくても、警告があなたを見つける。

引数

使用目的

intent=

locateunderstandmodifydebugaudit——省略時は推論される

budget=

おおよそのトークン上限(デフォルト9000)

cross_repos=True

コントラクトを他のリポジトリへ追跡する

find_problems=

絞り込まれたサブグラフに対するターゲット診断

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_regression

5つのメモリのフラットなリストでは、ストーリーを再構築しなければならない。チェーンはそれを手渡す。

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として渡す。

フィールド

記録するもの

invariants

真であり続けなければならないこと

warnings

将来のエージェントがしてはならないこと

failed_attempts

試されて却下されたもの、そしてその理由

decisions

下された選択、そして却下された代替案

contracts

他のコードが依存している前提

security

セキュリティ関連の事実

performance

測定されたパフォーマンスの事実

bugs

このコードが以前に引き起こしたバグ

migrations

マイグレーション手順または順序の制約

conventions

従う価値のあるローカルな慣習

rationale

コードがこのように形作られている理由

tests

これをカバーするテスト——GUARDED_BYエッジを作成する

contracts_with

クロスリポジトリの依存関係

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

同じフィンガープリント、同じ場所

ACTIVE · 1.0

2

同じフィンガープリントが別の場所、git blame -C -M で確認

ACTIVE · 0.9、移動

3a

同じ場所、スケルトンが同一 — 名前変更

ACTIVE · 0.8

3b

同じ場所、構造が変更

NEEDS_REVIEW

4

シンボルが消えた、強い類似性マッチ

DRIFTED、再アンカー

5

基準を満たすものがない

ORPHANED — 保持、削除されない

この仕組みを信頼できるものにしているのは、次の2つのルールです。

  • 検証はタイマーではなく、ドリフトを引き起こした編集に対して発火します。

  • カスケードは信頼を下げることしかできず、上げることは決してありません。 一度 DRIFTED または NEEDS_REVIEW になると、明示的な memory(action="verify") だけがアンカーを ACTIVE に戻します。そうでなければ、次のパスで再アンカーされたばかりのフィンガープリントが一致し、「変更なし」と報告され、誰も確認したことのないメモリが静かに再信頼されてしまいます。

問題検出

investigate() はまずサブグラフに絞り込み、そのサブグラフに対して意図を絞った質問を行います。ワークスペース全体のスキャンは決して行いません。これらがリンターと異なるのは、知識を認識することです。リンターは関数にテストがないことを見ますが、このグラフだけが、その関数が本番インシデント後に記録された不変条件によって管理されていることを知っています。

検出項目

それが答える質問

stale_knowledge

どのメモリが、それらが記述するコードからドリフトしたか

bypassed_wrapper

呼び出し元がコーディネーターやガードを迂回して到達しているか

untested_invariant

管理されたルールがどのテストからも到達可能でないか

deprecated_with_callers

非推奨のシンボルにまだアクティブな呼び出し元がいるか

unguarded_equivalent

構造的に同一の兄弟がルールを欠いているか

implementation_drifted_from_decision

コードが決定事項から逸脱したか

knowledge_conflict

2つのメモリが互いに矛盾しているか

historical_implementation

アクティブな知識が削除されたコードを指しているか

unverifiable_contract

クロスリポジトリの依存関係が現在チェック不能か

unreviewed_caller

メモリが検証された後に呼び出し元が現れたか

migration_candidate

コードがカスケードが追従しない場所に移動した可能性があるか

検出器が失敗しても検索は壊れません。診断は回答を強化するものであり、回答の前提条件ではありません。

ループ内にLLMなし

record() は完全に決定論的です。エンティティ解決、エッジ導出、矛盾検出はグラフ操作であり、モデル呼び出しではありません。APIキーもネットワークもトークンコストもありません。 ランキングは意図ごとの重みを持つ静的で検査可能な式です。新しいローカルインストールには、リランカーを訓練するためのラベル付き関連性データがないからです。

人間の入力方法を許容する検索

完全一致とプレフィックス一致が最初に実行され、何も見つからない場合に近似パスが引き継ぎます。そのため、subproces でも subprocess 警告を見つけられます。ハイフンは両方向で橋渡しされます。reanchorre-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

意味

#8b5cf6

メモリ、アンカリング — 知識

#34d399

シンボル、テスト — 検証済みコード

#4d7cfe

ファイル — 構造

#fbbf24

リポジトリ、注意

#f4677c

クリティカル、因果チェーン

#1c2340

カード表面

#151a2e

グラウンド

UI全体を支配するルールは一つです。構造は静かに、知識は目立つ。 CALLSDEFINES は背景に退き、アンカーと因果エッジ — 他のツールが表示できないもの — が色を担います。

アセットは 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 を使用するため、エディターはそれらを本来のものとして扱います。公開されたページが単一の自己完結型ファイルである必要があるため、レンダリング時にインライン化されます。


ツール

ツール

アクション

workspace

open · status · list · reindex · health · reconcile · archive · detach · forget_checkout · purge

investigate

search · why · expand · verify

record

1つのイベント → 多くのアンカーされた事実

memory

get · list · verify · guard · correct · supersede · resolve · reanchor

agit

status · diff · commit · log · branches · switch · restore · reset · show

agit はエージェントのチェックポイントを .agit/ に保持し、ユーザーの .git とは完全に分離されています。リスクのある作業をチェックポイントし、復元し、ユーザーの履歴には決して触れません。


テスト

python -m pytest

172のテスト、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.pyopen が要約を提供する理由を、causal.py は因果関係が推論ではなく断言される理由を説明します。

計画ノートはローカルに保持され、出荷される成果物には含まれません。


作者: Ranit Bhowmick

エージェントがコードベースを理解するために読まなければならなかったなら、その知識はセッションとともに失われます。これがその修正です。

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • -
    license
    B
    quality
    Not graded
    maintenance
    A 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.
    27
    27
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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.
    7
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Gives AI coding agents persistent, evolving knowledge about a codebase, enabling them to store and retrieve observations about architecture, conventions, gotchas, and recent work context.
    10
    29
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides 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.
    1
    MIT

View all related MCP servers

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).

View all MCP Connectors

Latest Blog Posts

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