Auto-Skill 介绍
Auto-Skill 是一个用于 Claude Code 的技能,主要用途是评估当前会话中的工作流程,并把值得复用的复杂操作保存为新的技能。它强调遵循 Agent Skills 规范并执行质量门禁,避免生成低质量或重复的技能。
触发方式
- 用户运行
/auto-skill - 在复杂会话后由 Stop 钩子建议触发(会话需满足 8 个以上变更操作、跨 4 种以上工具类型)
- 用户说出“save this as a skill”、“capture this workflow”等类似指令
命令与路由
运行 auto-skill 或 /auto-skill 后可解析不同参数:
- 无参数:执行完整评估流程
auto-skill off:全局禁用,创建~/.claude/auto-skill.disable并确认auto-skill on:全局启用,删除~/.claude/auto-skill.disable并确认auto-skill off --project:为当前项目禁用,创建.claude/auto-skill.disableauto-skill on --project:为当前项目启用,删除.claude/auto-skill.disableauto-skill status:显示当前状态auto-skill pending:显示~/.claude/auto-skill/pending.log中过去可能被忽略的建议auto-skill clear:在确认后清空待处理日志
状态查看
auto-skill status 会检查并报告:全局开关、项目开关、钩子脚本是否安装、当前会话跟踪是否活跃,并以简短表格形式呈现。
评估流程
创建技能前,Auto-Skill 会执行多步流程:
- 评估会话:判断是否为多步骤工作流(3 个以上不同动作)、是否可复用、是否新颖、是否可教学。任一条件不满足则停止并说明原因。
- 重复检测:检查现有技能名称与描述。若存在完全同名、名称词重叠 60% 以上、描述词重叠 50% 以上,则阻止创建并建议扩展现有技能。
- 草拟技能:向用户提议名称、描述、步骤和所需工具,并请用户确认或调整。
- 质量门禁:校验名称格式、描述长度、步骤结构、正文最小 200 字符、许可证、元数据、顶层键等。任一失败会说明并帮助修复。
- 创建技能:写入
.claude/skills/<skill-name>/,生成 SKILL.md 以及 scripts、references、assets 目录。SKILL.md 使用 Agent Skills 规范的前置元数据和正文结构。 - 验证:检查文件写入、前置元数据合法性、步骤段是否存在,并告知用户如何调用。
待处理日志
由于 Stop 钩子的 systemMessage 输出发送给 Claude 而非直接展示给用户,建议可能被忽略。钩子每次触发会向 ~/.claude/auto-skill/pending.log 追加一行记录,字段包括 ISO8601 时间戳、短会话 ID、触发时的工作目录、变更操作数、唯一工具类型数、总工具调用数、前 6 工具直方图。/sync 会在会话开始时读取该日志,并在最近 72 小时内的条目中呈现“Skill Suggestions”。
钩子设置与配置
Auto-Skill 使用两个全局钩子:
~/.claude/auto-skill/track-tools.sh:PostToolUse 钩子,统计每个会话的工具调用~/.claude/auto-skill/evaluate.sh:Stop 钩子,在会话足够复杂时建议创建技能
两个钩子均静默失败,不会产生错误输出或阻止 Claude。需要在 ~/.claude/settings.json 中合并钩子配置,示例配置包含 PostToolUse 和 Stop。
建议门禁
Stop 钩子仅在以下条件全部满足时建议创建技能:变更操作 8 个以上、工具类型 4 种以上、没有加载非 harness 技能、每个会话仅一次、未禁用。只读工具不计入统计。
设计决策
- 使用 Stop 钩子而非循环内钩子:Claude Code 不暴露 agent 循环,Stop 钩子在上下文仍在内存时触发。
- systemMessage 输出:Stop 钩子输出 JSON,由 Claude Code 展示给用户,非阻塞、可忽略。
- 重视多样性而非数量:工具类型数量比原始调用数更重要。
- 每会话冷却:使用以会话 ID 为键的临时文件,每个新会话都有机会。
- 跟踪上限 500 行:防止失控会话填满 /tmp。
- 静默失败:两个钩子都使用 2>/dev/null 并始终退出 0。