Claude-code-plugins-plus-skills gamma-hello-world
install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/gamma-pack/skills/gamma-hello-world" ~/.claude/skills/jeremylongshore-claude-code-plugins-plus-skills-gamma-hello-world && rm -rf "$T"
manifest:
plugins/saas-packs/gamma-pack/skills/gamma-hello-world/SKILL.mdsource content
Gamma Hello World
Overview
Generate your first presentation using Gamma's async Generate API. The workflow is: POST to create a generation, poll for status, then retrieve results (gammaUrl + exportUrl).
Prerequisites
- Completed
setupgamma-install-auth - Valid
environment variableGAMMA_API_KEY - Pro account with available credits
The Generate-Poll-Retrieve Pattern
All Gamma generations are asynchronous:
- POST
— submit content, receive/v1.0/generationsgenerationId - GET
— poll every 5s until/v1.0/generations/{generationId}
orcompletedfailed - Result —
(view in app) +gammaUrl
(download PDF/PPTX/PNG)exportUrl
Instructions
Minimal curl Example
# Step 1: Create generation GENERATION=$(curl -s -X POST \ "https://public-api.gamma.app/v1.0/generations" \ -H "X-API-KEY: ${GAMMA_API_KEY}" \ -H "Content-Type: application/json" \ -d '{ "content": "Create a 5-card presentation about the benefits of AI in business", "outputFormat": "presentation" }') GEN_ID=$(echo "$GENERATION" | jq -r '.generationId') echo "Generation started: $GEN_ID" # Step 2: Poll until complete (every 5 seconds) while true; do STATUS=$(curl -s \ "https://public-api.gamma.app/v1.0/generations/${GEN_ID}" \ -H "X-API-KEY: ${GAMMA_API_KEY}") STATE=$(echo "$STATUS" | jq -r '.status') echo "Status: $STATE" [ "$STATE" = "completed" ] || [ "$STATE" = "failed" ] && break sleep 5 done # Step 3: Retrieve results echo "$STATUS" | jq '{gammaUrl, exportUrl, creditsUsed}'
Node.js / TypeScript Example
const GAMMA_BASE = "https://public-api.gamma.app/v1.0"; const headers = { "X-API-KEY": process.env.GAMMA_API_KEY!, "Content-Type": "application/json", }; async function generatePresentation(content: string) { // Step 1: Create generation const createRes = await fetch(`${GAMMA_BASE}/generations`, { method: "POST", headers, body: JSON.stringify({ content, outputFormat: "presentation", }), }); if (!createRes.ok) throw new Error(`Create failed: ${createRes.status}`); const { generationId } = await createRes.json(); console.log(`Generation started: ${generationId}`); // Step 2: Poll for completion while (true) { const pollRes = await fetch(`${GAMMA_BASE}/generations/${generationId}`, { headers }); const result = await pollRes.json(); if (result.status === "completed") { console.log(`View: ${result.gammaUrl}`); console.log(`Download: ${result.exportUrl}`); console.log(`Credits used: ${result.creditsUsed}`); return result; } if (result.status === "failed") { throw new Error(`Generation failed: ${JSON.stringify(result)}`); } console.log(`Status: ${result.status}...`); await new Promise((r) => setTimeout(r, 5000)); } } // Run it await generatePresentation("Create a 5-card intro to machine learning");
Python Example
import os, time, requests BASE = "https://public-api.gamma.app/v1.0" HEADERS = { "X-API-KEY": os.environ["GAMMA_API_KEY"], "Content-Type": "application/json", } def generate_presentation(content: str) -> dict: # Step 1: Create resp = requests.post(f"{BASE}/generations", headers=HEADERS, json={ "content": content, "outputFormat": "presentation", }) resp.raise_for_status() gen_id = resp.json()["generationId"] print(f"Generation started: {gen_id}") # Step 2: Poll while True: poll = requests.get(f"{BASE}/generations/{gen_id}", headers=HEADERS) result = poll.json() if result["status"] == "completed": print(f"View: {result['gammaUrl']}") print(f"Download: {result['exportUrl']}") return result if result["status"] == "failed": raise Exception(f"Failed: {result}") print(f"Status: {result['status']}...") time.sleep(5) generate_presentation("5-card intro to sustainable energy")
Expected Output
{ "generationId": "gen_abc123", "status": "completed", "gammaUrl": "https://gamma.app/docs/Benefits-of-AI-abc123", "exportUrl": "https://export.gamma.app/gen_abc123.pdf", "creditsUsed": 42 }
Output Formats
| Result |
|---|---|
| Slide deck (default) |
| Long-form document |
| Web page |
| Social media content |
Error Handling
| Error | Cause | Solution |
|---|---|---|
| 401 on POST | Bad API key | Verify header |
| 422 on POST | Invalid parameters | Check and values |
| Generation could not complete | Simplify content or reduce card count |
| Poll timeout | Very large generation | Increase poll duration beyond 2 minutes |
Resources
Next Steps
Proceed to
gamma-core-workflow-a for advanced generation with themes, images, and export options.