arbor について
arborはコードの意味的な依存グラフを構築し、開発者やコーディングエージェント向けに影響範囲、呼び出し経路、API利用状況を調べます。CIでのリスク判定や、Pythonの旧式AIモデル利用チェックにも対応します。
主な機能
- 01コード要素と依存関係の意味的グラフ
- 02呼び出し元・先と経路の探索
- 03確信度とリスクを伴う変更影響分析
- 04影響範囲に基づくCIゲート
- 05PythonのAIモデル利用・終了チェック
活用シーン
- 01関数変更前に呼び出し元を確認
- 02プルリクエストの変更リスクを評価
- 03旧式AIモデルを使うPython呼び出しを特定
MCP 対応
READMEでは、`find_api_usages`を含むMCPツールからグラフ検索を利用できると説明されています。MCPトランスポートとAppsにも触れています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
人とエージェントのためのコードコンテキスト。
関数の呼び出し元を見つけ、コード内の経路をたどります。
コードを壊す前に、何が壊れるかを把握できます。
シミュレーションによる再生 — arbor のコマンドと出力は実際のものです(tokio、178k LOC)。手法:BENCHMARKS.md
v3.1.0 · 廃止予定のAIモデルを呼び出すコードを検出:
arbor retirementsは、Pythonプロジェクト内で廃止済みまたは廃止予定のモデルを使用するOpenAI、Anthropic、Google SDKへの直接呼び出しを一覧表示し、推奨される置き換えと必要な変更を示します。ローカルでもGitHub Actionとしても実行できます。arbor usagesとMCPツールfind_api_usagesは、ルーティング先とモデルを含め、そのようなSDK呼び出しをすべて一覧表示します。リリースノート
Arborを使う理由
ほとんどのAIコーディングツールは、コードをテキストとして扱います。Arborはセマンティックな依存関係グラフを構築します。関数、クラス、モジュールをノードとして、呼び出し、インポート、継承をエッジとして表現し、実行を考慮した質問に対して決定論的かつ正確に回答します。
| 質問 | Arborの回答 |
|---|---|
| このシンボルを変更すると、何が壊れますか? | 深さ、信頼度、リスクレベルを示す影響範囲 |
| これを直接または間接的に呼び出すのは何ですか? | 呼び出しグラフ上の呼び出し元/呼び出し先をたどります |
| AとBの間の最短経路は何ですか? | 実際の依存関係を通るA*経路 |
| このPRはマージするにはリスクが高すぎますか? | 影響範囲のしきい値に基づくCIゲート |
キーワードによる推測はありません。埋め込みによる幻覚もありません。あらゆるインターフェースで、ひとつのグラフを使えます。
グラフが確信を持てない場合は、そのことを明示します。エッジには信頼度が付与され、曖昧な解決結果は隠されずにラベル付けされます。自信たっぷりの誤答より、正直に不明と伝えるほうが優れています。
v3.1.0の新機能
機能リリースです。AIモデルAPIを呼び出すPythonコード向けのコマンドが2つ追加されました。どちらもアカウント、APIキー、テレメトリーなしでローカル実行できます。
| 新機能 | 内容 |
|---|---|
arbor retirements | プロバイダーが廃止した、または廃止を予定しているモデルを使用する、openai、anthropic、Google SDK の直接呼び出しを一覧表示します。廃止日、プロバイダーが提示する移行先、それに伴い変更される引数、およびリポジトリ内で優先される選択肢も確認できます。OpenAI は 2027 年 1 月 14 日に gpt-4o、gpt-4o-mini、gpt-4.1、gpt-4.1-mini の提供を終了します。詳しくはこちら |
GitHub Action mode: retirements | CI で同じチェックを実行します。影響を受ける呼び出しをすべて一覧表示するジョブサマリーと、特に緊急性の高い行への警告を出力します。デフォルトでは警告を出し、retirements-fail-on を設定した場合、またはチェックを実行できない場合にのみビルドを失敗させます。 |
arbor usages と find_api_usages | 人とエージェント向けに、OpenAI、Anthropic、Gemini SDK の呼び出しをすべて、ファイル名と行番号、クライアントのルーティング(直接、Azure、カスタム base_url、Bedrock、Vertex)、モデル ID とともに一覧表示します。値が確定扱いになるのは、サポート対象の小さな文法に合致する場合のみです。それ以外には型付きの不足情報が付与されます。レポートで確認できる内容 |
現時点では Python のみが対象です。グラフの抽出方法に変更はありません(保存済みのグラフは、これまでのアップグレード後と同様、初回使用時に一度再構築されます)。前回のリリースについては3.0.5 リリースノートをご覧ください。
v3.0.3(パスやマクロ内の Rust 呼び出し、シンボル単位の差分、--base)
修正リリースです。以下はすべて機能不足ではなく誤った結果を返していた問題であり、それぞれに回帰テストを追加しています。
| 修正 | 問題点 |
|---|---|
| Rust の呼び出しを解決 | crate::jobs::enqueue()、Type::new()、self.helper()、および assert!/format! 内の呼び出しでエッジが生成されず、頻繁に使用される Rust 関数でも呼び出し元がないと報告されていました。パスをモジュールツリーをたどって解決するようになり、マクロの引数もコードとして読み取るようになりました。 |
シンボル単位の arbor diff | 変更されたファイル内のすべてのシンボルが変更扱いになっていたため、利用の多いファイルに関数を追加すると、そのファイル全体の影響範囲が報告されていました。新しいシンボルには影響範囲が付かず、変更されたシンボルのみが対象になりました。変更箇所を呼び出すテストは、影響範囲として数えず、実行すべきテストとして一覧表示します。 |
--base と --staged | ARBOR_DIFF_BASE を設定しない限り、arbor diff、check、summary では未コミットの変更しか確認できませんでした。--base origin/main はマージベースと比較します。これはプルリクエストで表示される内容と同じです。--staged はステージ済みの変更のみをチェックします。 |
| 言語ごとに分離 | TypeScript の enqueue が Rust の enqueue の呼び出し元として報告されることがありました。解決は同じ言語ファミリー内に限定され、callers/callees では同名の定義も個別に一覧表示されます。 |
| 古いグラフを使わない | ブランチを切り替えた後、新しいファイルが残っていない場合に、古いブランチのグラフから結果が返されていました。グラフに構築元のコミットを記録し、HEAD が移動したときに更新するようになりました。 |
| 継承エッジ | class Middle(Base) でエッジが生成されず、基底クラスを変更しても影響範囲がゼロと表示されていました。extends/implements エッジが生成され、継承されたメソッドにも到達できるようになりました。 |
| 呼び出しサイクルをまとめて順位付け | 関数が閉じたループを形成していると、あらゆる中心性ランキングの上位が埋まっていました。PageRank の前にサイクルを集約するようになりました。 |
| HTTP ブリッジの強化 | arbor bridge --http がクロスオリジンや DNS リバインディングによるリクエストを受け付けていました。Origin/Host を検証し、JSON ボディを必須にするようになりました。 |
| ブリッジの動作を抑制 | ブリッジが、無視対象のビルドディレクトリをビジーループで再インデックスしていました。 |
新機能として、arbor receipt も追加されました。コーディングエージェントの各ターン後に、何が変更されたか、依頼していないのに何に触れたかを平易な英語で説明します。arbor receipt undo を使うと、ターンの変更を元に戻せます。
3.0.0 のキャッシュ済みグラフは、初回使用時に自動で再構築されます。
v3.0.0 — 正しいノード(シンボルの解決時にインポート元のファイルを参照)
修正は 1 つ、効果は測定可能です。
シンボルの解決では、インポート元のファイルを参照します。 裸の名前が複数のモジュールの定義に一致した場合、resolve_ref は SameDir にフォールスルーし、呼び出し元と同じディレクトリにある定義にエッジを付けていました。エッジが欠落していたのではなく、確信度 0.55 で誤った宛先に割り当てられていたのです。
GraphBuilder はすでにファイルごとのインポートマップを保持していましたが、それを読み取るのは apply_import_validation だけで、これはエッジが選ばれた後にスコアを付ける処理です。誤ったノードに向かう参照は見ていません。同一ファイルのチェックと同一ディレクトリのチェックの間でこのマップを参照することで、ローカル定義がインポートより優先される一方、明示されたインポートが単なる近接性より優先されます。Resolution::ViaImport のスコアは 0.93 で、SameDir の 0.55 を上回ります。
実測値
10 層にまたがる 260 個のモジュールで構成されたフィクスチャです。各層で同じ 26 個の関数名が定義されています。正解データは生成器自身のエッジリストから導出されるため、期待される答えは推定値ではなく正確な値です。
| 真の下流数 | v2.6.0 | v3.0.0 |
|---|---|---|
| 179 | 0 | 163 |
| 178 | 0 | 161 |
| 161 | 0 | 133 |
| 143 | 22 | 133 |
| 122 | 22 | 119 |
| 36 | 22 | 61 |
| 16 | 22 | 46 |
これまでは、実際の値にかかわらず約 22 で横ばいでした。今では実態を反映しています。最大のハブのリスクは LOW から CRITICAL に上がります。
エッジの総数はほとんど変わりません(1335 → 1334)。これは欠落ではなく誤った割り当てが起きていたことを示しています。エッジは常に存在していましたが、誤ったノードを指していたのです。
破壊的変更
ResolutionにViaImportバリアントが追加されます。そのため、網羅的な match はコンパイルできなくなります。- エッジの接続先が変わるため、2.6.0 のキャッシュ済みグラフ、保存済みノード ID、中心性のベースラインは異なる結果になります。
PageRank の前に呼び出しサイクルを集約します。各強連結成分は一度だけ順位付けされ、そのスコアがメンバー間で共有されるため、閉じたリングがランキング上位を占めることはなく、外部への呼び出しを持つサイクルのメンバーはまとまった状態になります。CentralityScores が報告する値は、引き続き v2.6.0 のパーセンタイルである i / (n - 1) です。
既知の問題と未解決の問題
発見されるまで放置せず、明記しています。
- 小規模な対象は、以前より過大に報告されます(36 → 61、16 → 46)。見落とすより安全な方向ですが、まだ正確ではありません。
- 動的インポートおよびリフレクティブなインポート(
importlib、__import__、import()、eval(require(...)))は、仕組み上解決できません。フィクスチャでは欠陥として数えず、想定される見落としとして記録しています。
v2.6.0 — Ground Truth(衝突するシンボルの保持、決定論的な解決、エッジの確信度、パーセンタイル中心性)
速度ではなく正確さを重視します。これらはすべて、以前は気付かれないまま誤っていました。
| 修正 | 重要な理由 |
|---|---|
| 衝突するシンボルを保持 | SymbolTable は HashMap::insert を使用していたため、2つ目の handler、new、または process が最初のものを置き換えていました。置き換えられたシンボルには呼び出し元がなく、影響範囲の分析から見えなくなっていました。 |
| 解決結果が決定論的 | 同じディレクトリ内を優先するかどうかを HashMap のイテレーションで決めていました。Rust はプロセスごとに RandomState をシードするため、同じバイナリに同じ入力を与えても、実行ごとに異なるエッジが構築される可能性がありました。現在は、独立した8つのプロセス間で結果が一致することを検証しています。 |
| エッジに信頼度を付与 | 同一ファイル内で確認できた呼び出しと、同一ディレクトリ内にあるという推測が、同じ証拠として扱われていました。各エッジに、解決方法に応じた [0,1] のスコアを付けるようになりました。 |
| エクスポートされた TS シンボルを一度だけインデックス化 | export_statement が子要素を再帰処理した後、汎用ループでも再び再帰処理していました。その結果、エクスポートされた各シンボルが、同じノード ID を共有する2つの頂点になっていました。149ファイルのアプリで133個の偽ノードが発生し、グラフの25%を占めていました。 |
| 型指定のないレシーバーへのメソッド呼び出しを解決 | obj.method() は完全に除外されており、TS/JS のグラフはほぼエッジのない状態でした。空のグラフでは影響範囲がゼロと報告され、「不明」ではなく「安全」と受け取られてしまいます。 |
| 中心性をパーセンタイル順位に変更 | スコアをグラフの最大値で割っていたため、最上位ノードは定義上 1.0 となり、0.6 というしきい値もリポジトリ間で一貫した意味を持ちませんでした。ハブを1つ追加するだけで、ほかのすべてのノードのスコアが変わっていました。 |
| 解決処理を O(1) に変更。O(refs × nodes × files) ではありません | 解決できない参照(標準ライブラリやサードパーティーへの呼び出しなど、実際のコードでは大半の呼び出し箇所)は、最悪のケースに陥っていました。現在はサフィックスをインデックス化しています。 |
新機能 — 概念検索。 部分文字列の一致では、login から get_authenticated を見つけられません。共通する部分文字列がないためです。識別子をトークン化し、厳選された概念クラスタを使って展開するようになりました。また、名前に加えて、ドキュメント文字列、シグネチャ、パスもインデックス化しています。決定論的で、オフラインで動作し、モデルを使いません。ライブラリでは ArborGraph::search_ranked として利用できます(arbor query は現時点ではリテラル部分文字列検索のままです)。
新機能 — ハンク単位の影響分析。 changed_node_ids_for_ranges は、変更のあったファイル内のすべてのシンボルではなく、実際に行が変更されたシンボルのみを対象にします。
重複抽出の修正後、同一のノードセットで計測した結果:
| コードベース | 修正前 | 修正後 |
|---|---|---|
| TypeScript(149ファイル) | 172エッジ | 196(+14%) |
| Rust(arbor-graph) | 116エッジ | 167(+44%) |
以前のバージョンのグラフキャッシュは無効になります。中心性の意味が変わったため、古いキャッシュを読み込むと誤った結果になります。
v2.5.0 — 最後の言い訳(PageRank 23倍高速化、並列インデックス化、中心性のウォームスタート)
| 変更 | 計測結果 |
|---|---|
| PageRank の書き換え — イテレーションごとの走査を、フラットなコールグラフの隣接リストに置き換え | 10kノードのグラフで149.8ms → 6.6ms(23倍)。旧実装との並列比較で検証済み |
| 並列インデックス化 — すべてのコアで並行してパースし、決定論的に組み立て | Arbor:253ms → 95ms · tokio(178k LOC):2.7s → 1.6s |
| 中心性のウォームスタート — ウォッチャーが前回のスコアを使ってシードを再計算 | 1ファイルのパッチ適用後、20回のイテレーションをすべて実行せず、約2ラウンドで収束 |
| 収束時の早期終了 | 最大デルタが1e-9に達するとイテレーションを停止します。予算は上限であり、必ず使い切るものではありません |
数値が間違っていると思いますか?cargo bench -p arbor-graph を実行して検証してください:BENCHMARKS.md。
v2.4.0 — エージェントネイティブへの飛躍(MCP 2026-07-28、HTTP トランスポート、Tasks、MCP Apps)
| 機能 | 説明 |
|---------|--------------|
| **MCP `2026-07-28`** | ステートレスな `server/discover`、レスポンスキャッシュ(`ttlMs`/`cacheScope`)、`2025-03-26` クライアント向けのデュアルバージョンフォールバック |
| **Tasks 拡張機能** | `tasks/get` · `tasks/update` · `tasks/cancel` — コールドスタート時のインデックス作成では、エラーではなくタスクハンドルを返します |
| **MCP Apps** | エージェントホスト内のインタラクティブな影響範囲グラフ(`ui://arbor/blast-radius`)とアーキテクチャマップ(`ui://arbor/architecture-map`) |
| **HTTP トランスポート** | `arbor bridge --http --port 3333` — ロードバランサーの背後で動作するステートレスな MCP |
| **実際の `get_blast_radius`** | 共有の `arbor-graph::compute_blast_radius` による、Git の差分を考慮した影響分析 |
| **ページネーション** | `search_symbols` と `get_map` の `offset`/`limit`/`hasMore` |
| **ベンチマーク** | Criterion スイートと CI 回帰ゲート — [BENCHMARKS.md](docs/BENCHMARKS.md) を参照 |
クイックスタート
# Install (crates.io can lag the latest release: see docs/INSTALL.md)
cargo install arbor-graph-cli
# Index your project (one command)
cd your-project && arbor setup
# Explore before you edit
arbor map . --exclude-test # ranked project skeleton (~1k tokens)
arbor refactor parse_file # blast radius of changing a symbol
arbor diff # impact of uncommitted git changes
arbor diff --base origin/main # impact of this branch, as its PR shows it
# Wire up your AI agent
claude mcp add --transport stdio --scope project arbor -- arbor bridge
各ターンの後に: arbor hook claude を実行すると、Claude Code に、変更内容、依頼していないのに触れた箇所、テストすべき項目のレシートが表示されます。レシート →
エージェントのワークフロー: まず get_map を呼び出し、次に search_symbols/get_file_graph でコードを特定し、対象ファイルだけを Read します。MCP ガイド全文 →
廃止予定の AI モデルを呼び出すコードを探す
OpenAI は 2027 年 1 月 14 日に gpt-4o、gpt-4o-mini、gpt-4.1、gpt-4.1-mini の提供を終了します。Anthropic と Google も、それぞれ独自の日程でモデルを廃止します。arbor retirements は、廃止済みまたは廃止予定のモデルを使用する、openai、anthropic、Google の SDK の直接呼び出しを一覧表示します。それぞれについて、プロバイダーが提示する代替モデル、それに伴い変更が必要な引数、さらにリポジトリ側の選択(たとえば、gpt-6-luna に推論させるかどうか)を示します。LangChain、LiteLLM、その他のラッパー経由の呼び出しは、まだチェックされません。
npx @anandb71/arbor-cli retirements .
3 calls use models OpenAI shuts down on 14 Jan 2027 (88 days)
app/chat.py:12 gpt-4o (MODEL, line 8) → gpt-6-luna
also change: max_tokens → max_completion_tokens
decide: keep reasoning off (add reasoning_effort="none"; keep temperature) or let the model reason (remove temperature)
app/chat.py:21 gpt-4o-mini (line 22) → gpt-6-luna fallback of an environment or config lookup: confirm the deployed value
decide: keep reasoning off (add reasoning_effort="none") or let the model reason (no change)
check: stop and logit_bias are not supported on gpt-6-luna (400).
- ローカルで実行します。 アカウントも API キーもテレメトリーも不要で、コードがマシンの外に出ることはありません。
- 確信度を正直に示します。 使用状況のスキャンで呼び出しに疑いの余地がない場合に限り、リテラルを確認済みとします。
os.getenv("MODEL", "gpt-4o")のフォールバック、パラメーターのデフォルト値、サブクラスがオーバーライドする可能性のあるクラス属性、ルーティングが確実でない呼び出しには、理由とともに 先に確認 と印が付き、--count-unconfirmedを指定した場合にのみチェックが失敗します。Azure、OpenRouter、プロキシ経由の呼び出しは、プロバイダーの終了日が適用されない可能性があるため、別に一覧表示されます(--include-routed)。プロバイダー自身のホスト上にあるbase_urlは直接呼び出しです。Arbor が読み取れないモデルと、分析されなかったコードも、隠さず件数に含めます。 - Arbor が代わりに判断することはありません。 代替モデルの動作が意図的に異なる場合(gpt-6-luna はデフォルトの推論強度が medium なので推論できますが、gpt-4o はそうではありません。また、claude-sonnet-5-5 はデフォルトで思考しますが、置き換え対象の Sonnet モデルはそうではありません)、レポートには両方の選択肢とそれぞれのコストが表示されます。選択するまでは何も変更されません。
- CI に対応しています。
--json、--markdown、--annotations、--markdown-out <file>、--fail-within <days>を使用できます。終了コード 1 は、確認済みの呼び出しが廃止済みモデルを使用している場合、または指定した期間内に廃止される場合を意味します。終了日当日も廃止済みとして扱われます(UTC)。 - 現在の対象範囲:
openai、anthropic、Google GenAI SDK を使用する Python。TypeScript と JavaScript にも今後対応予定です。
GitHub Action(デフォルトでは警告のみ。指定した場合に限りビルドを失敗させます):
- uses: Anandb71/[email protected]
with:
mode: retirements
retirements-fail-on: never # or: retired, or a number of days such as 90
AI エージェント向け(MCP)
Arbor は arbor bridge を通じて、本番環境向けの MCP サーバーを提供します。デフォルトは Stdio で、HTTP はオプションとして有効化できます(リモート/エンタープライズ向け)。
# Stdio (Claude, Cursor, VS Code)
arbor bridge
# HTTP (MCP 2026-07-28)
arbor bridge --http --port 3333
Cursor / VS Code
{
"mcpServers": {
"arbor": {
"type": "stdio",
"command": "arbor",
"args": ["bridge"]
}
}
}
テンプレート:templates/mcp/ · セットアップスクリプト:scripts/setup-mcp.sh · scripts/setup-mcp.ps1
17 個の MCP ツール
| 層 | ツール | 使用する場面 |
|---|---|---|
| 概要把握 | get_map | 最初の呼び出し — PageRank 順に並べた、トークン予算に合わせたプロジェクトの骨格 |
| ピンポイント | list_entry_points · get_callers · get_callees · search_symbols · get_file_graph · get_node_detail | 特定のシンボルやファイルを見つける |
| 広範囲 | get_logic_path · analyze_impact · find_path · get_knowledge_path | 依存関係、影響範囲、パスを追跡する |
| エージェント向け | get_blast_radius · explain_symbol · audit_security · get_architecture_overview · batch_query | PR の影響確認、オンボーディング、セキュリティ監査、一括検索 |
| SDK の使用状況 | find_api_usages | コード内で OpenAI、Anthropic、Gemini の SDK を呼び出している箇所。ルーティングとモデル ID も確認できます(Python) |
すべてのツールは { ok, tool, data, meta: { suggested_next_tool, suggested_next_args } } を返すため、エージェントは再プロンプトなしで呼び出しを連鎖できます。
レジストリ: io.github.Anandb71/arbor · 公式 API 検索 · Glama の掲載ページ
CLI リファレンス
| コマンド | 説明 |
|---|---|
arbor setup | 初期化とインデックス作成を一括実行 |
arbor map | ランク付けされた、トークン予算に合わせたプロジェクトの骨格 |
arbor query <term> | あいまい検索によるシンボル検索(| による OR に対応) |
arbor callers / callees <sym> | 1 ホップのグラフ走査。同名のシンボルは定義ごとに一覧表示されます。jobs::enqueue、Type.method、src/jobs.rs:enqueue で絞り込めます |
arbor entry-points | HTTP ハンドラー、main、ジョブ、ウェブフック |
arbor file-graph <path> | 1 つのファイル内のシンボルとエッジ |
arbor inspect <sym> | シンボルの詳細 |
arbor path <a> <b> | 呼び出しグラフ内の最短パス |
arbor refactor <sym> | リファクタリング前の影響範囲 |
arbor usages | Python コード内の OpenAI、Anthropic、Gemini SDK 呼び出し:クライアントのルーティング(直接、Azure、カスタム base_url、Bedrock、Vertex)、モデル ID、型付きの未確認項目。認証情報は決して出力しません。--sdk openai|anthropic|google、--json。未確認項目がない値から何を確認できるかについては、docs/SDK_USAGES.md を参照してください |
arbor retirements | プロバイダーが廃止済みまたは廃止予定としている AI モデルへの直接 SDK 呼び出し(Python):日付と残り日数、提示された移行先、必要な引数の変更、リポジトリごとに必要な選択肢。--fail-within <days>、--count-unconfirmed、--include-routed、--json、--markdown、--annotations(ガイド) |
arbor diff | Git の変更による影響レポート(シンボルごと)。新しいシンボルには影響範囲がありません。--base <ref> はマージベース(PR に表示される内容)と比較し、--staged はステージ済みの変更のみを対象にします |
arbor check | CI の安全性ゲート(--max-blast-radius N、--base <ref>) |
arbor summary | PR の説明を自動生成(--base <ref>) |
arbor agent review | 自律型の PR アーキテクチャレビュー |
arbor agent onboard | コードベースのオンボーディングガイド |
arbor agent guard | リアルタイムのアーキテクチャ安全性ゲート |
arbor bridge | MCP サーバー(HTTP トランスポートには --http を追加) |
arbor watch | ファイル変更時にリアルタイムで再インデックス |
arbor receipt list / show / undo | 各エージェントターンで変更された内容を平易な英語で記録したレシートと、ターン単位の取り消し(ガイド) |
arbor hook claude | Arbor を Claude Code に接続:ディレクティブと、各ターン後のレシート |
arbor gui | ネイティブのデスクトップ UI |
すべてのクエリコマンドは --json に対応しています。map はさらに --tokens N、--focus "pattern"、--focus-changed に対応しています。
ビジュアルツアー
インストール
# macOS / Linux: prebuilt binary from the latest GitHub release
curl -fsSL https://raw.githubusercontent.com/Anandb71/arbor/main/scripts/install.sh | bash
# Windows (PowerShell)
irm https://raw.githubusercontent.com/Anandb71/arbor/main/scripts/install.ps1 | iex
# Scoop (Windows)
scoop install https://raw.githubusercontent.com/Anandb71/arbor/main/packaging/scoop/arbor.json
# Rust / Cargo (crates.io can lag the latest release)
cargo install arbor-graph-cli
# npm wrapper (cross-platform)
npx @anandb71/arbor-cli
# Docker
docker pull ghcr.io/anandb71/arbor:latest
バージョンを固定したインストール:docs/INSTALL.md
言語サポート
本番用パーサー: Rust · TypeScript / JavaScript · Python · Go · Java · C / C++ · C# · Dart
フォールバックパーサー: Kotlin · Swift · Ruby · PHP · Shell
CI とプルリクエスト
arbor diff --markdown
arbor check --max-blast-radius 30 --markdown
arbor summary
GitHub Action(ビルド済みバイナリを使用。コンパイルの約3~5分に対し、約5秒):
name: Arbor Check
on: [pull_request]
jobs:
arbor:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: Anandb71/[email protected]
with:
command: check . --max-blast-radius 30 --markdown
comment-on-pr: true
github-token: ${{ secrets.GITHUB_TOKEN }}
mode: retirements を指定すると、代わりに arbor retirements を実行します。ジョブサマリーには、廃止予定のモデルを呼び出すすべての箇所が一覧表示され、最も緊急性の高い10行に注釈が付けられます。これは GitHub のステップごとの上限です(ガイド)。
アーキテクチャ
arbor-core (Tree-sitter parsing)
└── arbor-graph (petgraph + PageRank + impact analysis)
├── arbor-cli — CLI + MCP bridge
├── arbor-mcp — MCP protocol server
├── arbor-server — WebSocket JSON-RPC
├── arbor-watcher — incremental file watcher
└── arbor-gui — desktop UI
ドキュメント: クイックスタート · アーキテクチャ · グラフスキーマ · MCP 統合 · レシート · ベンチマーク · ロードマップ · 理念
リリースチャネル: GitHub Releases · crates.io · GHCR · npm · VS Code / Open VSX · Scoop — リリースガイド
理念
- コンシューマーを第一に — 美しく、直感的で、すぐに役立つこと
- アクセシビリティを第二に — さまざまなエコシステムで動作し、どこでも実行できること
- 手頃な価格を次に — ノートパソコンからモノリスまで、オーバーヘッドを最小限に抑えること
Arbor はローカルファーストです。データの外部送信を必須とせず、オフラインでも使用できるオープンソースです。セキュリティポリシー →
コントリビューション
cargo build --workspace
cargo test --workspace
cargo clippy --workspace --all-targets --all-features
CONTRIBUTING.md · 初めての方におすすめの課題 · 行動規範
Contributors
7 contributors | View all
License
MIT — see LICENSE.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。