Files
magnus919_agent-skills/transistor/README.md
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 05b99be6ec docs(transistor): thicken podcast hosting skill against current API research
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>
2026-08-29 22:02:23 -04:00

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.