Install
openclaw skills install @shamo88/kugou-skill酷狗,酷狗音乐,酷狗skill,酷狗音乐skill,酷狗音乐助手 提供歌曲搜索、猜你喜欢、相似推荐、收藏管理、听歌统计、酷狗榜单、创建歌单、调整音乐偏好等功能。 触发场景(满足任一即使用本技能): 用户要求推荐歌曲、听歌建议 用户要求搜索歌曲、查找歌手作品 用户要求查看音乐榜单(飙升榜、TOP500、抖音热歌等) 用户要求查看收藏、最近播放、听歌统计 用户要求创建歌单、自建歌单 用户要求调整音乐偏好("少推点 XX 歌手"、"多推点 XX 语种"、"别再推 XX 曲风" 等) 用户提供 base64 secret 字符串要求登录或导入身份 Agent
openclaw skills install @shamo88/kugou-skill使用本工具时的标准流程:
1. 检查安装 → npm install -g @kg-ai/kugou-skill
2. 检查登录态 → kugou-cli auth status
3. 登录决策(按以下优先级严格判断,不要跳步):
├─ 状态 a:已登录(logged_in: true)→ 跳到第 6 步
├─ 状态 b:未登录 + 用户**明确**说"我有 secret" → 调 `kugou-cli auth set-secret "<secret>"` 一次完成 → 跳到第 6 步
├─ 状态 c:未登录 + 当前环境**无法**渲染远程 URL 图片 **且** 无法读取本地二维码文件 → **强制**走 set-secret(同上)
└─ 状态 d:未登录 + 其他所有情况 → 走扫码流程(第 4 步)
注意:状态 b/c/d 互斥;不要在用户未明确给 secret 时擅自走 set-secret。
4. 引导登录——扫码(详见 references/auth.md):
- 执行 `auth login`,从输出读 `qrcode_img_url` 和 `qrcode_img_path`,按当前客户端能力选一种方式把二维码**直接展示给用户**
- **阶段 A(主动轮询)**:图片刚展示,**主动**重试几次 `auth status`(每次隔几秒),覆盖用户秒扫场景
- 任意一次返回 `logged_in: true` → 跳到第 6 步
- 见到 `status: failed` → **不要换新图**,隔 1-2 秒用同一个本地 qrcode 再调一次(计入阶段 A 的 5 次预算)
- 见到 `status: expired` → 告诉用户二维码已失效,调 `auth login` 拿新图,从阶段 A 重新开始
- 几次都返回 `waiting` / `failed` 且未出现 `scanned` / `logged_in` / `expired` → 进入阶段 B
- **阶段 B(等用户回复)**:停下,告诉用户"请用酷狗 APP 扫码登录,扫完后告诉我已扫码",**不再调 status**,等用户**主动回复"已扫码"**
- **阶段 C(验证一次)**:用户回复"已扫码"后,**调一次** `auth status`:
- `logged_in: true` → 完成,跳到第 6 步
- `scanned`(已扫但未确认)→ 等几秒再调一次,最多**额外**调几次,仍是 scanned 就告诉用户"手机端是否已点确认?"
- `failed` → **不要换新图**,隔 1-2 秒用同一个本地 qrcode 再调一次,最多重试 2-3 次;仍 failed 则告诉用户稍后重试
- `expired` / `{"logged_in": false}`(无 status 字段,说明本地 qrcode 已被上游清掉)→ 重新 `auth login` 拿新图(覆盖本地),从阶段 A 重新开始
5. **首次要展示歌曲/歌单前探测本机客户端可用性**(详见 [references/control.md §13](references/control.md#13-client-detection-control-detect)):
- **触发时机**:本会话中第一次要向用户展示歌曲列表、歌单列表或歌单内歌曲列表之前。后续展示**复用本次探测结果**(会话内探测一次即可,不要每条命令前都跑)
- **命令**:`kugou-cli control detect`(零副作用,不启动客户端、不抢焦点)
- **判定**:
- 退出码 `0` → 本机有客户端,标记 `client_available = true`
- 退出码 `2` → 本机没装客户端,标记 `client_available = false`
- 退出码 `1` → 探测过程出错(注册表权限等),按 `false` 处理并继续
- **不影响 control 命令本身**:当用户主动要求 `control play` 等命令时,仍按原本的 `control` 错误处理(找不到客户端会由 `control start` 报"handshake file not found",不要用探测结果跳过 `control` 调用)
- **何时不探测**:用户请求只查询统计数据、查收藏/最近播放、看错误页等**不展示歌曲列表**的纯查询场景;登录流程本身;debug / 排错场景
6. 按请求类型分流:
- **请求类型 A:控制已有歌 / 歌单 / 收藏**(用户已有 mixsongid 或 global_id)→ 直接执行 `control` 命令(详见 [references/control.md](references/control.md)),不需要先调 `music` 拿 ID
- 例:`control play`、`control player --action pause`、`control favorite song --mixsongid <id>`、`control play-playlist --global-id <id>`
- **请求类型 B:搜索后做某件事**(搜索歌曲/推荐/榜单 → 拿到 ID 后再做后续动作,如播放、收藏、建歌单)→ 先执行 `music` 命令拿数据,再按需转 `control`,详见 [references/music.md](references/music.md)
- 例:先 `music search` 拿 mixsongid,再 `control play` 播放
- 例:先 `music search-playlist` 拿 global_id,再 `control play-playlist` 播放
- 例:先 `music search` 拿 mixsongids,再 `control playlist create --mixsongids` 创建客户端歌单
- **请求类型 C:纯查询 / 统计 / 榜单**(不涉及本地客户端)→ 只走 `music` 命令
7. 解析 JSON 输出,按展示规范展示给用户(详见 [references/output-format.md](references/output-format.md))
关键提醒:不要在没有 mixsongid / global_id 的情况下盲目调用
control命令(如control play --mixsongid "")——control命令在 ID 缺失时会报错。先用music命令把 ID 查出来,再传给control。
auth login 命令输出三个字段供 Agent 选择二维码展示方式(详见 references/auth.md):
| 字段 | 用途 |
|---|---|
qrcode_img_path | 本地二维码 PNG 文件路径 |
qrcode_img_url | 远程二维码图片 URL |
qrcode | 字符串标识,Agent 不要使用(仅供 CLI 内部) |
根据当前客户端能力选择一种方式,把二维码图片直接展示在聊天窗口中:
qrcode_img_path,通过客户端的本地图片读取/附件能力展示auth set-secretauth status 的调用约束:
当用户已经持有一个有效的 base64 secret 字符串(从别处获取的),直接调用 kugou-cli auth set-secret "<secret>" 即可完成登录,跳过扫码流程——效果与扫码登录完全一致。secret 字符串含 + / = 是正常的,shell 里务必用引号包起来。
何时考虑用 set-secret:
auth logout 命令:先与服务端同步登出,确认成功后才清理登录状态。失败时登录状态保留、可重试;未登录时幂等直接返回成功。
当任意 music 命令遇到登录态过期时,CLI 会自动取消登录(退出码非 0 + stderr 提示登录已过期)。Agent 收到该错误后:
music 命令(会再次失败)auth set-secret,没有则 auth login 走扫码auth status 确认 logged_in: true,再重试之前失败的 music 命令错误判定以退出码 + references/error-handling.md 中的错误码说明为准,不要依赖 stderr 文案字面量匹配。
除了 auth、install、version、--help 以外,所有 music 子命令都需要先登录。如果 CLI 返回"未登录"错误,引导用户执行登录流程。
所有命令输出原始 JSON 到 stdout,错误输出到 stderr。成功判定以退出码和 JSON 内的成功状态字段为准(详见 references/output-format.md)。
向用户展示音乐命令返回的歌曲列表或歌单列表时,按以下规则(详见 references/output-format.md §1):
| 序号 | 歌曲名 | 歌手 || 序号 | 歌单名 | 创建人昵称 |client_available = true)→ 歌曲名/歌单名不加链接(可直接调 control play 等本地命令)client_available = false)→ 歌曲名/歌单名必须加链接,方便用户手动打开[歌曲名 - 歌手名](https://www.kugou.com/...)[歌单名](<song_list_url>)kugou-cli control detect,记下 client_availableclient_available 决定加不加链接client_available,表格单元格不加链接control * 命令的逻辑——那是另一条独立路径(由 control start 自己报错)触发条件:以下命令成功后必须告知用户当前正在播放的歌曲:
control play(播放单首)control play-playlist(播放整个歌单)control continue-play(续播另一设备列表)control player --action next/prev(切歌)操作:调用 kugou-cli control current 拿到 song_name / singer_name,向用户输出:
� 正在播放:<歌曲名> - <歌手>
注意:
control current 重新拿当前曲目,不要用 control play 命令里 --song-name / --singer-name 字段直接展示——后者只是客户端展示用的标签,不保证与实际播放一致(特别是播放歌单 / 续播 / 切歌之后)control current 返回非 code: 0(如客户端断开 / 命令未支持),告知用户"已开始播放(无法读取当前曲目详情)",不要假装知道详见 references/control.md §3 current。
仅在 agent 主动推荐场景下,歌曲列表之后必须追加一段 220-260 字的推荐理由(详见 references/output-format.md#5-推荐理由主动推荐场景必写):
recommend guess / similar / text、charts、recommend-playlistsearch / search-playlist / favorites / recent / stats / playlist-songs——用户主动查询不写详见 references/music.md#7-创建歌单:
kugou-cli control playlist create(在本地酷狗客户端内创建,详见 references/control.md#10-playlist-create--创建歌单),仅当客户端不可用(不支持的操作系统 / 未运行 / 无响应 / 调用失败)时才回退到云端 music create-playlistcontrol playlist create 还是 music create-playlist,创建成功(返回成功状态)后必须主动询问用户"是否要播放这个歌单",等用户明确回复后再决定走哪条播放命令;用户拒绝则不做任何动作。播放路径选择:
kugou-cli control play-playlist --global-id "<id>"(详见 references/control.md#12-play-playlist--播放整个歌单)play-playlist 拿不到可用 ID:按 references/music.md#72-云端歌单的播放控制浏览器打开-h5-链接 走"先探后告知"——用浏览器工具打开 H5 song_list_url 尝试点击播放;工具不可用时明确告知用户手动复制链接打开详见 references/music.md#11-提交偏好:
kugou-cli music submit-preference,禁止在用户仅说"推荐/搜歌/听歌"时主动改写用户偏好(0,1)、forbid/add→(1,2)。不匹配时 CLI 仅 warning 不阻断,最终以服务端校验为准data.msg(上游确认话术)展示给用户,例如"收到!将减少推荐歌手「周杰伦」的歌曲,猜你喜欢以下歌曲~"data.list(重新推荐的歌曲列表)按 references/output-format.md#1-歌曲歌单列表展示批量优先用表格 的展示规范呈现(≥ 2 条用表格,= 1 条按 client_available 决定加不加链接)<em> 高亮 / play_link / mix_song_id,agent 内部持有list[] 后,主动询问用户"要按这个新偏好播放一些吗?",用户同意后直接用 list[] 里的 mix_song_id 走 control play 等命令,不要再调一次 recommend 浪费调用当用户提出的需求在 kugou-cli 整体能力边界之外时,Agent 必须明确告知用户"暂不支持该能力",不得擅自用其他命令拼凑代替,也不得假装能完成。
典型场景:
kugou-cli 没有对应子命令(用户要的功能不在 auth / music / control / install 任何子命令中)control 子命令在当前操作系统不支持(如 control 系列仅支持 Windows / macOS,Linux 不支持)control open --target-type url 已被移除)正确回应:
这个能力 kugou-cli 暂不支持。如果你需要该功能,可以去酷狗客户端里手动操作。
反例(不要这样做):
与「客户端不可用」的区别:本节是「命令/能力本身不存在」;「客户端不可用」是「命令存在但本机客户端未运行 / 未登录」,后者有 fallback 路径(详见上方「创建歌单的调用原则」第 3 条 + references/control.md)。两者不要混用。
npm install -g @kg-ai/kugou-skill关于更新:CLI 安装后会自动保持最新。具体行为与关闭开关见 references/update.md。如有版本相关问题,向该文档查证。
| 文档 | 说明 |
|---|---|
| references/auth.md | 认证命令:扫码登录、直接设置 secret、查看状态、登出 |
| references/music.md | 音乐命令:搜索、推荐、收藏、统计、榜单、创建歌单 |
| references/control.md | 控制命令:控制 PC/Mac 客户端播放、暂停、切歌、收藏、创建歌单等 |
| references/install.md | 安装命令:SKILL.md 安装到各平台 |
| references/update.md | 更新行为、版本检查、关闭自动更新 |
| references/output-format.md | 输出格式与展示规范 |
| references/error-handling.md | 错误处理与常见错误 |
# 1. 登录(详见 references/auth.md)
kugou-cli auth login # 获取二维码
kugou-cli auth status
# 1'. 或者直接导入已持有的 secret(跳过扫码)
kugou-cli auth set-secret "<base64-secret>"
# 2. 搜索歌曲
kugou-cli music search "周杰伦"
# 3. 获取猜你喜欢
kugou-cli music recommend guess
# 4. 查看我的收藏(返回最近若干首,不支持分页)
kugou-cli music favorites
# 5. 查看最近播放(返回最近若干条,不支持分页)
kugou-cli music recent
# 6. 查看听歌统计
kugou-cli music stats
# 7. 查看抖音热歌榜
kugou-cli music charts 52144
# 8. 创建歌单
# 优先走客户端路径(默认):见 references/control.md §10
kugou-cli control playlist create --name "我的批量歌单" --mixsongids "32068120,233125060"
# 客户端不可用时才回退到云端(详见 references/music.md §7.1):
kugou-cli music create-playlist "我的空歌单"
kugou-cli music create-playlist "我的批量歌单" --songs "32068120,233125060"
# 9. 搜索歌单(拿到 global_id 后可透传给 control play-playlist)
kugou-cli music search-playlist "周杰伦"
kugou-cli music playlist-songs "collection_3_938985631_304_0"
# 10. 控制本机酷狗客户端(仅 Windows / macOS,详见 references/control.md)
kugou-cli control play --mixsongid 32100650 --song-name "晴天" --singer-name "周杰伦"
kugou-cli control player --action pause
kugou-cli control favorite song --mixsongid 32100650
# 11. 调整音乐偏好(用户明确表达"少推点/别再推/多推点"时调用,详见 references/music.md#11-提交偏好)
kugou-cli music submit-preference --dimension singer --degree reduce --name "周杰伦" --weight-ratio 0.5
kugou-cli music submit-preference --dimension language --degree add --name "粤语" --weight-ratio 1.8