Skills Collect — Skill 集成与更新工具
将外部 Claude Code skill 集成到本项目的 skills/ 目录,或更新已有 skill 到最新版本。
触发条件
- 用户说"集成 skill"、"收集 skill"、"更新 skill"
- 用户提到"skills-collect"、"skill 同步"
- 用户要将某个 skill 加入本项目或更新已有 skill
输入
- 必须:skill 名称(如
patent、gitlaber) - 可选:源路径(不提供时自动查找
~/.claude/skills/)
执行流程(Checklist)
收到用户请求后,严格按以下 6 步顺序执行。每步完成后标记。
- 步骤 1:定位源 skill
- 步骤 2:收集全部文件
- 步骤 3:复制到 skills/ 目录
- 步骤 4:路径扫描与定制
- 步骤 5:更新检测(仅当 skills// 已存在时)
- 步骤 6:提交
步骤 1:定位源 skill
按以下优先级查找源 skill 目录:
用户级 skills 目录:
- Windows:
%USERPROFILE%\.claude\skills\<name>\ - Linux/Mac:
~/.claude/skills/<name>/
- Windows:
Claude plugins 目录(递归搜索):
- Windows:
%USERPROFILE%\.claude\plugins\ - Linux/Mac:
~/.claude/plugins/ - 搜索方法:
find ~/.claude/plugins -type d -name "<name>" 2>/dev/null
- Windows:
仍未找到 → 询问用户提供源 skill 的完整路径
找到后:记录源目录的绝对路径,进入步骤 2。
步骤 2:收集全部文件
不能只复制 SKILL.md,必须收集 skill 运行所需的所有文件。
列出源目录文件:
find <source-dir> -type f \ ! -path "*/__pycache__/*" \ ! -name "*.pyc" \ ! -name ".DS_Store"扫描 SKILL.md 中的文件引用:
读取
<source-dir>/SKILL.md,提取以下模式的引用路径:- 反引号包裹的路径:如
`tools/md2docx.py`、`模板/` - 代码块中的路径:如
python tools/xxx.py - 明确提到的目录/文件名:如"模板目录"、"config.json"
- 反引号包裹的路径:如
检查每个引用路径:
情况 处理 路径在源目录下存在 包含在文件清单中 路径在源目录下不存在 提示用户:"SKILL.md 中引用了 {path}但该文件不在源目录中,请提供其实际位置"用户提供路径 将文件加入清单(保持相对路径结构) 用户跳过 警告并继续 展示文件清单给用户确认:
即将集成 <name> skill,包含以下文件: 来源: <source-dir> ├── SKILL.md (X.X KB) ├── tools/md2docx.py (X.X KB) ├── 模板/xxx.docx (X.X KB) └── 专利文档格式.md (X.X KB) 确认集成?
步骤 3:复制到 skills/ 目录
- 创建目标目录:
mkdir -p skills/<name>/ - 按原始相对路径结构复制所有文件
- 排除敏感文件:
config.json、env-config.json、.env、credentials.json - 验证:
ls -R skills/<name>/确认文件完整
步骤 4:路径扫描与定制
读取 skills/<name>/SKILL.md,扫描以下可疑模式:
模式 A — 绝对路径:
匹配以下正则模式:
- Windows:
C:\...、D:\...等盘符路径 - Unix:
/usr/local/...、/home/...等绝对路径 - 特定解释器:
"C:\Python313\python.exe"等
模式 B — 项目特定路径:
SKILL.md 中引用了 skill 自带文件的相对路径(如 tools/md2docx.py),应替换为 <skill-dir>/ 前缀以适配分发。
处理流程:
对每个发现的可疑路径,向用户展示并询问:
发现疑似硬编码路径:
原文: "C:\Python313\python.exe" -X utf8 tools/md2docx.py
建议: python -X utf8 <skill-dir>/tools/md2docx.py
是否替换?[Y/n]
用户确认后执行 Edit 替换。所有路径替换完成后进入步骤 5。
步骤 5:更新检测
仅当 skills/<name>/ 已存在时执行此步骤。如果是全新集成,跳过此步直接到步骤 6。
对比文件列表:
# 列出目标目录现有文件 find skills/<name>/ -type f | sort > /tmp/dst_files.txt # 列出源目录文件(排除缓存) find <source-dir> -type f ! -path "*/__pycache__/*" ! -name "*.pyc" | sort > /tmp/src_files.txt分类差异:
差异类型 处理 源有、目标无(新增文件) 包含在更新中 源无、目标有(目标独有) 保留,不删除(可能是用户本地配置) 两边都有(可能修改) 用 diff检查内容差异展示 diff 摘要:
更新 <name> skill: 新增文件: + tools/new_script.py 修改文件: ~ SKILL.md (新增"审查意见回复流程"章节) ~ tools/md2docx.py 目标独有文件(保留): · config.json 确认更新?用户确认后执行更新:覆盖修改的文件,添加新增文件
保留路径定制:
更新 SKILL.md 后,重新执行步骤 4 的路径扫描,确保新增内容中的路径也按已定制的形式处理。
具体方法:
- 检查更新前 SKILL.md 中已有的
<skill-dir>替换规则 - 对更新后新增的路径引用,应用相同的替换规则
- 检查更新前 SKILL.md 中已有的
步骤 6:提交
生成 git commit:
git add skills/<name>/
git commit -m "$(cat <<'EOF'
feat: <集成|更新> <name> skill
文件清单:
- SKILL.md
- tools/md2docx.py
- ...
路径定制:
- C:\Python313\python.exe → python
- tools/md2docx.py → <skill-dir>/tools/md2docx.py
(如无定制则省略此段)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
EOF
)"
如果是更新模式,commit message 中使用"更新"而非"集成",并额外说明变更内容。
常见错误与注意事项
- 不要只复制 SKILL.md:必须收集所有依赖文件,否则安装后无法使用
- 敏感文件不复制:
config.json、env-config.json等含 token 的文件必须排除 - 路径定制要保留:更新时不要覆盖已有的
<skill-dir>替换 - 用户确认每一步:文件清单、路径替换、更新确认都需要用户明确同意
- 目标独有文件保留:用户可能在
skills/<name>/下放了本地配置,不要删除
依赖
- 工具: Bash(文件操作、find、diff、git)、Read(扫描 SKILL.md)、Edit(路径替换)
- 无前置 skill 依赖