gumroad

gumroad is a skill for Claude Code, Codex from antiwork/gumroad-cli. It costs 341 tokens per session (16,657 once invoked), scanned A, original, MIT.

A command-line tool for managing Gumroad, a service for selling digital products online. It can look up and change products, files, sales, subscribers, licenses, payouts, emails, discounts, webhooks, and refunds.

In plain words
What is it for?
Use it to query Gumroad records, upload product files, manage products and subscribers, process refunds, create email workflows and broadcasts, and work with licenses, offer codes, payouts, and webhooks.
Why use it?
It lets you handle Gumroad data from scripts or a terminal instead of working through the website or manually interpreting prompts. Preview and machine-readable options help make automated actions easier to check.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one. Also seen: positional $N argument; mentions Claude Code.

Good fit Use it to query Gumroad records, upload product files, manage products and subscribers, process refunds, create email workflows and broadcasts, and work with licenses, offer codes, payouts, and webhooks.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/antiwork/gumroad-cli/gumroad
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add antiwork/gumroad-cli --skill gumroad
Clone the repo
git clone --depth 1 https://github.com/antiwork/gumroad-cli

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for gumroad

README.md
[![agentmods](https://agentmods.dev/badge/skills/antiwork/gumroad-cli/gumroad/github.svg)](https://agentmods.dev/skills/antiwork/gumroad-cli/gumroad)
Your own site
<a href="https://agentmods.dev/skills/antiwork/gumroad-cli/gumroad"><img src="https://agentmods.dev/badge/skills/antiwork/gumroad-cli/gumroad/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for gumroad

Your own site · 80×15
<a href="https://agentmods.dev/skills/antiwork/gumroad-cli/gumroad"><img src="https://agentmods.dev/badge/skills/antiwork/gumroad-cli/gumroad.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 341 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 16,657 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector warn 7 Sept 2026
SkillSpector: 2 findings, up to high

These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →

  • high YARA Match · line 31
    YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).
    Fix: Remove offensive tool references and exploit code. Legitimate agent skills should not contain penetration testing tools, exploit frameworks, or reconnaissance utilities.
  • medium Excessive Agency · line 36
    Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
    Fix: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state.
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00341 $0.16657
Opus 5.5 $0.00136 $0.06663
Sonnet 5.5 $0.00068 $0.03331
Haiku 4.5 $0.00034 $0.01666

Measured today against content hash 786ea102290f, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

gumroad scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/gumroad/SKILL.md · 810 lines

How it starts

The opening of the file, as written. The whole thing — 810 lines — stays where its author put it; the contents beside it link to each section on GitHub.

gumroad CLI

Use gumroad (Gumroad CLI) to query and manage Gumroad data.

Agent invariants

Always follow these rules:

  • Always pass --no-input to prevent interactive prompts from blocking.
  • Always pass --json for programmatic access.
  • Use --json --jq <expr> together to extract exactly what you need.
  • For operations that can prompt for confirmation (delete, refund, workflow step adds, workflow delay changes, mutating admin actions, files abort, files complete replay, product updates that remove files, or products content set when omitted page IDs will be deleted), add --yes to skip confirmation.
  • Pass --quiet to suppress spinners and status messages.
  • Pass --dry-run to preview mutating requests without executing them.
  • Use --page-delay 200ms with --all to avoid rate limits on large datasets.
  • Prices are in whole currency units (e.g. --price 10.00 for $10), not cents. The CLI converts internally. Use --currency eur to change currency.
  • Products are published immediately on create. Pass --draft to save an unpublished draft instead, then gumroad products publish <id> to make it live; gumroad products unpublish <id> takes a published product down. If the account cannot publish yet (unconfirmed email, no payout method), create still succeeds but saves a draft and prints the reason.
  • Product cover and thumbnail uploads support JPEG, PNG, and GIF. WebP is not supported by the API and the CLI rejects it before upload.
  • Product custom HTML landing pages use gumroad products page preview <id> ./landing.html to run the backend sanitizer without writing, gumroad products page publish <id> ./landing.html to store the page, gumroad products page clear <id> --yes to remove it, and gumroad products page url <id> to print the live URL. --dry-run only previews the CLI request body; it does not call the backend sanitizer. Inspect .sanitization_report in preview and publish JSON output for server-side changes.
  • Profile custom HTML landing pages mirror the product commands without a product id and without checkout: gumroad user page preview ./landing.html, gumroad user page publish ./landing.html (read from stdin with -), gumroad user page clear --yes, and gumroad user page url (prints the public profile URL and its /landing/embed URL). A profile has no buy button, so omit data-gumroad-action="buy" and the checkout data attributes; link to products instead.
  • Storefront pages (slugged pages serving at <username>.gumroad.com/<slug>) use gumroad pages list, gumroad pages create --title <title> [--slug <slug>] [path] (with an HTML path or - the page is created as custom HTML; without one it starts empty for the in-app editor), gumroad pages pull <slug> to download a page's existing custom HTML so pull → edit → push is a real round trip (writes <slug>.html; -o <path> to choose, -o - for stdout; refuses to overwrite without --force; errors with a hint when the page has no custom HTML), gumroad pages scaffold <slug> to generate starter HTML for a rich-text page or a default profile from a static snapshot of its current render (same flags as pull; pushing the scaffold converts the page to custom HTML and replaces the dynamic storefront/editor experience), gumroad pages push <slug> ./page.html to replace a page with custom HTML, and gumroad pages preview ./page.html to run the backend sanitizer without publishing. The loop for going custom: pull (or scaffold when there's no custom HTML yet) → edit → preview → push. --json/--jq on pull/scaffold still write the file and additionally print the raw API response; combining them with -o - is rejected since both would own stdout. The special slug profile targets the profile landing page (pull profile downloads your published custom HTML, scaffold profile snapshots the default storefront render when none is published; push uses the same endpoints as user page publish). Custom HTML pages require the seller's custom_html_pages feature to be enabled; without it writes fail with an access message. Writes to slugged pages (pages create/pages push <slug>) also require the token to carry the edit_profile scope — tokens minted before the CLI requested that scope get a 403 telling them to re-run gumroad auth login.
  • Product rich content uses gumroad products content list <id> --json --no-input to inspect page IDs, gumroad products content get <id> --json --no-input to dump the shared rich_content page array, and gumroad products content set <id> content.json --dry-run --json --no-input to preview a whole-document replacement. Without an explicit path, whole-document set reads ./content.json; set --page reads ./page.json. Use --page <page_id> with get/set to edit one matching page object; set --page still sends a merged whole-document PUT. For a multi-page course, products content upload <id> course.json takes a manifest of {pages:[{id,title,files:[path|{path,name,description}]}]} and writes the product once per page instead of once per file, recording finished uploads and pages in a resume file (--state) so a rerun after an interruption never uploads or places anything twice. For per-variant content, pass both --variant <variant_id> and --category <cat_id>. Whole-document set deletes existing pages omitted from the JSON.
  • Custom HTML pages can use data-gumroad-field="name", data-gumroad-field="price", data-gumroad-field="description", and data-gumroad-action="buy". To preselect checkout state, add data-gumroad-option="<variant name>", data-gumroad-quantity="<integer>", data-gumroad-price="<decimal>", or data-gumroad-recurrence="monthly|quarterly|biannually|yearly|every_two_years". Production validates these values and falls back to product defaults when invalid. Prefer anchors for buy CTAs so production can add a checkout href; non-anchor buy elements also post to checkout.
  • Custom HTML pages cannot embed a video player from YouTube, Vimeo, or any other site. The page sandbox blocks those players, so the server removes every <iframe> and says why in .sanitization_report. A video file hosted by Gumroad still plays in a <video> tag. To show a video from another site, link to it with target="_blank" so it opens in a new tab. To show a YouTube thumbnail in that link, download https://i.ytimg.com/vi/<video-id>/hqdefault.jpg, upload it with gumroad media upload, and use the returned .media.url in an <img> inside the link.
  • Audience emails are created as drafts by default. Use gumroad emails send-preview <id> --json --no-input and inspect .preview_url before gumroad emails send <id> --yes --json --no-input. Creating with --send publishes and blasts immediately, so use --dry-run first and require explicit human approval. To schedule a send instead of blasting immediately, create the draft then gumroad emails schedule <id> --at "<RFC3339>" --json --no-input; gumroad emails unschedule <id> returns a scheduled email to draft.
  • Workflow email writes do not change the workflow publication state. Adding a step to a published workflow can schedule eligible past recipients. Changing a delay can reschedule recipients. Use --dry-run before each write.
  • If a command fails with a seller auth error, run gumroad auth status --json --no-input first. Agents can start seller auth with gumroad auth login --no-input and hand the printed approval URL to a human, or use an existing seller token via GUMROAD_ACCESS_TOKEN or gumroad auth login --with-token.
  • For admin commands in agents/CI, pass --non-interactive and set GUMROAD_ADMIN_TOKEN; interactive shells can store an admin token with gumroad auth login --web.

Read the full file on GitHub · 810 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. today Changed · +23 lines 786ea102290f
  2. 2d ago Changed · +6 lines a1cd948ad619
  3. 7d ago Changed · +14 lines f4079ef8c3ed
  4. 8d ago Changed 5da5c5e3b24f
  5. 10d ago Changed · +1 lines bca7d6eb14a0
  6. 11d ago Changed · +2 lines 1ada289317b9
  7. 21d ago Changed · +1 lines d509617a1df1
  8. 1mo ago Changed c74ead9590fe
  9. 1mo ago Changed · +2 lines aa8fd8052d42
  10. 1mo ago First seen · 761 lines · 341 tokens per session scan A c60bb93e359f

Subscribe to this mod's changes

gumroad is a skill published in the GitHub repository antiwork/gumroad-cli (61 stars, last pushed today), licensed MIT. It adds 341 tokens to every session and 16,657 once invoked, about $0.0014 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

shopping

Skill "shopping" from Hmbown/Codewhale, covering shopping, when to use, setup, workflow and non-goals.

Hmbown/Codewhale · 0 tokens

daiso-cli

A command-line interface for searching Daiso and related Korean shopping, store, food, cinema, and convenience-store data through the Daiso project. It can return structured JSON for searches and comparisons.

hmmhmmhm/daiso-mcp · 160 tokens

goofish-publish-item

A workflow for publishing second-hand items on Xianyu, a Chinese marketplace for used goods. It turns an item description and images into a category, title, listing text, and a ready-to-submit listing.

fancyboi999/goofish-cli · 151 tokens

goofish-reply-buyer

A Chinese-language workflow for handling buyer messages on Xianyu, a Chinese second-hand marketplace. It reviews conversations, classifies buyer intent, and drafts replies according to the seller’s rules, but waits for human approval before sending.

fancyboi999/goofish-cli · 160 tokens

goofish-shop-diagnosis

A read-only diagnostic workflow for Xianyu shops and listings. It compares how a shop’s items appear in marketplace search with their stored details to investigate visibility and sales problems.

fancyboi999/goofish-cli · 149 tokens

booking-cli

Searches Booking.com from the terminal via cli-web-booking — find hotels, apartments, and hostels by destination, dates, and guests; get property details by slug; resolve destination names to IDs. Use when the user asks about Booking.com, hotel search, accommodation prices, property ratings, or comparing places to…

ItamarZand88/CLI-Anything-WEB · 80 tokens