Understand your code. Fix what breaks.

An evidence-backed graph of your repo's architecture, and a pull-request reviewer on NVIDIA Nemotron through Nebius Token Factory.

Connect GitHubView on GitHub
tracehound-demo · component graphOpen See the architecture ↗
The component graph of tracehound-demo: cards for the API, queue, worker and shared code, joined by evidence edges.

Logos are trademarks of their owners and are used only to name the coding agents whose pull requests TraceHound reviews. No affiliation or endorsement.

Fig. 01 — The hound and the packEvery edge points at code.

Runs on

  • NVIDIA Nemotron
  • Nebius Token Factory
  • Docker sandbox

Built with

  • ts-morph
  • ELK
  • React Flow

The graph is the review surface

Read the architecture, not the diff.

TraceHound draws your repo as components and the evidence between them, then reviews each pull request against that map, and pins what it finds to the part of the system it touches.

TraceHound analyze

Your repo as a map, every edge cited

The analyzer reads a TypeScript repo with the compiler, groups its files into components, and draws only the edges it can point to in code.

  • Imports, routes, BullMQ queues, Redis, Prisma and env reads
  • Every edge cites a file, a symbol, a line range and its extractor
  • proven, resolved-default or dynamic: each edge says how sure it is
  • Nemotron Nano names components from facts, never from source

Powered byts-morph&ELK

pnpm tracehound analyze --repo ./Recall --config configs/recall.tracehound.json

SunnyBagal/Recall@5d2165a · analyzer 0.10.0

51 files · 7 components · 6 edges · 196 evidence · 2 warnings

naming: 4/4 named by nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B · 1,461 tokens · 4 cached · ~$0.00000

→ snapshots/5d2165aa9654f17a148f6663bc478a3fd9f7fc6b/0.10.0.json

 

# every edge cites code: 6 proven

# Recall API -produces-> Content Processing Queue index.ts:153

TraceHound review

Reviews that say what breaks

A GitHub Action reviews each pull request with Nemotron and posts the findings inline: the effect first, then the file and line, then a fix you can commit.

  • Two reviewers: the diff alone, and the diff with repository context
  • A verifier keeps only findings the code supports
  • Each fix is a GitHub suggestion, labelled model-generated, not tested
  • Saved reviews stay readable when GitHub's rate limit runs out

Powered byNVIDIA Nemotron&Nebius Token Factory

pull_request #6 on SunnyBagal/tracehound-demo

Demo: contracts catch an export rename in untouched consumers

pool-verify-v1 · pool 1 · kept 1 · posted 1 · fixes 1/1 valid

TraceHound: posted review with 1 findings.

 

recall-backend/services/linkDetector.ts:150

The exported function was renamed from detectLinkType to classifyLinkType, but the rename breaks the public contract with untouched consumers that still import detectLinkType, causing compilation errors for those files.

suggested fix · model-generated, not tested

TraceHound graph

Findings pinned where they land

Pick a pull request on the graph: the components it changed light up, the rest dim, and each finding hangs from the component that holds its file.

  • Changed files map to components through the snapshot, never a guess
  • Files in no component are listed, never dropped
  • The pull request is an overlay, labelled as one: it adds no edges
  • Open any finding on GitHub from the graph

Powered byReact Flow&ELK

open /graph?repo=tracehound-demo&pr=6

tracehound-demo @ efc5844 · 7 components · an overlay: no new edges

 

● lit Shared Utilities ← linkDetector.ts

○ dimmed 6 other components

· outside .github/workflows/tracehound-review.yml (in no component)

 

▲ pinned 1 finding → Shared Utilities

recall-backend/services/linkDetector.ts:150

TraceHound benchmark

Numbers you can check

The reviewer is scored on a public benchmark of 50 pull requests, with 10 held back as a blind test. Every loss is on the page.

  • An LLM judge maps each comment to a golden finding, or to none
  • 95% intervals from a pull-request-level bootstrap
  • Plans pre-registered before the blind run
  • Aggregate tables only, copied from docs/bench/results.md

Powered byNemotron 3 Super judge

docs/bench/results.md · the blind test

10 blind pull requests · n = 23 · bench-judge-v1

 

TraceHound v2 TP 12 · FP 7 · FN 11

precision 63.2% (12/19)

recall 52.2% (12/23)

F 57.1% point estimate

 

≈ statistically tied with four of five commercial reviewers

↑ ahead of one · 95% intervals, paired bootstrap

Built to be checked.

Every count below is read from a file committed in the repo, and a test fails if the page and the file disagree.

Every edge points at code

Each snapshot files its evidence like a card catalogue: one card per fact, at a file, symbol and line. The drawers are pulled out as far as each snapshot has evidence.

EVIDENCE · FILED BY SNAPSHOTfile · symbol · line range · extractorDEMO@efc5844277CEX@da0e3d6115RECALL@5d2165a196
RECALL @5d2165a196evidence7 / 6components / edges
CEX @da0e3d6115evidence9 / 17components / edges
DEMO @efc5844277evidence7 / 6components / edges

No model draws the graph

Every cable on the panel is an edge, tagged with the line that proves it, and no model plugs one in. The one model call is the label printer: Nemotron Nano names 4 of the 5 components from facts, and the call is logged in the snapshot.

NO MODEL · EVERY CABLE CITES A LINENEMOTRON NANOnames only · 4 of 5Queue ConfigRecall APIContent Processing QueueRecall Backend WorkerShared Recallindex.ts:15worker.ts:8index.ts:153worker.ts:111index.ts:11worker.ts:6

Cents per pull request

One coin is one cent. The reviewer the product runs costs $0.0626 per pull request at the median on 3.5 Super; the red band marks the costliest one. Judges excluded, pre-VAT.

0¢5¢10¢15¢20¢25¢30¢35¢¢ PER PULL REQUEST · PIPELINE ONLY · ONE COIN = ONE CENTmax $0.27243 Supermedian $0.03073 coinsmax $0.30313.5 Supermedian $0.06266 coins

Dev set, 3 Super n = 200, 3.5 Super n = 80 · docs/bench/results.md

Repairs happen in a sealed box

The repair agent works on the repo through the glove ports of a local Docker sandbox: not root, capabilities dropped, limits set, the network switched off before it starts.

uid 1000 · capabilities dropped2 CPUs2 GB512 pidsNETWORKOFFSEALED · NO MOUNTS · NO DOCKER SOCKET
  • Every edge: file, symbol, line range, extractor, confidence
  • Each finding labelled model-generated, not tested
  • The benchmark's test-set repository is refused, never reviewed

Change sets

Understand what agents write.

Don't read 2,040 lines. Read 8.

Recall commit 7943212 · 15 files · 1,913 added, 127 removed → 3 declarations added, 5 modified, 1 new edge

Diff → declarations

  1. The pull request15 files, 2,040 lines.
  2. Drop the files with no declaration9 under bench/, which Recall's config ignores; 2 that are not TypeScript.
  3. Open the 4 files left8 declarations: 3 added, 5 modified.
  4. Frame them by componentRecall API and Shared Recall, with the new calls edge at index.ts:320.

Component names written by Nemotron Nano from extracted facts.

The graph

How it works

Repo → graph

  1. FilesRecall's 15 backend files at 5d2165a, and the 18 imports between them.
  2. FactsA plate of facts rises: 4 queue calls and env reads, each on a thread down to its file and line.
  3. ComponentsThe graph plate rises with 5 components; every file takes its component's colour.
  4. Edges6 edges draw, and each drops a pin to the file and line that proves it.

Recall API, Content Processing Queue, Shared Recall and Recall Backend Worker were named by Nemotron Nano; Queue Config is set in Recall's config. Paths are under recall-backend/; analyzer 0.10.0.

Find → reproduce → repair → verify

findno model

A rule asks one narrow question

A rule over the graph reads the code at its evidence and emits a hypothesis that a single test can settle.

route-without-authfinder-rules@1

Does <METHOD> <path> respond with data or perform its action for a caller who sends no credentials?

reproduceNemotron

One test has to fail first

Nemotron writes one test for the claim. A fresh sandbox, independent of the agent, checks it.

repro-v1REPRODUCED

  • exactly one new test file, and nothing else
  • it fails on an AssertionError, with no new tsc error
  • the same cases fail on a second run
  • the per-test rule holds with the file in the suite

repairNemotron

The fix is made in a sealed box

Nemotron edits the repo in a local Docker sandbox; the network is off before the agent starts.

image
tracehound-sandbox:bun1.4.2-ts5.9.3-2
user
uid 1000, not root
capabilities
dropped
limits
2 GB · 2 CPUs · 512 pids
network
disconnected after setup
mounts
none, no Docker socket

verifyno model

The harness, not the agent, says done

The patch counts only when the reproduction test passes, the repo's own tests still pass and the typecheck adds no new error.

  • reproduction test
  • existing tests
  • typecheck

RESOLVED

The finder's claims have not been through the reproduce stage yet; the reproduce stage and the repair agent have run on seeded claims and tasks.

On NVIDIA Nemotron

Agents

Five agents, two of them deterministic. Pick one to see which model it calls.

{ }no modeldeterministicNemotron Nano30B-A3BNemotron Super120B-A12BAnalyzer

Models

NVIDIA
  • Nemotron Nanonvidia/NVIDIA-Nemotron-3-Nano-30B-A3BThe default for every model call.
  • Nemotron Supernvidia/nemotron-3-super-120b-a12bOnly when a run names it with --model.

Held-out evaluation

8 seeded tasks, graph on and graph off, Nano and Super, 5 repeats each: 160 runs.

The graph did not help the repair agent. It called a graph tool 0 times in 80 graph-on runs.

Held-out results, out of 40 runs per model and arm
ModelGraph onGraph off
Nemotron Nano, resolved11 of 4013 of 40
Nemotron Nano, verified at stop11 of 4019 of 40
Nemotron Super, resolved28 of 4026 of 40
Nemotron Super, verified at stop30 of 4031 of 40

docs/eval/heldout-results.md

Next

Roadmap

  1. NowSnapshots, CLI and viewerThe analyzer writes static snapshots; the agents run from the CLI in a local Docker sandbox.
  2. PlannedConnect a GitHub repoAnalyze a repo you connect, not only a pinned snapshot.
  3. PlannedLive code workingsThe graph shows the running system from real events.
  4. PlannedFindings to a pull requestThe findings pipeline runs through to a pull request.
  5. PlannedNebius SandboxesA second sandbox provider beside local Docker.

Every edge points at code

See your pull requests on the map.

Open the graph, pick a pull request, and read its findings where they land.