After some digging, here is why I suspect that cost shows $0.
.
It's not that cost data is missing. It's being exported through a different OTel signal. The plugin (diagnostics-otel) does capture cost.
When a model invocation completes, service.ts calls costCounter.add(evt.costUsd, attrs), exporting it as an OTel counter metric. But Phoenix reads span attributes, not metrics .
In recordModelUsage, only token counts are written to the span (openclaw.tokens.*), not cost.
So Phoenix queries the span, finds nothing, and reports $0.