Agent skill

Gamma Local Dev Loop

by jeremylongshore in jeremylongshore/tons-of-skills-marketplace

Set up local development workflow for Gamma API integration.

MITAuto-check: notesBackend & APIs

Install Gamma Local Dev Loop

skills CLI
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill gamma-local-dev-loop -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jeremylongshore/tons-of-skills-marketplace gamma-local-dev-loop --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/.curated/gamma-local-dev-loop .claude/skills/gamma-local-dev-loop && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
gamma-local-dev-loop
GitHub stars
2.8k
Token cost
~1.9k tokens
SKILL.md length
236 words
Files
1
Skills in repo
3,342
Repo updated
First seen
Licence
MIT

At a glance

Set up local development workflow for Gamma API integration.

  • Works in 6 steps: Project Structure → Reusable Client Wrapper → Poll Helper with Timeout → …
  • Building automation scripts
  • SKILL.md covers Output, Examples, Overview and Prerequisites, plus 5 more sections
  • Calls npm and tsx; reaches public-api.gamma.app and gamma.app; needs GAMMA_API_KEY

What it does

Gamma Local Dev Loop is an agent skill from jeremylongshore/tons-of-skills-marketplace. Set up local development workflow for Gamma API integration. Use when building automation scripts, testing API calls locally, or configuring a dev environment with mock responses. Trigger: "gamma local dev", "gamma development setup", "gamma test locally", "gamma mock API", "gamma dev workflow".

Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: Designed for Claude Code

It sits in Backend & APIs, covering Third-party API integration. It works with npm and Node.js. The repository describes itself as: Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com. The licence is MIT.

When your agent uses it

  • Building automation scripts
  • Testing API calls locally
  • Configuring a dev environment with mock responses

Example prompts

  • “gamma local dev”
  • “gamma development setup”
  • “gamma test locally”
  • “/gamma-local-dev-loop”

Requirements

  • Node.js
  • A credential in GAMMA_API_KEY
  • Compatibility (from SKILL.md): Designed for Claude Code
  • Pre-approved tools (allowed-tools): Read, Write, Edit, Bash(curl:*), Bash(node:*), Bash(npm:*)

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Project Structure
  2. Reusable Client Wrapper
  3. Poll Helper with Timeout
  4. Mock Server for Offline Dev
  5. Development Scripts
  6. Integration Test

What it can do on your machine

Read from SKILL.md and the folder at commit 80f86df. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Write
    • Edit
    • Bash(curl:*)
    • Bash(node:*)
    • Bash(npm:*)

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm
    • tsx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • public-api.gamma.app
    • gamma.app
    • export.gamma.app

    Also links to:

    • developers.gamma.app

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • GAMMA_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Designed for Claude Code

    From compatibility in the SKILL.md frontmatter.

Context cost

Gamma Local Dev Loop loads about 1.9k tokens when it runs. Until then it costs about 79 tokens; SKILL.md has 236 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~79
When it runs · the whole SKILL.md, loaded when a task matches
~1.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:43
    - `GAMMA_API_KEY` in `.env`
  • NoteMentions a .env fileSKILL.md:58
    ├── .env                   # GAMMA_API_KEY (gitignored)
  • NoteMentions a .env fileSKILL.md:248
    EY required` | Missing env var | Add to `.env` or export |

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from jeremylongshore/tons-of-skills-marketplace at commit 80f86df, republished under its MIT licence (© jeremylongshore). 236 words, ~1,914 tokens.

Download SKILL.mdSave it as .claude/skills/gamma-local-dev-loop/SKILL.md (or your agent's skills folder).
name
gamma-local-dev-loop
description
Set up local development workflow for Gamma API integration. Use when building automation scripts, testing API calls locally, or configuring a dev environment with mock responses. Trigger: "gamma local dev", "gamma development setup", "gamma test locally", "gamma mock API", "gamma dev workflow".
allowed-tools
Read, Write, Edit, Bash(curl:*), Bash(node:*), Bash(npm:*)
compatibility
Designed for Claude Code
version
1.13.0
license
MIT
author
Jeremy Longshore <jeremy@intentsolutions.io>
tags
saas, gamma, development, testing

Gamma Local Dev Loop

Output

Create a local validation receipt with fixture version, schema result, owner, and redacted failure reference. Never commit private presentations, viewer data, or secrets.

Examples

Run offline tests using fictional presentation fixtures, verify logs are redacted and no production credential is required, then remove temporary artifacts after validation.

Overview

Set up an efficient local development workflow for Gamma API integrations. Since Gamma is a REST API with no SDK, the dev loop centers on HTTP request/response testing, mock servers for offline development, and a reusable client wrapper.

Prerequisites

  • Completed gamma-install-auth setup
  • Node.js 18+ with tsx for TypeScript execution
  • GAMMA_API_KEY in .env

Instructions

Step 1: Project Structure
gamma-integration/
├── src/
│   ├── client.ts          # Reusable Gamma API client
│   ├── generate.ts        # Generation workflows
│   └── poll.ts            # Polling helper
├── test/
│   ├── mock-server.ts     # Local mock for offline dev
│   └── integration.test.ts
├── .env                   # GAMMA_API_KEY (gitignored)
├── .env.example           # Template without secrets
├── package.json
└── tsconfig.json
Step 2: Reusable Client Wrapper
typescript
// src/client.ts
import "dotenv/config";

const GAMMA_BASE = "https://public-api.gamma.app/v1.0";

export interface GammaClient {
  generate(body: GenerateRequest): Promise<GenerateResponse>;
  poll(generationId: string): Promise<PollResponse>;
  listThemes(): Promise<Theme[]>;
  listFolders(): Promise<Folder[]>;
}

export function createClient(apiKey?: string, baseUrl?: string): GammaClient {
  const key = apiKey ?? process.env.GAMMA_API_KEY;
  if (!key) throw new Error("GAMMA_API_KEY required");
  const base = baseUrl ?? GAMMA_BASE;
  const headers = { "X-API-KEY": key, "Content-Type": "application/json" };

  async function request(method: string, path: string, body?: unknown) {
    const res = await fetch(`${base}${path}`, {
      method,
      headers,
      body: body ? JSON.stringify(body) : undefined,
    });
    if (!res.ok) {
      const text = await res.text();
      throw new Error(`Gamma ${res.status}: ${text}`);
    }
    return res.json();
  }

  return {
    generate: (body) => request("POST", "/generations", body),
    poll: (id) => request("GET", `/generations/${id}`),
    listThemes: () => request("GET", "/themes"),
    listFolders: () => request("GET", "/folders"),
  };
}
Step 3: Poll Helper with Timeout
typescript
// src/poll.ts
import type { GammaClient } from "./client";

export async function waitForCompletion(
  client: GammaClient,
  generationId: string,
  opts = { intervalMs: 5000, timeoutMs: 120000 }
) {
  const deadline = Date.now() + opts.timeoutMs;
  while (Date.now() < deadline) {
    const result = await client.poll(generationId);
    if (result.status === "completed") return result;
    if (result.status === "failed") throw new Error(`Generation failed: ${result.error}`);
    await new Promise((r) => setTimeout(r, opts.intervalMs));
  }
  throw new Error(`Poll timeout after ${opts.timeoutMs}ms`);
}
Step 4: Mock Server for Offline Dev
typescript
// test/mock-server.ts
import http from "node:http";

const MOCK_PORT = 9876;
const generations = new Map<string, { status: string; tick: number }>();

const server = http.createServer((req, res) => {
  res.setHeader("Content-Type", "application/json");

  // POST /v1.0/generations
  if (req.method === "POST" && req.url === "/v1.0/generations") {
    const id = `mock_${Date.now()}`;
    generations.set(id, { status: "in_progress", tick: 0 });
    res.end(JSON.stringify({ generationId: id }));
    return;
  }

  // GET /v1.0/generations/:id — completes after 3 polls
  const pollMatch = req.url?.match(/\/v1\.0\/generations\/(.+)/);
  if (req.method === "GET" && pollMatch) {
    const gen = generations.get(pollMatch[1]);
    if (!gen) { res.writeHead(404); res.end("{}"); return; }
    gen.tick++;
    if (gen.tick >= 3) gen.status = "completed";
    res.end(JSON.stringify({
      generationId: pollMatch[1],
      status: gen.status,
      ...(gen.status === "completed" && {
        gammaUrl: `https://gamma.app/docs/mock-${pollMatch[1]}`,
        exportUrl: `https://export.gamma.app/mock.pdf`,
        creditsUsed: 10,
      }),
    }));
    return;
  }

  // GET /v1.0/themes
  if (req.url === "/v1.0/themes") {
    res.end(JSON.stringify([
      { id: "theme_1", name: "Professional" },
      { id: "theme_2", name: "Modern" },
    ]));
    return;
  }

  // GET /v1.0/folders
  if (req.url === "/v1.0/folders") {
    res.end(JSON.stringify([{ id: "folder_1", name: "Test Folder" }]));
    return;
  }

  res.writeHead(404);
  res.end("{}");
});

server.listen(MOCK_PORT, () => console.log(`Mock Gamma API on :${MOCK_PORT}`));
Step 5: Development Scripts
json
{
  "scripts": {
    "dev:mock": "tsx test/mock-server.ts",
    "dev:generate": "tsx src/generate.ts",
    "test": "vitest run",
    "test:integration": "GAMMA_BASE=http://localhost:9876/v1.0 vitest run test/integration"
  }
}
Step 6: Integration Test
typescript
// test/integration.test.ts
import { describe, it, expect } from "vitest";
import { createClient } from "../src/client";
import { waitForCompletion } from "../src/poll";

const BASE = process.env.GAMMA_BASE ?? "http://localhost:9876/v1.0";

describe("Gamma API", () => {
  const client = createClient("test-key", BASE);

  it("generates and polls to completion", async () => {
    const { generationId } = await client.generate({
      content: "Test presentation",
      outputFormat: "presentation",
    });
    expect(generationId).toBeTruthy();

    const result = await waitForCompletion(client, generationId);
    expect(result.status).toBe("completed");
    expect(result.gammaUrl).toContain("gamma.app");
  });

  it("lists workspace themes", async () => {
    const themes = await client.listThemes();
    expect(themes.length).toBeGreaterThan(0);
  });
});

Dev Loop Summary

ActivityCommandHits Live API?
Start mock servernpm run dev:mockNo
Generate (mock)GAMMA_BASE=http://localhost:9876/v1.0 npm run dev:generateNo
Run testsnpm test (uses mock)No
Live API testGAMMA_API_KEY=gma_... tsx src/generate.tsYes

Error Handling

IssueCauseFix
GAMMA_API_KEY requiredMissing env varAdd to .env or export
Mock returns 404Wrong mock port/pathVerify GAMMA_BASE points to mock
Poll timeout locallyMock tick count too highReduce tick threshold
fetch is not definedNode.js < 18Upgrade to Node.js 18+

Resources

Next Steps

Proceed to gamma-sdk-patterns for reusable API wrapper patterns.

© jeremylongshore, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/.curated/gamma-local-dev-loop of jeremylongshore/tons-of-skills-marketplace.

Open the folder on GitHubat commit 80f86df

Compare with similar skills

Gamma Local Dev Loop next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Gamma Local Dev Loop compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Gamma Local Dev Loop this skilljeremylongshore/tons-of-skills-marketplace2.8k—~1.9kAutomated safety check: NotesMIT
starknet.js SDK Referenceinternet-court/internet-court-skill6.5k1 repos~3.5kAutomated safety check: NotesApache-2.0
Tiger Brokers TypeScript SDKqusong0627/QuantMind1.7k—~939Automated safety check: PassMIT
ToolJet Marketplace Plugin BuilderToolJet/ToolJet41k—~2.1kAutomated safety check: PassAGPL-3.0
Compileapache/skywalking-nodejs180—~1.3kAutomated safety check: PassApache-2.0
OpenAPI CLI CallerEvilFreelancer/openapi-to-cli265—~879Automated safety check: PassMIT

Similar skills

  • starknet.js SDK Reference

    internet-court/internet-court-skill

    Reference for building Starknet apps with starknet.js v9: providers, accounts, contract calls, fee estimation, wallet integration and paymaster flows.

    6.5k GitHub starsUsed in 1 repo~3.5k tokens
    Backend & APIsAuto-check: notes
  • Tiger Brokers TypeScript SDK

    qusong0627/QuantMind

    Reference skill for the Tiger Brokers OpenAPI TypeScript SDK: setup, market data, trading, account queries, options and real-time push subscriptions.

    1.7k GitHub stars~939 tokensUpdated today
    Business, Finance & HRAuto-check passed
  • Turns an API description, such as an OpenAPI file or a Postman collection, into a connector plugin for ToolJet's marketplace and checks it with the repo's validator.

    41k GitHub stars~2.1k tokensUpdated today
    Backend & APIsAuto-check passed
  • Compile

    apache/skywalking-nodejs

    Compile / build / type-check the skywalking-nodejs agent. An agent skill from apache/skywalking-nodejs.

    180 GitHub stars~1.3k tokensUpdated 23 days ago
    Backend & APIsAuto-check passed
  • OpenAPI CLI Caller

    EvilFreelancer/openapi-to-cli

    Turns an OpenAPI, Swagger or OpenRPC spec into CLI commands the agent can search and call, with no MCP server or code generation.

    265 GitHub stars~879 tokensUpdated 17 days ago
    Backend & APIsAuto-check passed
  • Adds crypto checkout to a web app with PayRam: create a payment from your backend, send the customer to the payment page, then confirm the result.

    158 GitHub stars~3.4k tokensUpdated today
    Backend & APIsAuto-check: notes

More from jeremylongshore/tons-of-skills-marketplace

All 3,342 skills in this repo
  • Performing Security Code Review

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to conduct a security-focused code review using the security-agent plugin.

    2.8k GitHub starsUsed in 2 repos~1.3k tokens
    Auto-check: notes
  • Adapting Transfer Learning Models

    jeremylongshore/tons-of-skills-marketplace

    Build this skill automates the adaptation of pre-trained machine learning models using transfer learning techniques.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Agent Context Loader

    jeremylongshore/tons-of-skills-marketplace

    Execute proactive auto-loading: automatically detects and loads agents.md files.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Aggregating Performance Metrics

    jeremylongshore/tons-of-skills-marketplace

    Aggregate and centralize performance metrics from applications, systems, databases, caches, and services.

    2.8k GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Analyzing Capacity Planning

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to analyze capacity requirements and plan for future growth.

    2.8k GitHub stars~947 tokensUpdated today
    Auto-check passed
  • Analyzing Database Indexes

    jeremylongshore/tons-of-skills-marketplace

    Process use when you need to work with database indexing. An agent skill from jeremylongshore/tons-of-skills-marketplace.

    2.8k GitHub stars~2k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Gamma Local Dev Loop

What does Gamma Local Dev Loop do?

Set up local development workflow for Gamma API integration. Gamma Local Dev Loop is an agent skill from jeremylongshore/tons-of-skills-marketplace. Set up local development workflow for Gamma API integration.

When should I use Gamma Local Dev Loop?

Gamma Local Dev Loop fits situations like: building automation scripts; testing API calls locally; configuring a dev environment with mock responses.

How do I install Gamma Local Dev Loop in Claude Code?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill gamma-local-dev-loop -a claude-code`. Or copy the skill folder (skills/.curated/gamma-local-dev-loop in jeremylongshore/tons-of-skills-marketplace) into .claude/skills/gamma-local-dev-loop in your project. Claude Code loads it when a task matches its description.

How do I install Gamma Local Dev Loop in Codex?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill gamma-local-dev-loop -a codex`. Or copy the skill folder (skills/.curated/gamma-local-dev-loop in jeremylongshore/tons-of-skills-marketplace) into .agents/skills/gamma-local-dev-loop in your project. Codex loads it when a task matches its description.

Can I use Gamma Local Dev Loop in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill gamma-local-dev-loop -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/gamma-local-dev-loop, .gemini/skills/gamma-local-dev-loop, .github/skills/gamma-local-dev-loop and .opencode/skills/gamma-local-dev-loop in your project.

What does Gamma Local Dev Loop need to run?

Going by SKILL.md and its folder, Gamma Local Dev Loop needs the command-line tools its instructions call (npm and tsx) and credentials named GAMMA_API_KEY. Our summary lists: Node.js; A credential in GAMMA_API_KEY. Its frontmatter pre-approves these tools: Read, Write, Edit, Bash(curl:*), Bash(node:*), Bash(npm:*). Compatibility (from SKILL.md): Designed for Claude Code.

Does Gamma Local Dev Loop access the network?

SKILL.md names 4 domains. In commands or code: public-api.gamma.app, gamma.app and export.gamma.app; the agent is likely to contact these when it follows the instructions. As links in the text: developers.gamma.app. This is read from the text; nothing was executed.

Is Gamma Local Dev Loop safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Gamma Local Dev Loop use?

Gamma Local Dev Loop is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Gamma Local Dev Loop use?

About 1.9k tokens (SKILL.md is roughly 7.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Gamma Local Dev Loop?

Skills that share tags, products or a category with Gamma Local Dev Loop: starknet.js SDK Reference (internet-court/internet-court-skill, 6.5k stars), Tiger Brokers TypeScript SDK (qusong0627/QuantMind, 1.7k stars), ToolJet Marketplace Plugin Builder (ToolJet/ToolJet, 41k stars) and Compile (apache/skywalking-nodejs, 180 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Gamma Local Dev Loop?

jeremylongshore (a GitHub user) maintains it in jeremylongshore/tons-of-skills-marketplace, which has 2,825 GitHub stars. The repository holds 3,342 skills in this directory. The repository was last updated on October 9, 2026.

Source: jeremylongshore/tons-of-skills-marketplace on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.