Results

September 17, 2026 · View on GitHub

30 queries across three repositories, 24 with a known answer plus 6 negative controls. Methodology and the honesty notes are in README.md; re-run with python3 bench.py queries/*.json. Raw output in raw/.

repo A (Go + Flutter, French UI) is the repository jev was developed against. repo C (Go + Flutter) and repo B (Go + React PWA) were never opened during development. The five queries used while tuning are excluded from all three sets.

Pooled (24 answerable queries)

methodP@1R@5MRR
grep0.080.290.23
bm250.330.430.46
jev_screen0.920.820.96
jev0.960.840.98

Split by query kind, P@1:

methodvocabulary gap (12)ordinary (12)
grep0.080.08
bm250.080.58
jev0.921.00

The two columns are the whole story. On ordinary questions bm25 is a real competitor — 0.58 P@1 for nothing per query. On questions whose wording never appears in the code, both lexical methods collapse to 1 correct answer out of 12, which is roughly chance, while jev answers 11 of 12. Those queries were built so the key noun appears in zero files, so no amount of lexical cleverness reaches them.

Per repository (8 answerable queries each)

repogrepbm25jev_screenjev
repo B (Go + React PWA) (unseen)P@10.120.381.001.00
R@50.100.460.750.75
repo C (Go + Flutter) (unseen)P@10.120.500.880.88
R@50.200.550.850.82
repo A (Go + Flutter, French UI) (developed against)P@10.000.120.881.00
R@50.570.270.860.94

jev does not do noticeably better on the repository it was built against, which is the main thing this table is here to check.

Negative controls

Six queries asking for a feature the repository genuinely lacks.

methodfiles offered (mean)correctly silent
grep5.00/6
bm255.00/6
jev0.06/6

Read this as a property of the ranking, not a prediction about agents. A lexical method cannot report absence — some file always contains some query word — so when the harness asks for a top 5 it produces one. jev returned nothing on all six, at its default threshold of 0.6.

What that costs an agent is measured separately, in tokenecon/TOKENS.md, and the mechanism there is not the one this table suggests. An agent does not read a forced top-5 of irrelevant files. It looks at them, sees nothing relevant, and tries another wording — and another. On one absent feature the grep-only agent spent 20 turns and 328,699 tokens establishing that a password-reset flow does not exist, against 10 turns and 156,679 for the agent that asked jev once.

So the conclusion survives — being able to say "not here" is worth real tokens — but the cost is paid in repeated searching, not in reading wrong files. Where the two files disagree, TOKENS.md is the measurement of agent behaviour and this table is only the ranking property behind it.

Cost and latency

Whole benchmark, 30 queries over 469 files:

methodtimecost
grep17s0
bm250.2s0
jev_screen349s$0.138
jev395s$0.170

Per query: ~13 seconds and $0.006. That buys roughly 150 files read out-of-context and about 40 tokens returned into the agent's.

Ablation: is the verify pass worth it?

jev_screen skips the second pass that re-scores leading candidates against their full contents. Pooled, verify is worth +1 correct top-1 answer out of 24 (0.92 → 0.96) for about 20% more cost and time.

That is inside the noise for 24 queries, and the per-repo picture is mixed:

  • repo A (Go + Flutter, French UI) — verify clearly helps: P@1 0.88 → 1.00, R@5 0.86 → 0.94.
  • repo B (Go + React PWA) — identical results; the screen was already perfect, so there was nothing to fix.
  • repo C (Go + Flutter) — verify hurt twice. On loading-spinner it demoted the correct file out of first place, and on guest-registration recall fell 0.75 → 0.50.

So the honest summary is that the verify pass is not clearly earning its cost. It is left on by default because its failures are recoverable — a demoted file is usually still in the top 5 — while the screen's failures are not. Anyone optimising for cost should try --verify 0 first and lose very little.

What this does not show

  • 24 answerable queries is a small sample. A difference of one or two queries, such as the whole verify ablation, is not significant.
  • One labeller per repository, not a consensus. "Relevant" is arguable for support files near a feature.
  • Three repositories by one author, all Go backends with a Flutter or React frontend. Nothing here speaks to other stacks or to repositories of thousands of files, where one request per file becomes slow.
  • Latency is real: 13s per query is far slower than grep, and jev is worth reaching for when grep has failed or the vocabulary is unknown, not by reflex.