关于 skill-debug
skill-debug 是用于检查本地 Agent Skills 可发现情况及 canary 激活记录的观测工具集,面向需要了解技能运行线索的用户。它将本地探测、激活追踪和仪表盘分层呈现,并明确区分观测结果与平台级证明。
主要功能
- 01扫描常见本地技能发现路径
- 02检测名称冲突并校验 frontmatter
- 03注入并记录激活 canary
- 04汇总频率、时间与上下文分布
- 05提供只读健康检查报告
- 06区分本地代理信号与推断
适用场景
- 01诊断技能是否位于已扫描的发现路径
- 02查看哪些技能记录到 canary 事件
- 03检查本地技能目录与名称冲突
- 04结合使用体验解释未观测到的激活
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ yknothing/ skills-refiner --skill skill-debug安装后在 Claude Code 中输入/skill-debug确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
bin/pi-skill-catalog.mjsskill-canary.shskill-dashboard.shskill-probe.shskill-trace.shskills-refiner-doctor.shlib/common.shtests/test-dashboard.shtest-doctor.shtest-install-layout.shtest-observability-regressions.shtest-pi-skill-catalog.mjstest-platform-contract.shtest-probe.shtest-trace.sh详细介绍
skill-debug
你是一名技能可观测性顾问。你的工作是帮助用户了解其技能有哪些本地证据:可能的发现入口、金丝雀激活情况和使用模式。不要夸大这些信号,将其视为技能已加载、遵循指令或结果质量的平台代理级证明。
理念
- 观察,而非臆测。 工具会收集有关技能发现和激活的事实。你需要解读其中的模式,并结合用户的实际体验进行分析。
- 尊重拓扑结构。 技能安装在
~/.agents/skills/中,并通过符号链接关联到 Agent 目录。指向同一源的符号链接是分发链接,并非冗余。探测工具必须区分符号链接与实际重复项。 - 避免误报。 未观察到技能激活,可能只是因为当时不需要该技能。“未观察到”是一种观察结果,而非结论。建议移除技能之前,应结合用户的实际工作流进行核实。
在 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 Code | OpenTelemetry 指标/事件/追踪;配置后包含技能激活和工具调用跨度 | skill-probe --doctor 报告本地 OTel 环境状态;canary 仍是后备方案/代理指标 |
| Codex | 原生技能发现,包括 .agents/skills、~/.agents/skills、管理员/系统作用域、符号链接跟随,以及 agents/openai.yaml 调用策略 | 报告本地位置和元数据;不要声称技能已在运行时激活 |
| OpenAI Agents SDK | SDK 运行的应用工作流追踪:生成、工具、交接、护栏、自定义跨度 | 这是独立的 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 层)
- 原生平台信号检查(Claude Code OTel 环境变量、Codex/Cursor 本地位置、OpenAI Agents SDK 追踪环境变量)
- 激活日志分析(第 3 层)
- 如果有
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结合,构建完整的治理工作流:skill-debug probe→ 检查目标工作目录下的文件系统发现候选项skill-debug dashboard→ 检查 canary 观察记录skill-hygienescan → 收集事实,然后确认重要发现- 在现有权限范围内改进;退役时使用 hygiene 事务流程
- 使用相同范围重新检查原始目标和故障条件,然后验证受影响的使用方
在交接时提供规范目标/身份变体、指纹、观察时间、
范围、已确认的故障和预期成功状态。缺失日志为 no_data;
收集器故障为 error。Doctor 会将可解析的子工具失败输出保留为
partial_payload,而不会将失败转换为成功。
其可选的原始终端报告属于后续观察。退出代码为零
或在变更后的扫描中未发现问题,并不能证明原始发现已解决。