Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Execute Hex production deployment checklist and rollback procedures. Use when deploying Hex integrations to production, preparing for launch, or implementing go-live procedures. Trigger with phrases like "hex production", "deploy hex", "hex go-live", "hex launch checklist".
.claude/skills/jeremylongshore-hex-prod-checklist/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 29% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 78% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -20% | 0% |
| case-12 | ✗→✓ | ▲ Improved | -6% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 27% | 0% |
Hex is a collaborative data analytics platform where teams build notebooks, dashboards, and scheduled data pipelines. A production integration triggers project runs, retrieves results, and monitors pipeline health via the Hex API. Failures mean stale dashboards, broken scheduled reports, or data pipelines that silently stop producing output for downstream consumers.
HEX_API_KEY stored in secrets manager (not config files)https://app.hex.tech/api/v1)typescriptasync function checkHexReadiness(): Promise<void> { const checks: { name: string; pass: boolean; detail: string }[] = []; // API connectivity try { const res = await fetch('https://app.hex.tech/api/v1/projects', { headers: { Authorization: `Bearer ${process.env.HEX_API_KEY}` }, }); checks.push({ name: 'Hex API', pass: res.ok, detail: res.ok ? 'Connected' : `HTTP ${res.status}` }); } catch (e: any) { checks.push({ name: 'Hex API', pass: false, detail: e.message }); } // Credentials present checks.push({ name: 'API Key Set', pass: !!process.env.HEX_API_KEY, detail: process.env.HEX_API_KEY ? 'Present' : 'MISSING' }); // Rate limit check try { const res = await fetch('https://app.hex.tech/api/v1/projects', { headers: { Authorization: `Bearer ${process.env.HEX_API_KEY}` }, }); const remaining = res.headers.get('x-ratelimit-remaining'); checks.push({ name: 'Rate Limit', pass: Number(remaining) > 5, detail: `${remaining} remaining` }); } catch (e: any) { checks.push({ name: 'Rate Limit', pass: false, detail: e.message }); } for (const c of checks) console.log(`[${c.pass ? 'PASS' : 'FAIL'}] ${c.name}: ${c.detail}`); } checkHexReadiness();
| Check | Risk if Skipped | Priority | |-------|----------------|----------| | API key expiration | All scheduled runs stop silently | P1 | | ERRORED run detection | Stale dashboards served to stakeholders | P1 | | Rate limit handling | Burst orchestration blocked by 429 | P2 | | Run duration regression | Slow pipelines delay downstream reports | P2 | | Project version pinning | Unexpected notebook changes break output | P3 |
See hex-security-basics for data connection security and access control.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-23 | fail→fail | 18,278 | 12,367 | -32% | 1 | 1 | 0% | 2,560 | 3,212 | +25% | 0 | 0 | — |
case-22 | fail→fail | 20,359 | 52,078 | +156% | 1 | 1 | 0% | 2,916 | 3,921 | +34% | 0 | 0 | — |
case-01 | fail→fail | 22,434 | 29,862 | +33% | 1 | 1 | 0% | 2,860 | 4,616 | +61% | 0 | 0 | — |
case-02 | pass→pass | 21,158 | 22,593 | +7% | 1 | 1 | 0% | 4,513 | 4,830 | +7% | 0 | 0 | — |
case-03 | fail→fail | 16,680 | 25,958 | +56% | 1 | 1 | 0% | 2,765 | 3,861 | +40% | 0 | 0 | — |
case-04 | fail→pass | 19,959 | 16,662 | -17% | 1 | 1 | 0% | 2,223 | 2,875 | +29% | 0 | 0 | — |
case-05 | pass→pass | 14,057 | 13,885 | -1% | 1 | 1 | 0% | 1,602 | 2,567 | +60% | 0 | 0 | — |
case-06 | fail→fail | 13,547 | 21,814 | +61% | 1 | 1 | 0% | 2,185 | 3,909 | +79% | 0 | 0 | — |
case-07 | pass→pass | 14,113 | 10,896 | -23% | 1 | 1 | 0% | 1,435 | 1,726 | +20% | 0 | 0 | — |
case-08 | fail→pass | 16,856 | 11,620 | -31% | 1 | 1 | 0% | 1,797 | 3,207 | +78% | 0 | 0 | — |
case-09 | fail→fail | 16,662 | 24,823 | +49% | 1 | 1 | 0% | 2,939 | 4,268 | +45% | 0 | 0 | — |
case-10 | pass→fail | 17,637 | 9,273 | -47% | 1 | 1 | 0% | 2,035 | 2,424 | +19% | 0 | 0 | — |
case-11 | fail→pass | 15,503 | 7,953 | -49% | 1 | 1 | 0% | 1,763 | 1,410 | -20% | 0 | 0 | — |
case-12 | fail→pass | 12,497 | 10,479 | -16% | 1 | 1 | 0% | 2,028 | 1,909 | -6% | 0 | 0 | — |
case-13 | pass→pass | 14,348 | 20,251 | +41% | 1 | 1 | 0% | 2,325 | 3,411 | +47% | 0 | 0 | — |
case-14 | pass→pass | 19,940 | 19,012 | -5% | 1 | 1 | 0% | 2,307 | 3,189 | +38% | 0 | 0 | — |
case-15 | pass→pass | 19,602 | 12,459 | -36% | 1 | 1 | 0% | 1,846 | 1,973 | +7% | 0 | 0 | — |
case-16 | fail→fail | 14,913 | 10,907 | -27% | 1 | 1 | 0% | 2,337 | 2,781 | +19% | 0 | 0 | — |
case-17 | fail→fail | 21,023 | 19,802 | -6% | 1 | 1 | 0% | 2,545 | 2,916 | +15% | 0 | 0 | — |
case-18 | fail→pass | 16,900 | 22,449 | +33% | 1 | 1 | 0% | 2,776 | 3,520 | +27% | 0 | 0 | — |
case-19 | fail→pass | 11,275 | 7,147 | -37% | 1 | 1 | 0% | 1,019 | 1,229 | +21% | 0 | 0 | — |
case-20 | fail→pass | 18,743 | 12,887 | -31% | 1 | 1 | 0% | 2,103 | 2,125 | +1% | 0 | 0 | — |
case-21 | fail→fail | 20,598 | 42,629 | +107% | 1 | 1 | 0% | 2,893 | 4,627 | +60% | 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. 23 cases were attempted. The headline lift of +26 percentage points is the difference between those two pass rates over the 23 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.