getArbor-dev

Arbor

Community getArbor-dev
Updated

Graph-native code intelligence that replaces embedding-based RAG with deterministic program understanding.

Arbor

Graph-native intelligence for codebases. Know what breaks before you break it.

Simulated replay — the arbor commands and their output are real (tokio @ 178k LOC). Methodology: BENCHMARKS.md

v2.6.0 — Ground Truth · The graph was wrong in ways v2.5.0 made fast. Colliding symbols were silently dropped, resolution depended on hash order, every edge claimed certainty, and every exported TypeScript symbol was indexed twice. All fixed, all tested. Edge recall +14% on TypeScript, +44% on Rust; 25% of a TS graph was phantom nodes. Reproduce it yourself: cargo run -p arbor-watcher --example graph_stats -- <dir>

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:

Question Arbor answer
If I change this symbol, what breaks? Blast radius with depth, confidence, and risk level
Who calls this — directly and transitively? Caller/callee traversal on the call graph
What's the shortest path between A and B? A* path through real dependencies
Is this PR too risky to merge? CI gate on blast-radius thresholds

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 v2.6.0

Correctness, not speed. Each of these was silently wrong before.

Fix Why it mattered
Colliding symbols are kept SymbolTable used HashMap::insert, so a second handler, new, or process replaced the first. The loser had zero callers and was invisible to blast radius.
Resolution is deterministic Same-directory locality was decided by iterating a HashMap. Rust seeds RandomState per process, so the same binary on the same input could build different edges between runs. Now asserted across eight fresh processes.
Edges carry confidence A proven same-file call and a same-directory guess were identical evidence. Each edge now scores [0,1] by how it resolved.
Exported TS symbols indexed once export_statement recursed into its children, then the generic loop recursed again — every exported symbol became two vertices sharing one node id. 133 phantom nodes on a 149-file app, 25% of the graph.
Method calls on untyped receivers resolve obj.method() was dropped outright, leaving the graph nearly edgeless on TS/JS — and an empty graph reports a blast radius of zero, which reads as "safe" rather than "unknown".
Centrality is a percentile rank Scores were divided by the graph maximum, so the top node was 1.0 by construction and a 0.6 threshold meant nothing consistent between repos. Adding one hub rescaled every other node.
Resolution is O(1), not O(refs × nodes × files) Unresolvable references — stdlib and third-party calls, most call sites in real code — paid the worst case. Suffixes are now indexed.

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:

Codebase Before After
TypeScript (149 files) 172 edges 196 (+14%)
Rust (arbor-graph) 116 edges 167 (+44%)

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)
Change Measured
PageRank rewrite — flat call-graph adjacency replaces per-iteration traversal 149.8ms → 6.6ms on a 10k-node graph (23x), verified side-by-side vs the old implementation
Parallel indexing — parse fans out across all cores, deterministic assembly Arbor: 253ms → 95ms · tokio (178k LOC): 2.7s → 1.6s
Warm-start centrality — watcher recomputes seed from previous scores Converges in ~2 rounds after a one-file patch instead of the full 20-iteration budget
Convergence early-exit Iteration stops at 1e-9 max delta — the budget is a ceiling, not a sentence

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)
Feature What it does
MCP 2026-07-28 Stateless server/discover, response caching (ttlMs/cacheScope), dual-version fallback for 2025-03-26 clients
Tasks extension tasks/get · tasks/update · tasks/cancel — cold-start indexing returns task handles, not errors
MCP Apps Interactive blast-radius graph (ui://arbor/blast-radius) and architecture map (ui://arbor/architecture-map) inside agent hosts
HTTP transport arbor bridge --http --port 3333 — stateless MCP behind load balancers
Real get_blast_radius Git-diff-aware impact analysis via shared arbor-graph::compute_blast_radius
Pagination offset / limit / hasMore on search_symbols and get_map
Benchmarks Criterion suite + CI regression gate — see BENCHMARKS.md

Quickstart

# Install
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

# Wire up your AI agent
claude mcp add --transport stdio --scope project arbor -- arbor bridge

Agent workflow: call get_map first → search_symbols / get_file_graph to locate code → Read only the target file. Full MCP guide →

For AI agents (MCP)

Arbor ships a production MCP server via arbor bridge. Stdio is the default; HTTP is opt-in for remote/enterprise.

# 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: templates/mcp/ · Setup scripts: scripts/setup-mcp.sh · scripts/setup-mcp.ps1

16 MCP tools

Tier Tools Use when
Orientation get_map First call — token-budgeted project skeleton ranked by PageRank
Surgical list_entry_points · get_callers · get_callees · search_symbols · get_file_graph · get_node_detail Navigate to a specific symbol or file
Broad get_logic_path · analyze_impact · find_path · get_knowledge_path Trace dependencies, blast radius, paths
Agent-native get_blast_radius · explain_symbol · audit_security · get_architecture_overview · batch_query PR impact, onboarding, security audit, bulk lookup

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 ·

CLI reference

Command Description
arbor setup One-shot init + index
arbor map Ranked, token-budgeted project skeleton
arbor query <term> Fuzzy symbol search (supports | OR)
arbor callers / callees <sym> One-hop graph traversal
arbor entry-points HTTP handlers, main, jobs, webhooks
arbor file-graph <path> Symbols + edges in one file
arbor inspect <sym> Full symbol detail
arbor path <a> <b> Shortest call-graph path
arbor refactor <sym> Blast radius before refactoring
arbor diff Git-change impact report
arbor check CI safety gate (--max-blast-radius N)
arbor summary Auto-generate PR description
arbor agent review Autonomous PR architecture review
arbor agent onboard Codebase onboarding guide
arbor agent guard Real-time architectural safety gate
arbor bridge MCP server (add --http for HTTP transport)
arbor watch Live re-index on file changes
arbor gui Native desktop UI

All query commands support --json. map additionally supports --tokens N, --focus "pattern", --focus-changed.

Visual tour

Full recording: media/recording-2026-01-13.mp4

Installation

# Rust / Cargo
cargo install arbor-graph-cli

# Homebrew (macOS/Linux)
brew install Anandb71/tap/arbor

# Scoop (Windows)
scoop bucket add arbor https://github.com/Anandb71/arbor && scoop install arbor

# npm wrapper (cross-platform)
npx @anandb71/arbor-cli

# Docker
docker pull ghcr.io/anandb71/arbor:latest

No-Rust installers:

  • macOS/Linux: curl -fsSL https://raw.githubusercontent.com/Anandb71/arbor/main/scripts/install.sh | bash
  • Windows: irm https://raw.githubusercontent.com/Anandb71/arbor/main/scripts/install.ps1 | iex

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

Adding languages →

CI & pull requests

arbor diff --markdown
arbor check --max-blast-radius 30 --markdown
arbor summary

GitHub Action (pre-built binary, ~5s vs ~3–5min compile):

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 }}

Architecture

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

Docs: Quickstart · Architecture · Graph schema · MCP integration · Benchmarks · Roadmap · Philosophy

Release channels: GitHub Releases · crates.io · GHCR · npm · VS Code / Open VSX · Homebrew · Scoop — Releasing guide

Philosophy

  1. Consumer first — beautiful, intuitive, instantly useful
  2. Accessibility second — works across ecosystems, runs anywhere
  3. Affordability next — minimal overhead, from laptops to monoliths

Arbor is local-first: no mandatory data exfiltration, offline-capable, open source. Security policy →

Contributing

cargo build --workspace
cargo test --workspace
cargo clippy --workspace --all-targets --all-features

CONTRIBUTING.md · Good first issues · Code of conduct

Contributors

7 contributors | View all

License

MIT — see LICENSE.

MCP Server · Populars

MCP Server · New

    getArbor-dev

    Arbor

    Graph-native code intelligence that replaces embedding-based RAG with deterministic program understanding.

    Community getArbor-dev
    Q00

    ouroboros

    Agent OS: Stop prompting. Start specifying.

    Community Q00
    velane-sh

    velane

    Velane is agentic cloud for deploying your basic workflows, agents and sub-agents. 800+ OAuth integrations, sandboxed Bun and Python execution, and a full deployment pipeline managed via MCP

    Community velane-sh
    MCPBlender

    BlenderMCP

    🎨 Control Blender 3D with Claude AI — prompt-driven 3D modeling, materials & scene generation via MCP

    Community MCPBlender
    MCPBlender

    AbletonMCP

    🎵 Control Ableton Live with Claude AI — create tracks, arrange clips & compose music via MCP

    Community MCPBlender