Full skill-builder rebuild of transistor per issue #407: - scripts/transistor (renamed from transistor-cli): 19 commands covering the verified API surface - user probe (GET /v1; the /v1/user route does not exist), shows/episodes with corrected pagination[page]/pagination[per], the dedicated episode publish endpoint (PATCH /v1/episodes/:id/publish with episode[status]=draft|scheduled|published), authorize-upload flow, the three real analytics routes with downloads[] array summing, subscriber management incl. batch, and webhooks. Write bodies are form-encoded bracket keys exactly as documented; dry-run plans carry method/path/params/body; publish guard refuses audio-less episodes. Fixed stale claims: /analytics/show -> /v1/analytics/..., totals -> downloads arrays, pagination[limit] -> pagination[per], user email -> name/time_zone, dropped invented episodes_count/subscribers_count and POST /v1/shows (show creation is dashboard-only). - scripts/test_transistor.py: 50 offline tests (pytest + unittest green, proxy-trap clean) covering help, argument errors, dry-run plans, canned JSON:API compound-document parsing (data/attributes/relationships/ included[]), write-path body shapes, publish guard, create->audio-> publish pipeline, and HTTP error signatures. - references/: auth+JSON:API envelope with jq patterns, endpoint catalog, publish lifecycle with documented request/response shapes, gotchas field guide + worked recipes; all cited to live-verified sources. - evals/evals.json: 8 schema-v1 cases incl. two should-not-trigger probes. - SKILL.md rewritten (308 lines), README refreshed, root README blurb and generated catalogs synced (marketplace.json + llms.txt descriptions). Publish-body shape reconciliation: the contract's data.id+data.type JSON:API PATCH premise was falsified by current official docs (verified 2026-08-29) and the flimzy/transistor Go SDK; implemented reality escalated in handoff (see library/transistor-api-facts.md). Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
3.0 KiB
Transistor.fm — Podcast Hosting from the Terminal
Manage your Transistor.fm podcast account over its official API: browse shows and episodes, publish episodes, pull download analytics, and run private-podcast subscriber lists — all from the terminal.
Why Install This Skill
When your agent loads this skill, it can operate your Transistor.fm podcast hosting without the dashboard, including the part no other tool gives an agent: the full episode publish lifecycle.
- Publish episodes end to end — create a draft, attach audio (URL or authorized local-file upload), then publish or schedule it through Transistor's dedicated publish endpoint
- Browse your catalog — shows, episodes, drafts, season/number metadata, with JSON:API compound documents unwrapped for jq
- Track downloads — per-day analytics windows for shows and episodes, summed and ready for reports
- Run private podcasts — list, add (single or batch), and revoke subscribers; register webhooks so you push instead of poll
- Stay under the rate limit — dry-run request plans and clear 429 guidance (Transistor allows 10 requests per 10 seconds)
What You Get
| Path | Purpose |
|---|---|
SKILL.md |
Command reference, publish-lifecycle recipe, jq guidance, gotchas |
scripts/transistor |
Bundled Python CLI for the Transistor.fm v1 API (read + write commands) |
scripts/test_transistor.py |
Offline mocked test suite (canned JSON:API documents, zero network) |
references/auth-and-basics.md |
API-key auth, JSON:API envelope and jq patterns, pagination, errors |
references/endpoint-catalog.md |
Every endpoint's method, path, and parameters |
references/episode-publish-lifecycle.md |
Draft → audio → publish/schedule/unpublish, exact request shapes |
references/gotchas-and-recipes.md |
Symptom → cause → fix guide plus multi-step workflows |
Quick Start
export TRANSISTOR_API_KEY="<API_KEY>" # Dashboard -> Account -> API Access
transistor user # verify the key
transistor shows # list your podcasts
transistor episodes --status draft # what is not out yet?
# Publish pipeline: create (draft) -> attach audio -> publish
EP=$(transistor episode-create --show <SHOW_ID> --title "Ep 12" \
--audio-url "https://example.com/ep12.mp3" --json | jq -r '.id')
transistor episode-publish --id "$EP"
--help and --dry-run work without an API key; preview any request with
transistor --dry-run episode-publish --id 123.
Triggers
Load this skill when the user mentions Transistor or Transistor.fm, podcast hosting, publishing a podcast episode, scheduling or unpublishing episodes, podcast download analytics, or private podcast subscribers.
Requirements
Python 3.8+ with requests, plus a Transistor.fm API key (Account page →
API Access). The key carries your dashboard role per podcast; treat it like
a password. No other services or credentials are involved.