
Arbor
io.github.Anandb71Published by GitHub account Anandb71v1.0.0Updated Oct 25, 2026
The Graph-Native Intelligence Layer for Code.
Overview
Arbor builds a semantic dependency graph of a local codebase and exposes it over MCP so an assistant can trace callers, blast radius and paths before editing.
- What you can do
- Get a token-budgeted, PageRank-ranked project skeleton and architecture overview
- Locate code: search symbols, list entry points, inspect a file's graph or a single node
- Trace dependencies: callers, callees, shortest paths and logic paths between symbols
- Assess change impact: blast radius, explain a symbol, security audit, batch queries
- Find OpenAI, Anthropic and Gemini SDK calls in Python with routing and model IDs
- When to use it
- Useful when an assistant works inside a real repository and needs to know what a change breaks, who calls a function, or how code is structured, instead of guessing from text. Also suited to reviewing pull requests and onboarding onto an unfamiliar codebase.
- Requirements
- Runs as a local stdio process started by the arbor bridge command, so the Arbor CLI must be installed first (prebuilt binary, Cargo, npm wrapper or Docker). The project must be indexed, for example with arbor setup. No account, API key or telemetry is required.
Installation
In SourceWeft
- Open Arbor in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Code context for people and agents.
Find a function’s callers. Trace the path through your code.
Know what breaks before you break it.
arbor retirements finds direct OpenAI, Anthropic and Google SDK calls in Python code that use a retired or retiring model, and says what has to change.
OpenAI shuts down the dated gpt-4o and gpt-4.1 snapshots on 14 January 2027. Shutdown list
[Rust CI] [Crates.io] [Latest release] [GHCR] [Glama MCP Directory] [MIT License]
Simulated replay — the arbor commands and their output are real (tokio @ 178k LOC). Methodology: BENCHMARKS.md
v3.1.1 · A fix release. The
arbor retirementsdata was read again on 28 October 2026 and now lists the baregpt-5ando3, which OpenAI's deprecations page gives 11 December 2026.npx @anandb71/arbor-cliruns on npm 12, and Arbor no longer takes your home folder as the project because~/.arborexists. Release notes
Why Arbor
Most AI coding tools treat code as text. Arbor builds a semantic dependency graph — functions, classes, and modules as nodes; calls, imports, and inheritance as edges — then answers execution-aware questions with deterministic precision:
No keyword guessing. No embedding hallucinations. One graph, every interface.
Where the graph is unsure, it says so — edges carry a confidence, and ambiguous resolutions are labelled rather than hidden. An honest unknown beats a confident wrong answer.
What's new in v3.1.1
A fix release. No breaking changes; as after every upgrade, a saved graph is rebuilt once on first use.
When the terminal report of arbor retirements lists a call to a retired or
retiring model, it now ends with an offer of a paid readiness review. The link
carries three values from the run: how many calls are listed, how many are
already retired and the next shutdown date. Arbor sends nothing. The offer is not
printed with --json, --markdown, --annotations or --quiet, or when the CI
environment variable is set (GitHub Actions sets it), and the GitHub Action does
not show it. Release notes
v3.1.0 (arbor retirements and arbor usages)
Two commands for Python code that calls AI model APIs. Both run locally, with no account, API key or telemetry.
Python only for now. Release notes
v3.0.3 (Rust calls through paths and macros, per-symbol diff, --base)
A fix release. Every item below was a wrong answer, not a missing feature, and each ships with a regression test.
Also new: arbor receipt. After each coding-agent turn it
explains, in plain English, what changed and what was touched that you didn't
ask for, with arbor receipt undo to put a turn back.
Cached graphs from 3.0.0 are rebuilt automatically on first use.
v3.0.0 — The Right Node (symbol resolution consults the importing file)
One fix, measured.
Symbol resolution consults the importing file. When a bare name matched
definitions in several modules, resolve_ref fell through to SameDir and
attached the edge to whichever definition sat in the caller's own directory —
not a dropped edge, a confidently misrouted one, stamped at 0.55 confidence.
GraphBuilder already kept a per-file import map, but only
apply_import_validation read it, and that scores an edge after one has been
chosen. It never saw the references going to the wrong node. Consulting it
between the same-file and same-directory checks keeps a local definition
shadowing an import, while letting a written import beat mere adjacency.
Resolution::ViaImport scores 0.93, above SameDir's 0.55.
Measured
A fixture of 260 modules across 10 layers, each layer defining the same 26 function names. Ground truth is derived from the generator's own edge list, so the expected answer is exact rather than estimated.
Previously flat at about 22 regardless of the real answer. Now it tracks. Risk
on the largest hub moves from LOW to CRITICAL.
Total edge count barely moves (1335 → 1334). That is the signature of misrouting rather than loss: the edges were always there, pointing at the wrong nodes.
Breaking
Resolutiongains aViaImportvariant — an exhaustive match will not compile- Edges land on different nodes, so cached graphs, stored node ids, and centrality baselines from 2.6.0 will differ
Call cycles are condensed before PageRank. Each strongly connected component is ranked once and that mass is shared across its members, so a closed ring does not fill the top of the ranking and a cycle that calls out keeps its members together. The number CentralityScores reports is still the v2.6.0 percentile, i / (n - 1).
Known and still open
Written down rather than left to be discovered:
- Small targets now over-report (36 → 61, 16 → 46). Safer direction than silence, but not yet correct.
- Dynamic and reflective imports (
importlib,__import__,import(),eval(require(...))) are unresolvable by construction and are documented as expected misses in the fixture rather than counted as defects.
v2.6.0 — Ground Truth (colliding symbols kept, deterministic resolution, edge confidence, percentile centrality)
Correctness, not speed. Each of these was silently wrong before.
New capability — concept search. Substring matching cannot find get_authenticated from login; they share no substring. Identifiers are now tokenized and expanded through curated concept clusters, and docstrings, signatures, and paths are indexed alongside names. Deterministic, offline, no model. Available on the library as ArborGraph::search_ranked (arbor query remains literal-substring for now).
New capability — hunk-level impact. changed_node_ids_for_ranges keeps only symbols whose lines actually changed, instead of every symbol in a touched file.
Measured on identical node sets, after the duplicate-extraction fix:
Graph caches from earlier versions are invalidated — centrality now means something different, so a stale cache would be read wrong.
v2.5.0 — The Last Excuse (PageRank 23x, parallel indexing, warm-start centrality)
Think a number is wrong? cargo bench -p arbor-graph and prove it: BENCHMARKS.md.
v2.4.0 — The Agent-Native Leap (MCP 2026-07-28, HTTP transport, Tasks, MCP Apps)
Quickstart
After every turn: arbor hook claude makes Claude Code show a receipt of what it changed, what it touched that you didn't ask for, and what to test. Receipts →
Agent workflow: call get_map first → search_symbols / get_file_graph to locate code → Read only the target file. Full MCP guide →
Find code that calls retiring AI models
OpenAI's deprecations page lists five dated GPT-4o, GPT-4o mini, GPT-4.1 and GPT-4.1 mini snapshots, such as gpt-4o-2024-08-06, for shutdown on 14 January 2027. It gives the bare gpt-4o, gpt-4o-mini, gpt-4.1 and gpt-4.1-mini no row, but OpenAI's API reference lists each as "Deprecated. Announced shutdown date: 2027-01-14", and its models API returned that date when checked on 18 October 2026. Anthropic and Google retire models on their own dates. arbor retirements lists the direct openai, anthropic and Google SDK calls that use a retired or retiring model. For each one it shows the replacement the provider lists, the arguments that have to change with it, and the choices your repo makes first (such as whether gpt-6-luna should reason). Calls through LangChain, LiteLLM or other wrappers are not checked yet.
- Runs locally. No account, no API key, no telemetry; no code leaves your machine.
- Honest about confidence. A literal is confirmed only where the usage scan has no doubt about the call.
os.getenv("MODEL", "gpt-4o")fallbacks, parameter defaults, class attributes a subclass may override and calls whose routing is not certain are marked confirm first with the reason, and fail the check only with--count-unconfirmed. Calls through Azure, OpenRouter or a proxy are listed apart (--include-routed), because the provider's dates may not apply there; abase_urlon the provider's own host is a direct call. Models Arbor cannot read, and code it did not analyze, are counted, not hidden. - Arbor does not decide for you. When the replacement behaves differently by design (gpt-6-luna runs at medium reasoning effort by default, so it can reason, where gpt-4o did not; claude-sonnet-5-5 thinks by default, where the Sonnet models it replaces did not), the report shows both options and what each costs, and changes nothing until you choose.
- CI ready.
--json,--markdown,--annotations,--markdown-out <file>and--fail-within <days>. Exit code 1 means a confirmed call uses a retired model, or one retiring inside your window; the shutdown day itself counts as retired (UTC). - Scope today: Python with the
openai,anthropicand Google GenAI SDKs. TypeScript and JavaScript are coming.
GitHub Action (warns by default; it fails the build only if you ask it to):
How it works, the data sources and the full scope →
For AI agents (MCP)
Arbor ships a production MCP server via arbor bridge. Stdio is the default; HTTP is opt-in for remote/enterprise.
Cursor / VS Code
Templates: templates/mcp/ · Setup scripts: scripts/setup-mcp.sh · scripts/setup-mcp.ps1
17 MCP tools
Every tool returns { ok, tool, data, meta: { suggested_next_tool, suggested_next_args } } so agents chain calls without re-prompting.
Registry: io.github.Anandb71/arbor · Official API lookup · Glama listing
CLI reference
All query commands support --json. map additionally supports --tokens N, --focus "pattern", --focus-changed.
Visual tour
Installation
Pinned installs: docs/INSTALL.md
Language support
Production parsers: Rust · TypeScript / JavaScript · Python · Go · Java · C / C++ · C# · Dart
Fallback parsers: Kotlin · Swift · Ruby · PHP · Shell
CI & pull requests
GitHub Action (pre-built binary, ~5s vs ~3–5min compile):
mode: retirements runs arbor retirements instead. It writes a job summary that lists each call it finds to a retiring model and annotates the 10 most urgent lines, GitHub's limit per step (guide).
Architecture
Docs: Quickstart · Architecture · Graph schema · MCP integration · Receipts · Benchmarks · Roadmap · Philosophy
Release channels: GitHub Releases · crates.io · GHCR · npm · VS Code / Open VSX · Scoop — Releasing guide
Philosophy
- Consumer first — beautiful, intuitive, instantly useful
- Accessibility second — works across ecosystems, runs anywhere
- Affordability next — minimal overhead, from laptops to monoliths
Arbor is local-first: no mandatory data exfiltration, offline-capable, open source. Security policy →
Contributing
CONTRIBUTING.md · Good first issues · Code of conduct
Contributors
[Anandb71] [holg] [cabinlab] [Karthiksenthilkumar1] [zacwolfe] [sanjayy-j] [sathguru07] [Junaid]
7 contributors | View all
License
MIT — see LICENSE.
Source: README.md at commit b6e50ee
Tools
0Version history
1- v1.0.0LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts