Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Execute Hootsuite production deployment checklist and rollback procedures. Use when deploying Hootsuite integrations to production, preparing for launch, or implementing go-live procedures. Trigger with phrases like "hootsuite production", "deploy hootsuite", "hootsuite go-live", "hootsuite launch checklist".
.claude/skills/jeremylongshore-hootsuite-prod-checklist/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-14 | ✗→✓ | ▲ Improved | -10% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 48% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -36% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 2% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 0% | 0% |
Hootsuite manages social media publishing, scheduling, and analytics across multiple platforms (Twitter/X, LinkedIn, Facebook, Instagram). A production integration automates post scheduling, monitors engagement, and syncs analytics. Failures mean posts go out at wrong times, media uploads get rejected, or social profile disconnections go undetected, creating gaps in your publishing calendar.
HOOTSUITE_API_KEY and OAuth client secret in secrets managerhttps://platform.hootsuite.com/v1)typescriptasync function checkHootsuiteReadiness(): Promise<void> { const checks: { name: string; pass: boolean; detail: string }[] = []; // API connectivity try { const res = await fetch('https://platform.hootsuite.com/v1/me', { headers: { Authorization: `Bearer ${process.env.HOOTSUITE_API_KEY}` }, }); checks.push({ name: 'Hootsuite API', pass: res.ok, detail: res.ok ? 'Connected' : `HTTP ${res.status}` }); } catch (e: any) { checks.push({ name: 'Hootsuite API', pass: false, detail: e.message }); } // Credentials present checks.push({ name: 'API Key Set', pass: !!process.env.HOOTSUITE_API_KEY, detail: process.env.HOOTSUITE_API_KEY ? 'Present' : 'MISSING' }); // Social profiles connected try { const res = await fetch('https://platform.hootsuite.com/v1/socialProfiles', { headers: { Authorization: `Bearer ${process.env.HOOTSUITE_API_KEY}` }, }); const data = await res.json(); const count = data?.data?.length || 0; checks.push({ name: 'Social Profiles', pass: count > 0, detail: `${count} profiles connected` }); } catch (e: any) { checks.push({ name: 'Social Profiles', pass: false, detail: e.message }); } for (const c of checks) console.log(`[${c.pass ? 'PASS' : 'FAIL'}] ${c.name}: ${c.detail}`); } checkHootsuiteReadiness();
| Check | Risk if Skipped | Priority | |-------|----------------|----------| | Token refresh logic | All scheduled posts fail silently | P1 | | Profile disconnection | Publishing gap on key platforms | P1 | | Media rejection handling | Broken posts with missing images | P2 | | Timezone validation | Posts published at wrong local time | P2 | | Content moderation | Brand-damaging automated content | P3 |
See hootsuite-security-basics for social account protection and access control.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-14 | fail→pass | 14,668 | 1,972 | -87% | 1 | 1 | 0% | 1,504 | 1,348 | -10% | 0 | 0 | — |
case-01 | fail→fail | 24,283 | 20,753 | -15% | 1 | 1 | 0% | 3,507 | 3,977 | +13% | 0 | 0 | — |
case-02 | fail→pass | 27,123 | 29,713 | +10% | 1 | 1 | 0% | 3,478 | 5,151 | +48% | 0 | 0 | — |
case-03 | fail→fail | 32,765 | 31,125 | -5% | 1 | 1 | 0% | 5,143 | 7,015 | +36% | 0 | 0 | — |
case-04 | pass→pass | 11,682 | 8,544 | -27% | 1 | 1 | 0% | 1,205 | 1,615 | +34% | 0 | 0 | — |
case-05 | pass→pass | 16,948 | 16,139 | -5% | 1 | 1 | 0% | 1,985 | 3,025 | +52% | 0 | 0 | — |
case-06 | pass→pass | 19,528 | 13,163 | -33% | 1 | 1 | 0% | 2,524 | 3,253 | +29% | 0 | 0 | — |
case-07 | pass→pass | 14,784 | 9,404 | -36% | 1 | 1 | 0% | 2,333 | 1,725 | -26% | 0 | 0 | — |
case-08 | fail→pass | 14,977 | 2,026 | -86% | 1 | 1 | 0% | 2,189 | 1,407 | -36% | 0 | 0 | — |
case-09 | pass→pass | 11,459 | 12,193 | +6% | 1 | 1 | 0% | 2,226 | 3,548 | +59% | 0 | 0 | — |
case-10 | fail→pass | 13,755 | 8,165 | -41% | 1 | 1 | 0% | 1,578 | 1,605 | +2% | 0 | 0 | — |
case-11 | fail→pass | 13,101 | 1,782 | -86% | 1 | 1 | 0% | 1,304 | 1,307 | +0% | 0 | 0 | — |
case-12 | fail→pass | 17,167 | 3,338 | -81% | 1 | 1 | 0% | 1,841 | 1,590 | -14% | 0 | 0 | — |
case-13 | pass→pass | 16,916 | 4,070 | -76% | 1 | 1 | 0% | 1,805 | 1,599 | -11% | 0 | 0 | — |
case-15 | fail→pass | 7,450 | 7,051 | -5% | 1 | 1 | 0% | 323 | 1,379 | +327% | 0 | 0 | — |
case-16 | fail→pass | 6,838 | 8,860 | +30% | 1 | 1 | 0% | 1,170 | 1,704 | +46% | 0 | 0 | — |
case-17 | pass→pass | 27,745 | 20,472 | -26% | 1 | 1 | 0% | 3,182 | 3,657 | +15% | 0 | 0 | — |
case-18 | pass→pass | 19,092 | 15,947 | -16% | 1 | 1 | 0% | 1,892 | 2,474 | +31% | 0 | 0 | — |
case-19 | pass→pass | 18,481 | 21,914 | +19% | 1 | 1 | 0% | 3,253 | 4,068 | +25% | 0 | 0 | — |
case-20 | pass→pass | 15,066 | 15,055 | -0% | 1 | 1 | 0% | 1,550 | 2,754 | +78% | 0 | 0 | — |
case-21 | fail→pass | 13,597 | 3,291 | -76% | 1 | 1 | 0% | 1,523 | 1,525 | +0% | 0 | 0 | — |
case-22 | pass→pass | 22,295 | 12,940 | -42% | 1 | 1 | 0% | 2,875 | 3,197 | +11% | 0 | 0 | — |
case-23 | pass→pass | 22,074 | 18,544 | -16% | 1 | 1 | 0% | 2,562 | 3,898 | +52% | 0 | 0 | — |
case-24 | pass→pass | 15,445 | 20,873 | +35% | 1 | 1 | 0% | 2,900 | 3,819 | +32% | 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 +38 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.
Other measured skills in the registry, with their headline benchmark lift.