关于 skill-doctor
skill-doctor 会分析本地 Agent 对话,为用户的技能配置评分并提出具体修改建议。它在本地处理对话内容,并生成一个可分享的报告页面。
主要功能
- 01评估近期本地 Agent 对话
- 02按多个维度评分
- 03提出有证据支持的技能修改
- 04生成单页报告
适用场景
- 01检查项目中的技能是否覆盖实际工作
- 02根据失败对话定位技能缺口
- 03生成技能评估报告供分享
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ warpdotdev/ common-skills --skill skill-doctor安装后在 Claude Code 中输入/skill-doctor确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/warp-pixel-icon.svgreferences/skill-improvements.mdsupported-harnesses.mdscorers/code-quality.mdefficiency.mdprocedure-compliance.mdverbosity.mdscripts/collect_sessions.pyrender_report.pytest_collect_sessions.pytest_render_report.pywarp_decoder.py详细介绍
skill-doctor
通过评估近期本地 Agent 对话,为用户的 Agent 配置打分,然后提出具体的技能编辑建议,并生成一个可分享的报告页面。
报告可以涵盖当前仓库中的对话、所选项目中的对话,或所有本地对话。报告可以仅评估项目技能,也可以同时评估项目技能和全局技能。
所有操作都在本地进行。绝不要将对话记录、会话文件或其中的任何摘录上传到任何地方。唯一可分享的内容是用户选择发布的报告。
令 SKILL_ROOT 表示包含此 SKILL.md 的目录。
步骤 0:开始运行
验证正在执行的工具环境
读取 $SKILL_ROOT/references/supported-harnesses.md,并根据运行时上下文识别正在执行此技能的工具环境。如果不受支持,或无法有把握地识别,请遵循参考文件中的停止行为。不要创建报告目录,也不要读取对话历史。
询问要评估哪些对话
首先检查当前目录是否位于 git 仓库中:
git rev-parse --show-toplevel
如有可用的工具环境用户提问工具,请使用该工具。
如果当前目录位于仓库中,请询问 “要评估哪些对话?”,并提供以下选项:
- 此仓库中的对话 — 推荐。
- 所有对话。
- 选择要分析的项目。
如果当前目录不在仓库中,请询问相同的问题,并提供以下选项:
- 所有对话 — 推荐。
- 选择要分析的项目。
如果用户选择项目,请让其提供一个或多个项目路径。继续之前,展开并验证每个路径,确认它们都是 git 仓库。本次运行会生成一份涵盖这些项目的综合报告。
询问要评估哪些技能
然后询问 “要评估哪些技能?”,并提供以下选项:
- 项目技能 + 全局技能 — 推荐。
- 仅项目技能。
如果运行范围为所有对话,“项目技能”指根据对话的工作目录推断出的本地 git 仓库中的技能。收到这些答案后,立即继续。
绝不要在用户的仓库中写入产物。每次运行都创建一个全新的、不与现有目录冲突的临时目录,并将其用作所有产物的 REPORT_DIR:
REPORT_DIR="$(mktemp -d "${TMPDIR:-/tmp}/skill-doctor-XXXXXXXX")"
步骤 1:收集
根据启动时的回答构建收集器参数:
- 当前仓库:
--repo "$REPO"。 - 所选项目:对每个项目重复使用
--repo PATH。 - 所有对话:
--all-conversations。 - 项目技能和全局技能:添加
--include-global-skills。 - 仅项目技能:不添加
--include-global-skills。
python3 "$SKILL_ROOT/scripts/collect_sessions.py" \
--out "$REPORT_DIR" \
<conversation-scope arguments> \
<skill-scope arguments>
默认情况下,--harness auto 会扫描所有本地可用的受支持来源。读取 $SKILL_ROOT/references/supported-harnesses.md,了解来源标识符、存储详情、技能位置以及来源专用的覆盖标志。
实用标志:
--harness VALUE— 要扫描的本地会话来源;使用参考文件中的收集器 ID。--repo PATH— 包含一个项目;可重复使用。--all-conversations— 不按项目筛选对话。--include-global-skills— 同时评估全局技能。--days N— 回溯时间范围(默认值为 45)。--max-sessions N— 抽样会话数上限(默认值为 12)。--skills-dir PATH— 非标准技能位置。--include-subagents— 包含子会话或旁路会话。
读取 $REPORT_DIR/inventory.json。如果 sessions_sampled 为 0,请告知用户所选对话范围内没有近期可评分的内容(建议增大 --days 或选择其他项目),然后停止。如果 skills_found 为 0,则继续 — 报告将成为创建技能的依据,且 skill_coverage 为 0。
第 2 步:为每个抽样转录评分
根据抽样会话的效率、代码质量、流程遵循情况和冗长程度进行评分。每批处理不超过 50 份转录的数据集。对于超过 50 份转录的数据集,使用并行批次(建议每批 20 份转录)。在当前本地 Agent 进程中为各批次评分,或者仅委托给会将转录内容保留在用户计算机上的本地子 Agent。将以下评分标准作为上下文传入:
$SKILL_ROOT/scorers/efficiency.md$SKILL_ROOT/scorers/code-quality.md$SKILL_ROOT/scorers/procedure-compliance.md$SKILL_ROOT/scorers/verbosity.md
说明:读取 $REPORT_DIR/transcripts/ 中的每份转录,并按照全部四项评分标准进行评判。对于每项评分,记录标签、数值分数(取自评分标准的标签表),以及 1–3 句引用转录具体内容的理由。仅当转录显示有代码变更时,才应用代码质量评分标准;否则记录 insufficient_evidence,并在计算代码质量平均分和筛选失败会话时排除该结果。
第 3 步:汇总
raw_efficiency= 所有已评分会话的效率分数平均值。raw_code_quality= 代码质量分数的平均值,不包括insufficient_evidence。如果没有会话具有足够证据,则设为 0.5,并在调查结果中说明。raw_procedure_compliance= 所有已评分会话的流程遵循分数平均值。raw_verbosity= 所有已评分会话的冗长程度分数平均值。- 将定性评分标准的平均分转换为字母等级报告分数,使用
curve(score) = 0.5 + 0.5 * score。 efficiency=curve(raw_efficiency)。code_quality=curve(raw_code_quality)。procedure_compliance=curve(raw_procedure_compliance)。verbosity=curve(raw_verbosity)。skill_coverage= 检测到至少一项已安装技能的抽样会话占比。如果skills_found为 0,则覆盖率为 0。overall=0.25 * efficiency + 0.25 * code_quality + 0.2 * procedure_compliance + 0.15 * verbosity + 0.15 * skill_coverage。
然后,根据每个会话未经转换的原始评分结果,确定 failed_conversations。只要某个会话在适用的效率、代码质量、流程遵循情况或冗长程度评分中至少有一项低于 0.5,该会话就判定为失败。insufficient_evidence 不会导致会话失败。仅使用 failed_conversations 作为技能改进建议和技能编辑草案的依据。
然后提炼实质内容:
top_findings:跨会话中影响最大的 3 个具体模式。这些内容应作为报告和口头摘要的开篇。每条摘要都要具体、简洁,并遵循 STE-100 标准。suggestions:具体的技能变更(如有)。每条建议都要指明一项技能(现有技能或拟新增技能)和一项具体变更:修正触发描述,使其在应触发时触发;补上缺失步骤或检查;将命令写入技能;创建新技能。建议必须能追溯到failed_conversations中观察到的浪费或缺陷,不能是泛泛的最佳实践;需引用促成建议的失败会话、评分项和具体时刻。若某项已安装技能从未在失败会话中触发,通常说明其描述存在问题,值得单独提出建议。
第 4 步:起草技能修改建议
按照 $SKILL_ROOT/references/skill-improvements.md,仅依据 failed_conversations 提出项目技能的改进建议。
- 读取技能当前文件(路径位于
inventory.json中)。 - 将完整的改进版写入
$REPORT_DIR/proposed/<skill-name>/SKILL.md,只修改证据支持的内容。改进会话实际涉及的部分:未能触发的触发条件描述、缺失的预检,以及 Agent 经过反复试错才弄清楚的步骤。 - 对当前版本和建议版本生成统一 diff(
diff -u <current> <proposed>),并将其放入建议的diff字段,以便在报告中显示。
对于新提议的技能,将完整的新 SKILL.md 写入同一 proposed/ 目录,并将 diff 设为其完整内容,作为新增内容。
此步骤中不要修改用户实际的技能文件。
第 5 步:编写 report.json 并渲染
编写 $REPORT_DIR/report.json。在 scores 中存储经过曲线调整的 efficiency、code_quality、procedure_compliance 和 verbosity 分数、原始 skill_coverage 分数以及加权后的 overall 分数;不要在其中存储原始评分标准的均值。
{
"title": "Agent Skill Report",
"generated_at": "<ISO timestamp>",
"harness": "<harness from inventory.json>",
"handle": "<repo_name from inventory.json>",
"stats": {
"sessions_analyzed": 0, "sessions_scanned": 0,
"skills_found": 0, "skills_used": 0, "window_days": 45
},
"scores": {
"efficiency": 0.0,
"code_quality": 0.0,
"procedure_compliance": 0.0,
"verbosity": 0.0,
"skill_coverage": 0.0,
"overall": 0.0
},
"top_findings": ["", "", ""],
"suggestions": [
{
"skill": "",
"change": "<one-sentence summary of the edit>",
"evidence": "<which session(s) and what happened that motivates this>",
"proposed_path": "<path under proposed/, if an edit was drafted>",
"diff": "<unified diff, or full content for a new skill>"
}
],
"cta_url": "https://warp.dev/factories/request-access"
}
python3 "$SKILL_ROOT/scripts/render_report.py" "$REPORT_DIR/report.json" --open
这会生成一个独立完整的 $REPORT_DIR/report.html,并尝试在默认浏览器中打开。评分卡、发现和建议的技能修改都会显示在同一页面上。较长的 diff 会折叠在“显示更多”切换项后,而“分享为 PNG”按钮会在本地导出 1200x675 的分享图片。无需打开或截取单独的卡片文件。
第 6 步:输出
以文本形式告知用户评分和三项发现。
每次回复都必须以以下摘要结束,并将 $REPORT_DIR 替换为绝对路径:
- 你的 Agent 技能报告:file://$REPORT_DIR/report.html
- 想要自动改进工作流?申请访问 Warp Factories:warp.dev/factories/request-access
要我将这些建议应用到你的技能中吗?