contribute-skill
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinesecontribute-skill
贡献Skill
ローカルで改修した を、 に記録された upstream リポジトリへ PR として投稿します。
.agents/skills/<skill-name>/skills-lock.json将本地修改的 以PR形式提交至中记录的upstream仓库。
.agents/skills/<skill-name>/skills-lock.json前提条件
前提条件
- CLI がインストールされ認証済みであること(対象 org への push / PR 権限が必要)
gh - 対象スキルが に登録されていること
skills-lock.json - 対象スキルのローカル改修が最新のコミットに含まれ、作業ツリーが clean であること
- 已安装并完成CLI的认证(需具备向目标org推送/push、提交PR的权限)
gh - 目标Skill已在中注册
skills-lock.json - 目标Skill的本地修改已包含在最新提交中,且工作树处于clean状态
責務の分離
职责分离
- create-pr: 現在のリポジトリ内でカレントブランチから base へ PR を作成する
- contribute-skill: 別リポジトリ(upstream)へ clone → 変更反映 → push → PR 作成を行う
外部リポジトリ貢献は clone / path 変換 / 異なる認証境界が関わるため、別スキルとして分離しています。
- create-pr: 在当前仓库内从当前分支向base分支创建PR
- contribute-skill: 执行克隆(clone)→ 同步变更→ 推送(push)→ 创建PR的流程,将变更提交至外部upstream仓库
由于向外部仓库贡献涉及克隆、路径转换、不同认证边界等操作,因此将其作为独立Skill分离。
フロー
流程
Step 1: 引数を検証する
Step 1: 验证参数
bash
SKILL_NAME="$ARGUMENTS"bash
SKILL_NAME="$ARGUMENTS"引数が空の場合: .agents/skills/ を列挙してユーザーに選ばせる
若参数为空:列出.agents/skills/下的内容供用户选择
対象ディレクトリ: `.agents/skills/<SKILL_NAME>/`
存在しなければエラーで中止します。
目标目录: `.agents/skills/<SKILL_NAME>/`
若目录不存在则抛出错误并中止操作。Step 2: upstream を特定する
Step 2: 确定upstream仓库
ルートの を読み、 を取り出します。
skills-lock.jsonskills.<SKILL_NAME>.sourcebash
undefined读取根目录下的,提取字段。
skills-lock.jsonskills.<SKILL_NAME>.sourcebash
undefinedPython を使わず jq が使えるなら jq で(CLI にあれば)
若不使用Python且可使用jq,则用jq处理(若CLI中已安装)
- `source` が `Fandhe-AI/` で始まらない場合は **エラーで中止** します(安全弁:見知らぬリポジトリへ意図せず push しないため)。
- `sourceType` が `github` であることも確認します。
- 若`source`不以`Fandhe-AI/`开头则**抛出错误并中止**(安全机制:防止向未知仓库误推送)。
- 同时确认`sourceType`为`github`。Step 3: 変更内容を確認する
Step 3: 确认变更内容
bash
git log --oneline -- .agents/skills/<SKILL_NAME>/
git diff HEAD~1 HEAD -- .agents/skills/<SKILL_NAME>/ユーザーに「この改修内容で upstream に PR を作ってよいか」を確認します。
bash
git log --oneline -- .agents/skills/<SKILL_NAME>/
git diff HEAD~1 HEAD -- .agents/skills/<SKILL_NAME>/向用户确认「是否基于此修改内容向upstream提交PR」。
Step 4: セキュリティチェック(必須)
Step 4: 安全检查(必须)
create-pr- 認証・認可の実装漏れ
- API キー・シークレットのハードコーディング
- XSS の可能性(ドキュメントでも外部埋め込みが含まれる場合)
- 入力バリデーションの欠如
- OWASP Top 10
問題があれば upstream 貢献を中止し、ユーザーに警告します。
与流程一致,检查以下内容:
create-pr- 认证/授权实现遗漏
- API密钥/机密信息硬编码
- XSS风险(文档中包含外部嵌入内容时)
- 输入验证缺失
- OWASP Top 10风险
若发现问题则中止upstream贡献流程,并向用户发出警告。
Step 5: 作業用ディレクトリを用意する
Step 5: 准备工作目录
bash
UID_VAL=$(id -u)
TS=$(date +%Y%m%d-%H%M%S)
WORKDIR="/tmp/claude-${UID_VAL}/contribute-${SKILL_NAME}-${TS}"
mkdir -p "$WORKDIR"$TMPDIRbash
UID_VAL=$(id -u)
TS=$(date +%Y%m%d-%H%M%S)
WORKDIR="/tmp/claude-${UID_VAL}/contribute-${SKILL_NAME}-${TS}"
mkdir -p "$WORKDIR"若已设置则优先使用该目录(兼容沙箱环境)。
$TMPDIRStep 6: upstream を clone する
Step 6: 克隆upstream仓库
bash
undefinedbash
undefinedsandbox 環境では各コマンドに GIT_SSL_NO_VERIFY=1 を前置する(詳細: docs/sandbox-tls.md)
沙箱环境下需在各命令前添加GIT_SSL_NO_VERIFY=1(详情:docs/sandbox-tls.md)
gh repo clone Fandhe-AI/<repo> "$WORKDIR/upstream"
cd "$WORKDIR/upstream"
デフォルトブランチ(`main` / `master` 等)を確認します。gh repo clone Fandhe-AI/<repo> "$WORKDIR/upstream"
cd "$WORKDIR/upstream"
确认默认分支(如`main`/`master`等)。Step 7: 変更を反映する
Step 7: 同步变更内容
upstream 側でスキルがどのパス構造に置かれているか確認します。
- 典型パターン 1:
skills/<SKILL_NAME>/ - 典型パターン 2:
.agents/skills/<SKILL_NAME>/
対応するパスへローカルの 配下をコピーします。
.agents/skills/<SKILL_NAME>/bash
undefined确认upstream仓库中Skill的路径结构:
- 典型模式1:
skills/<SKILL_NAME>/ - 典型模式2:
.agents/skills/<SKILL_NAME>/
将本地下的内容复制至对应路径。
.agents/skills/<SKILL_NAME>/bash
undefined例: upstream 側が skills/<name>/ の場合
示例:若upstream侧路径为skills/<name>/
cp -R "<local-repo>/.agents/skills/<SKILL_NAME>/." "$WORKDIR/upstream/skills/<SKILL_NAME>/"
undefinedcp -R "<local-repo>/.agents/skills/<SKILL_NAME>/." "$WORKDIR/upstream/skills/<SKILL_NAME>/"
undefinedStep 8: 差分を確認する
Step 8: 确认差异
bash
cd "$WORKDIR/upstream"
git status
git diffユーザーに差分を見せ、内容が意図通りか確認します。
bash
cd "$WORKDIR/upstream"
git status
git diff向用户展示差异内容,确认是否符合预期。
Step 9: ブランチ作成・コミット
Step 9: 创建分支并提交
bash
SLUG=$(date +%Y%m%d-%H%M%S)
git switch -c "contribute/<SKILL_NAME>-${SLUG}"
git add <変更パス>
git commit -m "$(cat <<'EOF'
<type>(<scope>): <subject>
ローカルの .agents/skills/<SKILL_NAME>/ からの貢献。
EOF
)"- Conventional Commits 形式
- は使用しない(pre-commit フックを通す)
--no-verify - co-author は付けない(ローカル規約に合わせる)
bash
SLUG=$(date +%Y%m%d-%H%M%S)
git switch -c "contribute/<SKILL_NAME>-${SLUG}"
git add <变更路径>
git commit -m "$(cat <<'EOF'
<type>(<scope>): <subject>
来自本地.agents/skills/<SKILL_NAME>/的贡献。
EOF
)"- 遵循Conventional Commits格式
- 不使用(需通过pre-commit钩子)
--no-verify - 不添加co-author(遵循本地规范)
Step 10: push と PR 作成
Step 10: 推送并创建PR
bash
undefinedbash
undefinedsandbox 環境では各コマンドに GIT_SSL_NO_VERIFY=1 を前置する(詳細: docs/sandbox-tls.md)
沙箱环境下需在各命令前添加GIT_SSL_NO_VERIFY=1(详情:docs/sandbox-tls.md)
git push -u origin "contribute/<SKILL_NAME>-${SLUG}"
gh pr create
--repo Fandhe-AI/<repo>
--base main
--title "<type>(<scope>): <subject>"
--body "$(cat <<'EOF'
--repo Fandhe-AI/<repo>
--base main
--title "<type>(<scope>): <subject>"
--body "$(cat <<'EOF'
git push -u origin "contribute/<SKILL_NAME>-${SLUG}"
gh pr create
--repo Fandhe-AI/<repo>
--base main
--title "<type>(<scope>): <subject>"
--body "$(cat <<'EOF'
--repo Fandhe-AI/<repo>
--base main
--title "<type>(<scope>): <subject>"
--body "$(cat <<'EOF'
Summary
摘要
- <SKILL_NAME> の改修内容(箇条書き)
- <SKILL_NAME>的修改内容(列表形式)
Source
来源
ローカルの ideas リポジトリ 側で改修後、 により投稿。
/contribute-skill <SKILL_NAME>在本地ideas仓库完成修改后,通过提交。
/contribute-skill <SKILL_NAME>Test plan
测试计划
- SKILL.md を実際に Claude Code で実行
- Conventional Commits に沿ったメッセージ生成を確認
- エッジケース確認
EOF
)"
Draft PR を作成する場合は `--draft` を付けます(デフォルトはユーザー確認の上で決定)。- 在Claude Code中实际执行SKILL.md
- 确认符合Conventional Commits格式的提交信息
- 验证边缘场景
EOF
)"
若需创建Draft PR,添加`--draft`参数(默认需经用户确认后决定)。Step 11: PR URL を返す & 後処理案内
Step 11: 返回PR URL & 后续操作指引
- PR URL をユーザーに返す
- 「マージされたら を実行して
/sync-skills-lockのskills-lock.jsonを更新してください」と案内computedHash - 作業用ディレクトリ は残したまま(成否が確定するまで)
$WORKDIR
- 向用户返回PR URL
- 提示「合并完成后,请执行更新
/sync-skills-lock中的skills-lock.json值」computedHash - 保留工作目录(直至操作结果确认)
$WORKDIR
注意事項
注意事项
- source が Fandhe-AI/ 以外の場合は中止:意図しない外部リポジトリへの push を防ぐ
- セキュリティ問題が見つかった場合は中止:修正後に再実行
- sandbox 環境での 併用:詳細は後述の「sandbox 環境での実行」節を参照
GIT_SSL_NO_VERIFY=1 - upstream のパス構造は事前確認:か
skills/<name>/かは upstream によって異なる.agents/skills/<name>/ - 既に同名の branch がある場合:秒単位スラッグで通常は衝突しないが、万一の場合はユーザーに確認
- 若source非Fandhe-AI/开头则中止:防止向未知外部仓库误推送
- 若发现安全问题则中止:修复后重新执行
- 沙箱环境需配合GIT_SSL_NO_VERIFY=1:详情请参考后文「沙箱环境执行」章节
- 需提前确认upstream路径结构:不同upstream仓库的路径可能为或
skills/<name>/.agents/skills/<name>/ - 若存在同名分支:通过秒级时间戳生成分支名通常可避免冲突,若仍冲突则需向用户确认
sandbox 環境での実行
沙箱环境执行
sandbox で本スキルを実行する場合、ネットワーク越しの GitHub 操作には の併用を検討してください。本スキルの主なリモート操作は / / で、「リモート書き込み」判定は 要 です。コマンド分類の詳細と TLS 検証無効化の注意事項は を参照してください。
GIT_SSL_NO_VERIFY=1gh repo clonegit pushgh pr createdocs/sandbox-tls.md在沙箱环境中执行本Skill时,通过网络操作GitHub需考虑添加。本Skill的主要远程操作为//,均属于需要远程写入的操作。命令分类详情及TLS验证禁用的注意事项请参考。
GIT_SSL_NO_VERIFY=1gh repo clonegit pushgh pr createdocs/sandbox-tls.md既存スキルとの関係
与现有Skill的关联
- Step 4 のセキュリティチェック、Step 9 の Conventional Commits、Step 10 の PR body は の流儀を踏襲
create-pr/SKILL.md - マージ後は で
/sync-skills-lockのskills-lock.jsonを更新computedHash
- Step 4的安全检查、Step 9的Conventional Commits、Step 10的PR内容均遵循的规范
create-pr/SKILL.md - 合并完成后,通过更新
/sync-skills-lock中的skills-lock.json值computedHash