{
  "generated_at": "2026-10-02T01:31:05.961Z",
  "site_url": "https://pi.vhkd.top",
  "count": 6,
  "skills": [
    {
      "name": "cdp-page-control",
      "status": "stable",
      "declaredLayer": "core",
      "summary": "驱动受控浏览器操作任意网站页面（导航、填表、点击、读文本、截图、抓网络）",
      "useWhen": "要在某个网站的页面上点击/填表/翻页/取文本/截图/抓接口，或用已登录的浏览器会话做页面自动化时",
      "tier": 1,
      "version": "0.1.1",
      "platforms": [
        "all"
      ],
      "commands": [
        {
          "name": "launch",
          "summary": "启动/复用受控浏览器",
          "destructive": false
        },
        {
          "name": "nav",
          "summary": "打开 URL / 前进 / 后退 / 刷新",
          "destructive": false
        },
        {
          "name": "snapshot",
          "summary": "页面结构快照：可见交互元素 + @N 引用",
          "destructive": false
        },
        {
          "name": "wait",
          "summary": "等元素/条件出现",
          "destructive": false
        },
        {
          "name": "find",
          "summary": "找元素，返回定位器",
          "destructive": false
        },
        {
          "name": "click",
          "summary": "点击元素",
          "destructive": false
        },
        {
          "name": "type",
          "summary": "输入文本",
          "destructive": false
        },
        {
          "name": "fill",
          "summary": "按 JSON 批量填表（输入/下拉/勾选）",
          "destructive": false
        },
        {
          "name": "press",
          "summary": "按键/组合键",
          "destructive": false
        },
        {
          "name": "drag",
          "summary": "真实鼠标拖拽（含原生 HTML5 拖放）",
          "destructive": false
        },
        {
          "name": "select",
          "summary": "下拉选择",
          "destructive": false
        },
        {
          "name": "hover",
          "summary": "悬停元素",
          "destructive": false
        },
        {
          "name": "upload",
          "summary": "上传文件",
          "destructive": false
        },
        {
          "name": "insert-text",
          "summary": "向焦点元素插入文本（自绘编辑器）",
          "destructive": false
        },
        {
          "name": "text",
          "summary": "读元素文本",
          "destructive": false
        },
        {
          "name": "html",
          "summary": "读元素 HTML",
          "destructive": false
        },
        {
          "name": "eval",
          "summary": "在页面里执行 JS",
          "destructive": false
        },
        {
          "name": "net",
          "summary": "抓网络请求",
          "destructive": false
        },
        {
          "name": "console",
          "summary": "读控制台消息（含历史回放与异常）",
          "destructive": false
        },
        {
          "name": "shot",
          "summary": "截图（整页或单个元素）",
          "destructive": false
        },
        {
          "name": "pdf",
          "summary": "整页导出 PDF（打印管线，一次调用拿到全部内容，不受视口限制）：pdf <out.pdf> --size WxH [--media screen|print]；要 PNG 再用 qlmanage -t -s <2*max(W,H)> 矢量重栅格",
          "destructive": false
        },
        {
          "name": "cookies",
          "summary": "读写 cookie",
          "destructive": false
        },
        {
          "name": "import-cookies",
          "summary": "把日常 Chrome 的登录态复制进受控浏览器（默认预览，--yes 执行）",
          "destructive": false
        },
        {
          "name": "persist-cookies",
          "summary": "把会话 cookie 改成持久 cookie（跨重启保登录）",
          "destructive": false
        },
        {
          "name": "targets",
          "summary": "列出标签页",
          "destructive": false
        },
        {
          "name": "open",
          "summary": "新开标签页",
          "destructive": false
        },
        {
          "name": "close",
          "summary": "关闭标签页",
          "destructive": false
        },
        {
          "name": "status",
          "summary": "浏览器状态",
          "destructive": false
        },
        {
          "name": "stop",
          "summary": "关闭受控浏览器",
          "destructive": false
        }
      ],
      "requires": [],
      "config": [],
      "dependencies": [],
      "installable": true,
      "install": {
        "pi": "pi install git:gitea.vhkd.top/pi-hub/cdp-page-control@v0.1.1",
        "cli": ""
      },
      "repos": {
        "package": "https://gitea.vhkd.top/pi-hub/cdp-page-control.git",
        "cli": "",
        "mirrors": []
      },
      "usesPublic": [],
      "usedBy": [],
      "usedByCount": 6,
      "layer": "core",
      "installOrder": [
        "cdp-page-control"
      ]
    },
    {
      "name": "iterm-workspace-ctl",
      "status": "stable",
      "declaredLayer": "core",
      "summary": "完全掌控 iTerm2：查询窗口/tab/session 结构与内容，并做分屏、焦点、输入、改名、几何操作",
      "useWhen": "用户问终端本身的结构/内容（哪个 tab、几个 session、布局），或要求编排 iTerm2 时",
      "tier": 2,
      "version": "0.1.1",
      "platforms": [
        "all"
      ],
      "commands": [
        {
          "name": "info",
          "summary": "总览：窗口/tab/session 结构",
          "destructive": false
        },
        {
          "name": "tree",
          "summary": "树状结构",
          "destructive": false
        },
        {
          "name": "ids",
          "summary": "列出 id",
          "destructive": false
        },
        {
          "name": "where",
          "summary": "当前焦点位置",
          "destructive": false
        },
        {
          "name": "cur",
          "summary": "当前 session",
          "destructive": false
        },
        {
          "name": "focus",
          "summary": "切焦点",
          "destructive": false
        },
        {
          "name": "split",
          "summary": "分屏",
          "destructive": false
        },
        {
          "name": "cols",
          "summary": "多栏布局",
          "destructive": false
        },
        {
          "name": "resize",
          "summary": "调尺寸",
          "destructive": false
        },
        {
          "name": "fullscreen",
          "summary": "全屏/取消",
          "destructive": false
        },
        {
          "name": "send",
          "summary": "向 session 发送文本",
          "destructive": false
        },
        {
          "name": "key",
          "summary": "发送按键",
          "destructive": false
        },
        {
          "name": "capture",
          "summary": "读屏幕内容",
          "destructive": false
        },
        {
          "name": "profiles",
          "summary": "列出 profile",
          "destructive": false
        },
        {
          "name": "scrollback",
          "summary": "读/改 iTerm2 各 profile 的回滚缓冲（unlimited 或行数）",
          "destructive": false
        },
        {
          "name": "tab-list",
          "summary": "列出 tab",
          "destructive": false
        },
        {
          "name": "tab-new",
          "summary": "新建 tab",
          "destructive": false
        },
        {
          "name": "tab-select",
          "summary": "切 tab",
          "destructive": false
        },
        {
          "name": "tab-close",
          "summary": "关 tab",
          "destructive": false
        },
        {
          "name": "win-list",
          "summary": "列出窗口",
          "destructive": false
        },
        {
          "name": "win-new",
          "summary": "新建窗口",
          "destructive": false
        },
        {
          "name": "title",
          "summary": "改标题",
          "destructive": false
        },
        {
          "name": "sleep",
          "summary": "等待",
          "destructive": false
        },
        {
          "name": "id",
          "summary": "取窗格 session id（跨调用前先锚定）",
          "destructive": false
        },
        {
          "name": "split-id",
          "summary": "按 session id 分屏",
          "destructive": false
        },
        {
          "name": "focus-id",
          "summary": "按 session id 聚焦",
          "destructive": false
        },
        {
          "name": "send-id",
          "summary": "按 session id 发送文本并回车",
          "destructive": false
        },
        {
          "name": "send-raw-id",
          "summary": "按 session id 发送文本（不回车）",
          "destructive": false
        },
        {
          "name": "key-id",
          "summary": "按 session id 发送按键",
          "destructive": false
        },
        {
          "name": "capture-id",
          "summary": "按 session id 读屏幕内容",
          "destructive": false
        },
        {
          "name": "wait",
          "summary": "轮询窗格直到出现指定字样",
          "destructive": false
        },
        {
          "name": "wait-id",
          "summary": "按 session id 轮询直到出现指定字样",
          "destructive": false
        },
        {
          "name": "close-id",
          "summary": "按 session id 关闭窗格",
          "destructive": false
        },
        {
          "name": "wait-idle",
          "summary": "等目标空闲（命令回提示符 / TUI 屏幕静止），可选随后发送单行文本（前台阻塞）",
          "destructive": false
        },
        {
          "name": "idle-state",
          "summary": "一次性读目标忙闲：job/prompt/屏幕指纹",
          "destructive": false
        },
        {
          "name": "send-when-idle",
          "summary": "后台守候：目标空闲后把它发进去并回车；start/status/logs/stop（台账与 liveness 在 status 的 as_of）",
          "destructive": false
        },
        {
          "name": "batch",
          "summary": "从 stdin 一次连接顺序执行多条命令",
          "destructive": false
        }
      ],
      "requires": [],
      "config": [],
      "dependencies": [],
      "installable": true,
      "install": {
        "pi": "pi install git:gitea.vhkd.top/pi-hub/iterm-workspace-ctl@v0.1.1",
        "cli": ""
      },
      "repos": {
        "package": "https://gitea.vhkd.top/pi-hub/iterm-workspace-ctl.git",
        "cli": "",
        "mirrors": []
      },
      "usesPublic": [],
      "usedBy": [],
      "usedByCount": 2,
      "layer": "core",
      "installOrder": [
        "iterm-workspace-ctl"
      ]
    },
    {
      "name": "macos-desktop-control",
      "status": "stable",
      "declaredLayer": "core",
      "summary": "操作 macOS 桌面与应用界面：读无障碍元素树、点击按钮/菜单、填输入框、发文本与组合键、按窗口截图",
      "useWhen": "用户要求操作某个 Mac 应用（点按钮、点菜单、填表单、切选项、关窗口）、读界面文字、或截某窗口时",
      "tier": 1,
      "version": "0.1.1",
      "platforms": [
        "all"
      ],
      "commands": [
        {
          "name": "check",
          "summary": "前置检查：权限与可达性（其它命令失败时先跑它）",
          "destructive": false
        },
        {
          "name": "apps",
          "summary": "正在运行的 GUI 应用",
          "destructive": false
        },
        {
          "name": "front",
          "summary": "当前前台应用",
          "destructive": false
        },
        {
          "name": "windows",
          "summary": "屏幕上所有窗口（含 CGWindowID）",
          "destructive": false
        },
        {
          "name": "tree",
          "summary": "无障碍元素树（= 原生 app 的 DOM）",
          "destructive": false
        },
        {
          "name": "find",
          "summary": "找元素，打印可直接使用的地址",
          "destructive": false
        },
        {
          "name": "get",
          "summary": "读元素属性（省略属性时列出全部属性与可用动作）",
          "destructive": false
        },
        {
          "name": "shot",
          "summary": "截图（默认前台应用窗口，默认写临时文件；--clipboard 直接进剪贴板，--no-shadow 去阴影并等同窗口几何）",
          "destructive": false
        },
        {
          "name": "ocr",
          "summary": "识别屏幕文字并给出屏幕坐标（AX 树为空的界面用它定位）",
          "destructive": false
        },
        {
          "name": "focus",
          "summary": "把应用切到前台",
          "destructive": false
        },
        {
          "name": "press",
          "summary": "按下元素",
          "destructive": true
        },
        {
          "name": "set",
          "summary": "写元素属性，写完回读",
          "destructive": true
        },
        {
          "name": "menu",
          "summary": "按标题路径点菜单",
          "destructive": true
        },
        {
          "name": "type",
          "summary": "输入任意文本（含中文）",
          "destructive": true
        },
        {
          "name": "key",
          "summary": "发组合键",
          "destructive": true
        },
        {
          "name": "win-state",
          "summary": "读窗口位置/尺寸/全屏/最小化/所在屏幕",
          "destructive": false
        },
        {
          "name": "win-place",
          "summary": "把窗口摆到指定区域（半屏/四角/三分之一/自定义比例）",
          "destructive": true
        },
        {
          "name": "win-screen",
          "summary": "把窗口移到另一块屏幕",
          "destructive": true
        },
        {
          "name": "win-fullscreen",
          "summary": "全屏开关",
          "destructive": true
        },
        {
          "name": "win-minimize",
          "summary": "最小化窗口",
          "destructive": true
        },
        {
          "name": "win-unminimize",
          "summary": "恢复被最小化的窗口",
          "destructive": true
        },
        {
          "name": "click",
          "summary": "点击坐标或元素中心",
          "destructive": true
        },
        {
          "name": "drag",
          "summary": "拖拽",
          "destructive": true
        },
        {
          "name": "scroll",
          "summary": "滚动",
          "destructive": true
        },
        {
          "name": "space-list",
          "summary": "列出各屏的桌面与当前所在",
          "destructive": false
        },
        {
          "name": "space-goto",
          "summary": "切换桌面",
          "destructive": true
        },
        {
          "name": "space-move",
          "summary": "把窗口移到别的桌面",
          "destructive": true
        },
        {
          "name": "volume",
          "summary": "读/设系统音量与静音",
          "destructive": true
        },
        {
          "name": "media",
          "summary": "发送系统媒体键（播放/暂停/上下曲）；status 读当前谁在播",
          "destructive": true
        },
        {
          "name": "brightness",
          "summary": "读/设显示器亮度",
          "destructive": true
        },
        {
          "name": "clipboard",
          "summary": "读/写剪贴板文本；--image <文件> 写图片、--out <文件> 存出剪贴板里的图、--info 只看类型",
          "destructive": true
        },
        {
          "name": "wifi",
          "summary": "读/开关 Wi-Fi",
          "destructive": true
        },
        {
          "name": "screen-list",
          "summary": "列出显示器几何与可视区",
          "destructive": false
        },
        {
          "name": "input-source",
          "summary": "读/列/切换输入法",
          "destructive": true
        }
      ],
      "requires": [
        {
          "kind": "binary",
          "name": "swiftc",
          "install": "xcode-select --install（Command Line Tools）",
          "check": "swiftc --version",
          "note": "截图/窗口原语的小工具需要编译；已编译过就不再需要"
        },
        {
          "kind": "binary",
          "name": "shasum",
          "install": "macOS 自带（perl）",
          "check": "shasum --version",
          "note": ""
        }
      ],
      "config": [],
      "dependencies": [],
      "installable": true,
      "install": {
        "pi": "pi install git:gitea.vhkd.top/pi-hub/macos-desktop-control@v0.1.1",
        "cli": ""
      },
      "repos": {
        "package": "https://gitea.vhkd.top/pi-hub/macos-desktop-control.git",
        "cli": "",
        "mirrors": []
      },
      "usesPublic": [],
      "usedBy": [],
      "usedByCount": 4,
      "layer": "core",
      "installOrder": [
        "macos-desktop-control"
      ]
    },
    {
      "name": "netease-music",
      "status": "stable",
      "declaredLayer": null,
      "summary": "网易云音乐遥控器：一句话对上云里的内容（每日推荐 / 歌单 / 榜单 / 收藏 / FM / 最近 / 播客）并放出来；播放侧管好本机队列现场（快照 / back / 追加）",
      "useWhen": "用户要放网易云的音乐（每日推荐、指定歌曲/歌手、我喜欢的音乐）、问现在在放什么，或要暂停/切歌/调音量/看歌词/取歌曲封面时",
      "tier": 1,
      "version": "0.1.4",
      "platforms": [
        "all"
      ],
      "commands": [
        {
          "name": "daily",
          "summary": "每日推荐分页入队播放（--limit N / --offset N / --shuffle；JSON 带 total）",
          "destructive": false
        },
        {
          "name": "play",
          "summary": "播一首或一整张：关键词→最匹配一首；歌单 id/链接→整张（--shuffle）",
          "destructive": false
        },
        {
          "name": "play-ids",
          "summary": "play-ids <id,id,...> [--start N]：按输入顺序整列替换，1 基起点默认 1；保留重复项，选中歌不可播则保留旧队列；关闭随机",
          "destructive": false
        },
        {
          "name": "search",
          "summary": "只搜不播：列出 id/歌名/歌手/时长/是否要 VIP（--limit N / --offset N；JSON 带 total）",
          "destructive": false
        },
        {
          "name": "cover",
          "summary": "cover <歌曲关键词|id> [--download PATH] [--force]：只读查询封面，JSON 为 id/name/artist/cover；下载为 id/cover/file/bytes，最多 10 MB（10000000 字节），覆盖需 --force；所有原语歌曲对象含字符串 cover（缺失为空）",
          "destructive": false
        },
        {
          "name": "artist",
          "summary": "歌手热门分页入队播放（名字或 id；--limit N / --offset N；JSON 带 total）",
          "destructive": false
        },
        {
          "name": "album",
          "summary": "专辑按顺序分页入队播放（名字、id 或专辑链接；--limit N / --offset N；JSON 带 total）",
          "destructive": false
        },
        {
          "name": "albums",
          "summary": "只列不播：歌手的专辑（含老专辑；--limit N / --offset N；JSON 带 total）",
          "destructive": false
        },
        {
          "name": "liked",
          "summary": "分页播放「我喜欢的音乐」（--limit N / --offset N；JSON 带 total）",
          "destructive": false
        },
        {
          "name": "liked-ids",
          "summary": "只读喜欢 ID 全表；--json 为 {count,total,ids:[数字,...]}；歌曲 JSON 透传可用的布尔 liked，缺字段时用全表按 id 判定",
          "destructive": false
        },
        {
          "name": "myplaylists",
          "summary": "我的歌单（自建 + 收藏）；--limit N / --offset N 分页，collected/own 筛本页；JSON 带 total",
          "destructive": false
        },
        {
          "name": "pause",
          "summary": "暂停",
          "destructive": false
        },
        {
          "name": "resume",
          "summary": "继续播放",
          "destructive": false
        },
        {
          "name": "toggle",
          "summary": "暂停/继续切换",
          "destructive": false
        },
        {
          "name": "next",
          "summary": "下一首",
          "destructive": false
        },
        {
          "name": "prev",
          "summary": "上一首",
          "destructive": false
        },
        {
          "name": "stop",
          "summary": "停止并清空队列",
          "destructive": false
        },
        {
          "name": "clear",
          "summary": "停止并清空 mpv 和本地队列，收掉保活；配置和快照保留，可重复调用",
          "destructive": false
        },
        {
          "name": "volume",
          "summary": "读或设音量（0-130）",
          "destructive": false
        },
        {
          "name": "seek",
          "summary": "跳进度（相对秒数，如 +30）",
          "destructive": false
        },
        {
          "name": "queue",
          "summary": "看队列（mpv 真值）：每首歌名、时长，标出正在放的那首",
          "destructive": false
        },
        {
          "name": "jump",
          "summary": "跳到队列第 N 首（从 1 开始），并回读状态确认",
          "destructive": false
        },
        {
          "name": "remove",
          "summary": "remove <index>：按 queue 显示的 1 基序号删除；当前项选下一首，末尾选上一首，删空停止；同步本地文件",
          "destructive": false
        },
        {
          "name": "status",
          "summary": "当前曲目/进度/音量/队列位置（mpv 真值）；repeat_mode 为 off/list/single",
          "destructive": false
        },
        {
          "name": "lyric",
          "summary": "当前歌曲歌词（默认只显示当前句与下一句，--all 全文）",
          "destructive": false
        },
        {
          "name": "like",
          "summary": "把当前这首歌加入「我喜欢的音乐」",
          "destructive": false
        },
        {
          "name": "unlike",
          "summary": "把当前这首歌移出「我喜欢的音乐」",
          "destructive": false
        },
        {
          "name": "shuffle",
          "summary": "队列随机开/关",
          "destructive": false
        },
        {
          "name": "repeat",
          "summary": "repeat off|list|single：关闭/整列/单曲循环；on 和无参数 = list；状态追加 repeat_mode，保留旧 repeat 布尔含义",
          "destructive": false
        },
        {
          "name": "login",
          "summary": "登录（--sms 手机号+验证码两步为主力；不带参数出二维码扫码），cookie 存本机 config",
          "destructive": false
        },
        {
          "name": "setup",
          "summary": "写配置（--cookie/--quality）；不带参数打印登录办法",
          "destructive": false
        },
        {
          "name": "check",
          "summary": "只读自检：依赖、登录态、mpv 可用性、默认音质",
          "destructive": false
        },
        {
          "name": "playlist",
          "summary": "放一张歌单：名字/id/链接都行（--limit N / --offset N；JSON 带 total）",
          "destructive": false
        },
        {
          "name": "playlists",
          "summary": "搜歌单（只列不播）：id / 名字 / 曲目数 / 作者 / 是否已收藏；--limit N / --offset N，JSON 带 total",
          "destructive": false
        },
        {
          "name": "charts",
          "summary": "列排行榜（只列不播）：飙升榜 / 新歌榜 / …；--limit N / --offset N，JSON 带 total",
          "destructive": false
        },
        {
          "name": "chart",
          "summary": "放某个榜单：名字或 id（--limit N / --offset N；JSON 带 total）",
          "destructive": false
        },
        {
          "name": "myalbums",
          "summary": "我收藏的专辑（只列不播；--limit N / --offset N；JSON 带 total；id 可喂 album）",
          "destructive": false
        },
        {
          "name": "myartists",
          "summary": "我收藏的歌手（只列不播；--limit N / --offset N；JSON 带 total；id 可喂 artist）",
          "destructive": false
        },
        {
          "name": "fm",
          "summary": "私人 FM：没听过的歌，整列入队开播（--limit N）",
          "destructive": false
        },
        {
          "name": "dislike",
          "summary": "dislike [歌曲id]：私人 FM 不喜欢（fm/trash）；省略 id 用当前歌曲，只上报，不自动切歌或改队列",
          "destructive": false
        },
        {
          "name": "recent",
          "summary": "最近播放（只列不播，一周内，含播放次数；--limit N / --offset N；JSON 带 total）",
          "destructive": false
        },
        {
          "name": "replay",
          "summary": "再放一次最近第 N 首（默认 1 = 最近那首）",
          "destructive": false
        },
        {
          "name": "podcasts",
          "summary": "我的播客订阅（只列不播；--recommend 看推荐的；--limit N / --offset N；JSON 带 total）",
          "destructive": false
        },
        {
          "name": "podcast",
          "summary": "放某播客的节目（--limit N 默认 3；--offset N；名字或 id；JSON 带 total）",
          "destructive": false
        },
        {
          "name": "episode",
          "summary": "放某一期节目（节目 id 从 podcast 输出里抄）",
          "destructive": false
        },
        {
          "name": "queues",
          "summary": "看本地队列快照（每次换队列会自动留一条「上一条」）",
          "destructive": false
        },
        {
          "name": "queue-save",
          "summary": "把当前队列存成命名快照（只存歌曲列表，地址回放时重取）",
          "destructive": false
        },
        {
          "name": "queue-load",
          "summary": "载入某个命名快照（含当时位置与随机状态）",
          "destructive": false
        },
        {
          "name": "back",
          "summary": "切回上一条队列（含位置）；再 back 一次切回来",
          "destructive": false
        },
        {
          "name": "add",
          "summary": "把一首加到当前队列尾部，不动正在放的那首",
          "destructive": false
        }
      ],
      "requires": [
        {
          "kind": "runtime",
          "name": "node",
          "install": "",
          "check": "which node",
          "note": "接口客户端与 mpv 控制都是 node 脚本，零 npm 依赖"
        },
        {
          "kind": "runtime",
          "name": "python3",
          "install": "",
          "check": "which python3",
          "note": ""
        },
        {
          "kind": "binary",
          "name": "mpv",
          "install": "brew install mpv",
          "check": "which mpv",
          "note": "真正的播放器（常驻 + unix socket 控制）"
        },
        {
          "kind": "binary",
          "name": "qrencode",
          "install": "brew install qrencode",
          "check": "which qrencode",
          "note": "只在扫码登录时用"
        }
      ],
      "config": [
        {
          "key": "cookie",
          "desc": "登录 cookie（MUSIC_U=…），由 login 命令扫码写入",
          "required": true,
          "secret": true,
          "ask": "扫码登录一次：pi-skill netease-music login"
        },
        {
          "key": "quality",
          "desc": "音质级别：standard/higher/exhigh/lossless/hires",
          "required": false,
          "secret": false,
          "ask": ""
        }
      ],
      "dependencies": [],
      "installable": true,
      "install": {
        "pi": "pi install git:gitea.vhkd.top/pi-hub/netease-music@v0.1.4",
        "cli": "git clone https://gitea.vhkd.top/pi-hub/netease-music-cli.git && cd netease-music-cli && ./scripts/install-cli.sh"
      },
      "repos": {
        "package": "https://gitea.vhkd.top/pi-hub/netease-music.git",
        "cli": "https://gitea.vhkd.top/pi-hub/netease-music-cli.git",
        "mirrors": [
          "git@gitea.gklazycat.heiyu.space:pi-hub/netease-music-cli.git"
        ]
      },
      "usesPublic": [],
      "usedBy": [],
      "usedByCount": 1,
      "layer": "tool",
      "installOrder": [
        "netease-music"
      ]
    },
    {
      "name": "skill-catalog",
      "status": "stable",
      "declaredLayer": null,
      "summary": "技能目录站：把对外发布的技能生成一个静态站（能干什么 / 先装什么 / 要配什么 / 依赖谁 / 一条安装命令），生成物不手改页面。",
      "useWhen": "要更新或发布技能目录页时；想看清哪些技能可公开、依赖闭包是否完整时。",
      "tier": 1,
      "version": "0.1.1",
      "platforms": [
        "all"
      ],
      "commands": [
        {
          "name": "build",
          "summary": "生成静态站（只收录声明了 publish 的技能）",
          "destructive": false
        },
        {
          "name": "preview",
          "summary": "生成并本地预览目录站",
          "destructive": false
        },
        {
          "name": "deploy",
          "summary": "把生成的站点发布到部署目标（relay→host，release + current 切换）",
          "destructive": false
        },
        {
          "name": "list",
          "summary": "收录清单与依赖闭包状态",
          "destructive": false
        },
        {
          "name": "check",
          "summary": "只读自检：收录规则与部署目标配置",
          "destructive": false
        }
      ],
      "requires": [
        {
          "kind": "runtime",
          "name": "node",
          "install": "",
          "check": "which node",
          "note": "生成器；零 npm 依赖"
        },
        {
          "kind": "runtime",
          "name": "python3",
          "install": "",
          "check": "which python3",
          "note": "预览用的本地文件服务；部署时的 tar/ssh 走系统命令"
        },
        {
          "kind": "binary",
          "name": "tar",
          "install": "",
          "check": "",
          "note": "部署打包（tar）与字体下载/上线自检（curl）"
        },
        {
          "kind": "binary",
          "name": "curl",
          "install": "",
          "check": "",
          "note": "部署打包（tar）与字体下载/上线自检（curl）"
        }
      ],
      "config": [
        {
          "key": "site_url",
          "desc": "站点公开地址（写进页面的 canonical 与分享链接）",
          "required": false,
          "secret": false,
          "ask": ""
        },
        {
          "key": "deploy_relay",
          "desc": "部署用的跳板机（本地能 ssh 的别名）",
          "required": false,
          "secret": false,
          "ask": ""
        },
        {
          "key": "deploy_host",
          "desc": "目标主机（在跳板机上能 ssh 的别名）",
          "required": false,
          "secret": false,
          "ask": ""
        },
        {
          "key": "deploy_path",
          "desc": "目标目录（Caddy 站点根，站点以 current 软链切换）",
          "required": true,
          "secret": false,
          "ask": "目录站放到目标机器的哪个目录？"
        }
      ],
      "dependencies": [
        {
          "name": "skill-interface",
          "public": true,
          "note": "技能发现与接口解析 skill-registry.mjs、配置契约 skill-config.mjs、泄漏扫描 skill-pack.mjs"
        }
      ],
      "installable": true,
      "install": {
        "pi": "pi install git:gitea.vhkd.top/pi-hub/skill-catalog@v0.1.1",
        "cli": ""
      },
      "repos": {
        "package": "https://gitea.vhkd.top/pi-hub/skill-catalog.git",
        "cli": "",
        "mirrors": []
      },
      "usesPublic": [
        "skill-interface"
      ],
      "usedBy": [],
      "usedByCount": 0,
      "layer": "app",
      "installOrder": [
        "skill-interface",
        "skill-catalog"
      ]
    },
    {
      "name": "skill-interface",
      "status": "stable",
      "declaredLayer": "core",
      "summary": "所有技能的统一切入点：技能目录、用法转发、PATH 入口注册与契约检查",
      "useWhen": "要调用任何技能的命令，或要核对技能是否满足接口契约时",
      "tier": 1,
      "version": "0.1.1",
      "platforms": [
        "all"
      ],
      "commands": [
        {
          "name": "list",
          "summary": "列出技能：名字/分级/别名/命令/何时用",
          "destructive": false
        },
        {
          "name": "help",
          "summary": "pi-skill 自己的用法",
          "destructive": false
        },
        {
          "name": "stats",
          "summary": "调用统计：调用量/失败率/错误码/从未被调用的技能与命令（--since 7d|all，--json）",
          "destructive": false
        },
        {
          "name": "impact",
          "summary": "影响面：谁硬依赖（脚本调用）/软引用（文档提及）某技能或命令，含近 30d 调用量（--json）",
          "destructive": false
        },
        {
          "name": "doctor",
          "summary": "体检：哪些技能缺必需配置（给 setup 命令）/ 缺外部依赖（给装法），--json",
          "destructive": false
        },
        {
          "name": "pack",
          "summary": "打包单个技能给他人用：白名单 + 泄漏扫描（密钥/家目录/真实工单号）+ MANIFEST（--out，--json）",
          "destructive": false
        },
        {
          "name": "audit",
          "summary": "技能库巡检：路由异常/入口重叠/体量膨胀/重复实现/生命周期（只报告，定期跑）",
          "destructive": false
        }
      ],
      "requires": [
        {
          "kind": "binary",
          "name": "tar",
          "install": "macOS/Windows 10+ 自带",
          "check": "tar --version",
          "note": "pi-skill pack 生成 .tar.gz 用；没有也能出目录包"
        }
      ],
      "config": [],
      "dependencies": [],
      "installable": true,
      "install": {
        "pi": "pi install git:gitea.vhkd.top/pi-hub/skill-interface@v0.1.1",
        "cli": ""
      },
      "repos": {
        "package": "https://gitea.vhkd.top/pi-hub/skill-interface.git",
        "cli": "",
        "mirrors": []
      },
      "usesPublic": [],
      "usedBy": [
        "skill-catalog"
      ],
      "usedByCount": 8,
      "layer": "core",
      "installOrder": [
        "skill-interface"
      ]
    }
  ]
}
