{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "peon-ping",
  "built": "2026-10-26",
  "control_level": 4,
  "control_level_label": "L4 高权限",
  "capabilities": [
    "execute_command",
    "network",
    "write_file"
  ],
  "required_controls": {
    "agent": [
      "sandbox_recommended",
      "graded_authorization"
    ],
    "admin": [
      "approval_process",
      "rollback_support",
      "full_audit"
    ]
  },
  "evidence": [
    {
      "file": "scripts/",
      "summary": "Local script or command execution: Installation registers peon.sh as Claude Code event command hooks (the 8 categories listed in the README: SessionStart /"
    },
    {
      "file": "网络端点",
      "summary": "Declared external network access: Core code fetched during install/update: REPO_BASE points to the **main branch** on raw.githubusercontent.com, installed via curl -"
    },
    {
      "file": "本地工作目录",
      "summary": "File I/O and artifact output: Writes user-level Claude settings and registers hooks: install.sh uses `with open(settings_path, 'w') as f:`"
    }
  ],
  "verification": {
    "method": "第一遍：只读通读（拒绝跟 main，只读 pin 工作副本）——7 个 SKILL.md 的 frontmatter 与正文、peon.sh 关键段（播放后端、relay、手机推送、自更新、配置脚本执行）、install.sh 与 install.ps1 的注册与写入段、scripts/ 全部脚本、adapters/ 抽样、config.json、trainer/manifest.json、mcp/、docs/public/llms.txt、README 相关段，逐条按 file+line+逐字 quote 取证。第二遍独立复核（换角度找茬）：①重读安装器的技能列表与 hook 注册点，核对『7 个 SKILL.md 只装 6 个』；②对每条 external_deps 二次检索调用点（raw.githubusercontent / registry / elevenlabs / minimax / ntfy / pushover / telegram / relay）；③安全侧独立扫 sudo、keychain、日志泄漏与注入缓解；④单读 notification_title_script 的执行段确认 shell=True；⑤核对 pin。",
    "second_pass": [
      {
        "item": "skill.path 的选取（skills/peon-ping-use）",
        "status": "ok",
        "detail": "重读仓库根目录（无 SKILL.md、无 plugin.json/marketplace.json）、glob **/SKILL.md（恰 7 个，全在 skills/peon-ping-*/）、glob **/plugin.json 与 **/marketplace.json（零命中）、以及 docs/public/llms.txt 与 README 对技能的分组排序。结论：展示名是产品级/仓库级，没有单一插件入口声明，必须主观择一；选 peon-ping-use（frontmatter 带 license: MIT 与 metadata.author: PeonPing，且是会话级语音包切换的主实现）。七个技能的 name/description 原文均已取证，可零成本改选。"
      },
      {
        "item": "仓库 7 个 SKILL.md 与安装器 6 个的矛盾",
        "status": "discrepancy",
        "detail": "重读 install.sh 的 install_skill 调用段（仅 6 个：toggle/config/use/log/remix/create-pack）与 install.ps1 的技能数组（同样 6 个，无 rename）。结论：peon-ping-rename 的 SKILL.md 不会被装到用户目录，只有它的 hook 脚本被单独下载——宣称 7 个、落地 6 个。"
      },
      {
        "item": "external_deps：raw.githubusercontent.com 系列调用点",
        "status": "ok",
        "detail": "分别重读 install.sh 的 REPO_BASE 定义与下载段、pack-download.sh 的 PACK_BASE 拼接、peon.sh 的自更新与 VERSION 探测、adapters/omp.sh 与 adapters/kilo.sh。全部为明文 HTTPS 拉取，**无 pin、无签名校验**（语音包的 sha256 基线也来自同一来源，故不能防上游作恶）。"
      },
      {
        "item": "external_deps：自建 registry 与 peon.sh 内的 urllib 拉取",
        "status": "ok",
        "detail": "重读 install.sh 的 REGISTRY_URL 常量，并在 peon.sh 检索 urllib.request.urlopen 命中两处同一 URL；另 pack-download.sh 亦有同域请求。属自建静态清单，与包文件所在 GitHub raw 分离。"
      },
      {
        "item": "security：hooks 写进了哪里、注册了哪些事件",
        "status": "ok",
        "detail": "重读 install.sh 的 hook 安装段：HOOK_CMD 指向 $GLOBAL_BASE/hooks/peon-ping/peon.sh，settings.json 两次被以 'w' 模式改写；另确认 UserPromptSubmit 的两个 hook 分别指向 hook-handle-use.sh 与 hook-handle-rename.sh。README 侧 11 类事件清单与之吻合。"
      },
      {
        "item": "security：是否提权 / 是否碰系统目录",
        "status": "ok",
        "detail": "对 install.sh、peon.sh、relay.sh、scripts/、adapters/ 检索 sudo：零命中；重读 install.sh 的 chmod 与软链段确认权限动作只有 chmod +x，写入目标全部在 $HOME 之下（~/.claude、~/.local/bin、~/.zshrc、~/.bashrc、~/.config/fish、~/Library/LaunchAgents）。"
      },
      {
        "item": "security：凭据读取清单",
        "status": "ok",
        "detail": "重读 pack-render.py（env + 两处文件回退 + xi-api-key 头）、tts-minimax.sh/.ps1（MINIMAX_API_KEY / GROUP_ID）、peon.sh 的手机推送凭据读段。结论：本地配置/环境变量 → 明文 HTTPS 出站到用户自选的第三方服务，无第三方中转、不上传至作者域名。"
      },
      {
        "item": "security：配置驱动的 shell 执行",
        "status": "ok",
        "detail": "在 peon.sh 检索 notification_title_script 命中取值与执行两处，重读该段确认 `_sp.run(_script, shell=True, capture_output=True, text=True, timeout=2, env=_env)`；又重读 config.json 确认默认值为空串。结论：默认关闭但机制真实存在。"
      },
      {
        "item": "security：Windows 侧消息注入缓解是否成立",
        "status": "ok",
        "detail": "重读 notify.sh 的 PowerShell 相关段：注释写明为避免把不可信消息插值进 PowerShell 而改用 mktemp 临时文件传参，`cygpath -w` 转换路径后传参。缓解存在，但同一文件仍有其它把变量拼进命令的位置，故只在报告中陈述『有专门缓解』而非『完全免疫』。"
      },
      {
        "item": "仓库内是否自带 hook 配置",
        "status": "ok",
        "detail": "glob .claude/*.json 与 **/settings.json 零命中；.claude/ 下只有 worktrees/（agent 开发期日志残留）。结论：工作副本不含 hook 注册，用户机器上的 hooks 完全由安装器运行时生成——因此本报告的 hook 证据来自安装器代码与 SKILL.md 描述，而非仓库内的 settings.json。"
      },
      {
        "item": "定性：是纯 prompt 型还是壳 + 真 CLI",
        "status": "ok",
        "detail": "重读 peon.sh 头部（#!/bin/bash、平台探测、7071 行）、SKILL.md 自述（'this SKILL.md file exists solely for discoverability'）、以及 README 的 hook 注册声明；确认存在 240KB 的 BATS 与 135KB 的 Pester 测试。结论：壳 + 真 CLI 成立，提示层是可选的降级路径（SKILL.md 内写了 manual fallback）。"
      },
      {
        "item": "语音包是否随仓库分发",
        "status": "ok",
        "detail": "重读 README 的包数量宣称与 pack-download.sh 的 fallback 列表，并 glob 仓库内音频：只有 trainer/sounds 的 mp3 与演示用 wav，没有 packs/ 目录。结论：语音包确为安装期外置下载，fallback 列表仅用于 registry 不可达时。"
      },
      {
        "item": "pin 与许可证",
        "status": "ok",
        "detail": "工作副本 HEAD = 8ef376602fa6ee19100e4632396463b5875f2672，与任务书 pin 8ef376602fa6 一致；LICENSE 为 MIT（Copyright (c) 2025 Tony Sheng），两个 SKILL.md 另带 license: MIT。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "8ef376602fa6ee19100e4632396463b5875f2672",
    "sha256": "6daa61016ffad43943212670ca05fcdf2946b2e7bedc65dff25d960299203c24",
    "reviewed_by": null,
    "reviewed_at": null
  },
  "assessed_at": "2026-10-25",
  "method_version": "2.0",
  "mirror": {
    "archive": "https://skillpub.pages.dev/r2/v/2026-09-15/peon-ping.tar.gz",
    "sha256": "6daa61016ffad43943212670ca05fcdf2946b2e7bedc65dff25d960299203c24",
    "commit": "8ef376602fa6ee19100e4632396463b5875f2672"
  },
  "original": {
    "github": "https://github.com/PeonPing/peon-ping/tree/main/skills/peon-ping-use",
    "path": "skills/peon-ping-use",
    "commit": "8ef376602fa6ee19100e4632396463b5875f2672"
  }
}