Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Production readiness checklist for Fathom API integrations. Trigger with phrases like "fathom production", "fathom go-live", "fathom checklist".
.claude/skills/jeremylongshore-fathom-prod-checklist/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 16% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 20% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -20% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 108% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 0% | 0% |
Fathom provides AI-powered meeting intelligence with automated transcription, summaries, and action item extraction. A production integration ingests meeting recordings, processes transcripts, and syncs action items to downstream systems. Failures mean lost meeting context, missed follow-ups, or transcript data leaking outside authorized channels. This checklist ensures reliable, compliant meeting data pipelines.
FATHOM_API_KEY stored in secrets manager (not environment files)https://api.fathom.video/v1)typescriptasync function checkFathomReadiness(): Promise<void> { const checks: { name: string; pass: boolean; detail: string }[] = []; // API connectivity try { const res = await fetch('https://api.fathom.video/v1/meetings?limit=1', { headers: { Authorization: `Bearer ${process.env.FATHOM_API_KEY}` }, }); checks.push({ name: 'Fathom API', pass: res.ok, detail: res.ok ? 'Connected' : `HTTP ${res.status}` }); } catch (e: any) { checks.push({ name: 'Fathom API', pass: false, detail: e.message }); } // Credentials present checks.push({ name: 'API Key Set', pass: !!process.env.FATHOM_API_KEY, detail: process.env.FATHOM_API_KEY ? 'Present' : 'MISSING' }); // Webhook endpoint reachable const webhookUrl = process.env.FATHOM_WEBHOOK_URL; if (webhookUrl) { try { const res = await fetch(webhookUrl, { method: 'HEAD' }); checks.push({ name: 'Webhook Endpoint', pass: res.ok, detail: `HTTP ${res.status}` }); } catch (e: any) { checks.push({ name: 'Webhook Endpoint', pass: false, detail: e.message }); } } else { checks.push({ name: 'Webhook Endpoint', pass: false, detail: 'URL not configured' }); } for (const c of checks) console.log(`[${c.pass ? 'PASS' : 'FAIL'}] ${c.name}: ${c.detail}`); } checkFathomReadiness();
| Check | Risk if Skipped | Priority | |-------|----------------|----------| | API key rotation | Expired key halts transcript pipeline | P1 | | Webhook verification | Spoofed payloads inject bad data | P1 | | PII retention policy | GDPR/CCPA violation on meeting data | P1 | | Empty transcript handling | Downstream systems crash on null | P2 | | Rate limit backoff | Bulk meeting import blocked by 429 | P3 |
See fathom-security-basics for meeting data privacy and consent patterns.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 27,218 | 31,977 | +17% | 1 | 1 | 0% | 5,303 | 5,655 | +7% | 0 | 0 | — |
case-02 | fail→fail | 19,900 | 32,144 | +62% | 1 | 1 | 0% | 3,275 | 5,963 | +82% | 0 | 0 | — |
case-03 | fail→fail | 26,661 | 23,482 | -12% | 1 | 1 | 0% | 3,996 | 5,645 | +41% | 0 | 0 | — |
case-04 | fail→pass | 14,669 | 10,168 | -31% | 1 | 1 | 0% | 2,019 | 2,350 | +16% | 0 | 0 | — |
case-05 | pass→pass | 13,097 | 15,645 | +19% | 1 | 1 | 0% | 1,923 | 3,221 | +67% | 0 | 0 | — |
case-06 | pass→pass | 13,610 | 15,437 | +13% | 1 | 1 | 0% | 2,097 | 3,384 | +61% | 0 | 0 | — |
case-07 | fail→pass | 11,659 | 8,375 | -28% | 1 | 1 | 0% | 1,800 | 2,159 | +20% | 0 | 0 | — |
case-08 | fail→pass | 12,380 | 3,320 | -73% | 1 | 1 | 0% | 1,849 | 1,486 | -20% | 0 | 0 | — |
case-09 | pass→pass | 14,454 | 11,432 | -21% | 1 | 1 | 0% | 1,900 | 2,635 | +39% | 0 | 0 | — |
case-10 | pass→fail | 16,588 | 17,774 | +7% | 1 | 1 | 0% | 2,751 | 4,078 | +48% | 0 | 0 | — |
case-11 | pass→pass | 13,485 | 11,044 | -18% | 1 | 1 | 0% | 1,861 | 2,591 | +39% | 0 | 0 | — |
case-12 | pass→pass | 14,325 | 10,040 | -30% | 1 | 1 | 0% | 2,284 | 2,660 | +16% | 0 | 0 | — |
case-13 | pass→pass | 15,147 | 3,720 | -75% | 1 | 1 | 0% | 2,065 | 1,585 | -23% | 0 | 0 | — |
case-14 | fail→pass | 5,275 | 2,793 | -47% | 1 | 1 | 0% | 649 | 1,353 | +108% | 0 | 0 | — |
case-15 | fail→pass | 10,109 | 2,665 | -74% | 1 | 1 | 0% | 1,349 | 1,355 | +0% | 0 | 0 | — |
case-16 | pass→pass | 13,556 | 4,975 | -63% | 1 | 1 | 0% | 2,094 | 1,749 | -16% | 0 | 0 | — |
case-17 | pass→pass | 18,132 | 16,875 | -7% | 1 | 1 | 0% | 2,865 | 3,820 | +33% | 0 | 0 | — |
case-18 | pass→pass | 17,831 | 6,334 | -64% | 1 | 1 | 0% | 2,535 | 1,813 | -28% | 0 | 0 | — |
case-19 | pass→pass | 13,812 | 17,339 | +26% | 1 | 1 | 0% | 2,317 | 3,653 | +58% | 0 | 0 | — |
case-20 | fail→pass | 17,440 | 10,822 | -38% | 1 | 1 | 0% | 2,448 | 2,967 | +21% | 0 | 0 | — |
case-21 | pass→pass | 22,325 | 24,818 | +11% | 1 | 1 | 0% | 4,456 | 5,174 | +16% | 0 | 0 | — |
case-22 | pass→pass | 16,286 | 15,439 | -5% | 1 | 1 | 0% | 2,151 | 3,186 | +48% | 0 | 0 | — |
case-23 | pass→pass | 11,404 | 13,508 | +18% | 1 | 1 | 0% | 2,029 | 2,853 | +41% | 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 +22 percentage points is the difference between those two pass rates over the 23 comparable cases. 1 case got worse with the skill loaded, and it is 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.