Podcast Manager
Manage podcast workflows with predictable steps and low token overhead.
Working Files
Use these workspace files by default:
- -
memory/podcasts/subscriptions.json — list of subscribed shows - INLINECODE1 — per-show progress (last checked, listened episodes)
- INLINECODE2 — summaries and action notes
If files or parent directories do not exist, create them.
Data Model
Keep subscriptions.json as:
CODEBLOCK0
Keep state.json as:
CODEBLOCK1
Core Workflow
- 1. Resolve the show and RSS feed URL.
- Fetch and parse recent episodes from the feed.
- Compare feed entries with local state.
- Return a concise update (new/unheard episodes first).
- Apply requested mutations (subscribe/unsubscribe/listened/bookmark/note).
- Persist changes in the tracking files.
Feed Discovery
When feed URL is not provided:
- 1. Use
web_search with query format: "<podcast name> official rss feed". - Open top candidates with
web_fetch. - Prefer canonical feed URLs from official sites or known podcast hosts.
- Confirm before subscribing if multiple plausible feeds remain.
Episode Retrieval Rules
- - Parse RSS/Atom entries by stable identifiers in this order:
guid, id, link, then title+pubDate fallback. - Normalize publication time to ISO-8601 when possible.
- Keep responses compact: newest 3–10 episodes unless user asks for more.
- When audio URL exists, include it only when requested.
Commands to Support (Intent-Level)
Handle these intent families:
- - Subscribe: add show/feed to INLINECODE12
- Unsubscribe: remove show/feed from INLINECODE13
- Check updates: list unheard episodes since last check
- Mark listened: add episode guid to INLINECODE14
- Bookmark: add episode guid to INLINECODE15
- Catch up summary: summarize N latest unheard episodes
- Show notes/action items: append concise bullets to INLINECODE16
Summary Style
For episode summaries:
- - Use 3–6 bullets: main topic, key claims, practical takeaways.
- Add a
Questions to revisit bullet if uncertainty exists. - Avoid fabricating details; say when metadata is incomplete.
Error Handling
- - If feed is unreachable, report status and keep existing state unchanged.
- If parsing fails, return a short diagnostic and propose one fallback source.
- On ambiguous show matches, ask one disambiguation question with 2–4 options.
Safety and UX
- - Do not auto-subscribe/unsubscribe without explicit user intent.
- Do not expose private local paths unless the user asks.
- Prefer deterministic updates to local files over ephemeral memory.
播客管理器
以可预测的步骤和低令牌开销管理播客工作流。
工作文件
默认使用以下工作区文件:
- - memory/podcasts/subscriptions.json — 已订阅节目列表
- memory/podcasts/state.json — 每个节目的进度(上次检查时间、已收听剧集)
- memory/podcasts/notes.md — 摘要和操作笔记
如果文件或父目录不存在,则创建它们。
数据模型
将 subscriptions.json 保持为:
json
{
shows: [
{
title: 示例节目,
feedUrl: https://example.com/feed.xml,
homepage: https://example.com,
tags: [ai, business]
}
]
}
将 state.json 保持为:
json
{
shows: {
https://example.com/feed.xml: {
lastChecked: 2026-03-12T20:00:00Z,
listenedGuids: [],
bookmarkedGuids: []
}
}
}
核心工作流
- 1. 解析节目和RSS订阅源URL。
- 从订阅源获取并解析最新剧集。
- 将订阅源条目与本地状态进行比较。
- 返回简洁的更新(优先显示新/未收听的剧集)。
- 应用请求的变更(订阅/取消订阅/标记已收听/书签/笔记)。
- 将更改持久化到跟踪文件中。
订阅源发现
当未提供订阅源URL时:
- 1. 使用 websearch,查询格式为:<播客名称> official rss feed。
- 使用 webfetch 打开排名靠前的候选结果。
- 优先选择来自官方网站或知名播客托管平台的规范订阅源URL。
- 如果存在多个合理的订阅源,在订阅前进行确认。
剧集检索规则
- - 按以下稳定标识符顺序解析RSS/Atom条目:guid、id、link,然后回退到 title+pubDate。
- 尽可能将发布时间标准化为ISO-8601格式。
- 保持响应简洁:默认返回最新的3–10集,除非用户要求更多。
- 当存在音频URL时,仅在用户请求时包含。
支持的命令(意图级别)
处理以下意图类别:
- - 订阅:将节目/订阅源添加到 subscriptions.json
- 取消订阅:从 subscriptions.json 中移除节目/订阅源
- 检查更新:列出自上次检查以来未收听的剧集
- 标记已收听:将剧集guid添加到 listenedGuids
- 书签:将剧集guid添加到 bookmarkedGuids
- 补课摘要:总结N集最新的未收听剧集
- 节目笔记/行动项:将简洁的要点追加到 memory/podcasts/notes.md
摘要风格
对于剧集摘要:
- - 使用3–6个要点:主要话题、关键主张、实用收获。
- 如果存在不确定性,添加一个 待回顾的问题 要点。
- 避免编造细节;当元数据不完整时如实说明。
错误处理
- - 如果订阅源无法访问,报告状态并保持现有状态不变。
- 如果解析失败,返回简短诊断并提出一个备用来源。
- 对于模糊的节目匹配,提出一个包含2–4个选项的澄清问题。
安全性与用户体验
- - 未经用户明确意图,不自动订阅/取消订阅。
- 除非用户询问,不暴露私有本地路径。
- 优先对本地文件进行确定性更新,而非临时内存。