Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Preview Convex spend — rank functions by bytes/documents-read × call-volume from insights, project each cost driver's growth curve, name the cheapest fix; confirm-cost for paid actions.
.claude/skills/get-convex-convex-cost/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | -1% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 307% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 63% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 30% | 0% |
<!-- GENERATED from convex-agents content/capabilities/convex-cost.json — do not edit by hand. -->
Cost surprises come from a handful of functions reading far more data than anyone realized — the same read-heavy patterns convex-advisor flags for perf, seen through the money lens. This capability makes spend legible: it reads the deployment's own bytes/documents-read evidence, attributes it to the functions driving it, projects how it grows with traffic, and names the cheapest fix. It also carries the confirm-cost discipline (Supabase's structural consent for paid actions): before anything metered, state the price and get an explicit yes.
insights for the bytes-read / documents-read events (the direct cost signal — Convex bills on function calls + bandwidth), tables for row counts (a table's size bounds its scan cost), functionSpec for the surface. If there's no usage/traffic yet, say so and estimate from the query SHAPES instead (a .collect() on a table projected to grow is a future cost even with zero traffic today)..collect() grows LINEARLY with the table (cost compounds as data accumulates); an indexed .take(n) stays flat. Give the user the shape of the curve ('this is O(table size) per call — fine at 1k rows, a bill at 1M'), not a false-precision dollar figure..withIndex instead of scan, .paginate/.take instead of .collect, an aggregate component for counts, caching a hot read — and emit it as a cost-class finding on the bus (evidence: the insight event + the projected growth) pointing at convex-expert/convex-advisor for the actual change.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | fail→fail | 19,913 | 6,077 | -69% | 1 | 1 | 0% | 2,820 | 1,309 | -54% | 0 | 0 | — |
case-01 | fail→fail | 26,426 | 34,257 | +30% | 1 | 1 | 0% | 3,948 | 4,543 | +15% | 0 | 0 | — |
case-02 | fail→fail | 29,446 | 4,339 | -85% | 1 | 1 | 0% | 6,064 | 1,527 | -75% | 0 | 0 | — |
case-04 | fail→fail | 8,996 | 4,244 | -53% | 1 | 1 | 0% | 1,411 | 1,116 | -21% | 0 | 0 | — |
case-05 | pass→pass | 10,677 | 12,631 | +18% | 1 | 1 | 0% | 1,700 | 2,696 | +59% | 0 | 0 | — |
case-06 | pass→pass | 14,333 | 9,533 | -33% | 1 | 1 | 0% | 2,160 | 2,438 | +13% | 0 | 0 | — |
case-07 | fail→pass | 19,138 | 13,847 | -28% | 1 | 1 | 0% | 3,374 | 3,355 | -1% | 0 | 0 | — |
case-08 | fail→pass | 4,808 | 11,244 | +134% | 1 | 1 | 0% | 584 | 2,377 | +307% | 0 | 0 | — |
case-09 | fail→fail | 7,989 | 9,248 | +16% | 1 | 1 | 0% | 1,330 | 2,516 | +89% | 0 | 0 | — |
case-10 | fail→fail | 10,605 | 9,792 | -8% | 1 | 1 | 0% | 1,486 | 2,553 | +72% | 0 | 0 | — |
case-11 | fail→fail | 10,072 | 5,178 | -49% | 1 | 1 | 0% | 1,325 | 1,648 | +24% | 0 | 0 | — |
case-12 | fail→pass | 7,546 | 8,494 | +13% | 1 | 1 | 0% | 1,229 | 2,008 | +63% | 0 | 0 | — |
case-13 | fail→pass | 14,490 | 8,114 | -44% | 1 | 1 | 0% | 2,016 | 2,277 | +13% | 0 | 0 | — |
case-14 | fail→fail | 13,927 | 13,106 | -6% | 1 | 1 | 0% | 2,112 | 2,541 | +20% | 0 | 0 | — |
case-15 | pass→fail | 14,292 | 15,083 | +6% | 1 | 1 | 0% | 2,313 | 3,562 | +54% | 0 | 0 | — |
case-16 | fail→pass | 13,281 | 9,834 | -26% | 1 | 1 | 0% | 1,873 | 2,432 | +30% | 0 | 0 | — |
case-17 | fail→fail | 12,980 | 8,888 | -32% | 1 | 1 | 0% | 1,825 | 2,159 | +18% | 0 | 0 | — |
case-18 | fail→pass | 9,030 | 7,649 | -15% | 1 | 1 | 0% | 1,563 | 1,823 | +17% | 0 | 0 | — |
case-19 | fail→pass | 10,750 | 6,194 | -42% | 1 | 1 | 0% | 1,420 | 1,875 | +32% | 0 | 0 | — |
case-20 | fail→pass | 20,991 | 27,016 | +29% | 1 | 1 | 0% | 2,809 | 4,629 | +65% | 0 | 0 | — |
case-21 | fail→pass | 16,276 | 8,424 | -48% | 1 | 1 | 0% | 2,500 | 2,114 | -15% | 0 | 0 | — |
case-22 | pass→pass | 18,846 | 18,016 | -4% | 1 | 1 | 0% | 2,480 | 3,803 | +53% | 0 | 0 | — |
case-23 | pass→pass | 6,132 | 5,173 | -16% | 1 | 1 | 0% | 914 | 1,716 | +88% | 0 | 0 | — |
case-24 | pass→pass | 8,844 | 6,101 | -31% | 1 | 1 | 0% | 1,197 | 1,903 | +59% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted, and 22 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +33 percentage points is the difference between those two pass rates over the 22 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.