Weavatrix Git について
Weavatrix Gitは、AIコーディングエージェント向けの読み取り専用Git証拠エンジンで、Rustライブラリ、CLI、MCPサーバーとして利用できます。Gitを起動せず、リポジトリの保存データをプロセス内で解析し、範囲を制限した正確な情報を返します。
主な機能
- 01履歴、参照、状態、差分の読み取り
- 02不変なリビジョンスナップショットと作業ツリー安全性
- 03SHA-1とSHA-256リポジトリ対応
- 04オブジェクトと履歴の読み取り制限
- 05非UTF-8パスの正確なバイト列を保持
活用シーン
- 01Gitを起動せずにコミット履歴を確認
- 02追跡対象の変更と作業ツリー状態を確認
- 03リビジョンの不変なファイルマニフェストを取得
MCP 対応
MCPサーバーは、Gitの識別情報、履歴、差分、状態、スナップショット、作業ツリー安全性を調べる読み取り専用ツールを公開します。リスト応答はページ分割に対応し、切り詰めの有無を示します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Weavatrix Git
Weavatrix エコシステムの一部です。AI ソフトウェアエージェント向けに、範囲を限定した Git の証拠を提供します。
weavatrix-git は、AI コーディングエージェントに高速で範囲を限定した読み取り専用の Git の証拠を提供します。
Rust クレート、CLI、MCP サーバー、npm パッケージは、いずれも同じ仕様です。
リポジトリのストレージを直接解析します。git サブプロセス、C ライブラリ、フック、フィルター、ネットワークアクセス、チェックアウト、変更はありません。いずれのインターフェースにも書き込み API はありません。
チェックイン済みの完全一致ベンチマークでは、ウォーム状態の履歴エントリー 1,000 件の処理時間は、Weavatrix が0.355 ms、gix が0.884 ms、libgit2 が1.552 msでした。8 つのリポジトリを対象に、測定した 5 つの p50 指標すべてで Weavatrix が最速でした。これらはリリースビルドでのエンジン測定値です。この結果に MCP トランスポートの処理時間は意図的に含めていません。
MCP サーバーを実行する
Rust ツールチェーンは必要ありません。
npx -y [email protected] --repository /absolute/path/to/repository
汎用 stdio クライアントの設定:
{
"mcpServers": {
"weavatrix-git": {
"command": "npx",
"args": [
"-y",
"[email protected]",
"--repository",
"/absolute/path/to/repository"
]
}
}
}
npm パッケージには、Windows x64、Linux x64 および ARM64、macOS x64 および ARM64 向けの検証済みネイティブバイナリが含まれています。Node は対応するバイナリを選択して起動するだけです。リポジトリの解析と MCP の処理は、安全な Rust のまま実行されます。
エージェント向けツール
| MCP ツール | 返される証拠 |
|---|---|
git_head | リポジトリの識別情報、ハッシュの種類、シンボリック HEAD、正確なターゲット ID、パック数 |
git_history | ページ分割されたコミット ID、ツリー、親、署名、タイムスタンプ、概要 |
git_diff | ページ分割された追加/削除/変更/種類変更のパスと、旧/新オブジェクト ID |
git_status | 追跡対象のインデックスとワークツリーの状態。未追跡ファイルは Repository::worktree_safety() で確認できます |
git_snapshot | リビジョンの正規化された不変のパス、モード、種類、オブジェクト ID のマニフェスト |
git_worktree_safety | Clean / IgnoredOnly / HasUntracked / DirtyTracked / Unknown。未追跡および無視対象の件数 |
すべてのリストツールは、nextCursor、正確なオブジェクト ID、truncated フラグを返します。
UTF-8 以外のパスは正確なバイト列を pathHex に保持します。表示用テキストを、正確な証拠であるかのように黙って提示することはありません。
実行時の制限
MCP バイナリは、制御された Tokio を使わないランタイムである mcport を使用します。
- リクエストの上限は 256 KiB、レスポンスの上限は 1 MiB
- 同時に処理できるハンドラーは 4 件。リクエストキューと出力キューには上限があります
- ハンドラーの期限は 30 秒。協調的キャンセルのチェックに対応
- パニックの分離と、レスポンスサイズ超過時のアトミックなエラー処理
- Git オブジェクト、履歴、ツリー、ビットマップ、reflog、インデックスの読み取りに上限を設定
- 進捗通知は任意。レスポンスのバッチ処理は設定可能
デフォルト値は、対話的な stdio 利用に適しています。--help で、バイト予算、同時実行数、キュー、期限、バッチサイズを変更するオプションを確認できます。サーバーは改行区切りの UTF-8 JSON-RPC のみを stdout に書き込み、診断情報は stderr に出力します。
Cargo によるネイティブインストールも利用できます。
cargo install weavatrix-git --version 0.3.3 --features mcp \
--bin weavatrix-git-mcp
weavatrix-git-mcp --repository /absolute/path/to/repository
なぜ独立したクレートなのか?
スキャナーはファイルを検出し、コードグラフは関係性をモデル化します。このクレートはバージョン管理の証拠を担います。この境界を独立させることで、より大きな製品を取り込まずに、あらゆる Rust アプリケーションで Git の情報を再利用できます。
サポート対象の仕様
| 領域 | サポート内容 |
|---|---|
| レイアウト | worktree、bare、.git の間接参照、リンクされた worktree の commondir |
| ハッシュ | SHA-1 および SHA-256 のオブジェクト ID |
| 参照 | loose、シンボリック、detached HEAD、packed refs、reflogs |
| オブジェクト | commit、tree、blob、注釈付き tag |
| loose ストレージ | このクレートがデコードする、サイズ制限付きの zlib/DEFLATE |
| packed ストレージ | PACK v2/v3、index v2、OFS_DELTA、REF_DELTA |
| オブジェクト検索 | alternates、classic MIDX、キャッシュ、共有ゼロコピー・スナップショット |
| commit の高速化 | モノリシックおよび分割 commit-graph チェーン |
| パスの高速化 | 変更パス Bloom フィルター v1/v2 |
| 到達可能性 | RIDX の順序付けを使用する pack および MIDX EWAH ビットマップ |
| index | DIRC v2/v3/v4、自動更新される共有スナップショット |
| クエリ | 型付き読み取り、遅延 revwalk、履歴、追跡対象のステータス、worktree の安全性、tree の差分 |
| 不変ビュー | パス、モード、オブジェクトの証拠を含む、正規化された commit スナップショット |
| スケールアウト | 並列オープン、リビジョン対応タイムライン、変更セット、相関 |
| 拡張 | 順序付き、スレッドセーフ、読み取り専用のカスタム ODB バックエンド |
すべての公開読み取りはインプロセスで行われます。ライブラリコードにはサブプロセスへのフォールバックはありません。 サポート対象外のデータには、近似値ではなく型付きエラーを返します。
Rust ライブラリ
use weavatrix_git::{PathBloom, Repository};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let repository = Repository::open(".")?;
let head = repository.resolve("HEAD")?;
for id in repository.revwalk().push_head()?.take(100) {
println!("{}", id?);
}
if repository.commit_maybe_changed_path(head, b"src/lib.rs")?
== Some(PathBloom::DefinitelyNot)
{
println!("the commit definitely did not change src/lib.rs");
}
if let Some(objects) = repository.bitmap_reachable(head)? {
println!("{} reachable objects", objects.len());
}
Ok(())
}
カスタムストアにも、同じオブジェクト仕様を使用します。
use std::sync::Arc;
use weavatrix_git::{Limits, MemoryObjectBackend, Repository};
let backend = Arc::new(MemoryObjectBackend::default());
let repository =
Repository::open_with_backends(".", Limits::default(), vec![backend])?;
# Ok::<_, weavatrix_git::GitError>(repository)
複数リポジトリの分析では、RepositorySet がオブジェクトストアを分離し、決定論的な逐次または並列の結果を返します。
use weavatrix_git::{HistoryOptions, RepositorySet};
let repositories = RepositorySet::open_parallel([
("service", "/code/service"),
("client", "/code/client"),
])?;
let histories =
repositories.histories_from_parallel("HEAD", HistoryOptions::default())?;
let snapshots = repositories.snapshots_parallel("HEAD")?;
let timeline = repositories.timeline("HEAD", HistoryOptions::default())?;
let shared = repositories.shared_commits(HistoryOptions::default())?;
# Ok::<_, weavatrix_git::GitError>((histories, snapshots, timeline, shared))
診断用 CLI はライブラリを使用します。
weavatrix-git [-C repository] head
weavatrix-git [-C repository] log [revision] [max-count]
weavatrix-git [-C repository] cat <object>
weavatrix-git [-C repository] diff <old-commit> <new-commit>
アーキテクチャ
Repository
+-- refs + reflog
+-- commit-graph chain + changed-path Bloom
+-- index -> tracked status
+-- custom ODB backends
+-- object directories + alternates
+-- loose object -> bounded zlib
+-- MIDX -> pack -> bounded delta chain
+-- pack/MIDX bitmap -> reachable object IDs
Limits は、オブジェクトのバイト数、キャッシュのバイト数、delta/ref/tree の深さ、tree および index のエントリー数、reflog/履歴の長さ、親の数、ビットマップの展開を制限します。このクレートでは unsafe Rust を禁止しています。ライブラリのデフォルト機能セットは引き続き依存関係がなく、別個の mcp 機能を有効にした場合にのみ mcport が追加されます。
ソースツリーは、明確なモジュール境界に従っています。
| レイヤー | 役割 |
|---|---|
model | オブジェクト ID、型付き Git オブジェクト、エラー、検証仕様 |
storage | loose/pack/MIDX/commit-graph のデコード、サイズ制限付き inflate、キャッシュ |
repository | refs、履歴、差分、ステータス、スナップショット、tree、revwalk |
workspace | 決定論的な複数リポジトリのクエリと相関 |
mcp | ライブラリを介したオプションの読み取り専用プロトコルアダプター |
facade / CLI | 安定した Rust エクスポートと診断コマンドのエントリーポイント |
チェックイン済みの厳格なアーキテクチャ契約では、物理行数が 300 行を超えるファイル、物理行数が 100 行を超える関数、実行時の循環依存、foo.rs と foo/ のモジュール所有権の混在、プロトコル非依存ライブラリからオプションの MCP アダプターへの依存を拒否します。ベースラインも例外もありません。
正確性
テストスイートは実際の Git リポジトリを作成し、次の項目を検証します。
- loose および積極的に pack された OFS/REF delta オブジェクト
- SHA-1 および SHA-256 のリポジトリ
- bare およびリンクされた worktree のレイアウト
- classic MIDX の検索
- 複数レイヤーの分割 commit-graph と変更パス Bloom の結果
- pack および MIDX のビットマップによる到達可能性と
git rev-list --objectsの結果との照合 - index v2 と v4、reflog の順序、revwalk の hide/reset、追跡対象のステータス
- 決定論的な並列結果と複数リポジトリの結果
- 不変のリビジョンスナップショット、統合タイムライン、一括変更セット
- 悪意のある形式と設定済み制限によるエラー
現在のコアの行カバレッジは 85.27% です。CI は Linux、Windows、macOS で Rust 1.88 を実行し、警告をエラーとして扱う Clippy、カバレッジ、監査、ドキュメント、パッケージ検証を行います。
パフォーマンス
2026-07-27 の Windows でのリリース計測値です。すべての行で結果を生成し、計測前に識別子、パス、オブジェクトのバイト列、またはステータスが完全に一致することを検証しています。
| 完全一致を検証した操作 | weavatrix-git p50 | git.exe p50 |
|---|---|---|
| 6,000 オブジェクトのビットマップ到達可能性 | 0.431 ms | 72.656 ms |
| 1 エントリーのインデックス読み取り | 0.033 ms | 60.758 ms |
| 変更のない追跡対象のステータス | 0.186 ms | 72.735 ms |
| キャッシュ済みコミットの検索 | 0.001 ms | 65.267 ms |
| リポジトリを再利用した 1,000 コミットの履歴 | 0.086 ms | 66.961 ms |
同じパック済み 2,000 コミットのフィクスチャでのプロセス内直接比較:
| 完全一致を検証した操作 | Weavatrix p50 | gix 0.86 p50 | git2 0.21 p50 |
|---|---|---|---|
| 1,000 コミットの履歴、ウォーム状態 | 0.355 ms | 0.884 ms | 1.552 ms |
| 1,000 コミットの履歴、再オープン | 2.521 ms | 3.940 ms | 10.483 ms |
| キャッシュ済みオブジェクト 1,000 件の読み取り | 0.082 ms | 0.068 ms | 5.640 ms |
| 履歴と生オブジェクト 1,000 件 | 0.494 ms | 0.992 ms | 1.375 ms |
別の 10,000 パスのインデックスでは、ウォーム状態での読み取りはそれぞれ 1.160/1.100/1.489 ms、再オープン時は 5.225/7.745/11.251 ms でした。ベンチマークではエンジンの実行順序を入れ替え、計測前に履歴 ID、生オブジェクトのバイト列、正規化されたインデックスパスが完全に一致することを検証しています。BENCHMARKS.md を参照してください。
8 つの独立したリポジトリで、選択された 8,000 件のコミットを対象にした場合、Weavatrix の計測値は、履歴のシリアル処理が 5.667 ms、並列処理が 4.080 ms、再オープンが 11.810 ms、共有コミットの関連付けが 4.148 ms、不変マニフェストが 1.736 ms でした。gix と libgit2 に対する 5 つすべての p50 契約で優位でした。事前に、リポジトリごとの履歴順序、共有ロケーション、パス、オブジェクト ID が完全に一致することを検証しています。
代替手段との位置付け
| 機能 | weavatrix-git | Git CLI | gix | libgit2 |
|---|---|---|---|---|
| プロセス内で動作 | はい | いいえ | はい | はい |
| 安全な純 Rust 実装 | はい | いいえ | はい | いいえ、C コア |
| クレートの依存関係 | なし | 該当なし | 多数のモジュラークレート | ネイティブライブラリ |
| オブジェクト/デルタキャッシュ | はい | はい | はい | はい |
| MIDX と到達可能性ビットマップの読み取り | はい | はい | はい | はい |
| 分割コミットグラフとパス Bloom の読み取り | はい | はい | はい | コミットグラフ |
| カスタム読み取り専用 ODB | はい | 該当なし | ストア抽象化 | はい |
| 遅延 revwalk、reflog、インデックス、追跡対象のステータス | はい | はい | はい | はい |
| リポジトリ横断の証拠クエリを標準機能として提供 | はい | アプリケーションコード | アプリケーションコード | アプリケーションコード |
| 正規化された不変コミットマニフェスト | はい | アプリケーションコード | トラバーサル API | ツリーウォーク API |
| ネットワークと変更操作 | いいえ | はい | はい | はい |
意図的に対象外としている機能は、パックインデックス v1、reftable、増分 MIDX チェーン、分割/スパースインデックス拡張、浅いクローンと置換オブジェクトのセマンティクス、リビジョン式の文法、未追跡ファイル/無視ルール/フィルターを考慮したステータス、サブモジュールのワークツリーステータス、ネットワーク操作、変更操作です。
完全なクライアントが必要な場合は、Git、gix、または libgit2 を使用してください。対象範囲を限定したローカルの証拠、小さな監査対象、決定論的な読み取り、依存関係ゼロが重要な場合は、このクレートを使用してください。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。