contribute-skill

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

contribute-skill

贡献Skill

ローカルで改修した
.agents/skills/<skill-name>/
を、
skills-lock.json
に記録された upstream リポジトリへ PR として投稿します。
将本地修改的
.agents/skills/<skill-name>/
以PR形式提交至
skills-lock.json
中记录的upstream仓库。

前提条件

前提条件

  • gh
    CLI がインストールされ認証済みであること(対象 org への push / PR 権限が必要)
  • 対象スキルが
    skills-lock.json
    に登録されていること
  • 対象スキルのローカル改修が最新のコミットに含まれ、作業ツリーが clean であること
  • 已安装并完成
    gh
    CLI的认证(需具备向目标org推送/push、提交PR的权限)
  • 目标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.json
を読み、
skills.<SKILL_NAME>.source
を取り出します。
bash
undefined
读取根目录下的
skills-lock.json
,提取
skills.<SKILL_NAME>.source
字段。
bash
undefined

Python を使わず 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"
$TMPDIR
が設定されていればそちらを優先します(サンドボックス互換)。
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"
若已设置
$TMPDIR
则优先使用该目录(兼容沙箱环境)。

Step 6: upstream を clone する

Step 6: 克隆upstream仓库

bash
undefined
bash
undefined

sandbox 環境では各コマンドに 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>/"
undefined
cp -R "<local-repo>/.agents/skills/<SKILL_NAME>/." "$WORKDIR/upstream/skills/<SKILL_NAME>/"
undefined

Step 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 形式
  • --no-verify
    は使用しない(pre-commit フックを通す)
  • 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格式
  • 不使用
    --no-verify
    (需通过pre-commit钩子)
  • 不添加co-author(遵循本地规范)

Step 10: push と PR 作成

Step 10: 推送并创建PR

bash
undefined
bash
undefined

sandbox 環境では各コマンドに 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'
git push -u origin "contribute/<SKILL_NAME>-${SLUG}"
gh pr create
--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 環境での
    GIT_SSL_NO_VERIFY=1
    併用
    :詳細は後述の「sandbox 環境での実行」節を参照
  • upstream のパス構造は事前確認
    skills/<name>/
    .agents/skills/<name>/
    かは upstream によって異なる
  • 既に同名の branch がある場合:秒単位スラッグで通常は衝突しないが、万一の場合はユーザーに確認
  • 若source非Fandhe-AI/开头则中止:防止向未知外部仓库误推送
  • 若发现安全问题则中止:修复后重新执行
  • 沙箱环境需配合GIT_SSL_NO_VERIFY=1:详情请参考后文「沙箱环境执行」章节
  • 需提前确认upstream路径结构:不同upstream仓库的路径可能为
    skills/<name>/
    .agents/skills/<name>/
  • 若存在同名分支:通过秒级时间戳生成分支名通常可避免冲突,若仍冲突则需向用户确认

sandbox 環境での実行

沙箱环境执行

sandbox で本スキルを実行する場合、ネットワーク越しの GitHub 操作には
GIT_SSL_NO_VERIFY=1
の併用を検討してください。本スキルの主なリモート操作は
gh repo clone
/
git push
/
gh pr create
で、「リモート書き込み」判定は です。コマンド分類の詳細と TLS 検証無効化の注意事項は
docs/sandbox-tls.md
を参照してください。
在沙箱环境中执行本Skill时,通过网络操作GitHub需考虑添加
GIT_SSL_NO_VERIFY=1
。本Skill的主要远程操作为
gh repo clone
/
git push
/
gh pr create
,均属于需要远程写入的操作。命令分类详情及TLS验证禁用的注意事项请参考
docs/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