create-pr — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited create-pr (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
GitHub 上に Pull Request を作成するためのスキル。カレントブランチの差分・コミット履歴を要約し、マージ先ブランチに対する PR を作成してリンクを返すところまでを一貫して行う。
mcp__github__create_pull_request, mcp__github__get_file_contents, mcp__github__list_pull_requests など)gh CLI(gh auth login 済み、repo スコープ以上)GitHub MCP が使える場合は必ず MCP を優先すること。同じセッション内で MCP と gh を混在させるのは避け、原則どちらか一方に統一する。[Step 1: 実行環境の確認(MCP or gh)]
→ [Step 2: リポジトリ / ブランチ情報の収集]
→ [Step 3: マージ先ブランチの確定]
→ [Step 4: 差分・コミットの収集と要約]
→ [Step 5: 既存 PR の確認(重複防止)]
→ [Step 6: PR テンプレートの読み込み(あれば)]
→ [Step 7: PR タイトル・本文のドラフト生成と確認]
→ [Step 8: リモートへの push 確認]
→ [Step 9: PR の作成]
→ [Step 10: 結果(PR URL)の報告]重要: Step 3(マージ先ブランチ)、Step 7(PR タイトル・本文)、Step 8(push 実行可否)の 3 点はユーザーに提示して承認を得てから進める。ユーザーが最初のリクエスト内で明示している項目は、その意図を 1 行で復唱するに留め、往復の確認は省略してよい(例: 「main に PR を作って」→ マージ先は main として即進行)。
GitHub 操作に使えるツールを確認し、以下の順で優先する。
mcp__github__create_pull_request(または同等の PR 作成ツール)が登録されているかを確認する。PR 作成・既存 PR 一覧取得・リポジトリ情報取得ができれば MCP を採用する。gh auth status で認証済みかを確認する。MCP が使えず gh が使えればフォールバックとして gh を使う。gh auth login または MCP サーバー設定の案内を出して中断する。ユーザーへの最初のテキスト出力で、「どちらを使って PR を作成するか」を 1 行で明示すること(例: GitHub MCP を使って PR を作成します)。
以下の情報を収集する。
# リポジトリ(owner/repo)の特定
gh repo view --json nameWithOwner -q '.nameWithOwner'
# もしくは
git remote get-url origin
# カレントブランチ名 / HEAD SHA
git branch --show-current
git rev-parse HEAD
# リモート追跡ブランチの状況(push 済みかの判断に使う)
git rev-parse --abbrev-ref --symbolic-full-name '@{u}' 2>/dev/null || echo "(no upstream)"
git status -sbMCP の場合は mcp__github__get_me でアクセス可能なユーザーを確認したり、リモート URL から owner/repo を推定する。
以下をメモしておく:
REPO(例: ijufumi/claude-skills)HEAD_BRANCH(カレントブランチ名)HEAD_SHAHAS_UPSTREAM(リモート追跡ブランチがあるか)AHEAD / BEHIND(リモートとの差分コミット数。upstream がある場合のみ)ブランチが main / master などのベースブランチそのものだった場合は、そのままでは PR を作れない(head と base が同じになるため)。中断せず、以下の手順で自動的に作業ブランチを切り出してから以降の Step を続行する。
git status --porcelain と git diff / git diff --cached を読み、ステージ / 未ステージ / 未追跡ファイルをまとめて「何を変えたか」を 3〜5 語程度の短い英語スラッグに要約する(例: add-create-pr-skill, fix-login-validation, update-readme-install)。git log --all --pretty='%D' | head -50 や gh pr list --state all --limit 20 --json headRefName -q '.[].headRefName' で確認し、プレフィックス(feat/ / fix/ / docs/ / chore/ 等)を揃える。規則が判別できない場合は work/ + スラッグを既定とする。作業ブランチとして 'feat/add-create-pr-skill' を作成して続行してよいですか?)。ユーザーから別名の指示があればそれを採用する。git switch -c <BRANCH_NAME> で作成してカレントを切り替える。未コミット変更はそのまま新ブランチに引き継がれる(main / master 側には残らない)。git commit しない。承認後にコミットメッセージ案も合わせて提示してから実行する。ベースブランチ上に他人の未 push コミットがある可能性は低いが、念のため新ブランチ作成前に git log origin/${BASE_BRANCH}..HEAD --oneline で差分コミットの有無を確認しておくとよい。差分があればユーザーに「main にローカル先行コミットが N 件あります。ブランチに移してよいですか?」と 1 行確認する。ユーザーが明示的にマージ先を指定している場合はそれを採用する(例: 「develop に PR」「base=release/v2」)。指定がない場合は以下の順で自動検出する。
# リポジトリのデフォルトブランチを取得
gh repo view --json defaultBranchRef -q '.defaultBranchRef.name'
# または origin/HEAD から
git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@'検出ロジック:
gh repo view / MCP からデフォルトブランチが取れればそれを採用する。main → master の順にリモート(origin/<name>)が存在するかを確認し、最初に見つかったものを採用する。検出したマージ先を BASE_BRANCH として保持する。自動検出した場合は、ユーザーに「マージ先は main で進めます。変更する場合は教えてください」と 1 行で伝えてから次に進む(明示指定があった場合は復唱のみでよい)。
BASE_BRANCH と HEAD_BRANCH が同じ場合は中断する。
マージ先との差分を取得し、PR 本文で使う要約を作る。
# マージベースを計算
MERGE_BASE=$(git merge-base "origin/${BASE_BRANCH}" HEAD)
# コミット一覧(件名 + 本文の1行目)
git log "${MERGE_BASE}..HEAD" --pretty='%h %s' --no-merges
# 変更ファイル一覧(追加/変更/削除)
git diff --name-status "${MERGE_BASE}...HEAD"
# 差分統計(行数・ファイル数)
git diff --stat "${MERGE_BASE}...HEAD"
# 必要に応じて実際のパッチ
git diff "${MERGE_BASE}...HEAD" > /tmp/create_pr_diff.patch以下の観点で要約を作る:
要約の粒度:
同じ HEAD_BRANCH → BASE_BRANCH の open 中 PR が既に存在する場合、新規作成ではなく既存 PR の更新(ブランチ push のみ)で足りるケースが多い。重複作成を避けるため事前に確認する。
gh pr list --repo "${REPO}" --state open --head "${HEAD_BRANCH}" --base "${BASE_BRANCH}" \
--json number,url,title,isDraftMCP の場合は mcp__github__list_pull_requests で head=OWNER:HEAD_BRANCH / base=BASE_BRANCH / state=open で検索する。
リポジトリに PR テンプレートがあれば、それを下敷きに本文を組み立てる。優先順位:
.github/PULL_REQUEST_TEMPLATE.md.github/pull_request_template.mddocs/PULL_REQUEST_TEMPLATE.mdPULL_REQUEST_TEMPLATE.mdfor f in .github/PULL_REQUEST_TEMPLATE.md .github/pull_request_template.md \
docs/PULL_REQUEST_TEMPLATE.md PULL_REQUEST_TEMPLATE.md; do
[ -f "$f" ] && echo "FOUND: $f" && break
done存在する場合は Read でテンプレートを読み込み、テンプレートのセクション構成(## Summary / ## Test plan など)に合わせて Step 4 の要約を流し込む。テンプレートの項目で情報が無いものは (未確認) や (該当なし) と記載する。勝手に埋めない。
存在しない場合は以下の既定テンプレートを使う:
## 概要
<Step 4 の要約を 2〜4 行で>
## 変更内容
- <主要な変更 1>
- <主要な変更 2>
- <主要な変更 3>
## 影響範囲 / 注意点
<破壊的変更・マイグレーション・設定追加があれば記載。無ければ「特になし」>
## 動作確認
<コミットから読み取れる範囲で。未確認なら「未実施」>PR タイトルのルール:
feat: / fix: / docs: 等)を採用していればそれに揃える。直近の PR / コミットタイトルを git log で確認してから決める。タイトル + 本文のドラフトをユーザーに提示して承認を得る。提示フォーマット(例):
以下の内容で PR を作成します。修正したい箇所があれば指示してください(そのまま OK なら「OK」などと返してください)。
マージ先: main ← feat/create-pr-skill
タイトル: feat: PR 作成 skill を追加
本文:
---
## 概要
...
---ユーザーが修正を依頼した場合はタイトル・本文を差し替えて再提示する。承認が取れたら次に進む。
PR を作成するにはリモートにブランチが push されている必要がある。状態ごとに以下のように扱う。
git push -u origin <HEAD_BRANCH> の実行可否をユーザーに確認してから実行する。git push の実行可否をユーザーに確認してから実行する。git pull --rebase してから push し直しますか?」と確認する。勝手に pull / rebase は実行しない。force push(--force / --force-with-lease)は明示的にユーザーが依頼した場合のみ実行する。既定では通常の push のみ。
push コマンド例:
# 初回
git push -u origin "${HEAD_BRANCH}"
# 2 回目以降
git pushpush が失敗した場合はエラー内容をそのまま報告し、ユーザーに対応を委ねる(勝手に force push には切り替えない)。
mcp__github__create_pull_request を呼び出す。主要パラメータ:
owner, repo: Step 2 で取得したものhead: HEAD_BRANCH(fork 越しの場合は OWNER:HEAD_BRANCH 形式)base: BASE_BRANCHtitle: Step 7 で確定したタイトルbody: Step 7 で確定した本文draft: ユーザーから Draft 指定があれば true、既定は falsemaintainer_can_modify: 既定 true(fork からの PR でメンテナが編集可)HEREDOC で本文を渡して改行・特殊文字を安全に扱う。
gh pr create \
--repo "${REPO}" \
--base "${BASE_BRANCH}" \
--head "${HEAD_BRANCH}" \
--title "${PR_TITLE}" \
--body "$(cat <<'EOF'
<Step 7 で確定した本文>
EOF
)"Draft にする場合は --draft を付ける。
gh auth refresh / MCP サーバー設定の見直しを案内する。失敗内容はユーザーに生のエラーメッセージと合わせて報告する(原因を勝手に推測せず、エラーの事実を伝える)。
作成した PR の URL をターミナルに明示的に出力し、簡潔なサマリを添える。
出力例:
✅ PR を作成しました
- タイトル: feat: PR 作成 skill を追加
- マージ先: main ← feat/create-pr-skill
- URL: https://github.com/ijufumi/claude-skills/pull/42
- 状態: Ready for reviewDraft で作成した場合は - 状態: Draft と記載する。既存 PR が存在したため新規作成をスキップした場合は (既存 PR を更新しました) と明示する。
この出力をもってスキルを終了する。レビュー依頼・マージ・追加のコメント投稿までは行わない(必要ならユーザーが別途依頼する)。
--force / --force-with-lease はユーザーの明示指示がある場合のみ。git pull / git rebase / git reset / ベースブランチの git merge などはユーザー承認なしに実行しない。behind の場合は状況を報告して判断を仰ぐ。~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.