Skills Push — Skills 远程部署工具
将指定的 skills 推送到目标 git 仓库的指定分支上,自动管理上下文目录和仓库克隆。
触发条件
- 用户说"推送 skill"、"部署 skill"、"push skill"、"部署到仓库"
- 用户提到将 skill 同步/部署到某个项目/仓库
- 用户提到 skills-push
输入
- 必须:skills 名称列表(逗号分隔或逐个列出)
- 必须:目标仓库 git URL
- 可选:目标分支(默认
main) - 可选:目标路径(不提供时向用户确认)
执行流程(5 步)
步骤 ①:解析输入
从用户输入提取:
| 字段 | 必须性 | 说明 |
|---|---|---|
| skills 列表 | 必须 | 要部署的 skill 名称 |
| 仓库 URL | 必须 | git 远程仓库地址 |
| 分支 | 可选 | 默认 main |
| 目标路径 | 可选 | 不提供时向用户确认 |
缺少必须信息时:用 AskUserQuestion 向用户确认。
目标路径选择(向用户展示):
| 选项 | 目标路径 | 说明 |
|---|---|---|
| A | .claude/skills/ |
Claude Code 标准路径(推荐) |
| B | skills/ |
本项目风格路径 |
| 其他 | 用户填写 | 自定义路径 |
Skills 来源(自动推断,优先本项目):
- 本项目
skills/<name>/— 优先(版本控制的源码) - 全局
~/.claude/skills/<name>/— fallback - 都没找到 → 提示用户:"skill
<name>未找到,请确认名称是否正确"
步骤 ②:创建/恢复上下文
上下文目录结构:
skills-context/
├── context.md # 上下文说明文件
└── repos/ # 克隆的仓库
└── <repo-name>/
新建上下文:
- 创建
skills-context/目录 - 创建
skills-context/repos/目录 - 创建
context.md初始内容
断点续查:
若 skills-context/ 已存在且有 context.md,读取恢复状态,复用 repos/ 下已克隆的仓库。
context.md 格式:
# Skills Push 上下文
## 仓库列表
### <repo-name>
- URL: https://jihulab.com/xxx/yyy.git
- 分支: main
- 目标路径: .claude/skills/
- 最后部署: 2026-06-09
- 已部署 Skills: opser, slser
步骤 ③:仓库管理
从 context.md 或用户输入获取仓库信息,对每个目标仓库执行:
已有仓库(repos/ 下存在且 remote URL 匹配):
cd skills-context/repos/<repo-name>
git fetch origin
git checkout <branch>
git pull origin <branch>
新仓库:
git clone --branch <branch> <url> skills-context/repos/<repo-name>/
失败处理:
| 错误 | 处理 |
|---|---|
| 分支不存在 | 提示用户确认分支名,或创建新分支 |
| 仓库不存在 | 提示用户确认 URL |
| 网络超时 | 重试一次,仍失败则提示用户检查网络 |
步骤 ④:复制并推送
自带脚本保证:复制时整目录拷贝,每个 skill 的 scripts/ 随行,确保推送的 skill 可用。不解析 skill 对其他 skill 的依赖(保持简单);编排型 skill(如 bug-killer)仍依赖目标用户已自行安装其引用的 skill。
对每个 skill 执行:
- 收集文件:
find <source-dir> -type f \
! -path "*/__pycache__/*" \
! -name "*.pyc" \
! -name ".DS_Store"
排除敏感文件:
config.json、env-config.json、.env、credentials.json复制到目标:
repos/<repo-name>/<target-path>/<name>/保留目标独有文件:不删除目标仓库中用户已有的本地配置文件
全部 skill 复制完成后:
④.a 多平台引导(检测 + 补 install.py)
检查目标仓库 <repo>/scripts/install.py 是否存在:
- 不存在 → 从源仓库
copilot-skills/scripts/install.py复制到<repo>/scripts/install.py(使该库支持 Claude/Codex/Cursor/Qoder 一键安装,可被分享后快速使用)。 - 已存在 → 跳过(幂等,不覆盖用户本地改动)。
这是写仓库根目录文件(
<repo>/scripts/),不在 skills 目标路径下。用 Bash 直接cp。
④.b 重生成目标库 README(整份覆盖,保留 CUSTOM NOTES)
重新分析目标库当前 skills/ 内容,生成一份适用的新 README 并整份覆盖 <repo>/README.md(不要简单追加更新内容)。
生成方式:由你(agent)直接生成(不用 Python 脚本)。读取目标库 skills/**/SKILL.md 的 name/description/触发词,按下述结构组织:
- 项目简介:一句话——本库是 skills 集合,支持 Claude/Codex/Cursor/Qoder 安装。
- 多平台安装:
附四平台目标目录说明(git clone <目标库 url> <任意目录> cd <任意目录> python scripts/install.py --list python scripts/install.py <skill> # 交互式选平台/级别 python scripts/install.py <skill> --target qoder --scope project --project <工作项目>~/.claude/skills、~/.codex/skills、<项目>/.cursor/rules、<项目>/.qoder/rules)与 Codex 重启/fallback 注记。 - Skill 清单表:
| name | 说明 | 触发词 | 状态 |,逐个 skill 一行(按目标库实际 skills 填,不是源仓库清单)。 - 凭据配置:需要 setup.py 的 skill(如 jenkinser/opser)列出
python skills/<name>/scripts/setup.py。
CUSTOM NOTES 保留规则:若旧 README 含 <!-- CUSTOM NOTES --> 与 <!-- END CUSTOM NOTES --> 之间的内容,原样回填到新 README 末尾;无此标记则不保留。其余内容整份覆盖。
cd skills-context/repos/<repo-name>
git add <target-path>/ scripts/install.py README.md
git status --short # 确认变更(含 install.py、README)
git commit -m "feat: deploy skills - <skill1>, <skill2>
Skills: <skill1>, <skill2>
Source: copilot-skills
Date: YYYY-MM-DD
Bootstrap: multi-platform install + README regenerated"
git push origin <branch>
推送失败处理:
| 错误 | 处理 |
|---|---|
| 权限不足 | 提示检查 git 凭据(git config credential.helper) |
| 远程有更新 | git pull --rebase origin <branch> 后重试 push |
| 冲突 | 提示用户手动解决或选择 force push |
步骤 ⑤:更新上下文
更新 skills-context/context.md:
- 更新对应仓库的"最后部署"日期为当天
- 更新"已部署 Skills"列表(合并去重)
- 如有新仓库,追加到仓库列表
增量更新
重复执行时:
- 读取 context.md 恢复已管理的仓库信息
- 对已有仓库执行
git pull而非重新 clone - 仅复制有变更的 skill 文件(通过 diff 判断)
- 如无实际文件变更,跳过 commit 和 push,提示"无变更,跳过推送"
- 每次推送后都执行 ④.b 重生成 README(反映最新 skills)
install.py已就位则不重复复制(幂等跳过)
多仓库支持
支持一次推送到多个仓库。在 context.md 中维护多个仓库条目,每个仓库独立管理分支和已部署 skills。
输出
skills-context/context.md— 上下文管理文件skills-context/repos/— 克隆的仓库(已 .gitignore)- 推送成功后展示摘要:仓库、分支、已推送的 skills 列表
scripts/install.py(首次引导时复制到目标库根目录)- 重生成后的
<repo>/README.md
依赖
- 工具:Bash(git 操作、文件复制)
- 前置:git 可用,有目标仓库的推送权限
- 协作:可与
skills-collect配合(先 collect 收集 skill,再 push 推送)