Benzi README

The project's README from github.com/oooscoos/Benzi. As one markdown file: README.md.

Benzi

Language Agnostic · Model Agnostic · Compiles Locally · BYOK · MCP Compatible

PyPI version Python versions MCP compatible License

Benzi -- compiler-backed code intelligence

Try now

Download      FAQ      Benchmarks

Contents

What is Benzi — how it works in one paragraph
Live demos — StallionSwipe, VS Code's own source, or any repo you paste
What people say — what people wrote about it
SWE-bench Verified — 391/500 (78.2%) for $37.33
How it works — compile, query, edit, verify
Tools — 16 of the 35+ the index makes possible
What the index actually changes — lines read vs three other harnesses
Features · Language support · Getting started
FAQ — privacy, API keys, pricing, limits

What is Benzi

Most AI coding agents dump a repo into a context window and hope the model finds what matters. Benzi parses every file first — a real compiler, built on tree-sitter — into a precise, queryable map. Every symbol, every call edge, every reference, every class in its inheritance chain. One pass, done.

Every file parsed, imports resolved, class ancestry built, every identifier traced to its definition — before a single question is answered. Call flow and data flow join at every call site, so a bad value traces to its origin in one tool call. Claude Code greps; Cursor embeds; Aider maps signatures; Benzi resolves — in O(1). Ten languages so far, plus a markup engine for HTML, CSS, and DOM-JS — see Language support.

You can try pasting this repo's link to Benzi in the live demo too!

Benzi on SQLite
Benzi on SQLite

Live demos

StallionSwipe · Python, HTML, CSS, JS — a dating app for horses, greenfielded by Benzi from scratch in a single chat session. No image is a file: every horse portrait is procedural SVG, generated in code. Match with one and it flirts back through a real model, live. Frontend, backend, and the prompts — all written by Benzi. Try it live.

StallionSwipe swipe deck StallionSwipe profile detail StallionSwipe live AI chat StallionSwipe profile creation

VS Code's own source, resolved · TypeScript — the real microsoft/vscode repo is 1.8M lines; this indexes 923k of them: the editor core (src/vs/editor + src/vs/base), the platform services layer, and workbench's shell/API/browser plumbing — deliberately excluding the 747k-line grab-bag of individual features in workbench/contrib. Built once, in just over two minutes, then cached. Try it live (chat panel, near the bottom of the page).

Or, try any repo of your choice at all here — point Benzi at any public GitHub repo and it builds the index live. varianttech.net/demo.

What people say

"78.2% for $37 is a slap in the face to the 'brute force wins' school." — Alex Xiang, zicode (translated)

"Benzi is proving that the core competency of coding tools is shifting from simple 'reading comprehension' to 'structural grasping ability.'" — Gi Pyeong Lee, Tech Blog

"Fewer tokens, no context drift. Wild idea, honestly." — prompt 🤖 AI News

"It analyzes changes before writing them — and beats Claude Code on benchmarks." — Ponte al dIA (translated)

SWE-bench Verified

The full SWE-bench Verified set — 500 real GitHub issues from twelve Python repositories — run end to end on DeepSeek v4-flash, one attempt per instance, graded by the official swebench.harness.run_evaluation inside its own per-instance Docker images, with network access to GitHub and PyPI blocked inside every container.

Resolved 391 / 500 — 78.2%
Total cost, all 500 instances $37.33
Cost per instance resolved $0.095
Source lines read (total / median) 231,574 / 379
Model turns (total / median) 16,091 / 27
Input tokens served from cache 97%
Output tokens 22.0M

Full technical report: swebench/SWE_BENCH_REPORT.md (web version). Every instance's cost, tokens, turns, and lines read: varianttech.net/benchmark_swebench. The cross-harness efficiency comparison below (and the full 24-bug chart): varianttech.net/benchmark.

How it works

  1. Compile. Tree-sitter parses every file, resolves imports, builds class ancestry, traces every identifier to its definition. Output is an index, not text.
  2. Query. The agent reads and plans through structured tools over that index — profile, get_callers, backflow, trace_path, skim_source, ~30 more.
  3. Edit, gated. Every write is checked against the real parser; a broken parse auto-reverts. Blast radius — the changed symbol, its callers, its holders, the relevant tests — is checked going in and again once the write lands.
  4. Verify by running it. A focused repro runs under a runtime tracer alongside the tests blast-radius flagged. Real values, real dispatch: this proves the change and settles the map — ambiguous edges collapse onto whatever target actually fired.
  5. Reindex, incrementally. Every turn re-parses only what changed on disk — your edits and the agent's, treated the same.
  6. Revert, from a snapshot. Every write snapshots the index first, so undo reloads that snapshot instead of re-deriving it.
  7. Back to step 2. The next question always answers against the code as it is now.

Tools

A sample of 16 of Benzi's 35+ tools — what falls out of actually resolving the code, from the index itself to the gates on every write.

Tool What it answers
get_callers Every call site that reaches a function — the code that will feel a change.
call_tree The transitive call closure from one function, forward or in reverse.
trace_path The call chain connecting two functions, and the data carried along it.
external_calls Which libraries a scope leans on, and where it calls into them.
forwardflow Where a function's return value ends up, everywhere it has to match.
backflow Where a wrong value came from, without opening every caller.
profile The full 360 on one symbol in a single call.
get_definition The declaration card — signature, docs and location.
search_symbols Case-insensitive substring search across every symbol in the repo.
get_hierarchy A type's resolved bases and its direct subclasses.
skim_source A body's one-level outline, so you know which lines are worth reading.
execute_from Runs a file under the call tracer and records what actually happened.
check_last_execution Reads back the last recorded run's facts, no re-run needed.
execute_generated_testcase Writes a self-contained repro and runs it to debug its own change.
rollback_edit Undoes the last writes by snapshot reload, not by re-editing.
upgrade_to_pro Escalates itself to a larger reasoning budget mid-task.

What the index actually changes

Same 24 bugs, one run each, four harness/model combinations. Lines read counts only what came back from file-read calls — grep and shell output are search, not reading, so this is the one figure that means the same thing in every harness.

Harness · model Lines read vs 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×

Every harness opens more source as bugs get harder — the question is the slope. Benzi's stays flatter because it answers most of what a bug needs from the map instead of by reading.

Source lines read per bug, all four harnesses

Benzi reads the least source on every bug and the gap widens as bugs get harder — the index answers most of what a fix needs before a file is ever opened.

Wall-clock time per bug, all four harnesses

Wall-clock time tracks close across all four — reading less doesn't make Benzi slower to think, just cheaper to look.

Cost per fix, all four harnesses

Benzi on DeepSeek costs about a cent a bug; Claude Code climbs to $0.18 a step as bugs get harder — roughly 18x.

More detail, per-bug breakdowns, and full methodology: varianttech.net/benchmark.

Features

Language support

Python · JavaScript · TypeScript · Java · C# · C++ · C · Go · Rust · Ruby

One compiler, ten languages — each is a tree-sitter grammar plugin, so the core of the map (symbols, call edges, references, inheritance, data flow) is built the same way everywhere.

Depth is uneven, and we'd rather say so than let you find out. Python is deepest, and the only one with the runtime tracer. Every language reaches the core of the map, but each has its own constructs, not all modelled yet — a question specific to your language may come back thinner than the same question in Python.

Incremental reindexing is also less optimized for C, C++, Rust, and Ruby — it works, just not as fast on a large edit loop.

Wrong or thin answer in your language? Open an issue with the repo, the question, and what it got wrong — that's how the uneven parts get found.

Getting started

Benzi is completely free to use.

Run benzi_login once to authenticate before using the VS Code extension, MCP, or headless — the same command lets you update your model or key again later too.

FAQ

Does my code leave my machine? No. In VS Code, the CLI, or MCP, the compiler and index run locally — nothing uploaded, no copy kept. Only the snippets the agent actually reads go to your model provider, same as any AI assistant, and less of them: 9,125 lines read vs Claude Code's 20,704 on the same 24 bugs. The browser demo differs — it fetches a public repo server-side, read-only, deletes it after your session.

Do I need an API key? No, for the browser demo. Yes for VS Code, MCP, and the CLI — run benzi_login once with your own key.

Is it actually free? Yes, Benzi doesn't charge. The CLI and MCP are BYOK, so you pay your own model provider. Early and in development — that's the trade, not a paywall.

Can I point it at a private repo? Not the web demo (public GitHub API only). Everywhere else, yes — the compiler runs locally on whatever path you give it.

How large a repo can it handle? VS Code handles real codebases — microsoft/vscode, 923k lines, indexes in ~2 minutes, then caches. The browser demo caps at 2,000 files, 2 MB each.

How is this different from Cursor, Copilot, or Claude Code? They search — grep or embeddings. Benzi resolves first: a real index of symbols, calls, inheritance, data flow, queried instead of guessed. Same 24 bugs, 2.3× less source read than Claude Code. Details: what the index actually changes.

How is this different from CodeGraph? Both index instead of search, but CodeGraph retrieves — ranked candidates from a queried database. Benzi resolves — settles what a name binds to before answering, and refuses rather than guesses when a call site is ambiguous. It also models code the way an engineer reads it — file → scopes → call flow → data/control flow — not a flat symbol graph.

On CodeGraph's own benchmark (their repos, their questions, their methodology), four models blind-judged Benzi's MCP answers first. Full results: varianttech.net/benchmark_codegraph.

My language isn't Python — how much do I lose? The structural index — symbols, calls, references, inheritance, data flow — is the same across all ten languages. Only the runtime tracer is Python-only, and depth varies by language — see Language support.

Benzi (oooscoos/Benzi)

Searching Database…

169 ·GitHub
这是什么?Benzi 是一个由编译器支撑的编码代理:它用 tree-sitter 把你的整个代码库解析成可查询的符号、调用以及数据/控制流索引,然后利用这张地图来解释、编辑和验证代码变更,还带有一个运行时追踪器,用来解决单靠静态分析无法确定的问题。
它是一个能对话的代理,还是只是一个静态分析库?两者都是:它是一个编码代理,可以通过 CLI、VS Code 扩展或无头方式使用,构建在它自己的编译器/索引器之上。同一份编译好的索引还可以通过 MCP 作为工具暴露给 Claude Code 或 Cursor 等其他代理。
怎么试用或安装 Benzi?免安装方式:把一个公开仓库粘贴到 varianttech.net/demo,获得只读会话。要真正修改代码,可以从 Marketplace 安装 VS Code 扩展,或者运行 `pip install benzi` 和 `benzilogin`,以无头方式使用 CLI 或 MCP 服务器。
需要我自己的模型 API 密钥吗?浏览器演示不需要,但 VS Code、MCP 和 CLI 需要——Benzi 采用 BYOK(自带密钥)模式,你运行一次 `benzilogin`,填入自己的 Anthropic、OpenAI 或兼容服务商的密钥,并直接向该服务商付费。
每种支持的语言分析质量都一样吗?不一样——Benzi 支持十种语言,外加一个 HTML/CSS/DOM-JS 标记引擎,但 Python 支持得最深,也是唯一带运行时追踪器的语言,而 C、C++、Rust 和 Ruby 的增量重建索引优化得较少。
我的代码会离开我的电脑吗?不会。在 VS Code、CLI 和 MCP 中,编译器和索引完全在本地运行,只有代理实际读取的代码片段会发送给你的模型服务商。浏览器演示则不同:它在服务器端抓取公开仓库,并在会话结束后删除。
Benzi 在 SWE-bench Verified 上表现如何?用 DeepSeek v4-flash 端到端运行,它解决了 500 个问题中的 391 个(78.2%),全部 500 个实例的总成本为 37.33 美元,约合每个修复的 bug 0.095 美元。
它和 Cursor、Copilot 或 Claude Code 有什么不同?那些工具通过 grep 或向量嵌入搜索仓库;Benzi 则先把仓库解析成符号、调用和数据流的真正索引,再查询这个索引,在同一基准上每个 bug 读取的源代码远少于 Claude Code。
可以让它指向私有仓库吗?网页演示不行,它只适用于公开的 GitHub 仓库。VS Code 扩展、CLI 和 MCP 服务器都在本地运行,可用于任何路径,无论私有与否。
运行时追踪器实际做什么?它在真实执行过程中挂钩每一次函数调用,并把观测到的结果叠加到静态地图上,于是单靠静态分析无法确定的含糊调用目标,就由实际运行的结果来裁决。
Creator
oooscoos
Size
30.2 MB
Stars
169
Age
2mo
Commits · 90 Days