Benzi: De AI die code leest

Hoe het werkt

Specificaties:

  • 10 Talen
  • 3 Truth Tiers (waarheidsniveaus)
  • 21 Bronbestanden
  • Oneindige backends

Bevindingen uit zelfanalyse

Door de eigen compiler op de eigen repository te richten, zijn de volgende feiten naar boven gekomen—zonder gissingen of marketingpraat, enkel gebaseerd op wat de kaart aangaf:

01 — Resolutie: Drie niveaus van waarheid

  • Proven edges: Verbindingen die met bewijs zijn vastgesteld.
  • Candidate edges: Verbindingen waarbij de compiler weigert te gissen.
  • Observed edges: Verbindingen gebaseerd op echte runtime-traces.

02 — Executie: Runtime tracer De tool koppelt elke aanroep tijdens de uitvoering (runtime), inclusief werkelijke argumentwaarden, returns en dispatch. Dit wordt over de statische kaart gelegd, zonder speculatie.

03 — Dekking: Taal-agnostisch Ondersteuning voor Python, JavaScript, TypeScript, Java, C#, C++, C, Go, Rust en Ruby. Er is één compiler en één kaart. Tree-sitter is de enige echte afhankelijkheid; al het andere zijn grammar-plugins.

04 — Flexibiliteit: Model-agnostisch Werkt met Anthropic, OpenAI of elke compatibele API. De intelligentie zit in de tools en de kaart, niet in het model.

05 — Continuïteit: Persistent geheugen Duurzame feiten per repository overleven restarts. Conventies en valkuilen die eenmaal zijn geleerd, hoeven niet bij elke sessie opnieuw te worden afgeleid.

06 — Full stack: Dual-engine voor code en markup Er is een aparte index voor HTML/CSS/DOM-JS voor cascade-resolutie en JS-grabs, inclusief frontend-elementen die zijn ingebed in Python-strings.

Waarin Benzi verschilt

Architectuur

Compiler + Agent Loop Een tree-sitter compiler produceert een 'resolved map'. Een agent loop navigeert hierin, voert bewerkingen uit, draait de code en indexeert opnieuw. Elke schrijfactie controleert de syntax en rapporteert de 'blast radius' (de reikwijdte van de impact).

Aanpak

Gecompileerde kaart in plaats van een context-dump Voordat er één vraag wordt beantwoord, parseert Benzi alle bestanden parallel, lost imports op, bouwt de klassenhiërarchie op en traceert elke identifier naar de definitie. Dit resulteert in een doorzoekbare index in plaats van een blok tekst.

Flow

Call flow + data flow in één join Wie roept wie aan en waar een waarde vandaan komt, wordt apart geïndexeerd en bij elke call-site samengevoegd. Hierdoor kan een foutieve waarde met één tool-aanroep worden teruggevoerd naar de oorsprong.

Tools

Gestructureerde ontdekking in plaats van grep Functies zoals skim, backflow, forwardflow, trace_path en profile hebben een O(1) snelheid binnen de resolved index. Daarnaast is er directe CLI-toegang om te draaien, testen en itereren.

Zoeken

Voorbij grep en embeddings Terwijl Claude Code zoekt met grep, Cursor met embeddings en Aider met tree-sitter signatures, indexeert Benzi de volledige opgeloste structuur: aanroepen, datastroom en scoped identifiers.

Veiligheid

Syntax-gated edits + blast radius Elke wijziging wordt gecontroleerd met de echte taal-parser. Een foutieve parse leidt tot een automatische revert. Elke succesvolle bewerking rapporteert het gewijzigde symbool, de aanroepers ervan en de houders.

Verificatie

Contextbewuste runtime testcases Benzi schrijft een gerichte reproductie (repro) voor de code die zojuist is gewijzigd, draait deze onder de echte call tracer en geeft de geobserveerde waarden terug—zonder gissingen of mock-harnesses. De testcase wordt gegenereerd vanuit de context, niet uit een prompt.

Iteratie

Shell-toegang + complete loop Echte commando's, testcases onder de tracer en volledige iteratie (compileren → traceren → bewerken → re-indexeren → herhalen). Het is geen one-shot prompt, maar een volwaardige agent loop.