candor · for coding agents

Stop paying agents to
re-derive your call graph.

Every time a coding agent asks “what does this change touch?”, it re-derives your call graph itself — reading files, grepping callers, reasoning chain by chain. It’s slow, it burns tokens, and it’s incomplete: it stops when it runs out of patience, not when it has found everything. candor computes that answer once, deterministically, and hands it over in a single query.

Wire it into your agent loop All of candor

Works with

Claude Code MCP CLI agents

Claude Code is first-class today (the edit-time Stop hook and the fleet audit); any agent that can run a command uses the same candor-query / CLI.

01 A cheap model + candor matches a frontier model

We measured it — two real ≈30k-LOC codebases, four model tiers, blind-graded against an independently-built ground truth. With candor, completeness is ~100% at every tier, because the answer is one deterministic query, not model effort. Without it, an agent’s completeness tracks model strength — and a weak model alone misses a third of the blast radius (and sometimes invents false ones).

Two line charts (git-delta and bottom): with candor, agents find ~100% of the true transitive blast radius at every model tier (Haiku, Sonnet, Opus, Fable); alone, completeness rises from ~60% at Haiku to ~99% at Fable.

02 The cost of one “what does this touch?” answer

Bar chart: an unaided agent spends roughly 17× more tokens, 50× more tool calls and 38× more wall-clock re-deriving the call graph than one candor query (~24k tokens, 1 tool call, ~8 seconds).

17×

Fewer tokens than re-deriving the blast radius by call-graph trace.

✓ one query ≈ 24k tokens

50×

Fewer tool calls — one candor-query, not dozens of greps.

✓ 1 tool call vs ~50

38×

Faster — seconds, not minutes of tracing.

✓ ~8 s vs minutes

The multiples above are one Opus-class agent on a real codebase; the direction isn’t tier-dependent or a lucky draw. A pre-registered serial A/B across all four model tiers (Haiku → Fable, 5 trials per cell) measured 1.9–3× faster answers at every tier — and with candor the answer never dropped a function (16/16 in all 20 trials), while the unaided weak tier dropped one in 4 of 5 runs, once after naming it in its own trace. The deterministic query is the recall floor, not model effort. Pre-registration and raw runs.

03 An edit-time guardrail

candor doesn’t just answer questions — it watches edits. A Stop hook blocks the agent’s turn and shows the non-local fallout of a change: which callers now perform I/O, how far it propagates, and whether it crossed a boundary you declared. It’s the consequence even capable models under-report — surfaced as the agent works, not in review.

04 Audit the fleet — candor-agents

A coding agent is one unit; a Claude Code project full of them is a fleet. candor-agents reads that fleet — its .mcp.json, settings, permissions, slash-commands and skills (what it may touch) and its session transcripts (what it actually did) — and reports the drift: a permission granted but never used, or an uncurated MCP tool quietly reaching the network. It emits the same spec-conformant candor reports, so the unmodified candor-query and policy grammar gate the fleet exactly as they gate code.

Get started For shipping code →

Completeness is exact from the 4-tier matrix; the cost multiples are measured on the blast-radius question (token-cost, speed and tool-call evals); the JVM replication of the multipliers is on the front page. The same call-graph + effect query works across every engine — the JVM, Rust, JavaScript/TypeScript (--allow-js for plain JS/Node), Swift — and agent fleets.

Work with the team behind candor

candor is built and run by Polymorphism — a small senior team that designs, builds and runs large systems for enterprise and government. The judgement we put into AI-code safety here is what we’d bring to your platform.

How we work Talk to the team