mcpField
S
skill-debug

skill-debug

github.com/yknothingAgent 工作流2482 次安装5 周前更新
代码仓库

关于 skill-debug

skill-debug 是用于检查本地 Agent Skills 可发现情况及 canary 激活记录的观测工具集,面向需要了解技能运行线索的用户。它将本地探测、激活追踪和仪表盘分层呈现,并明确区分观测结果与平台级证明。

主要功能

  1. 01扫描常见本地技能发现路径
  2. 02检测名称冲突并校验 frontmatter
  3. 03注入并记录激活 canary
  4. 04汇总频率、时间与上下文分布
  5. 05提供只读健康检查报告
  6. 06区分本地代理信号与推断

适用场景

  1. 01诊断技能是否位于已扫描的发现路径
  2. 02查看哪些技能记录到 canary 事件
  3. 03检查本地技能目录与名称冲突
  4. 04结合使用体验解释未观测到的激活

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/yknothing/skills-refiner --skill skill-debug

安装后在 Claude Code 中输入/skill-debug确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

bin/
pi-skill-catalog.mjs
skill-canary.sh
skill-dashboard.sh
skill-probe.sh
skill-trace.sh
skills-refiner-doctor.sh
lib/
common.sh
tests/
test-dashboard.sh
test-doctor.sh
test-install-layout.sh
test-observability-regressions.sh
test-pi-skill-catalog.mjs
test-platform-contract.sh
test-probe.sh
test-trace.sh

详细介绍

skill-debug

你是一名技能可观测性顾问。你的工作是帮助用户了解其技能有哪些本地证据:可能的发现入口、金丝雀激活情况和使用模式。不要夸大这些信号,将其视为技能已加载、遵循指令或结果质量的平台代理级证明。

理念

  1. 观察,而非臆测。 工具会收集有关技能发现和激活的事实。你需要解读其中的模式,并结合用户的实际体验进行分析。
  2. 尊重拓扑结构。 技能安装在 ~/.agents/skills/ 中,并通过符号链接关联到 Agent 目录。指向同一源的符号链接是分发链接,并非冗余。探测工具必须区分符号链接与实际重复项。
  3. 避免误报。 未观察到技能激活,可能只是因为当时不需要该技能。“未观察到”是一种观察结果,而非结论。建议移除技能之前,应结合用户的实际工作流进行核实。

在 Agent 会话中运行工具

当你拥有Shell 访问权限,且用户要求进行发现诊断、激活统计或技能整体健康状况检查时:

  • 优先自行执行只读脚本(skills-refiner-doctor.sh、skill-probe.sh、skill-dashboard.sh),而不是让用户手动运行。
  • 除非用户明确要求修改磁盘上的技能以进行金丝雀追踪,否则不要运行 skill-trace.sh --inject / --inject-dir / --strip / --strip-dir。

一次性只读快照:

bash ~/.agents/skills/skill-debug/bin/skills-refiner-doctor.sh
bash ~/.agents/skills/skill-debug/bin/skills-refiner-doctor.sh --json
bash ~/.agents/skills/skill-debug/bin/skills-refiner-doctor.sh --lang zh
bash ~/.agents/skills/skill-debug/bin/skills-refiner-doctor.sh --raw

问题

Agent 技能按设计采用“安装后不管”的方式。你安装技能,期待 Agent 能找到它,而验证方式有限:

  • 该技能是否存在于此诊断工具能够扫描的本地发现入口?
  • 在技能引导的运行期间,是否观察到金丝雀命令?
  • Agent 是否看起来遵循了技能指令?
  • 哪些已安装的技能身份观察到了金丝雀事件,哪些没有本地金丝雀证据?

此技能提供了一个三层调试架构,用于收集这些问题的证据。你需要自行判断。

快速开始

# Read-only bundle: probe + dashboard + hygiene scan (does not inject traces)
bash ~/.agents/skills/skill-debug/bin/skills-refiner-doctor.sh

默认的 doctor 终端输出是精简的治理摘要。仅在需要完整的子工具终端报告时使用 --raw。使用 --lang zh 可显示中文终端标签。JSON 输出保留稳定的英文键,并包含 product_version: "2.0";skills-refiner.doctor.v2 等架构字符串是兼容性版本,而非产品发行版本号。

选择性安装约定:skill-debug 可独立用于探测、仪表板、追踪和金丝雀操作。doctor 也会在已安装 skill-hygiene 的情况下使用它。若未安装该技能,doctor --json 仍会返回有效的部分对象,其中 steps.hygiene.status: "unavailable",并以状态码 1 退出;不要将此部分快照描述为完整的治理扫描。


# Layer 1: What local skill surfaces are likely discoverable right now?
bash ~/.agents/skills/skill-debug/bin/skill-probe.sh

# Layer 2: Inject activation canaries into skills
bash ~/.agents/skills/skill-debug/bin/skill-trace.sh --inject ~/.agents/skills/my-skill/SKILL.md

# Layer 3: View canary observation dashboard
bash ~/.agents/skills/skill-debug/bin/skill-dashboard.sh

三层调试架构

优先使用原生平台信号

若平台提供原生 Agent 信号,应优先使用。本技能用于弥补本地证据缺口,不能替代平台遥测。

平台原生信号本仓库的边界
Claude CodeOpenTelemetry 指标/事件/追踪;配置后包含技能激活和工具调用跨度skill-probe --doctor 报告本地 OTel 环境状态;canary 仍是后备方案/代理指标
Codex原生技能发现,包括 .agents/skills、~/.agents/skills、管理员/系统作用域、符号链接跟随,以及 agents/openai.yaml 调用策略报告本地位置和元数据;不要声称技能已在运行时激活
OpenAI Agents SDKSDK 运行的应用工作流追踪:生成、工具、交接、护栏、自定义跨度这是独立的 SDK 信号;不能作为 Codex/IDE 加载技能的证据
Cursor规则、记忆、MCP 配置、Agent Skills 和 Agent 终端上下文报告本地规则/技能/MCP 是否存在;不假定有已记录的完整追踪导出器
Pi 0.86.0原生包解析器和技能加载器pi-skill-catalog.mjs 监测用户技能发现、选定路径、禁用路径和警告;项目/包/CLI 资源和工作流执行不在此探测范围内
Pi 用户技能发现

对于 Pi 启动警告,请使用已安装的运行时,而不要假定只有 SKILL.md 文件才能进入其目录:

node ~/.agents/skills/skill-debug/bin/pi-skill-catalog.mjs \
  --pi-package /absolute/path/to/node_modules/@earendil-works/pi-coding-agent --json

入口脚本独立自包含,并绑定到 Pi 0.86.0;请使用该 Pi 安装所支持的 Node 运行时。--settings /absolute/candidate.json 会检查候选用户配置,而不会写入配置。解析本地资源路径时,会以实际 Agent 目录为基准。退出代码 0 表示观察已完成,包括报告的任何警告;它并不证明目录干净或运行时符合要求。退出代码 3 表示 Pi 版本或已配置的包不受支持,否则可能触发安装。其他 错误以退出代码 2 结束。不会运行扩展或调用模型。

Pi 可以发现共享分组目录中描述非空的普通 Markdown 文件,也可以保留名称无效或描述过长的文件并发出警告。 请将观察到的路径与预期的技能条目进行比较。若确认暴露了参考资料/模板,请在 Pi 用户的 settings.json 中使用 !<absolute-directory>/** 排除确切的资源子树;保留参考文件的可读性。 若确认存在特定主机的变体,请先检查胜出的路径和内容,再使用 -<absolute-loser-SKILL.md>。不要假定覆盖模式会展开波浪号、不要删除任一变体,也不要把占位符改成有效的技能名称。 请合并到现有的 skills 数组中,比较候选目录和实际目录,并验证每个保留的身份。原生目录警告、正文访问情况和任务结果仍是彼此独立的事实。

准确性约定

本技能可以准确统计本地证据:扫描路径上可发现的文件、规范技能身份、符号链接分布、失效链接以及记录的 canary JSONL 事件。除非平台导出相应运行时事件,否则无法准确统计真正的发现、加载、遵从情况或实用性。没有原生遥测时,canary 统计数据只能作为代理观察结果。

第 1 层:发现诊断(skill-probe)

回答:“从这里可以在可能的发现位置找到哪些本地技能文件?”

bash ~/.agents/skills/skill-debug/bin/skill-probe.sh [--cwd /path/to/project] [--verbose]

功能:

  • 扫描常见的本地技能目录(.warp/skills/、.agents/skills/、.claude/skills/、.codex/skills/、.cursor/skills/、.gemini/skills/、.copilot/skills/、.factory/skills/、.github/skills/、.opencode/skills/)
  • 检查项目级位置(从 cwd 到仓库根目录)和全局位置(~/)
  • 报告技能名称冲突(名称相同、路径不同)
  • 显示诊断工具的发现优先级顺序
  • 验证 frontmatter 是否可解析

输出:以颜色编码的终端报告,显示此诊断工具可见的本地技能文件。平台特定的运行时发现情况可能有所不同。

第 2 层:激活追踪(skill-trace)

回答:“Agent 是否遵循了此技能注入的 canary 命令?”

# Inject trace into one skill
bash ~/.agents/skills/skill-debug/bin/skill-trace.sh --inject ~/.agents/skills/my-skill/SKILL.md

# Inject trace into all skills in a directory
bash ~/.agents/skills/skill-debug/bin/skill-trace.sh --inject-dir ~/.agents/skills/

# Remove traces
bash ~/.agents/skills/skill-debug/bin/skill-trace.sh --strip ~/.agents/skills/my-skill/SKILL.md

# Remove all traces
bash ~/.agents/skills/skill-debug/bin/skill-trace.sh --strip-dir ~/.agents/skills/

工作原理:

  • 向技能中注入一个轻量的“canary”前导块。以下内容是概念性结构,并非可执行的生成命令副本:
## Activation Canary Trace (auto-injected by skill-debug)


When this skill is used, run this canary command first:
\`\`\`text
_skill_debug_helper="/abs/path/to/skill-debug/bin/skill-canary.sh"
if [ -f "$_skill_debug_helper" ]; then
  bash "$_skill_debug_helper" "/abs/path/to/SKILL.md"
else
  # Generated block uses a compact secure fallback: require real, non-symlink
  # debug/log paths; set 0700/0600; append one degraded JSON event or fail closed.
  secure_degraded_append_or_fail_closed
fi
\`\`\`

  • 追踪内容是一个简短的 bash 块;如果 Agent 遵循了注入的指令,就可以观察到它
  • 此块会委托给 bin/skill-canary.sh,由它唯一负责实现身份哈希。注入的文件从不携带冻结版本的规范化算法,因此算法可以演进,而不会导致先前注入的 canary 失效。
  • 每个事件都包含一个本地身份键,该键根据规范化的 SKILL.md 路径和规范化的内容哈希生成。自动注入的 canary 块不计入该哈希,因此注入/移除循环不会导致先前的观测失效。
  • 如果缺少辅助脚本(例如注入后卸载了 skill-debug),该块会追加一个降级的、仅包含名称的事件(trace_kind: "canary_degraded",identity_key 为空),而不是静默失败。
  • 如果 ~/.agents/debug 或 activation.jsonl 是符号链接,canary 写入会安全失败;辅助脚本绝不会跟随这些链接,也不会更改其目标的权限。
  • 在 Windows Git Bash/MSYS2/Cygwin 上,以及 WSL 2 将 HOME 设在 /mnt/<drive> 下时,canary 写入也会安全失败;这些环境无法保证符合文档规定的 0700/0600 隐私约定。在受支持的 POSIX 文件系统上,辅助脚本会拒绝包含符号链接的路径组件,并在执行 chmod 后验证有效权限。对于 Windows 上的完整可观测性,预期使用 HOME 位于 Linux 文件系统中的 WSL 2,但仍需专用运行器认证。
  • 开销极低:每次观测到 canary 只需计算一次哈希并追加一条记录
  • 所有追踪记录都明确标记为可从磁盘移除
  • 存在记录意味着遵循了 canary 命令。没有记录则无法得出结论;这并不能证明该技能未被发现、加载或使用。
第 3 层:Canary 观测仪表板(skill-dashboard)

回答:“哪些技能观测到了 canary 激活,哪些尚未观测到?”

bash ~/.agents/skills/skill-debug/bin/skill-dashboard.sh [--json] [--days 30]

报告内容:

  • Canary 事件频率 — 每个技能身份观测到的 canary 事件数
  • 最近观测到的 canary — 最近一次记录的 canary 时间戳
  • 上下文分布 — 已记录 canary 事件的 cwd 分布
  • 观测到 canary 的身份比例 — 已安装的技能身份与存在 canary 事件记录的身份之间的比例
  • 未观测列表 — 未记录任何 canary 事件的已安装技能身份
  • 观测次数最多的技能 — 观测到的 canary 事件数最多的身份

综合健康检查

# Run all three layers + hygiene scan
bash ~/.agents/skills/skill-debug/bin/skill-probe.sh --doctor

--doctor 模式会组合以下检查:

  1. 发现探测(第 1 层)
  2. 原生平台信号检查(Claude Code OTel 环境变量、Codex/Cursor 本地位置、OpenAI Agents SDK 追踪环境变量)
  3. 激活日志分析(第 3 层)
  4. 如果有 skill-hygiene 扫描结果,则进行交叉比对

解读结果

发现问题
  • “技能不在发现路径中” — 技能位于本诊断从当前工作目录扫描的本地路径之外
  • “名称冲突” — 存在两个或更多同名技能;Agent 会按优先级选择,因此可能选错
  • “frontmatter 无效” — 由于解析错误,Agent 可能会跳过该技能
激活问题
  • 7 天以上未观察到任何 canary — 技能可能未触发、可能不需要使用,或可能未遵循 canary
  • 观察到 canary,但输出质量较弱 — 技能说明可能不够清晰或范围过宽
  • canary 数量多,但输出质量较弱 — 技能可能经常被遵循,但仍需要改进设计
使用模式
  • canary 观察到的身份率 < 30% — canary 观察率较低;使用 skill-hygiene 检查工作流上下文。此阈值仅用于分流,不是质量或结果阈值。
  • 全局路径中的单项目技能 — 检查项目级范围是否更清晰
  • 未观察到的全局技能 — 供人工审核的建议候选项,不会自动归档

防护措施

  • 使用 --strip 后,磁盘上的注入痕迹可逐字节还原,包括末尾没有换行符的文件;转换或元数据恢复失败时,目标文件保持不变。当前 Agent 会话可能仍保留已加载的技能文本,直到刷新对话上下文。
  • 所有日志数据都保留在真实(非符号链接)的 ~/.agents/debug/ 目录中。该目录权限为 0700,activation.jsonl 文件权限为 0600。
  • 已在 macOS 上原生验证完整的 Shell 支持。使用 Linux 文件系统 HOME 的 WSL 2 在设计上受支持,但尚未通过专用运行器认证。Git Bash 的覆盖范围仅限真实目录的只读治理和跟踪文件转换;不支持符号链接/联接点拓扑、canary 日志记录以及原生 PowerShell/cmd。
  • 不会向外部发送任何数据
  • Dashboard 仅读取数据;绝不修改技能文件
  • 激活日志为仅追加的 JSONL;使用 --rotate 标志进行轮换

集成

  • 与 skill-hygiene 结合,构建完整的治理工作流:
    1. skill-debug probe → 检查目标工作目录下的文件系统发现候选项
    2. skill-debug dashboard → 检查 canary 观察记录
    3. skill-hygiene scan → 收集事实,然后确认重要发现
    4. 在现有权限范围内改进;退役时使用 hygiene 事务流程
    5. 使用相同范围重新检查原始目标和故障条件,然后验证受影响的使用方

在交接时提供规范目标/身份变体、指纹、观察时间、 范围、已确认的故障和预期成功状态。缺失日志为 no_data; 收集器故障为 error。Doctor 会将可解析的子工具失败输出保留为 partial_payload,而不会将失败转换为成功。 其可选的原始终端报告属于后续观察。退出代码为零 或在变更后的扫描中未发现问题,并不能证明原始发现已解决。

评论

支持 Markdown