Repository navigation
Independent benchmark of GitNexus 1.6.12 with Claude Code and Codex agents: results and data (mostly n=1) #3493
Replies: 4 comments 2 replies
Follow-up: a large Python repo (NousResearch/hermes-agent), impact questionsOur first round did not include a repo of this size, so we repeated the impact probes on hermes-agent.
Questions. We asked 8 questions of the form "we are about to add a required parameter to X — list every place that must change". Each question gave the exact target name, declaration file and line. We chose targets that are awkward for text search:
We excluded targets where more than 20% of the sites had to be judged by hand. Ground truth. The answer key is the set of lines that break under pyright 1.1.414, run on 3 platforms, plus 2 runtime-only sites we found by reading the code: 147 sites in all. An independent check with jedi plus code reading agreed with all 147. One site needed manual tracing.
|
| target | sites | symbols returned | site recall via caller coverage | symbol precision |
|---|---|---|---|---|
| format_bytes | 24 | 16 | 1.00 | 1.00 |
| _norm | 27 | 21 | 1.00 | 1.00 |
| _write | 13 | 11 | 1.00 | 1.00 |
| _fail | 20 | 7 | 0.50 | 1.00 |
| _section | 9 | 9 | 1.00 | 1.00 |
| CredentialPool.has_credentials | 27 | 25 | 0.93 | 1.00 |
| ProviderRegistry.export | 7 | 7 | 1.00 | 1.00 |
| normalize_provider | 20 | 16 | 0.90 | 1.00 |
Overall, the returned symbols covered 133 of 147 sites, and every returned symbol enclosed a ground-truth site. The uncovered sites:
- 6
_failcalls made through a function that returns a module (_pc()._fail(...)) (Python: calls on a module returned by a function (_pc().target()) get no CALLS edge (1.6.12) #3497); - 4
_failcalls inhermes_cli/plugin_packs.py, each importing_failinside the calling function; they resolve to an unrelated_failnested inside another function in that file, overriding the import (Python: a nested function captures same-named calls elsewhere in its file, overriding their imports (1.6.12) #3499); - two
CredentialPool.has_credentialssites (Python: annotated factory results lose receiver types through conditional expressions and module-qualified calls (1.6.12) #3498). One loses its receiver type throughx if c else None; the other is a factory call through a module object, and that module comes from a module-returning helper plus a re-export; - two runtime-only
normalize_providersites, which pyright misses as well.
Agents, 2 trials per question
Agents answered with file and line. A listed line matched a site if it was within ±2 lines of it. Recall and precision below are means over 16 runs per arm.
| arm | recall | precision | mean cost | GitNexus calls/run |
|---|---|---|---|---|
| Opus 5.5, no GitNexus (ripgrep + reads) | 1.000 | 0.998 | $0.50 | 0 |
| Opus 5.5, prompt says "use GitNexus first" | 1.000 | 0.998 | $0.55 | 0.2 |
Opus 5.5, prompt requires calling impact |
0.997 | 1.000 | $0.60 | 2.2 |
| GPT-6.1 Sol, no GitNexus | 1.000 | 1.000 | $0.17 | 0 |
| GPT-6.1 Sol, prompt says "use GitNexus first" | 1.000 | 1.000 | $0.22 | 3.1 |
- Accuracy and cost. Agent scores were near-perfect in every arm. Mean cost per run rose 10% for Opus's optional-GitNexus arm, 20% for its required arm and 30% for Sol's GitNexus arm. Sol's mean wall time rose from 39 s to 52 s, about 35%.
- Opus. Opus rarely called the GitNexus tools when only asked to (0.2 calls per run), even though they were connected and listed. When the prompt required them, it called them about twice per run. The one site any arm missed came from that required arm, and it is one the graph also misses. That is one run, so treat it as anecdotal; the overlap does not show that the tool result caused the miss.
- Sol. Sol followed the prompt, calling
list_repos,contextandimpactabout 3 times per run. - Caveat. Every question supplied the exact target name, file and line. These results say nothing about finding a symbol whose name you don't know, or about mostly untyped data flow.
A fix-task track on the same repo is still running: 8 real upstream bug fixes with hidden tests, using the same arms. We will post it here when it is graded.
|
@abhigyanpatwari @magyargergo @azizur100389, tagging you as the people listed in CODEOWNERS so this reaches you directly. We have summarised the core result of this Discussion as an issue: #3500. In short:
The issue lists the claims we tested, what we saw for each, and three concrete asks. The first is results from the repo's own One correction to our follow-up above: we stopped the hermes-agent fix-task track before the Opus setups finished, so we will post only the Sol results here. |
Follow-up: hermes-agent fix tasks (Sol only)These are the fix-task results promised above. As noted in the previous comment, we stopped the Opus setups early, so this covers Codex Sol 6.1 (medium effort) only. Tasks. 8 merged upstream fixes from NousResearch/hermes-agent: 2 small fixes, 3 that need some investigation, and 3 that touch several modules. The source PRs are NousResearch/hermes-agent #133157, #133012, #132997, #133229, #133231, #133004, #132773 and #133289. Setup.
2 trials per task per setup. Costs are estimated from token counts. Wall times exclude indexing and grading, and are indicative only, because the machine was loaded.
For this Sol setup on these eight tasks, GitNexus raised mean cost without improving hidden-test pass rates. This is the last benchmark result we plan to post. Issue #3500 has the summary and our asks. |
|
Thanks for putting this together and for being explicit about the sample sizes and limitations. The concrete repros are useful. We have been working on stabilizing GitNexus since 1.6.12 (
I would expect some measurements to move in either direction as this work lands: fewer missing results and duplicate payloads, but also extra validation work and more explicit reports of uncertainty. We need a rerun to quantify that. These fixes do not establish higher solve rates or lower end-to-end agent cost on the workloads here. We also checked the new reports against main. The rename, Python resolution, route/API extraction and inline-callback taint gaps still have reproducible causes. In particular, the truncated drop summary can still produce Please share the harness, task definitions and per-run patches/transcripts. For a follow-up, I'd pin both revisions, repair the stale workflow_bench oracles in #3492, and use repeated paired runs with a baseline with no GitNexus access. For the latest Hermes fix-task results, I'd keep a rebuilt-at-task-base index and the disclosed 14–301-commit-old nightly index as separate conditions, so we can measure freshness as well as tool value. |
Uh oh!
There was an error while loading. Please reload this page.
We tested several claims from the README, setup output, skills and
eval/workflow_benchagainst hidden tests and ground truth that we built without GitNexus. We are sharing the numbers as data for the maintainers. Most cells are one run, so small differences are noise. Related: #601 asked for benchmark data. The workflow_bench oracle problems we hit are in a separate issue: #3492.Issues filed from this bench: #3486 (rename), #3487 (route_map), #3488 (api_impact), #3489 and #3490 (taint), #3491 (explain line numbers), #3492 (workflow_bench).
Setup
c4ecf398), with embeddings enabled. Some tracks used a--pdgindex.claude-opus-5-5) through Claude Code 2.1.286, medium effort.gpt-6.1-sol) throughcodex exec, medium effort (high for review).claude-haiku-4-5-20251001) through Claude Code, medium effort.npx,.gitnexus/run.cjs) stubbed to "not found", and a one-line note that GitNexus is not available.rename, the repo skills and the AGENTS.md/CLAUDE.md block. Claude setups also got the PreToolUse/PostToolUse hooks (Codex has no equivalent).gitnexus-workdirect-mode prompt (Opus only).total_cost_usd; Codex costs are computed from token counts. Compare costs only within a batch.Results by track
1. Real bug fixes. 12 merged fixes with tests, mined from two public Python repos: 7 from electricsheephq/lcm-x and 5 from electricsheephq/WorldOS. 9 setups, n=1 per cell. "Resolved" means the hidden tests pass and the regression suite still passes.
2. Upstream's 4 workflow_bench tasks. Opus, with arms
baseline_nomcp,baseline(MCP) andworkflow_direct. 2 trials: a plain index, then a--pdgindex.workflow_directcost the most on all 8 task-trials.3. Impact. 10 symbols whose signature we changed. The TypeScript compiler's list of breaking sites is the ground truth, n=1 per symbol.
4. Rename. 6 targets, 3 of them heavily overloaded names (
close,resolve,declare). TypeScript's rename engine is the oracle.renametool. We scored the tool's own edit lists from those 6 runs, and applied them alone to fresh copies. They pass the oracle for 2 of 6 targets:5. Structural tools, called directly. Ground truth comes from the TypeScript AST and language service.
tool_mapfound 17 of 17 tools.route_mapfound 21 of 27 routes. It missed helper-registered streams, a regex catch-all,GET /api/infoandPOST /api/query, labelledALL /api/mcpas GET, and added 32 entries from tests and other servers.api_impactfound 0 of 9 consumers.route_map's misses.6. Taint (
--pdg). 3 seeded flows (command injection, path traversal, code injection) and 2 decoys, in Express routes.explainfound 0 of 3 flows.7. Review. Upstream's 6 labelled review cases, scored with upstream's rules, 2 trials.
gitnexus-reviewskillNo setup found a labelled blocking issue. All of Sol's hits were on one PR, so the 2-vs-4 gap is within noise.
8. Usage. How often each setup called GitNexus at all:
Limits
tsc --noEmitonly.What was not tested
What worked
tool_mapwas exact: 17 of 17 tools.query(BM25 plus embeddings) worked as a code-search tool. In an earlier, separate A/B (163 agent runs on 16 repos, with 70 answers blind-graded by a different model, so not mechanically graded like this bench), answers to find-and-understand questions were as accurate as ripgrep plus reading. Runs that used GitNexus cost 20-60% more.impactquestions were the one consistent gain in that A/B: Opus was 14% to 43% cheaper on 2 of 3 questions, at n=1 each.npx gitnexusor.gitnexus/run.cjswhen MCP is missing. With every entry point stubbed, our audit found 0 contaminated scored runs.Offer
We are happy to share the harness, the task definitions, the graders and ground truth, and the per-run patches and transcripts. We can also rerun a slice on a 1.6.13 release, or with
--runs 3, if that is useful. Corrections to our method are welcome.All reactions