Gamma Performance TuningSAFE
Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com.
Overview
Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com.
4f83675ca38aOBSERVED · 2026-10-08Host compatibility
What the documentation claims. We have not run a compatibility test.
| Host | Status | Notes |
|---|---|---|
| claude-code | mentioned | |
| cursor | mentioned |
What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
--- name: gamma-performance-tuning description: 'Optimize Gamma API performance and reduce latency. Use when experiencing slow response times, optimizing throughput, or improving user experience with Gamma integrations. Trigger with phrases like "gamma performance", "gamma slow", "gamma latency", "gamma optimization", "gamma speed". ' allowed-tools: Read, Write, Edit version: 1.13.0 license: MIT author: Jeremy Longshore <[email protected]> tags: - saas - gamma - api - performance compatibility: Designed for Claude Code --- # Gamma Performance Tuning ## Output Publish a tuning receipt with baseline/post-change aggregate metrics, change owner, canary result, and rollback state. Do not include source content, viewer data, or tokens. ## Examples Optimize a fictional staging deck, compare aggregate load/render metrics, and roll back if a synthetic sharing or accessibility check regresses. ## Overview Optimize Gamma API integration performance. Gamma's generate-poll-retrieve pattern means most latency is in generation time (10-60s), not API call overhead. Optimize by: reducing poll overhead, parallelizing batch operations, caching results, and choosing the right generation parameters. ## Prerequisites - Working Gamma integration (see `gamma-sdk-patterns`) - Understanding of async patterns - Redis or in-memory cache (recommended) ## Performance Characteristics | Operation | Typical Latency | Notes | |-----------|----------------|-------| | POST `/generations` | 200-500ms | Just starts the generation | | GET `/generations/{id}` (poll) | 100-300ms | Per poll request | | Full generation (poll to completion) | 10-60s | Depends on content + cards | | GET `/themes` | 100-200ms | Cacheable | | GET `/folders` | 100-200ms | Cacheable | ## Instructions ### Step 1: Optimize Poll Strategy ```typescript // src/gamma/smart-poll.ts // Adaptive polling: start fast, slow down over time export async function smartPoll( gamma: GammaClient, generationId: string, opts = { maxTimeMs: 180000 } ): Promise<GenerateResult> { const deadline = Date.now() + opts.maxTimeMs; let interval = 2000; // Start at 2s while (Date.now() < deadline) { const result = await gamma.poll(generationId); if (result.status === "completed") return result; if (result.status === "failed") throw new Error("Generation failed"); // Adaptive backoff: poll faster early, slower later await new Promise((r) => setTimeout(r, interval)); interval = Math.min(interval * 1.5, 10000); // Max 10s between polls } throw new Error(`Poll timeout after ${opts.maxTimeMs}ms`); } ``` ### Step 2: Cache Static Data ```typescript // src/gamma/cache.ts import NodeCache from "node-cache"; const cache = new NodeCache({ stdTTL: 3600 }); // 1 hour for static data export async function getCachedThemes(gamma: GammaClient) { const key = "gamma:themes"; const cached = cache.get(key); if (cached) return cached; const themes = await gamma.listThemes(); cache.set(key, themes); return themes; } export async function getCachedFolders(gamma: GammaClient) { const key = "gamma:folders"; const cached = cache.get(key); if (cached) return cached; const folders = await gamma.listFolders(); cache.set(key, folders); return folders; } // Cache generation results (useful for showing status) export async function cacheGenerationResult( generationId: string, result: GenerateResult ) { cache.set(`gamma:gen:${generationId}`, result, 86400); // 24 hours } ``` ### Step 3: Parallel Batch Generation ```typescript // src/gamma/batch.ts import pLimit from "p-limit"; const limit = pLimit(3); // Max 3 concurrent generations export async function batchGenerate( gamma: GammaClient, requests: Array<{ content: string; exportAs?: string }> ): Promise<Array<{ index: number; result?: GenerateResult; error?: string }>> { const results = await Promise.allSettled( requests.map((req, index) => limit(async () => { const { generationId } = await gamma.generate({ content: req.content, outputFormat: "presentation", exportAs: req.exportAs, }); const result = await smartPoll(gamma, generationId); return { index, result }; }) ) ); return results.map((r, i) => { if (r.status === "fulfilled") return r.value; return { index: i, error: (r.reason as Error).message }; }); } ``` ### Step 4: Reduce Generation Time ```typescript // Shorter content = faster generation // "brief" text = fewer AI-generated words per card = faster // SLOWER: extensive text on many cards await gamma.generate({ content: "Comprehensive 20-card guide to machine learning...", outputFormat: "presentation", textAmount: "extensive", // More text per card = slower }); // FASTER: brief text, fewer implied cards await gamma.generate({ content: "5-card overview of ML basics: supervised, unsupervised, reinforcement, deep learning, applications", outputFormat: "presentation", textAmount: "brief", // Less text per card = faster }); // FASTEST: preserve mode (no AI text generation) await gamma.generate({ content: "Your pre-written slide content here...", outputFormat: "presentation", textMode: "preserve", // Uses your text as-is, no AI rewriting }); ``` ### Step 5: Preload Data at Startup ```typescript // src/gamma/preload.ts // Fetch themes and folders at app startup, not per-request let preloaded = false; export async function preloadGammaData(gamma: GammaClient) { if (preloaded) return; const [themes, folders] = await Promise.all([ gamma.listThemes(), gamma.listFolders(), ]); // Cache for the session cache.set("gamma:themes", themes, 0); // No TTL (until restart) cache.set("gamma:folders", folders, 0); preloaded = true; console.log(`Preloaded ${themes.length} themes, ${folders.length} folders`); } ``` ### Step 6: Connection Keep-Alive ```typescript // src/gamma/optimized-client.
Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (0)
No findings outside the package's declared scope.
Gates applied: no_behavioural_pass.
4f83675ca38afull audit observations/trust-audit/skill/jeremylongshore__gamma-performance-tuning.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-08 | 4f83675ca38a | SAFE | B | 89 | first audit |
Questions
What does the Gamma Performance Tuning skill do?
Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com.
Is Gamma Performance Tuning safe to install?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean skill reads B.
What can Gamma Performance Tuning access on my machine?
The audit observed no filesystem, network or shell use at all in its source.
Which assistants does Gamma Performance Tuning work with?
Its documentation mentions claude-code and cursor. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (4f83675ca38a), read on 2026-10-08. The repository is watched, and a new audit runs when it changes — this is the first audit.