Small samples. Treat comparisons as directional. No blended score: each
question is answered separately.
Revera · PR review
Search finds breaking-change bugs.
18/18bug-task runs
Search arms pooled vs. no search 0/6.
Recommended: keep Exa auto. Best rank-1 evidence on review-style lookups (11/12) and no strict false positives.
Parallel fast is a close, faster, cheaper backup.
OpenCode · coding
No measurable gain from search on these 4 tasks.
4/4no search
= best search arm 4/4 in the quick pass.
Pick on retrieval and latency: Parallel fast (24/24 evidence@5, ~0.5 s per search).
Retrieval · held-out
Exa and Parallel tie at the top.
Exa24/24
Parallel24/24
Tavily22/24
Brave21/24
Firecrawl16/24
Only Firecrawl is clearly behind; the rest overlap within noise.
Swipe tables horizontally to compare providers.
Retrieval
Can it find the right evidence?
24 held-out questions, one search + read of the top
result each. Evidence means the gold fact’s patterns matched provider-returned
text, not merely that a familiar URL appeared.
How often is the evidence there?
Rank 1 vs. anywhere in the top 5. Whiskers: Wilson 95% interval.
Evidence@5Evidence@1 (lighter inset)
Exa23 / 24of 24
Parallel20 / 24of 24
Tavily21 / 22of 24
Brave14 / 21of 24
Firecrawl12 / 16of 24
0%50%100%
Evidence retrieval counts and evidence@5 confidence intervals
Provider
Questions
Evidence@1
Evidence@5
Wilson 95% interval
Exa
24
23
24
86.2% to 100.0%
Parallel
24
20
24
86.2% to 100.0%
Tavily
24
21
22
74.2% to 97.7%
Brave
24
14
21
69.0% to 95.7%
Firecrawl
24
12
16
46.7% to 82.0%
Speed without losing evidence
Search only. Dot = p50; line extends to p90. Upper left is better.
Search latency and evidence@5
Provider
Evidence@5
p50 seconds
p90 seconds
Exa
24/24
4.456
6.185
Parallel
24/24
0.531
0.624
Tavily
22/24
3.383
5.476
Brave
21/24
0.517
0.559
Firecrawl
16/24
0.942
1.763
Provider cost per query
Exa is metered; other prices are estimates. Model spend is separate.
Exa$0.0080 metered
Parallel$0.0020 estimate
Tavily$0.0177 estimate
Brave$0.0050 estimate
Firecrawl$0.0030 estimate
Where the difference comes from
Revera-like lookups separate providers. Traps overlap the two slices.
Evidence@1 / evidence@5 by slice; counts, not percentages
Provider
Revera-liken = 12
OpenCode-liken = 12
Trapsn = 6
Exa
11 / 12
12 / 12
6 / 6
Parallel
8 / 12
12 / 12
5 / 6
Tavily
9 / 10
12 / 12
6 / 6
Brave
6 / 9
8 / 12
3 / 4
Firecrawl
4 / 5
8 / 11
2 / 3
Each cell: evidence@1 / evidence@5.
Inspect every question
Hover, focus or select a question to read it in full.
A multi-tenant Python service on pymongo 4.18.1 builds its MongoDB connection string by inserting a tenant-supplied hostname fragment into the host portion of the URI. Is it affected by the 2026 PyMongo connection-string host injection advisory, and which version fixes it?
A multi-tenant Python service on pymongo 4.18.1 builds its MongoDB connection string by inserting a tenant-supplied hostname fragment into the host portion of the URI. Is it affected by the 2026 PyMongo connection-string host injection advisory, and which version fixes it?
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:1 first evidence rank
Firecrawl:1 first evidence rank
Exa:1 first evidence rank
Parallel:3 first evidence rank
Tavily:1 first evidence rank
Brave:—miss
Firecrawl:—miss
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:1 first evidence rank
Firecrawl:1 first evidence rank
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:1 first evidence rank
Firecrawl:—miss
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:—miss
Firecrawl:—miss
Exa:1 first evidence rank
Parallel:3 first evidence rank
Tavily:—miss
Brave:1 first evidence rank
Firecrawl:—miss
Exa:1 first evidence rank
Parallel:2 first evidence rank
Tavily:1 first evidence rank
Brave:2 first evidence rank!
Firecrawl:2 first evidence rank
Exa:4 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:—miss
Firecrawl:—miss
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:5 first evidence rank
Firecrawl:1 first evidence rank
Exa:1 first evidence rank
Parallel:2 first evidence rank
Tavily:—miss
Brave:1 first evidence rank
Firecrawl:—miss
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:1 first evidence rank
Firecrawl:1 first evidence rank
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:2 first evidence rank
Firecrawl:4 first evidence rank
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:1 first evidence rank
Firecrawl:1 first evidence rank
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:1 first evidence rank
Firecrawl:1 first evidence rank
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:1 first evidence rank
Firecrawl:1 first evidence rank
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:4 first evidence rank
Firecrawl:—miss
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:2 first evidence rank
Firecrawl:1 first evidence rank
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:1 first evidence rank
Firecrawl:1 first evidence rank
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:1 first evidence rank
Firecrawl:1 first evidence rank
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:2 first evidence rank!
Firecrawl:3 first evidence rank
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:1 first evidence rank
Firecrawl:1 first evidence rank
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:1 first evidence rank
Firecrawl:1 first evidence rank
Exa:1 first evidence rank
Parallel:1 first evidence rank
Tavily:1 first evidence rank
Brave:1 first evidence rank
Firecrawl:2 first evidence rank
A blinded LLM judge, shown the same search results and read page, agreed
with the deterministic match (gold fact anywhere in that payload) on all
120 units: 115 supported,
5 insufficient, 0 contradicted.
No search call failed; 2 Brave reads failed in the shared reader.
Failures stay in the denominators.
Revera
Does search improve a PR review?
2 real breaking-change bugs, 2 clean PRs. The
grid includes confirmation reps; the table keeps the equal-sized quick pass
separate.
Task-by-task outcomes
One marker per run, in recorded order: quick pass, then confirmation runs
where available.
●Bug found / clean with no finding○Bug missed×Strict
clean-control finding Small amber dot: an uncertain comment was also filed (not a strict finding)
revera task outcomes, including all confirmation runs
Task
Exa
Parallel
Tavily
Brave
Firecrawl
No search
rv-commander15-negatebugUpdate deployment CLI dependencies and add tags
rv-got16-http2-agentbugRefresh relay HTTP dependencies and poll timeout
rv-got16-migratecleanRefresh the snapshot monitor transport
First run only. Costs and wall time are means per review; model prices are estimates.
revera quick pass results and mean per-run costs
Provider / profile
Bugs found
Strict clean- control findings
Uncertain
Model $
Search $
Wall s
Exaauto
2/2
0
0
$0.0726
$0.0075metered
40.0
Parallelfast
2/2
1
1
$0.1091
$0.0018estimate
49.1
Tavilyadvanced
2/2
1
0
$0.1108
$0.0220estimate
52.4
Braveweb
2/2
1
0
$0.0947
$0.0063estimate
45.7
Firecrawlsearch
2/2
0
1
$0.1177
$0.0040estimate
49.4
No searchbaseline
0/2
0
1
$0.0391
$0.0000not used
39.6
Every strict false positive was the same comment on the clean rv-got16-migrate PR (that agent: {http2: false} disables session pooling). The premise is correct per the Got 16 docs; adjudicated
as a reasonable non-blocking comment, not a hallucination.
No-search reviewers missed both bugs; on Commander 15 the no-search
reviewer asserted the old behavior.
An Exa review used about 1.9x the no-search model cost, with similar wall time.
OpenCode
Does search help the repair pass?
4 dependency-upgrade repairs, scored by hidden tests run
offline. Confirmation reps focus on oc-ai7.
Task-by-task outcomes
One marker per run, in recorded order: quick pass, then confirmation runs
where available.
●All tests pass○Task failed
opencode task outcomes, including all confirmation runs
Task
Exa
Parallel
Tavily
Brave
Firecrawl
No search
oc-ai7Restore the catalog assistant on the updated AI SDK
oc-execa10Restore the release command runner after a dependency update
oc-ky2Repair the inventory API client after its HTTP dependency update
oc-ts7-configBring the warehouse typecheck configuration forward
Quick pass · equal task counts
First run only. Costs and wall time are means per task; model prices are estimates.
opencode quick pass results and mean per-run costs
Provider / profile
All pass
Model $
Search $
Wall s
Exaauto
4/4
$0.1049
$0.0105metered
69.4
Parallelfast
3/4
$0.1053
$0.0013estimate
59.8
Tavilyadvanced
3/4
$0.1046
$0.0160estimate
60.7
Braveweb
3/4
$0.0890
$0.0063estimate
59.0
Firecrawlsearch
3/4
$0.1125
$0.0027estimate
55.6
No searchbaseline
4/4
$0.0590
$0.0000not used
54.5
Every lost run was on oc-ai7, with the same tsc error: the code used a non-generic ToolExecutionOptions, but it is generic in the installed ai@7.0.143 (in the quick pass, the web arms had copied it from docs). In repeat runs
oc-ai7 was noisy for every arm (Exa 2/3,
Firecrawl 1/3, none 2/3).
Search arms used about 1.8x the model spend of no search, without adding passes. One untested hypothesis:
the model already knows these releases.
Recommendations
Keep search useful. Keep it optional.
Revera: keep Exa auto
Exaauto
Keep web search opt-in. Keep Exa REST type:auto with highlights + /contents reads.
Raise highlight length to 2,000–4,000 chars. Cutting to 1,000 drops
Exa from 24/24 to 22/24 evidence@5.
Raise the page read cap with query-aware trimming: 6 of 24 Exa reads
had the first evidence past 6,000 chars.
Brave LLM Context (brave:llm-context) was blocked: OPTION_NOT_IN_PLAN on the key's Free AI plan. Listed as blocked, not
as a loss. Optional reranker ablation skipped.
Post-hoc additions,
What changed after the frozen evaluation?
The protocol allowed one baseline plus at most one alternative per provider, missing Firecrawl’s
Developer Index and Exa’s objective field. These additions are reported separately; the 2026-10-19 results
above are unchanged. One rep each, no LLM judge.
Retrieval: same-day controls
Same 24 holdout cases, with all five original profiles
rerun as controls. Compare new arms with these controls, not the earlier table.
USD/query includes search + read.
Swipe the table horizontally to compare all columns.
* exa:auto is cache-flattered: about half of searches were Exa cache hits; use exa:auto-uncached for latency.
Agents: one run per arm
4 Revera tasks and 4 OpenCode tasks.
Model USD means are list-price estimates per task.
Swipe the table horizontally to compare all columns.
Arm
Revera bugs found/available
Strict FPs
Uncertain
OpenCode all-pass/tasks
Revera model USD mean
OpenCode model USD mean
exa:auto-objective
2/2
0
0
3/4
$0.0746
$0.1053
firecrawl:developer
2/2
0
1
4/4
$0.1068
$0.1020
Both arms found both bugs. Firecrawl’s uncertain item was the same
defensible pooling comment described above. Exa missed oc-ai7, which
failed in some runs for every arm on
2026-10-19, including no search; the failing test was not
captured, so its cause is unchecked. This track still cannot rank
providers.
What the additions show
Firecrawl Developer Index improved evidence@5 to 19/24
vs 16/24 for general search.
It gained on library and migration questions; both Firecrawl modes found
evidence on only 2 of 6 security-advisory cases. Evidence usually came from
GitHub issues or PRs, not the canonical page (url@5: 5/24).
Exa’s objective field made no measurable difference in the
cache-controlled pair: the evidence rank changed in none of the 24
cases.
Exa dynamic highlights found evidence at rank 1 on 24/24
with about 9% fewer visible tokens. That is a
one-case improvement, within noise.
Exa lite matched auto on evidence at about 40% lower cost ($0.005
vs $0.008 per query).
Cache-free Exa auto is now 0.47 s search
p50, down from 4.5 s on 2026-10-19.
That is about as fast as Parallel fast (0.55 s).
Brave spellcheck:false returned identical results on all 24
cases.
Tavily’s control drifted from 22
to 20/24 evidence@5. Indexes change
over time.
Two problems found and fixed
Exa’s result cache ignores objective. The first comparison was voided
and rerun with cache-busting settings; use the uncached pair above.
Fixture dependencies were missing, so the first OpenCode rerun was
void. The harness now refuses to run in that state; the tasks were
rerun.
OpenCode: Exa and Parallel are now about equal on speed. Exa is
slightly better at rank 1 (23 vs 21); Parallel is about 4x cheaper. Exa lite is a middle option. These data do not settle it.
Firecrawl users: Developer Index for code questions. Neither Firecrawl
mode handled security advisories well. It still trails Exa and
Parallel on this set.
One tool contract for all providers: web_search returns at most 5 results; web_read reads only a returned result. Search responses have a 4,000-token cap;
reads have a 6,000-token cap.
Deterministic scoring against gold fact patterns. Failures stay in
denominators. Profiles were frozen from a pilot, not tuned on the
held-out results.
Small samples; only two Revera bugs, both version-upgrade bugs in JS
libraries. Do not read the ordering as a universal provider ranking.
Provider indexes change over time.
Model costs are list-price estimates, not proxy bills. Anthropic list-price estimate; proxy billing not visible.