Audio release notes

Turn a release into an episode your users can play.

Release notes get skimmed. An episode gets played. Paste your notes or import a release from GitHub, and one narrator or two hosts walk through what was added, changed, fixed and removed. Or start it from CI with one API call.

Free to try. No account needed.

Two hosts, from a changelog.

Claude Code 2.1.285

Full script
AlexHey! Welcome back, everyone. Today we're digging into the latest Claude Code release, version 2.1.285. And, uh, it's a big one. Like, really big.
SamYeah, I scrolled through it and just kept scrolling. So where do we even start?
AlexLet's start with something fun. There's a new command, claude dash dash desktop. You run it and it opens the Claude desktop app right on your current directory.
SamOh nice. So if I'm in the terminal and I want to, like, hop over to the app...
AlexExactly. And you can pair it with dash dash continue, or dash dash resume with a session I D, to open a specific session in the desktop app instead.
SamThat's handy. Speaking of resume, didn't something change there too?
AlexYeah, good memory. So, slash resume and claude dash dash resume now work on a session that's running in the background. Before, they'd just refuse. Now they open that session. And if you pass a prompt, like claude dash dash resume, then the I D, then your prompt in quotes, that prompt gets sent to the session as its next turn.
SamOh, that's cool. So you can basically poke a background session from the command line.
AlexRight, right. Okay, next big area is plugins. There's a new command, claude plugin configure, followed by the plugin name. It shows the plugin's options and which ones are still unset.
SamHmm, and can you actually set them from there, or is it just, like, a report?
AlexGreat question. You can save new values read from standard input with the dash dash values dash stdin flag. And on top of that, claude plugin install dash dash config now accepts a server dot key equals value format.
SamWait, what's that for exactly?
AlexSo if a plugin bundles an M C P server as a dot M C P B file, you can set that server's own settings right at install time. It starts up without you having to go into slash plugin and hit Configure.
SamAh, okay. So no more manual trip through the menu.
AlexExactly. And related fix: plugins used to silently skip a bundled M C P B server that still needed configuration. Now slash plugin, the install message, and claude plugin install all tell you, and point you to Configure.
SamHonestly the silent skip sounds like the worse problem. Like, "why isn't my server there?"
AlexYeah, totally. And VS Code users get this too, by the way. The Manage plugins dialog now has an options form. Installing a plugin with options asks for the unset ones, and there's a gear on the row to change them later.
SamNice. Okay, what's next?
AlexSo, for admins, there's a new managed setting called allowedProviders. It limits which A P I providers a machine may use. The list includes the Anthropic A P I, a custom endpoint, Bedrock, Mantle, Vertex A I, Foundry, Claude Platform on A W S, or a Cloud gateway.
SamOh interesting. So an org can lock things down to, say, just Bedrock.
AlexRight. And along those lines, there's a new environment variable, CLAUDE underscore CODE underscore DISABLE underscore WEB underscore FETCH, that turns off the WebFetch tool entirely.
SamMm-hmm. Any other Bedrock or Vertex stuff worth calling out?
AlexYeah, one I really like. If an admin removes access to the default model on Bedrock or Vertex A I, sessions now switch to an older available model of the same tier instead of just failing.
SamOh, that's a nice safety net.
AlexIt is. Also, sessions behind a custom ANTHROPIC underscore BASE underscore URL now use the one million token context window on models that have it. That's Opus 4.7 and up, Sonnet 5 and up, and Fable.
SamWait, but what if my gateway can't handle that?
AlexGood catch. The changelog says if your gateway stops at 200K, run slash autocompact 200k.
SamGot it. Okay, anything about background work? I feel like that's a theme.
AlexIt totally is. So background Bash and PowerShell commands now stop after a time limit. That's their timeout when using run in background. Default is thirty minutes, max is two hours, and Claude gets notified when one is stopped.
SamAh, so no more zombie processes hanging around forever.
AlexPretty much. And there's a related fix. Synchronous hooks used to hang Claude Code if they started a background process that kept its output open, like some daemon with an ampersand. Now the hook finishes shortly after its own process exits.
SamOh, I've definitely seen that kind of thing. Anything on subagents?
AlexYeah. In auto mode, a subagent's run now ends as soon as it hands its report back to its caller, instead of taking extra turns that reach no one. And fork subagents now run under their parent's permission mode, so they keep plan mode or dont Ask mode, and can't exit plan mode.
SamThat last one feels important. Like, you'd want a fork to respect plan mode.
AlexExactly. Oh, and one reliability fix worth mentioning: a failing A P I request could get retried up to twenty-one times when streaming kept failing. Now the non-streaming fallback shares the same retry budget instead of getting a fresh set.
SamTwenty-one retries. Yeah, glad that's fixed.
AlexRight? Plus a new variable, CLAUDE underscore CODE underscore NONSTREAMING underscore TIMEOUT underscore RETRIES, to cap re-sends of a timed-out non-streaming fallback.
SamAwesome. Well, that's a solid tour of a massive release.
AlexYeah, and there's way more in there, so definitely give the full notes a read.
SamTotally. Thanks for walking me through it. And thanks, everyone, for listening!
AlexThanks, all. Until next time, cheers!

An illustrative example made from public release notes. Product and company names belong to their owners; no affiliation or endorsement is implied.

One release in. One episode out.

Start an episode from the dashboard, or call the API from CI when you publish a release. We call your webhook when the audio is ready.

Release notesAcme Widget 2.4.0
## Added
- Retry failed webhooks from the dashboard
- RateLimit-Reset header on every response

## Changed
- Burst rate limit raised from 50 to 100 requests

## Fixed
- Cursors skipped records deleted mid-page
- Webhook retries ignored Retry-After

## Removed
- GET /v1/orders (use /v2/orders)
POST /v1/conversions
curl -X POST https://api.logtalk.io/v1/conversions \
  -H "Authorization: Bearer $LOGTALK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "source_type": "changelog",
  "title": "Acme Widget 2.4.0",
  "content": "## Added\n- Retry failed webhooks from the dashboard\n- RateLimit-Reset header on every response\n\n## Changed\n- Burst rate limit raised from 50 to 100 requests\n\n## Fixed\n- Cursors skipped records deleted mid-page\n- Webhook retries ignored Retry-After\n\n## Removed\n- GET /v1/orders (use /v2/orders)",
  "settings": {
    "speakers": 2,
    "verbosity": "normal"
  },
  "webhook_url": "https://ci.example.com/hooks/logtalk"
}'
See the response and the webhook
202 Accepted
HTTP/1.1 202 Accepted
{
  "success": true,
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "pending",
    "estimated_completion_seconds": 30,
    "poll_url": "/api/v1/conversions/550e8400-e29b-41d4-a716-446655440000",
    "webhook_url": "https://ci.example.com/hooks/logtalk"
  },
  "request_id": "req_1kn5f2a_a3b4c5d6e7f8",
  "timestamp": "2026-09-25T14:00:03.000Z"
}
Webhookconversion.completed
POST https://ci.example.com/hooks/logtalk
Content-Type: application/json
X-LogTalk-Event: conversion.completed
X-LogTalk-Delivery: d1a9c2e4-5b6f-47a8-9c1d-2e3f4a5b6c7d
X-LogTalk-Signature: t=1758814863,v1=768ea2f0f718040c6dda58bc40b9b1f64712ed57a08b5d72c13c563c779a637e
X-LogTalk-Timestamp: 1758814863

{
  "id": "evt_lz3k9f2a_8f2a1c9d4e6b7a3f",
  "type": "conversion.completed",
  "created_at": "2026-09-25T14:01:13.000Z",
  "api_version": "2026-01-18",
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "completed",
    "source_type": "changelog",
    "mode": "changelog",
    "product_name": "Acme Widget",
    "version": "2.4.0",
    "tone": "professional",
    "duration": "standard",
    "output_format": "audio",
    "source": "api",
    "audio_url": "https://api.logtalk.io/v1/conversions/550e8400-e29b-41d4-a716-446655440000/audio",
    "video_url": null,
    "audio_duration_seconds": 66,
    "script_text": null,
    "listen_url": "https://logtalk.io/listen/550e8400-e29b-41d4-a716-446655440000",
    "embed_url": "https://logtalk.io/embed/550e8400-e29b-41d4-a716-446655440000",
    "created_at": "2026-09-25T14:00:03.000Z",
    "completed_at": "2026-09-25T14:01:13.000Z"
  }
}
Full API reference →

What happens after you call the API

  1. 0:00youYou publish the release. Your CI calls POST /v1/conversions.
  2. 0:02logtalkQueues the episode — status: pending.
  3. 0:08logtalkWrites a script for one narrator or two hosts, from the release notes.
  4. 1:12logtalkRecords the voices and mixes the episode.
  5. 1:13webhookSends conversion.completed to your webhook with the audio, listen and embed links.
POST /v1/conversions

Or paste your release notes. Your next episode starts there.

Free to try. No account needed.