Benzi について
Benziはソースコードを検索可能なインデックスにコンパイルし、呼び出し、参照、継承、データフローを構造化して提供します。独自エージェントや既存のMCPクライアントを使うコーディング向けで、コンパイラーを個別に接続でき、10言語に対応します。
主な機能
- 01シンボル、呼び出し、参照の索引化
- 02呼び出しツリーとデータフローの照会
- 03定義とクラス階層の特定
- 0410種類のプログラミング言語に対応
- 05MCP経由でのコンパイラー索引提供
活用シーン
- 01誤った値の発生元の追跡
- 02関数変更による影響範囲の確認
- 03シンボル定義と呼び出し元の検索
- 04コーディングエージェントによるコード構造の照会
MCP 対応
BenziはMCPサーバーとして動作し、コンパイル済みコード索引を構造化ツール経由でClaude Code、CursorなどのMCPクライアントに提供します。呼び出し元、呼び出しツリー、データフロー、定義、クラス階層を照会できます。Benziエージェントの実行時トレースと静的解析で制約された編集はMCP経由では利用できません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
20掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| topic | enum | はい | 読み込むリファレンストピックartifact | uids | languages | markup |
詳細
言語非依存 · モデル非依存 · ローカルでコンパイル · BYOK · MCP 対応
目次
— Benzi とは —
— ライブデモ —
— 言語サポート —
— はじめに —
— SWE-bench Verified —
— 仕組み —
— ツールセット —
— 機能 —
— Benzi と CC、DSH、OC の比較 —
— FAQ と Benzi のマップと LSP/SCIP インデクサーの比較 —
### Benzi とは
ほとんどの AI コーディングエージェントは、生のソースコードを grep や glob で検索して AI モデルのコンテキストウィンドウに取り込み、モデルが重要な箇所を見つけてくれることを期待します。Benzi はすべてのファイルを先に解析します。tree-sitter を基盤に構築された本格的なコンパイラーによって、精密でクエリ可能なマップを作成します。すべてのシンボル、すべての呼び出しエッジ、すべての参照、継承チェーン内のすべてのクラスを把握します。一度の処理で完了します。
質問に答える前に、すべてのファイルを解析し、インポートを解決し、クラスの継承関係を構築し、すべての識別子を定義元までたどります。呼び出しフローとデータフローはすべての呼び出し箇所で統合されるため、不正な値の発生元を1回のツール呼び出しでたどれます。Claude Code は grep で検索し、Cursor は埋め込みを行い、Aider はシグネチャをマッピングします。Benzi は O(1) で解決します。現在は10言語に対応し、HTML、CSS、DOM-JS 用のマークアップエンジンも備えています。言語サポートをご覧ください。ベータ期間中、Benzi は無料でご利用いただけます。
このリポジトリのリンクを Benzi に貼り付けて、ライブデモを試すこともできます。
SQLite 上の Benzi
この取り組みを気に入っていただけたら、⭐を付けていただけるとうれしいです。
ライブデモ
StallionSwipe · Python、HTML、CSS、JS — Benzi が1回のチャットセッションでゼロから作り上げた、馬のためのマッチングアプリです。画像ファイルは一切ありません。すべての馬のポートレートは、コードで生成されるプロシージャル SVG です。マッチした相手は、実際のモデルを通じてライブで返事をします。フロントエンド、バックエンド、プロンプトはすべて Benzi が作成しました。ライブで試す。
または、こちらでお好きなリポジトリをお試しください — Benzi に公開 GitHub リポジトリを指定すると、その場でインデックスを構築します。varianttech.net/demo。
言語サポート
Python · JavaScript · TypeScript · Java · C# · C++ · C · Go · Rust · Ruby
1つのコンパイラーで10言語に対応しています。それぞれが tree-sitter の文法プラグインであるため、マップの中核(シンボル、呼び出しエッジ、参照、継承、データフロー)は、どの言語でも同じ方法で構築されます。
対応の深さにはばらつきがあります。 Python が最も充実しており、ランタイムトレーサーに対応しているのも Python だけです。どの言語でもマップの中核を利用できますが、言語ごとに固有の構文があり、まだすべてがモデル化されているわけではありません。ほとんどのコードでは、他の言語のマップも Python にかなり近い精度です。
ランタイムトレーサー:一時的に動作に問題があります(2026年10月14日)。 トレース実行自体は行われますが、内包表記、ラムダ、ジェネレーター式の内部で行われる呼び出しと、Python 3.9~3.10 のプロジェクトにおけるほとんどのメソッド呼び出しを検出できません。次のリリースで修正予定です。
C、C++、Rust、Ruby では、インクリメンタルな再インデックス化の最適化も十分ではありません。動作しますが、大規模な編集を繰り返す場合は速度が落ちます。
お使いの言語で回答が間違っていたり、情報が不足していたりする場合は、リポジトリ、質問、誤りの内容を添えてイシューを作成してください。そうすることで、対応が不十分な部分を特定できます。
### はじめに
Benzi はベータ期間中、完全無料で利用できます。使用方法は 2 通りあり、どちらも同じログイン情報を使用します。同じ benzi-login 設定がどちらでも機能します。
-
Benzi エージェント — コンパイル済みのインデックス上で動作する Benzi 独自のエージェントです。VS Code またはターミナルから実行できます。これらの機能はエージェント自体に組み込まれているため、VS Code とヘッドレス環境で利用できますが、MCP 経由では利用できません。
- ランタイムトレーサー — コードを実行し、実際に何が起きたかを記録します。曖昧な呼び出しが実際にどの対象に到達したか、実際の引数値も記録します。
- 静的解析でゲートされた編集 — すべての書き込みで構文をチェックし、次のステップに進む前に最新のインデックスと照合します。コードを壊す編集は、そこから作業を続けるのではなくロールバックされます。
- 編集の前後に確認できる影響範囲 — 変更前と変更後の両方で、そのシンボルを呼び出すコード、シンボルを保持するコード、パラメーターに値を渡すコードを確認できます。
- 状況を判断して Pro にアップグレード — タスクが実行中のモデルの能力を超えると、エージェントはより大きなモデルに切り替わり、タスクが完了すると元に戻ります。有効にするには、
BENZI_ESCALATE_MODEL=deepseek-pro(または別のモデルエイリアス)を設定します。 - 永続メモリとロールバック — 再起動後も維持されるリポジトリごとの情報と、編集を 1 ステップで取り消す機能です。
次のいずれかの方法で実行します。
-
VS Code 拡張機能 — VS Code Marketplace
- VS Code Marketplace から Benzi をインストールします。
- 左側のアクティビティバーにある Benzi アイコン(下図の丸で囲んだ部分)をクリックして、Benzi: Settings パネルを開きます。
- モデルを選び、API キーを貼り付けます。Anthropic のキー、または Anthropic 以外のキー(DeepSeek、Groq、Kimi など)を使用できます。
- メールアドレスを入力して Send を押し、メールで届く 1 回限りのコードを入力します。
- Save model & keys を押してから、Run Benzi を押します。
-
ヘッドレス CLI — PyPI
VS Code 拡張機能と同じ手順をターミナルから実行します。インストールし、ログインして、モデルとキーを設定してから実行します。
pip install benziWindows、macOS、Linux 上の Python 3.11~3.14 に対応しています。
benzi-login、benzi-headless、benzi-mcpコマンドがインストールされます。1. ログインする — 入力用の 1 回限りのコードがメールで届きます。
benzi-login --login [email protected]2. モデルとキーを設定する
benzi-login --model deepseek benzi-login --nonanthropic-key YOUR_KEY # Claude モデルの場合は benzi-login --anthropic-key YOUR_KEY3. リポジトリで実行する — スクリプトや CI のために、ターミナルから実行します。
benzi-headless . "fix the failing test in parser.py"
-
MCP サーバーとしての Benzi コンパイラー — コンパイル済みのインデックスをツールとして提供し、普段使用しているエージェント(Claude Code、Cursor、または任意の MCP クライアント)から利用できます。これは Benzi のエージェントループを含まないマップであるため、出力品質はエージェントによって異なり、上記のエージェント機能は含まれません。
手順はヘッドレスの場合と同じです。
pip install benziを実行してから、benzi-loginでログインします。モデル呼び出しは使用中のエージェントが行うため、モデルとキーの設定は不要です。その後、benzi-headlessを実行する代わりに、エージェントにbenzi-mcpを登録します。たとえば Claude Code では、すべてのプロジェクトに対して一度だけ設定します。claude mcp add --scope user benzi -- benzi-mcpbenzi-mcpは Claude Code を起動したフォルダーを対象にするため、プロジェクトを切り替えても追加の設定は必要ありません。起動場所にかかわらず特定のリポジトリを対象にするには、そのリポジトリのパスを指定します。claude mcp add --scope user benzi -- benzi-mcp /path/to/your/repo
VS Code の設定パネルと benzi-login は同じ設定を使用します。一度ログインすれば、VS Code、ヘッドレス環境、MCP のすべてで利用できます。
### SWE-bench Verified
SWE-bench Verified の全セットを、12 の Python リポジトリにある実際の GitHub イシュー 500 件を対象に、DeepSeek V4.1-Flash で最初から最後まで実行しました。各インスタンスにつき 1 回だけ試行し、インスタンスごとの専用 Docker イメージ内で公式の swebench.harness.run_evaluation により評価しています。すべてのコンテナ内で GitHub および PyPI へのネットワークアクセスをブロックしています。500 件中 412 件を解決(82.4%)、合計 $12.96、修正 1 件あたり約 3¢ です。入力トークンの 97.6%はキャッシュから提供されました。
| 解決済み | 412 / 500(82.4%) |
| インスタンスあたりの試行回数 | 1(pass@1) |
| モデル | DeepSeek V4.1-Flash、デフォルトの努力量に設定した思考モード |
| 生成コスト合計、500 件すべて | $12.96 |
| 解決したインスタンスあたりのコスト | $0.031 |
| モデルのターン数:合計/インスタンスあたりの中央値 | 14,167 / 21.5 |
| プロンプトキャッシュから提供された入力トークン | 97.6% |
| 出力トークン合計(うち推論トークン) | 13.5M(10.7M) |
技術レポート全文:swebench-october/SWE_BENCH_REPORT.md(ウェブ版)。各インスタンスのコスト、トークン数、ターン数:varianttech.net/benchmark_swebench。以下のハーネス間の効率比較(および 24 件のバグをすべて掲載したグラフ):varianttech.net/benchmark。
仕組み
- コンパイル。 Tree-sitter で全ファイルを解析し、インポートを解決して、クラスの継承関係を構築し、すべての識別子を定義元まで追跡します。出力されるのはテキストではなくインデックスです。
- クエリ。 エージェントは、そのインデックスに対する構造化ツール(
profile、get_callers、backflow、trace_path、skim_sourceなど約 30 種類)を使ってコードを読み、計画を立てます。 - 編集とゲートチェック。 書き込みはすべて実際のパーサーでチェックされます。解析に失敗すると自動で元に戻します。変更したシンボル、その呼び出し元、それを保持する箇所、関連テストといった影響範囲を、書き込み前と書き込み後に再度チェックします。
- 実行して検証。 対象を絞った再現テストを、影響範囲チェックで選ばれたテストとともにランタイムトレーサー上で実行します。実際の値と実際のディスパッチにより変更を検証し、マップを確定します。不明確なエッジは、実際に呼び出された対象に収束します。
- インクリメンタルに再インデックス。 各ターンでディスク上の変更部分だけを再解析します。変更がユーザーによるものかエージェントによるものかは問いません。
- スナップショットから復元。 書き込み前に毎回インデックスのスナップショットを保存するため、取り消し時にはインデックスを再導出せず、そのスナップショットを再読み込みします。
- ステップ 2 に戻る。 次の質問には、常に現時点のコードに基づいて回答します。
### ツールセット
Benzi の 35 以上のツールのうち 16 個です。ツールの全リストはこちらをご覧ください。
| ツール | 回答できること |
|---|---|
get_callers | 関数に到達するすべての呼び出し箇所――変更の影響を受けるコードを確認します。 |
call_tree | 1 つの関数から広がる推移的な呼び出し関係を、順方向または逆方向にたどります。 |
trace_path | 2 つの関数をつなぐ呼び出しチェーンと、その中を受け渡されるデータを確認します。 |
external_calls | スコープがどのライブラリに依存し、どこから呼び出しているかを確認します。 |
forwardflow | 関数の戻り値がどこに行き着くか、値の一致が必要なすべての場所を確認します。 |
backflow | 呼び出し元をすべて開かずに、誤った値がどこから来たかを確認します。 |
profile | 1 回の呼び出しで、1 つのシンボルをあらゆる角度から詳しく確認します。 |
get_definition | 宣言カード――シグネチャ、ドキュメント、場所を確認します。 |
search_symbols | リポジトリ内のすべてのシンボルを、大文字と小文字を区別せず部分一致で検索します。 |
get_hierarchy | 型の解決済みの基底クラスと、直接のサブクラスを確認します。 |
skim_source | 関数本体の 1 階層の概要を表示し、読む価値のある行を把握できます。 |
execute_from | 呼び出しトレーサーの下でファイルを実行し、実際に起きたことを記録します。 |
check_last_execution | 最後に記録された実行の事実を読み返します。再実行は不要です。 |
execute_generated_testcase | 自己完結型の再現ケースを作成して実行し、自身の変更をデバッグします。 |
rollback_edit | 再編集ではなく、スナップショットの再読み込みによって最後の書き込みを元に戻します。 |
upgrade_to_pro | タスクの途中で、より大きな推論予算へ自ら引き上げます。 |
機能
- 6 つの状態で、決して推測しません — すべての呼び出し箇所とファイルには、次のいずれかの状態が付与されます。resolved(リポジトリ内で立証されたエッジ)、external(インポートの根拠を伴うライブラリへの呼び出し)、candidate(曖昧な状態――可能性のある対象を限定してすべて保持)、unresolved(検出されたものの確定しておらず、理由を伴う状態)、observed(実際の実行で確認された状態)、unindexed(解析されておらず、その理由を伴う状態)です。全体を通じたルールは 1 つです。静的解析で確定できないものは推測せず未確定として示し、プログラムの実行によって確定します。
- ランタイムトレーサー — 実行中のすべての呼び出しをフックし、観測結果を静的マップに重ね合わせます。
- クリックできる推論 — ツールを動かすものと同じマップが、チャットの横に表示されるライブ呼び出しグラフも動かします。エージェントが関数名を挙げると、そのノードが点灯します。
- 永続メモリ — リポジトリごとの永続的な事実は再起動後も保持されます。一度学習した規約を、セッションのたびに再導出する必要はありません。
- デュアルエンジン:コード+マークアップ — HTML/CSS/DOM-JS 用の独立したインデックスを備え、カスケード解決とセレクターの詳細度に対応します。Python 文字列内に埋め込まれたフロントエンドも対象です。
- モデルに依存しません — Anthropic、OpenAI、または互換性のある任意の API に対応します。問題の規模が実行中のモデルの能力を超えた場合、タスクの途中でより大きなモデルへ自ら切り替えられます。
### インデックスが実際に変えること
同じ24件のバグを、それぞれ1回ずつ、4つのハーネス/モデルの組み合わせで実行します。読み取った行数は、ファイル読み取り呼び出しから返された内容だけを数えます。grepやシェルの出力は検索であり、読み取りではないため、どのハーネスでも同じ意味を持つ唯一の数値です。
詳細、バグごとの内訳、手法の全容については、varianttech.net/benchmarkをご覧ください。
| ハーネス · モデル | 読み取った行数 | Benziとの比較 |
|---|---|---|
| Benzi · Sonnet | 9,125 | — |
| Benzi · DeepSeek | 16,407 | 1.8× |
| Claude Code · Sonnet | 20,704 | 2.3× |
| DeepSeek Harness · DeepSeek | 43,598 | 4.8× |
どのハーネスも、バグが難しくなるほど、より多くのソースコードを開きます。違いは、その増加率です。Benziは、読み取る代わりにマップからバグの解決に必要な情報の大半を得るため、増加が緩やかです。
Benziはすべてのバグでソースコードの読み取りが最も少なく、バグが難しくなるほど差が広がります。ファイルを開く前に、インデックスから修正に必要な情報の大半を得られるためです。
実時間は4つのハーネスすべてでほぼ同じです。読み取りが少なくてもBenziの思考が遅くなるわけではなく、確認にかかるコストが抑えられるだけです。
BenziをDeepSeekで使う場合、バグ1件あたりのコストは約1セントです。一方、Claude Codeはバグが難しくなるにつれて、1ステップあたり0.18ドルまで上昇します。およそ18倍です。
よくある質問と比較
コードがマシンの外に送信されますか? いいえ。VS Code、CLI、MCP のいずれでも、コンパイラーとインデックスはローカルで実行されます。アップロードされることも、コピーが保存されることもありません。エージェントが実際に読み取るスニペットだけが、ほかの AI アシスタントと同じようにモデルプロバイダーに送られます。ただし、送られる量はより少なく、同じ 24 件のバグで読み取るコードは 9,125 行です。Claude Code は 20,704 行です。ブラウザデモは異なり、サーバー側で 公開 リポジトリを取得しますが、読み取り専用で、セッション終了後に削除されます。
本当に無料ですか? はい。Benzi は料金を請求しません。CLI と MCP は BYOK 方式なので、ご自身のモデルプロバイダーに料金を支払います。まだ初期段階で開発中です。課金の壁がない代わりに、その点をご理解ください。
ローカルモデルで実行できますか? 原理的には可能です。Benzi は標準 API を通じてモデルと通信するため、ローカルモデル(Ollama、LM Studio など)を接続できます。ただし、まだサポートされていません。現在、Benzi はご自身のキーを使ってホスト型プロバイダーで実行されます。
プライベートリポジトリを指定できますか? ウェブデモではできません(公開 GitHub API のみ)。それ以外では可能です。指定したパスでコンパイラーがローカル実行されます。
どのくらい大きなリポジトリを扱えますか? ブラウザデモでは、ファイル数は 2,000 件、各ファイルのサイズは 2 MB が上限です。
Cursor、Copilot、Claude Code とは何が違いますか? これらは検索(grep または埋め込み)を行います。Benzi はまず解決します。シンボル、呼び出し、継承、データフローの実際のインデックスを作成し、推測ではなくそのインデックスに問い合わせます。同じ 24 件のバグで、Claude Code と比べて読み取るソースコードは 2.3 倍少なくなります。詳しくは、インデックスが実際に変えることをご覧ください。
LSP ベースの MCP サーバーとは何が違いますか? LSP が答えるのは、カーソル位置にある開いたファイル内の情報です。定義への移動や参照の検索などを、1 つの位置から一段階ずつ行います。Benzi はリポジトリ全体をあらかじめコンパイルして 1 つのインデックスにするため、コードベース全体について質問できます。たとえば、推移的な呼び出しツリー、2 つの関数間の経路、データフロー(不正な値がどこから来たのか、戻り値がどこに渡されるのか)などです。すべての回答には、信頼度の段階も付与されます。解決済み、候補、未解決(理由付き)、または観測済みです。LSP は回答を返すか、何も返しません。さらに、ランタイムトレーサーが実際に発生する処理を監視し、静的解析ではわからないことを確定します。また、コンパイラー自体は言語に依存しません。10 言語を 1 つのパイプラインで処理し、1 つのインデックス形式にまとめます。LSP の構成では言語ごとに個別のサーバーが必要で、それぞれをインストール、設定し、実行し続ける必要があります。
CodeQL や Sourcegraph の SCIP インデクサーとは何が違いますか? これらは、ビルドと一括処理でのインデックス作成が正常に行われることを前提とします。つまり、依存関係のインストール、プロジェクトのコンパイル、数分単位の CI ジョブが必要です。Benzi はビルド不要で、作業途中のコードでも動作し、変更された部分だけを各ターンで再解析します。これにより、書き込みを段階ごとに制御できます。再ビルド後ではなく、次のステップに進む前に、最新のインデックスに対して各編集をチェックします。言語ごとに 1 つのインデクサーを用意するのではなく、1 つのパイプラインで 10 言語すべてに対応します。精度が下がる場合、Benzi は推測せず、呼び出し箇所に「候補」または「未解決」のフラグを付けます。
CodeGraph とは何が違いますか? どちらも検索ではなくインデックスを作成しますが、CodeGraph は取得を行い、問い合わせたデータベースから候補をランキングします。Benzi は解決を行い、回答する前に名前の束縛先を確定します。また、呼び出し箇所が曖昧な場合は推測せず、回答を控えます。さらに、単純なシンボルグラフではなく、エンジニアが読むのと同じように、コードをファイル → スコープ → 呼び出しフロー → データ/制御フローとしてモデル化します。
CodeGraph 独自のベンチマーク(CodeGraph のリポジトリ、質問、方法論)では、新しいアカウントから Gemini、ChatGPT、Claude、DeepSeek がそれぞれ回答を評価し、4 つすべてが Benzi を 1 位に評価しました。結果の全容は、varianttech.net/benchmark_codegraphをご覧ください。
Variant Technologies 提供 · varianttech.net
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。



