Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Read post-launch quality signals with gplay `vitals` — crash/ANR and other rates, error reports, Play-detected anomalies; entirely read-only, on a distinct reporting scope. Use when checking crash/ANR health after a rollout, investigating a spike, pulling vitals into a CI gate, or reading clustered crash issues and stack traces.
.claude/skills/pollyglot-gplay-vitals/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-18 | ✗→✓ | ▲ Improved | -24% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -24% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-24 | ✗→✓ | ▲ Improved | 1% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -13% | 0% |
gplay vitals reads Android vitals: the rate presets below, error reports, and Play-detected anomalies. Shared conventions are in gplay-cli-usage.
Two things set this namespace apart:
Reporting API, with its own OAuth scope. A service account invited only for publishing gets a 403 (exit 11) on every vitals call until the reporting scope is granted: an environment fix, not a flag.
--confirm, and GPLAY_READONLY never blocksit.
One preset per vital, 28-day DAILY window by default:
bashgplay vitals crashes # crash rate (on the pinned package) gplay vitals anr # ANR rate gplay vitals slowstart # slow cold-start rate gplay vitals slowrendering # janky-frames rate gplay vitals excessivewakeup # excessive wakeup rate gplay vitals lmk # low-memory-kill rate gplay vitals stuckbgwakelock # stuck background wakelock rate
All presets share the same knobs:
bashgplay vitals crashes --by versionCode --version 123 # slice, then filter to one build gplay vitals anr --since 7d --period HOURLY # window: 28d default; HOURLY opt-in
vitals query: full controlWhen you need more than a preset's primary metric, vitals query <metric-set> wraps the metric set directly:
bashgplay vitals query crashrate --metrics crashRate,distinctUsers --dimensions versionCode gplay vitals query anrrate --period HOURLY --since 24h gplay vitals query bitmapmemoryusage --since 28d --dimensions versionCode
--metrics/--dimensions/--period are validated offline against the embedded schema (an unknown name lists the valid set). Two memory sets have no preset and are query-only, DAILY only: anonrssandswapmemoryusage and bitmapmemoryusage.
vitals errors: reports, issues, countsbashgplay vitals errors counts # error report counts over a window gplay vitals errors issues # clustered issues, crashes/ANRs grouped by cause gplay vitals errors reports # individual error reports (the stack traces)
Obfuscated (R8/ProGuard) stacks stay unreadable until the versionCode's mapping is uploaded under releases (--mapping on releases upload, or releases mappings upload): see gplay-release-flow.
vitals anomalies: what Play flagged itselfbashgplay vitals anomalies --since 90d gplay vitals anomalies --filter 'activeBetween("2026-01-01T00:00:00Z", UNBOUNDED)'
--filter (raw AIP-160) overrides --since for an open-ended range; --limit 0 returns all.
Metrics land with a lag: every rate/query command prints a freshness note to stderr (the latest date carrying data). A short window right after a release stays empty until data lands; the freshness line is the bound, and an empty window means unknown, not zero. --describe on a preset or query returns the set's latest available end time instead of a timeline: ask it before choosing a window.
One jq line over --output json (the API timeline verbatim).
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-12 | pass→pass | 17,011 | 6,733 | -60% | 1 | 1 | 0% | 1,762 | 1,243 | -29% | 0 | 0 | — |
case-01 | pass→pass | 15,244 | 10,529 | -31% | 1 | 1 | 0% | 1,563 | 1,489 | -5% | 0 | 0 | — |
case-02 | pass→pass | 21,775 | 10,255 | -53% | 1 | 1 | 0% | 3,291 | 1,480 | -55% | 0 | 0 | — |
case-03 | pass→pass | 16,754 | 8,569 | -49% | 1 | 1 | 0% | 2,398 | 1,320 | -45% | 0 | 0 | — |
case-18 | fail→pass | 15,550 | 7,457 | -52% | 1 | 1 | 0% | 1,514 | 1,157 | -24% | 0 | 0 | — |
case-04 | fail→pass | 41,764 | 11,651 | -72% | 1 | 1 | 0% | 2,419 | 1,842 | -24% | 0 | 0 | — |
case-05 | pass→pass | 18,669 | 7,482 | -60% | 1 | 1 | 0% | 1,887 | 1,843 | -2% | 0 | 0 | — |
case-06 | fail→pass | 20,518 | 9,712 | -53% | 1 | 1 | 0% | 1,086 | 1,474 | +36% | 0 | 0 | — |
case-07 | pass→pass | 28,922 | 11,254 | -61% | 1 | 1 | 0% | 2,529 | 1,689 | -33% | 0 | 0 | — |
case-24 | fail→pass | 25,119 | 21,888 | -13% | 1 | 1 | 0% | 3,596 | 3,623 | +1% | 0 | 0 | — |
case-08 | pass→pass | 47,345 | 3,898 | -92% | 1 | 1 | 0% | 2,924 | 1,285 | -56% | 0 | 0 | — |
case-09 | fail→pass | 14,876 | 9,769 | -34% | 1 | 1 | 0% | 1,602 | 1,393 | -13% | 0 | 0 | — |
case-10 | pass→pass | 17,328 | 3,007 | -83% | 1 | 1 | 0% | 1,823 | 1,197 | -34% | 0 | 0 | — |
case-11 | pass→pass | 51,230 | 8,994 | -82% | 1 | 1 | 0% | 2,097 | 1,334 | -36% | 0 | 0 | — |
case-13 | fail→pass | 14,862 | 3,331 | -78% | 1 | 1 | 0% | 2,339 | 1,245 | -47% | 0 | 0 | — |
case-14 | pass→pass | 19,836 | 15,310 | -23% | 1 | 1 | 0% | 2,688 | 1,519 | -43% | 0 | 0 | — |
case-15 | fail→pass | 15,645 | 3,703 | -76% | 1 | 1 | 0% | 2,270 | 1,251 | -45% | 0 | 0 | — |
case-16 | fail→pass | 16,260 | 3,350 | -79% | 1 | 1 | 0% | 2,200 | 1,253 | -43% | 0 | 0 | — |
case-17 | fail→pass | 15,795 | 13,815 | -13% | 1 | 1 | 0% | 2,257 | 2,053 | -9% | 0 | 0 | — |
case-19 | fail→pass | 26,689 | 11,710 | -56% | 1 | 1 | 0% | 1,769 | 1,445 | -18% | 0 | 0 | — |
case-20 | fail→pass | 12,940 | 8,764 | -32% | 1 | 1 | 0% | 2,141 | 1,373 | -36% | 0 | 0 | — |
case-21 | fail→pass | 18,977 | 9,749 | -49% | 1 | 1 | 0% | 1,832 | 1,489 | -19% | 0 | 0 | — |
case-22 | fail→pass | 16,839 | 9,083 | -46% | 1 | 1 | 0% | 2,146 | 1,262 | -41% | 0 | 0 | — |
case-23 | pass→pass | 11,602 | 2,710 | -77% | 1 | 1 | 0% | 1,056 | 1,139 | +8% | 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. The headline lift of +54 percentage points is the difference between those two pass rates over the 24 comparable cases.
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.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 9/7/2026 | +82% |
| gemini-3.6-flash | verified | 8/24/2026 | +76% |
| gemini-3.6-flash | verified | 8/4/2026 | +77% |
Other measured skills in the registry, with their headline benchmark lift.