Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Upgrade Gamma SDK versions and migrate between API versions. Use when upgrading SDK packages, handling deprecations, or migrating to new API versions. Trigger with phrases like "gamma upgrade", "gamma migration", "gamma new version", "gamma deprecated", "gamma SDK update".
.claude/skills/jeremylongshore-gamma-upgrade-migration/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 1% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 34% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -35% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -6% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 13% | 0% |
!npm list 2>/dev/null | head -20 !pip freeze 2>/dev/null | head -20
Guide for upgrading Gamma SDK versions and migrating between API versions safely.
bashset -euo pipefail # Node.js npm list @gamma/sdk # Python pip show gamma-sdk # Check for available updates npm outdated @gamma/sdk
bashset -euo pipefail # View changelog npm info @gamma/sdk changelog # Or visit # https://gamma.app/docs/changelog
bashset -euo pipefail # Create upgrade branch git checkout -b feat/gamma-sdk-upgrade # Node.js - upgrade to latest npm install @gamma/sdk@latest # Python - upgrade to latest pip install --upgrade gamma-sdk # Or specific version npm install @gamma/sdk@2.0.0
Common Migration Patterns:
typescript// v1.x -> v2.x: Client initialization change // Before (v1) import Gamma from '@gamma/sdk'; const gamma = new Gamma(apiKey); // After (v2) import { GammaClient } from '@gamma/sdk'; const gamma = new GammaClient({ apiKey });
typescript// v1.x -> v2.x: Response format change // Before (v1) const result = await gamma.createPresentation({ title: 'Test' }); console.log(result.id); // After (v2) const result = await gamma.presentations.create({ title: 'Test' }); console.log(result.data.id);
typescript// v1.x -> v2.x: Error handling change // Before (v1) try { await gamma.create({ ... }); } catch (e) { if (e.code === 'RATE_LIMIT') { ... } } // After (v2) import { RateLimitError } from '@gamma/sdk'; try { await gamma.presentations.create({ ... }); } catch (e) { if (e instanceof RateLimitError) { ... } }
typescript// Check for type changes // tsconfig.json - ensure strict mode catches issues { "compilerOptions": { "strict": true, "noImplicitAny": true } } // Run type check npx tsc --noEmit
bashset -euo pipefail # Run unit tests npm test # Run integration tests npm run test:integration # Manual smoke test node -e " const { GammaClient } = require('@gamma/sdk'); const g = new GammaClient({ apiKey: process.env.GAMMA_API_KEY }); g.ping().then(() => console.log('OK')).catch(console.error); "
typescript// Enable deprecation warnings const gamma = new GammaClient({ apiKey: process.env.GAMMA_API_KEY, showDeprecationWarnings: true, }); // Migrate deprecated methods // Deprecated await gamma.getPresentations(); // New await gamma.presentations.list();
bashset -euo pipefail # If issues occur after upgrade git checkout main npm install # Restores previous version from lock file # Or explicitly downgrade npm install @gamma/sdk@1.x.x
Proceed to gamma-ci-integration for CI/CD setup.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 18,438 | 20,060 | +9% | 1 | 1 | 0% | 3,423 | 4,183 | +22% | 0 | 0 | — |
case-02 | fail→pass | 20,677 | 14,685 | -29% | 1 | 1 | 0% | 3,773 | 3,829 | +1% | 0 | 0 | — |
case-03 | fail→pass | 17,501 | 20,039 | +15% | 1 | 1 | 0% | 2,990 | 3,997 | +34% | 0 | 0 | — |
case-04 | fail→pass | 12,526 | 7,354 | -41% | 1 | 1 | 0% | 2,250 | 1,453 | -35% | 0 | 0 | — |
case-05 | fail→pass | 8,054 | 1,485 | -82% | 1 | 1 | 0% | 1,382 | 1,294 | -6% | 0 | 0 | — |
case-06 | pass→pass | 13,787 | 2,480 | -82% | 1 | 1 | 0% | 1,515 | 1,512 | -0% | 0 | 0 | — |
case-07 | fail→pass | 12,961 | 7,487 | -42% | 1 | 1 | 0% | 1,318 | 1,484 | +13% | 0 | 0 | — |
case-08 | fail→pass | 15,495 | 9,520 | -39% | 1 | 1 | 0% | 1,795 | 1,908 | +6% | 0 | 0 | — |
case-09 | pass→pass | 15,019 | 6,622 | -56% | 1 | 1 | 0% | 1,679 | 1,341 | -20% | 0 | 0 | — |
case-10 | pass→pass | 12,257 | 7,058 | -42% | 1 | 1 | 0% | 1,182 | 1,338 | +13% | 0 | 0 | — |
case-11 | pass→pass | 12,162 | 7,738 | -36% | 1 | 1 | 0% | 1,240 | 1,534 | +24% | 0 | 0 | — |
case-12 | fail→fail | 14,058 | 7,111 | -49% | 1 | 1 | 0% | 1,623 | 2,374 | +46% | 0 | 0 | — |
case-13 | pass→pass | 2,155 | 6,401 | +197% | 1 | 1 | 0% | 304 | 1,256 | +313% | 0 | 0 | — |
case-14 | pass→pass | 2,121 | 6,235 | +194% | 1 | 1 | 0% | 343 | 1,177 | +243% | 0 | 0 | — |
case-15 | pass→pass | 3,207 | 6,739 | +110% | 1 | 1 | 0% | 549 | 1,314 | +139% | 0 | 0 | — |
case-16 | pass→pass | 5,205 | 1,510 | -71% | 1 | 1 | 0% | 960 | 1,296 | +35% | 0 | 0 | — |
case-17 | pass→pass | 9,889 | 7,148 | -28% | 1 | 1 | 0% | 1,647 | 1,396 | -15% | 0 | 0 | — |
case-18 | fail→fail | 12,543 | 8,122 | -35% | 1 | 1 | 0% | 1,499 | 1,650 | +10% | 0 | 0 | — |
case-19 | pass→pass | 3,813 | 4,146 | +9% | 1 | 1 | 0% | 695 | 1,519 | +119% | 0 | 0 | — |
case-20 | pass→pass | 9,350 | 15,449 | +65% | 1 | 1 | 0% | 2,047 | 3,352 | +64% | 0 | 0 | — |
case-21 | pass→pass | 21,345 | 23,020 | +8% | 1 | 1 | 0% | 3,360 | 5,682 | +69% | 0 | 0 | — |
case-22 | pass→pass | 10,177 | 9,713 | -5% | 1 | 1 | 0% | 2,340 | 3,219 | +38% | 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. The headline lift of +27 percentage points is the difference between those two pass rates over the 22 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.