cvm sql, CSV exports for spreadsheets, and phrasing guidance for board decks. Every number is grounded in the telemetry schema and labeled with its evidence basis so you can defend it under scrutiny.
What to report and where to find it
A complete monthly report has four parts: total spend, spend breakdown, savings evidence, and coverage. Use the console for quick visuals and SQL for reproducible numbers.Money columns are
NULL when a request is unpriced, not zero. Use count(column) to count covered rows and sum() to total covered spend. Do not add columns of different bases.Monthly spend by workflow, agent, or model
Run this query to produce the top-line spend breakdown for any month. Replace the--from and --to dates with your reporting period.
total_spend is measured spend at public catalog list price. It is not your provider invoice, but it is consistent month to month and includes every request that carried complete pricing. The avg_cost_per_request helps you spot workflows that are becoming more expensive, even if volume is flat.
Top cost drivers
To find the single largest contributors without grouping, run:Daily spend trend
A daily trend line makes spend visible and helps you spot anomalies:day against daily_spend. A spike on a single day usually means a model upgrade, a traffic surge, or a runaway loop in one workflow.
Coverage: how complete are your numbers?
Coverage is the share of traffic that carries complete, catalog-priced telemetry. Low coverage means your spend totals undercount reality. Compute it with:Savings by evidence label
Caveman does not expose a single “savings” SQL column that mixes evidence types. You read each label separately. For verified savings, use the column that exists in the schema:verified_savings_usd is NULL when the request does not meet the verified gate, so sum() covers only qualifying rows. The console Improvements → Verified savings page shows the same figure with a coverage line scoped to the counted method’s own minted rows.
For inferred headroom, use the console Cave Plan or Improvements views. Inferred headroom is a modeled per-day rate and is not directly queryable as a single SQL column. If you need it in a report, screenshot the console view and note the date range.
There is no SQL column for “total savings” or “realized savings.” Verified savings is the only production-grounded savings figure in the telemetry schema. Observed outcomes and inferred headroom are reported through console views, not summed into a single number.
Cost per request and latency quality
Cost per request is a leading indicator of efficiency. Track it alongside latency to show that optimization is not slowing your agents:p50) rather than average, because latency distributions have long tails. If a workflow’s cost drops but latency rises sharply, investigate before presenting it as a win.
Full monthly reporting template
Use this table as a template for your monthly report. Fill each cell with a query result or console screenshot.
Add a notes column for anomalies: a model upgrade, a new workflow launch, or a coverage gap that engineering is investigating.
CSV export for spreadsheets
Thecvm sql command exports directly to CSV with --format csv:
--format json or --format jsonl. In a terminal, table is the default. When you pipe cvm output to another command, it automatically switches to JSON.
How to phrase each number in a board deck
The same number can sound honest or inflated depending on phrasing. Use this table to present Caveman figures credibly:Caveman never floors negative verified savings to zero. A day can legitimately show a loss, and reporting it honestly builds credibility.
Retention limits and what they mean for reporting
When your organization sets a request-history window, the daily retention job deletes older rows fromrequests, spans, tool_events, and related tables. Reports, statements, and receipts refuse any range that reaches past the window with:
- HTTP status: 422
- Error code:
cave_retention_limited
1
Check your current window
Open Governance → Data to see
trace_retention_days. null means keep until deleted.2
Export data before the window trims it
Run monthly CSV exports and store them in your own systems.
3
Set a window that matches your reporting needs
If you need 13 months of history for annual reporting, set the window to at least 400 days before the end of your fiscal year.
Getting the data out automatically
For teams that want to schedule reports, usecvm sql in CI with a service token:
sql:read keys are limited to 101 rows, 128 KiB, and 15 seconds. Human sessions get up to 10,000 rows, 8 MiB, and 30 seconds.
If you need more rows, aggregate in SQL rather than downloading raw rows. For example, group by day and workflow instead of selecting every trace.
Next steps
Finance Overview
How Caveman measures spend, labels savings, and governs AI budgets.
Query with SQL
Full SQL catalog, permissions, and example queries for requests, spans, and evals.
Traces and Spend
Navigate traces, workloads, and spend in the Caveman console.
Savings Evidence
The technical contract for measured, inferred, verified, and observed savings.