Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Query a running Convex app's logs + health in natural language (official MCP): failures, slow/expensive functions, deploy causality — scoped, evidence-backed, with a dashboard deep link.
.claude/skills/get-convex-convex-insights/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 76% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -13% | 0% |
| case-16 | ✗→✓ | ▲ Improved | -6% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 45% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 287% | 0% |
<!-- GENERATED from convex-agents content/capabilities/convex-insights.json — do not edit by hand. -->
The deployment already records what happened; the agent just has to ask well. This capability is a disciplined wrapper over the official Convex MCP's read tools (logs, insights, functionSpec, status) that turns operational questions into narrow, evidence-returning queries and hands back answers a human can one-click verify in the dashboard. The discipline is copied from the observability MCP surface that works best in the wild: discover fields before querying, three views not fifteen tools, token-frugal output, and a dashboard deep link on every answer.
functionSpec to list the real function names and status for the deployment/version. Note the tool limits up front: logs takes only --history <n> (a COUNT, not a time window), --success, --jsonl, --prod, --deployment — there is NO server-side status/function/requestId/time filter; insights has no function filter and is cloud dev/prod + user-auth only. So you fetch a recent window and filter CLIENT-SIDE.logs --history <n> --jsonl, then locally keep failures + group by function + error message, returning counts + the first stack per group. Answers 'what's erroring', 'what failed after deploy'.insights (cloud only): the typed 72h read-limit / OCC events. Surface + rank them, but hand perf/cost ROOT-CAUSING and fixes to convex-advisor — emit those as pointer findings, do not own the perf-fix framing here.logs --history <n> --jsonl then locally filter to one requestId/function to read the full execution. Answers 'why did THIS call fail'.--history count) and filtering client-side to the function/status/requestId asked about; when the window is large, aggregate (counts by function/message) rather than dumping lines.status; correlate, don't assert.observability, with perf/cost as pointer findings to advisor — so a composite pass can pick them up.logs and insights have NO server-side status/function/requestId/time-window filter (logs takes only a --history COUNT; insights is cloud-only) — fetch a bounded recent window and filter CLIENT-SIDE; say so rather than implying params that don't exist.observability, route perf/cost as POINTER findings so advisor uniquely owns the perf-fix framing; forward-looking reaction goes to monitor/sentinel.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-04 | fail→pass | 16,464 | 14,842 | -10% | 1 | 1 | 0% | 1,976 | 3,477 | +76% | 0 | 0 | — |
case-05 | fail→pass | 15,449 | 5,640 | -63% | 1 | 1 | 0% | 2,026 | 1,760 | -13% | 0 | 0 | — |
case-01 | fail→fail | 18,340 | 9,060 | -51% | 1 | 1 | 0% | 2,080 | 1,670 | -20% | 0 | 0 | — |
case-02 | fail→fail | 15,773 | 8,641 | -45% | 1 | 1 | 0% | 2,154 | 1,532 | -29% | 0 | 0 | — |
case-03 | fail→fail | 8,334 | 7,517 | -10% | 1 | 1 | 0% | 367 | 1,622 | +342% | 0 | 0 | — |
case-16 | fail→pass | 15,802 | 7,127 | -55% | 1 | 1 | 0% | 2,145 | 2,017 | -6% | 0 | 0 | — |
case-06 | fail→fail | 13,702 | 7,345 | -46% | 1 | 1 | 0% | 2,166 | 1,561 | -28% | 0 | 0 | — |
case-07 | pass→pass | 10,462 | 16,545 | +58% | 1 | 1 | 0% | 1,433 | 3,370 | +135% | 0 | 0 | — |
case-08 | fail→pass | 15,487 | 18,323 | +18% | 1 | 1 | 0% | 2,417 | 3,499 | +45% | 0 | 0 | — |
case-09 | fail→pass | 7,787 | 7,189 | -8% | 1 | 1 | 0% | 573 | 2,219 | +287% | 0 | 0 | — |
case-10 | fail→pass | 8,226 | 14,145 | +72% | 1 | 1 | 0% | 1,132 | 3,393 | +200% | 0 | 0 | — |
case-17 | pass→fail | 11,432 | 6,090 | -47% | 1 | 1 | 0% | 1,784 | 1,351 | -24% | 0 | 0 | — |
case-11 | fail→fail | 4,324 | 5,310 | +23% | 1 | 1 | 0% | 656 | 1,386 | +111% | 0 | 0 | — |
case-12 | fail→pass | 13,741 | 8,595 | -37% | 1 | 1 | 0% | 2,481 | 2,279 | -8% | 0 | 0 | — |
case-13 | fail→fail | 11,451 | 18,785 | +64% | 1 | 1 | 0% | 1,668 | 3,722 | +123% | 0 | 0 | — |
case-14 | fail→fail | 15,141 | 8,340 | -45% | 1 | 1 | 0% | 2,175 | 1,625 | -25% | 0 | 0 | — |
case-15 | fail→fail | 7,957 | 7,938 | -0% | 1 | 1 | 0% | 979 | 1,413 | +44% | 0 | 0 | — |
case-18 | fail→pass | 2,452 | 9,233 | +277% | 1 | 1 | 0% | 314 | 2,490 | +693% | 0 | 0 | — |
case-19 | fail→fail | 14,482 | 2,448 | -83% | 1 | 1 | 0% | 2,122 | 1,299 | -39% | 0 | 0 | — |
case-20 | pass→pass | 2,192 | 4,193 | +91% | 1 | 1 | 0% | 447 | 1,737 | +289% | 0 | 0 | — |
case-21 | pass→pass | 6,478 | 9,235 | +43% | 1 | 1 | 0% | 1,160 | 2,094 | +81% | 0 | 0 | — |
case-22 | pass→pass | 20,169 | 15,743 | -22% | 1 | 1 | 0% | 3,252 | 4,108 | +26% | 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. 22 cases were attempted, and 15 counted toward the lift figure. The other 7 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 +32 percentage points is the difference between those two pass rates over the 15 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.