Community编程与开发github.com

cindulasai/Spotify歌单策划师

根据用户的心情、活动、场合、文化背景或探索需求推荐音乐并创建Spotify歌单,支持润色已有选择、管理音乐品味记忆或导入收听历史。

Spotify歌单策划师 是什么?

Spotify Playlist Curator 是一个专为 AI 代理(如 Codex 和 Claude)设计的技能,用于根据用户的自然语言请求生成真实的、经过验证的 Spotify 歌单。该技能的核心在于精确理解用户意图,同时尊重用户隐私和自主权,绝不过度推断用户的个人信息。它支持多种工作模式:从简单的直接查找、快速默认推荐,到复杂的全量策划,甚至包括可选的采访模式以澄清模糊需求。技能会利用可用的 Spotify 工具(如搜索、批量查找、元数据读取)来检索和验证歌曲,并通过严格的校验脚本确保歌单满足用户设定的所有硬性约束(如歌曲数量、时长、语言等)。最后,它会以用户的语言呈现确认的结果,并提供后续调整、记忆管理和刷新功能,所有持久化操作都需经过用户明确同意。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/cindulasai/spotify-playlist-curator/tree/HEAD

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Spotify 歌单策划师

生成一系列符合听众请求的真实曲目。保留用户的明确选择,验证身份和可用元数据,解释不确定性,并仅在获得同意后进行学习。适用于 Codex 和 Claude;交付方式由工具能力决定,而非平台名称或假设的账户等级。

选择工作量

  • 直接查找: 使用平台的音乐查找指令;搜索并返回其规范链接。无需品味扫描或策划流程。
  • 快速、默认: 对于小型/简单列表,使用可用的品味证据,编写简洁简报,检索适度的曲目池,验证所选曲目并运行检查器。无需强制采访、Council 角色扮演、详尽曲库、独立评论家或逐分钟复盘。
  • 全量: 用于复杂约束、长列表、活动、节奏匹配、跨陌生领域的发现或寻求深度的请求。扩展到目标曲库,验证更大的曲目池,编排序列,并在支持且授权的情况下使用独立评论家。
  • 采访,可选: 以简短轮次仅询问改变决策的问题。绝不重复询问已陈述的偏好。如用户说“你来决定”或“直接建”,立即停止。如果缺失的选择使得严格约束无法解释,则澄清该选项,或返回一个带标签的草稿。

默认值 是数字样式默认值和覆盖优先级的唯一权威。仅在需要时阅读其他参考文件。

1. 确立能力、同意和简报

阅读连接器指南和相关的平台适配器。遵循宿主已安装的 Spotify 指令。发现搜索、批量查找、元数据、集合读取、精确写入、生成器和库的能力。不要从工具名称推断资格,也不要假设创建歌单始终需要 Premium。

仅使用听众自己的话语、可访问的收听数据和已确认的音乐偏好。切勿从音乐、姓名、国家或语言推断宗教、种族、健康、年龄或性别。部分历史支持“在你可访问的历史中未观察到”,而不是“你从未听过这个”。

在进行持久化学习之前,请阅读记忆策略。未知同意表示仅限会话期间。“停止学习”阻止学习写入;“忘记”从所有受管理的个人资料存储中删除匹配数据。使用调用者拥有的临时会话目录,并在 finally/上下文管理器中清理。保持特定于账户的路径分离;如果当前听众无法安全地与配置文件关联,则停止。

编写一份简洁的简报,包含请求、明确约束、选择的持续时间、上下文、熟悉度/发现偏好以及任何实质性假设。逐字复制约束;将可执行的约束转换为检查器的 hard_constraints。区分最大值和近似目标。时间/天气是可选的上下文,绝不是覆盖请求的理由。参见意图和上下文。

2. 检索和验证

从实际听众锚点或目录结果开始,然后是邻近的艺术家/唱片目录/本地脚本查询。模型回忆的歌曲名称是假设。对已存在的已知项目使用批量目录查找;对发现使用自然语言搜索。在此次运行期间重用已验证的结果。根据请求调整曲目池大小;当约束得到满足且包含有用选择时停止搜索。

对于每个选定的曲目:

  • 确认 MUSIC 类型、预期的标题/艺术家/版本以及返回的可播放性;
  • 保留返回的规范 URI/URL、时长以及可用的发行版/内容元数据;
  • 在会话出处中保留源结果或源引用;
  • 区分录音身份与歌曲标题,包括不同的现场/古典表演;
  • 拒绝不想要的卡拉 OK/翻唱/修改版本,而不是拒绝合法艺术家名称中出现的每个“现场”之类的词;
  • 诚实地标记未观察到的熟悉度和未知的语言/内容/前奏。

对于干净请求,使用报告的评级(如果可用)。明确的评级失败;缺失的评级表示未知,而非干净。标题中包含“Radio Edit”并不证明歌词干净。严格的干净承诺需要肯定的来源证据,否则保持未检查状态。来源报告的 BPM 不是独立测量的 BPM。前奏/人声时间戳不是测量的节拍进入点。除非实际访问并评估了音频,否则不会发生音频试听。

没有连接器时,使用可靠的艺术家/唱片公司/目录页面,并将曲目标记为网络验证。Spotify 市场的可播放性仍然未知。提供来源链接;切勿编造 Spotify URI。参见世界音乐检索。

3. 匹配和排序

在有用时通过同意适当的个人资料进行评分;执行否决、上下文排除、疲劳和近期重复规则。不要将跳过/未完成的播放等同于不喜欢。明确的单一艺术家、全新生、收藏重复或长前奏请求可覆盖样式默认值。遵循排序指南;保留所要求的文化和情感目标。情感指南支持用户自主权;它不是临床评估。

编写 playlist.json,包含返回的元数据、出处和任何严格约束。scripts/playlist_check.py --help 及其模块模式记录了字段。例如:

{"arc":"discovery","allow_adjacent_artist":true,
 "hard_constraints":{"track_count":6,"max_minutes":25,"languages":["te"],"max_intro_seconds":15},
 "tracks":[]}

这个空示例是一个模式说明,必须验证失败。实际条目需要为承诺的限制提供证据。target_minutes 是近似的;hard_constraints.max_minutes 是上限。tempo_band 需要基于源的 BPM,peak_at_minute 需要能量代码和可信的时长。

4. 验证和挑战

运行 python3 scripts/playlist_check.py playlist.json。非零返回值表示违反约束、输入无效或必需证据未检查。报告仅计数其提供的证据;它不联系 Spotify,也不证明复制的源结果是真实的。在会话中独立保存原始来源。

检查身份、艺术家/版本、市场、文化、内容、排除和声明出处。对于全量模式,如果支持且授权,则向独立代理提供评论家输入;否则将审查标记为同线程。根据用户的请求进行判断,而不是根据通用的理想歌单。序列演练是元数据审查,而不是试听。

仅修复失败的位置,然后重新检查。使用默认值中的有界轮次。当硬约束仍然失败或未检查时,不要将其创建/发布为合规。交付一个明确标记的、包含确切未解决需求的局部草稿;建议一种放宽方案,但不要静默应用。高主观分数不能覆盖失败的硬门。

5. 交付确认结果

当可用且被歌单创建请求授权时,使用精确的创建/添加工具。尊重工具的批处理限制。读取所有页面,检查就绪状态,比较排序后的 URI,并从确认的内容中得出声明。在不确定的写入时,先读取/协调,然后再追加;切勿盲目重试。仅在同意适当的历史记录中持久化确认的结果。参见连接器指南以了解部分写入和生成的歌单。

仅限生成器:提交一份简洁简报,然后如果存在读取器,则读取生成的内容。将其标记为 Spotify 的解释。如果它与验证过的策划版本不同,请区分它们。无法回读时,不要声称确切的合规内容或约束。

没有写入能力/资格:返回带有返回链接的已验证有序列表。切勿仅因为请求了推荐而保存/删除库项目、播放音频或更改现有歌单。对每个操作使用宿主的授权规则。

以用户的语言回复,并根据列表大小进行缩放:名称、确认的时长/数量、链接或紧凑的曲目列表、一个实质性假设以及任何未解决的证据。简要解释突出显示的选择。说“在可访问的历史中未观察到”,而不是在没有更强证据的情况下说“对你来说是新的”。邀请保留/跳过反馈;仅在有明确同意时才提供持久记忆。

6. 后续跟进

使用经过验证的基准进行替换/更长的请求,并重新运行检查。周期性刷新使用默认值中的单次轮换策略;保存的获胜者和明确的重复优先。调度需要实际的调度工具和用户授权。刷新仅在约束和交付检查通过时才进行写入。

记忆请求使用记录的命令;忘记后,检查受管理的存储并报告实际范围,包括说明 Spotify 自己的历史、过去聊天消息和用户拥有的导出内容不在此技能删除控制范围内。切勿将原始的情感或敏感反馈复制到持久摘要中。

相关技能