Build1 distinct publisher3 min readUpdated
A new open-source linter reads agent traces after the run and exits non-zero on structural defects. The interesting part is the exit code contract, not the rules.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
A developer has published tracelint, a linter that reads an agent's execution trace after the run, flags structural bugs deterministically with the offending trace lines as evidence, and returns a CI exit code, with no second model judging the output [1]. The bug it opens with is the one worth building around: a `charge_card` tool returned a 402 and the agent kept going and told the customer their order shipped [2].
That is not a made-up fact. It is a structural defect in the run, and per the write-up it is decidable by looking at the trace [3]. The author's argument against using an LLM judge here is a fitness argument rather than a purity one: published trace-error benchmarks show judges have low localization accuracy, telling you something seems off without reliably pointing at which step, and they are also non-deterministic, cost money per trace, and cannot gate CI [4].
The decidable set, as described, is small and boring in the right way. Tool call arguments that violate the tool's JSON Schema, which you settle by running the validator [5]. A tool that returned an error followed by the agent proceeding as if it had not [6]. The same tool called five times with identical arguments and identical results [7]. Arguments that appear nowhere in what the agent observed, as a candidate hallucinated value [8].
The part operators should read closely is the exit code contract. `tracelint check ./trace.json --tools ./tools.json` returns 0 for clean, 2 for a structurally-provable defect, and 3 for an input error, and heuristic findings never fail CI on their own [9][10]. Only provable things such as a schema violation or malformed JSON are hard defects; loops, redundant calls and suspicious arguments surface as candidates with evidence for a human, on the stated reasoning that a retry loop and a stuck loop look structurally similar [11]. Two sample findings from an OpenInference run illustrate the split: an R4 loop on `search` at steps 2, 4 and 6, and an R5 redundant_call at steps 2 and 6, both tagged candidate [12]. Under the documented contract that run does not fail a build [13].
The other design decision that earns its place: if a trace is missing a field a rule needs, such as tool schemas or result payloads, the rule does not silently pass. It suppresses with a stated reason [14]. Silent passes are how linters lose trust.
Ingest is where the distribution case sits. tracelint reads OpenInference, the OpenTelemetry semantic convention for AI, plus Langfuse and OpenAI message formats, so the claim is that you point it at spans you already emit into Phoenix, Langfuse or an OTel collector rather than learning a trace format [15][16]. There is a Python entry point, `lint_otel_trace`, that takes Phoenix dataframe records and returns a report with an exit code [17]. The author says validation ran against real OpenInference exports rather than only hand-built fixtures, and reports that on one real Phoenix trace the linter localized a genuine failure: rule R2a, step 9, `add_spans_to_dataset` returned a GraphQL error [18][19]. `pip install tracelint`, then `tracelint demo --html demo.html` runs a keyless suite with one planted instance of every defect plus clean controls [20][21].
Worth watching: whether the hard-defect tier stays narrow enough that a 2 always means a real bug, and whether the candidate tier stays useful or becomes noise teams filter out. The suppression list is the honest metric here. If most rules suppress on your traces for want of schemas or payloads, the linter is telling you your instrumentation is thin, which is a different repair job than fixing the agent.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
tracelint is described as a linter for agent runs: it reads the execution trace and flags structural bugs deterministically, with the exact trace lines as evidence and a CI exit code, running after the run on the trace rather than on the code, with no second model judging it.
The opening example: the charge_card tool returned a 402 and the agent kept going and told the customer their order shipped.
The author characterises an ignored tool error as a structural defect in the run rather than a hallucination, and says structural defects are decidable by looking at the trace.
One structurally decidable defect: a tool call whose arguments violate the tool's JSON Schema, resolved by running the schema validator.
Another structurally decidable defect: a tool that returned an error, followed by the agent proceeding as if it had not.
Another listed defect: the same tool called 5 times with identical arguments and identical results, described as a stuck loop.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Self-documented and locally reproducible, externally unverified
The mechanism is specified in unusual detail for a single post — exact CLI invocation, three exit codes, tier semantics, suppression output, format flags and a Python API — and the demo path is reproducible offline without keys, which gives a reader real verification leverage. But the entire cluster is one author-written post about the author's own tool: the benchmark claim used to dismiss LLM judges is uncited, the 'real export' validation is self-reported with no dataset or error rates, and no independent source corroborates any behaviour.
Published package, no external users disclosed
Adoption evidence stops at existence: the package is installable and MIT-licensed, and the only runs described are the author's own demo suite and validation exports. There are no download figures, stars, named users, CI integrations at other teams, or third-party reports in the supplied material, and the post closes by soliciting real traces — an explicit signal that outside usage is still being sought.
Mildly overstated: strong category claim, zero traction shown
The post is notably self-limiting — candidates are not verdicts, suppressed rules are printed, and a limitations list states it does not judge answer correctness — which keeps the gap small. The overstatement is in the framing rather than the tooling: a broad category claim that LLM judges are the wrong instrument rests on uncited benchmarks, the headline promise of catching failures 'in CI' applies only to the hard tier (the published loop sample would not fail a build), and no adoption exists behind the confident tone.
Author promoting own package
The source is a first-person launch post by the creator of the tool it assesses, repeating install commands, positioning against the incumbent LLM-judge approach, and soliciting issues and user traces to drive contribution. That is a direct promotional incentive with no disclosure and no independent counterweight in the cluster. It is tempered only by the MIT licence and the absence of any paid tier, pricing or funding pitch in the supplied text.
Low: one self-interested source, reproducible mechanics
Confidence is limited by structure, not by internal contradiction: a single publisher, a single author, an unmistakable promotional incentive and no external verification. What raises it above the floor is that the operative claims are mechanical and checkable — commands, exit codes, tiers, suppression output — so a reader can confirm or refute them without trusting the author.
leadership
ClickHouse buys Langfuse, turning a neutral tracing layer into someone's roadmap1 distinct publisher
build
The third answer: a dead-code tool allowed to say "not traced yet"1 distinct publisher
build
Force the tool call, then hand Lightsail a long-lived key1 distinct publisher
product
OpenTelemetry is free; the collector fleet, the retention policy and the on-call rota are not1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 17, 2026