What impressed me most while testing Traccia was that it didn’t just show LLM costs—it made those figures verifiable.
I connected a LangChain agent to an Anthropic model and ran more than 40 real API calls under different configurations. Traccia recorded the provider-reported token usage, the pricing data applied, and the version and age of the pricing snapshot. I calculated the costs independently and compared the totals, and they matched exactly without any double counting.
I also liked its OpenTelemetry-based design. It connected seamlessly to my existing Jaeger and Grafana stack without introducing a proprietary telemetry format. With observability tools, being able to migrate away matters almost as much as ease of adoption, and Traccia appears to have considered that.
There are still a few areas that could use more work in the current version. Automatic instrumentation did not capture direct Anthropic SDK calls in my environment, LangChain tool calls did not produce their own spans, and PII redaction did not cover every exported attribute. Before adopting it in production, I would verify the span tree using the exact framework and SDK versions in use, and inspect the exported data for sensitive information.
Even with those limitations, Traccia is worth trying for teams that want transparent and auditable LLM cost tracking. Teams already using an OpenTelemetry-based observability stack should find it especially easy to evaluate.
Traccia’s greatest strength is that it doesn’t just tell you how much an LLM call cost—it provides enough evidence to answer, “Why did it cost this much?”
Traccia
Hi Omri,
Thanks for the thoughtful review. At Traccia, we place a strong emphasis on being vendor-neutral, which is why we adopted an OpenTelemetry-native and model/framework-agnostic approach from day one.
Our goal is to complete the full chain of observability → evaluation → control → governance.
I agree with your point on runtime governance and failure behaviour. The specific scenario you describe is already addressed through the fail_open attribute in Traccia SDK’s @govern decorator, but I agree that this behaviour needs to be much more clearly documented upfront.
With fail_open enabled, a governed agent continues operating if Traccia is slow or temporarily unavailable, rather than becoming blocked on the policy check. This allows teams to explicitly choose their reliability posture and avoid introducing Traccia as a single point of failure in the agent's hot path.
We'll make this behaviour much more prominent in the documentation.
Thanks again!