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.
npx skills add antiwork/gumroad-cli --skill gumroadgit clone --depth 1 https://github.com/antiwork/gumroad-cliWrote 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.
[](https://agentmods.dev/skills/antiwork/gumroad-cli/gumroad)<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.
<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>- NVIDIA SkillSpector warn
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.
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.
| Model | Per session | Once 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 |
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.
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-inputto prevent interactive prompts from blocking. - Always pass
--jsonfor 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 completereplay, product updates that remove files, orproducts content setwhen omitted page IDs will be deleted), add--yesto skip confirmation. - Pass
--quietto suppress spinners and status messages. - Pass
--dry-runto preview mutating requests without executing them. - Use
--page-delay 200mswith--allto avoid rate limits on large datasets. - Prices are in whole currency units (e.g.
--price 10.00for $10), not cents. The CLI converts internally. Use--currency eurto change currency. - Products are published immediately on create. Pass
--draftto save an unpublished draft instead, thengumroad 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.htmlto run the backend sanitizer without writing,gumroad products page publish <id> ./landing.htmlto store the page,gumroad products page clear <id> --yesto remove it, andgumroad products page url <id>to print the live URL.--dry-runonly previews the CLI request body; it does not call the backend sanitizer. Inspect.sanitization_reportinpreviewandpublishJSON 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, andgumroad user page url(prints the public profile URL and its/landing/embedURL). A profile has no buy button, so omitdata-gumroad-action="buy"and the checkout data attributes; link to products instead. - Storefront pages (slugged pages serving at
<username>.gumroad.com/<slug>) usegumroad 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.htmlto replace a page with custom HTML, andgumroad pages preview ./page.htmlto run the backend sanitizer without publishing. The loop for going custom:pull(orscaffoldwhen there's no custom HTML yet) → edit →preview→push.--json/--jqonpull/scaffoldstill write the file and additionally print the raw API response; combining them with-o -is rejected since both would own stdout. The special slugprofiletargets the profile landing page (pull profiledownloads your published custom HTML,scaffold profilesnapshots the default storefront render when none is published; push uses the same endpoints asuser page publish). Custom HTML pages require the seller'scustom_html_pagesfeature 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 theedit_profilescope — tokens minted before the CLI requested that scope get a 403 telling them to re-rungumroad auth login. - Product rich content uses
gumroad products content list <id> --json --no-inputto inspect page IDs,gumroad products content get <id> --json --no-inputto dump the sharedrich_contentpage array, andgumroad products content set <id> content.json --dry-run --json --no-inputto preview a whole-document replacement. Without an explicit path, whole-documentsetreads./content.json;set --pagereads./page.json. Use--page <page_id>withget/setto edit one matching page object;set --pagestill sends a merged whole-document PUT. For a multi-page course,products content upload <id> course.jsontakes 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-documentsetdeletes existing pages omitted from the JSON. - Custom HTML pages can use
data-gumroad-field="name",data-gumroad-field="price",data-gumroad-field="description", anddata-gumroad-action="buy". To preselect checkout state, adddata-gumroad-option="<variant name>",data-gumroad-quantity="<integer>",data-gumroad-price="<decimal>", ordata-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 withtarget="_blank"so it opens in a new tab. To show a YouTube thumbnail in that link, downloadhttps://i.ytimg.com/vi/<video-id>/hqdefault.jpg, upload it withgumroad media upload, and use the returned.media.urlin an<img>inside the link. - Audience emails are created as drafts by default. Use
gumroad emails send-preview <id> --json --no-inputand inspect.preview_urlbeforegumroad emails send <id> --yes --json --no-input. Creating with--sendpublishes and blasts immediately, so use--dry-runfirst and require explicit human approval. To schedule a send instead of blasting immediately, create the draft thengumroad 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-runbefore each write. - If a command fails with a seller auth error, run
gumroad auth status --json --no-inputfirst. Agents can start seller auth withgumroad auth login --no-inputand hand the printed approval URL to a human, or use an existing seller token viaGUMROAD_ACCESS_TOKENorgumroad auth login --with-token. - For admin commands in agents/CI, pass
--non-interactiveand setGUMROAD_ADMIN_TOKEN; interactive shells can store an admin token withgumroad auth login --web.
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.
- today Changed · +23 lines 786ea102290f
- 2d ago Changed · +6 lines a1cd948ad619
- 7d ago Changed · +14 lines f4079ef8c3ed
- 8d ago Changed 5da5c5e3b24f
- 10d ago Changed · +1 lines bca7d6eb14a0
- 11d ago Changed · +2 lines 1ada289317b9
- 21d ago Changed · +1 lines d509617a1df1
- 1mo ago Changed c74ead9590fe
- 1mo ago Changed · +2 lines aa8fd8052d42
- 1mo ago First seen · 761 lines · 341 tokens per session scan A c60bb93e359f
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.
Other skills, from other repositories
shopping
Skill "shopping" from Hmbown/Codewhale, covering shopping, when to use, setup, workflow and non-goals.
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.
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.
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.
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.
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…