name: setup-ci-review description: GitHubリポジトリにPRレビュー自動化を対話的に導入する。Claude Code workflow / Greptile / Checkov gating を bootstrap。生成時に既存ファイルは無断上書きしない(既存インストールの更新は update-existing.sh で対応)。「PRレビュー導入」「setup-ci-review」「コードレビューCI bootstrap」「CIレビュー setup」等で起動。 user-invocable: true allowed-tools: - Read - Write - Bash(ls:) - Bash(mkdir:) - Bash(gh:) - Bash(git:) - Bash(jq:) - AskUserQuestion - Bash(~/.claude/skills/setup-ci-review/scripts/)
実行手順
1. リポジトリ確認
gh repo view --json nameWithOwner,defaultBranchRef
失敗した場合は git remote get-url origin でフォールバック。
REPO_NAME は owner/repo 形式に正規化する(SSH / HTTPS / .git 付きの揺らぎを吸収)。以下で一括処理可能:
REPO_NAME=$(gh repo view --json nameWithOwner -q .nameWithOwner 2>/dev/null \
|| git remote get-url origin | sed -E 's#^git@github\.com:##; s#^https?://github\.com/##; s#\.git$##')
REPO_NAME は完了ガイド表示や workflow の identity 確認用途のみで、テンプレート置換には使わない(テンプレートは相対パスで動作する)。
2. ユーザーへの質問(1回でまとめて聞く)
AskUserQuestion で以下を一度に収集する。往復を最小化するため、1回でまとめて聞く。
- preset:
generic/iac - tier: 対象リポの Tier 分類(
1/2/3、デフォルト2)。Tier 1=ops/server-config 相当の重要かつ活発なリポ、Tier 2=重要だが PR 頻度が低〜中で初回レビューだけで足りるリポ、Tier 3=スクラッチ/experimental または商用 IaC scanner で重複機能をカバーできるリポ。判定基準はreference.mdの「Tier 分類」を参照。Tier 選択がコンポーネント選択とgreptileAutoReviewの既定値を決める - コンポーネント選択(multiSelect、Tier ごとのデフォルトを提示):
generic: Claude Code workflow / Greptile(Tier 1/2 はデフォルト選択、Tier 3 はデフォルト未選択)iac: Claude Code workflow / Greptile / Checkov(IaC のみ候補追加。Greptile の選択基準は generic と同じ)
- analyze: コードベースを分析して設定を最適化するか(yes/no)
- model: レビューに使うClaudeモデル(
default= action既定 /opus-4-5/ その他、デフォルトdefault) - greptileAutoReview: Greptile の Auto-review on new commits を有効化するか(yes/no)。デフォルトは Tier 1 のみ
yes、Tier 2/3 はno。理由は 2026-03 の料金改定で 1 アカウントあたり 50 件/月を超えたレビューに $1/件 が追加課金されるため、Tier 1 以外でtriggerOnUpdates: trueにする費用対効果が薄い(詳細はreference.mdの「Tier 分類」と「Greptile 料金改定」を参照)
ユーザーが Tier 3 を選択した場合は、Greptile を deselect した構成で生成する。GitHub App から該当リポを uninstall する手順は完了ガイドで案内する(skill 側からは App 操作不可)。
3. コードベース分析(analyze=yes の場合のみ)
スタックや規約を検出し、生成ファイルをリポジトリに合わせる。
探索対象(存在するもののみ読む):
CLAUDE.md/README.md(コーディング規約・プロジェクト概要)- 言語マニフェスト:
go.mod/package.json/pyproject.toml/Cargo.toml(存在確認) .github/workflows/(Bash(ls:*)で一覧取得)- トップレベルディレクトリ一覧(
Bash(ls:*)で確認)
分析結果から以下をセットする:
REVIEWER_ROLE: 検出スタックを反映(例: 「Go/Terraformに精通したシニアエンジニア」)REVIEW_CRITERIA: スタック固有の観点を追記(IaC presetの場合はIaC観点カタログと統合)- Greptile
rules.mdの<!-- ここにリポジトリ固有の観点を追記 -->部分: CLAUDE.mdから抽出したコーディング規約で置換 - Greptile
files.jsonのfiles[]: 重要ファイル・ディレクトリを{path, description, scope?}オブジェクトとして追加(scope 省略時は全レビュー対象)
4. 競合検出
既存ファイルへの無断上書きを防ぐため、生成予定ファイルのパスを引数として ${CLAUDE_SKILL_DIR}/scripts/detect-conflicts.sh を実行する。
出力を読んでユーザーに提示し、既存ファイルがある場合はマージ判断を仰ぐ。 Skillは自動マージも自動上書きもしない(既存設定の意図を判断できないため)。
衝突検出後の動作は .new 退避+他ファイル継続 が既定フロー。
- 衝突したファイルへは書かない。
detect-conflicts.shが生成した<file>.newプレースホルダに新内容を書き込み、ユーザーにmv <file>.new <file>での適用を委ねる - その他の非衝突ファイルは通常通り生成して続行する(全停止はしない)
- 注意:
<file>.newはdetect-conflicts.shがtouchで空ファイルとして先に作成している。Writeツールは未 Read のファイルへの書き込みを拒否するため、.newへの書き込み前に一度Readを挟む
.greptile/ 配下は3ファイル(config.json / rules.md / files.json)を個別に引数に含める。
ディレクトリの存在だけで「スキップ」と判定してはいけない。
.claude/skills/claude-code-review/SKILL.md も個別に競合判定する(他のスキル管理と混在するため、ディレクトリ存在だけで判定してはいけない)。
5. テンプレートの読み込みと変数置換、ファイル生成
${CLAUDE_SKILL_DIR}/templates/ 配下のテンプレートを Read し、以下を置換して Write する。
| 変数 | 置換先 |
|---|---|
{{REVIEWER_ROLE}} |
generic=「シニアエンジニア」 / iac=「Terraformシニアレビュアー」(analyze=yesの場合はスタック反映) |
{{REVIEW_CRITERIA}} |
generic=空文字 / iac=IaC観点カタログ(analyze=yesの場合はスタック固有観点を追加) |
{{CONSISTENCY_DELEGATION}} |
共通文言=「既存コードとの一貫性チェック: 命名規則・既存パターンへの追従・cross-file 整合(「2-pass 順序(必須)」の Phase 2 で必ず実施)」。Greptile を選択した場合のみ文末に「。Greptile の指摘は補助情報として参照」を追記する。triggerOnUpdates: false 既定でも Greptile は初回 PR で走るため、補助としての位置付けで言及する |
{{PROJECT_INSTRUCTIONS}} |
Greptile .greptile/config.json の instructions フィールドに入る自然文。analyze=yes=リポジトリ概要(1〜3文、CLAUDE.md 要約+重要な制約)/ analyze=no=プレースホルダのまま残す場合は該当行を削除して空のままにする |
置換ルール(iteration 検証で曖昧と出た箇所を明文化):
{{REVIEW_CRITERIA}}はテンプレートclaude-code-review-skill.md中で## 役割と## 優先度ラベルの間に独立配置されている。置換時はこの「独立ブロック」として扱う:- 空文字(generic preset + analyze=no): プレースホルダを含む行ごと削除。前後に
##節があるので空行1行は残って構わない(結果的に二重空行になった場合だけ1行に詰める) - 本文を入れる(iac preset または analyze=yes):
## レビュー観点という独立見出しを付けて差し込む(テンプレ上は## 役割→## レビュー観点→## 優先度ラベルの流れになる)。見出しを省略すると直前の## 役割節に観点が吸収されて読みにくくなるので、必ず独立見出しを付ける
- 空文字(generic preset + analyze=no): プレースホルダを含む行ごと削除。前後に
- analyze=yes で CLAUDE.md から規約を抽出する場合: 原文を引用せず「観点のリスト」に再構成する(CLAUDE.md は数十〜数百行あり原文引用は情報過多になる。3-7 項目の箇条書きに圧縮する)
{{REVIEWER_ROLE}}命名規則: 検出スタック名を形容詞化して並べる(例: 「Go/Terraform に精通したシニアエンジニア」「Next.js/TypeScript に精通したシニアエンジニア」「Terraform/GCP に精通したIaCシニアレビュアー」)。単一スタックでも同形式。- Greptile
files.jsonのscopeフィールド: 特定のパスパターンでのみレビュー対象にしたい場合に付ける。デフォルトは省略(全件対象)でよい。例: テストファイルのみの観点はscope: "**/*_test.go"のように限定する - Greptile
files.jsonのdescription: 1行・日本語・20〜60文字で「用途と重点確認ポイント」を書く(例:"本番VPC定義。CIDR変更・ピアリング変更は要承認") - Write は存在しないディレクトリに書き込めない環境があるため、生成前に
mkdir -p .github/workflows .claude/skills/claude-code-review .greptileで事前作成する
--model フラグはテンプレートで claude-opus-4-7 をデフォルト指定している。--model を外すと action のデフォルト(Sonnet)になるため、深いレビューが欲しい場合は Opus を明示する。軽量運用なら --model 行を削除して Sonnet に任せる。
--disallowedTools フラグはテンプレートで Edit,Write,NotebookEdit,Bash(git commit:*),Bash(git push:*),Bash(git checkout:*),Bash(git reset:*),Bash(git rebase:*),Bash(git branch:*),Bash(git tag:*) を指定している。これは Wiz custom rule CIWorkflow-020 対応で必須(後述 Gotcha 参照)。レビューに編集系ツールは不要なので、危険ツールの surface area を明示的に縮める。
生成先(選択されたコンポーネントのみ):
- Claude Code workflow:
.github/workflows/claude-review.yml - Claude Code review skill:
.claude/skills/claude-code-review/SKILL.mdclaude-code-review-skill.mdテンプレートを Read し、{{REVIEWER_ROLE}}/{{REVIEW_CRITERIA}}を置換して.claude/skills/claude-code-review/SKILL.mdとして Write- workflow からは
claude-code-reviewスキル名で呼び出されるため、パスは固定(変更禁止)
- Greptile:
.greptile/config.json/.greptile/rules.md/.greptile/files.json- IaC preset →
config-iac.jsonをconfig.json、rules-iac.mdをrules.mdとして生成 - generic preset →
config.json/rules.mdをそのまま生成 - analyze=yesの場合 → rules.md のプレースホルダーを分析結果で置換、files.json の
files[]に実際の重要ファイルを{path, description}で追記(公式スキーマ準拠)、config.json のinstructionsにリポジトリ概要(1〜3文)を埋める - analyze=noの場合 →
instructions: "{{PROJECT_INSTRUCTIONS}}"の行ごと削除(プレースホルダを残したまま Greptile に送らない) - 公式フィールドのみ使用:
strictness/commentTypes/triggerOnUpdates/triggerOnDrafts/statusCheck/summarySection/issuesTableSection/confidenceScoreSection/sequenceDiagramSection/ignorePatterns/instructions/rules/disabledRules。updateExistingSummaryComment/updateSummaryOnly/fileChangeLimitは公式ドキュメントに記載がないため追加しない triggerOnUpdates: テンプレートは既定false(org レベルで OFF と同じ挙動)。ステップ2でgreptileAutoReview=yesが選ばれた場合のみ、生成後に.greptile/config.jsonの該当行を"triggerOnUpdates": true,に書き換える。書き換え例:sed -i '' 's/"triggerOnUpdates": false,/"triggerOnUpdates": true,/' .greptile/config.json(macOS)。書き換えた場合は差分を目視確認する- 構造化ルール: IaC preset の
config.jsonにはrules[]にid/severity/scope付きのIaC観点が含まれる。サブディレクトリで一部ルールを無効化したい場合は、そのディレクトリに.greptile/config.jsonを置いてdisabledRules: ["<id>"]を指定する(cascading で親ルールを継承) - Provider本体・ライブラリ等の Go/TS/Python コードベース:
genericpreset を選んで analyze=yes でinstructionsとrules[]を埋める。IaC preset は**/*.tfスコープなので.tfが存在しないリポジトリでは発火しない
- IaC preset →
- Checkov:
.github/workflows/checkov.yml(IaC preset かつ選択時のみ)
6. SHA-pin 検証
サプライチェーン攻撃対策として、生成した .yml ファイルのパスを引数として ${CLAUDE_SKILL_DIR}/scripts/verify-sha-pin.sh を実行する。
検証対象は「最終的にリポジトリに採用される可能性のある全 .yml」。具体的には:
- 通常生成した
.yml(例:.github/workflows/claude-review.yml,.github/workflows/checkov.yml) - 衝突で
.newプレースホルダに書いた.ymlも対象(ユーザーがmv *.newで採用する前提のため、検証漏れを防ぐ)
複数 .yml は 1コマンドでまとめて渡す(例: verify-sha-pin.sh a.yml b.yml c.yml)。個別実行は不要。
exit 1 の場合は失敗として報告し、修正を促す。
local action(uses: ./...)と reusable workflow は検証対象外(スクリプト内で除外済み)。
7. 完了ガイド表示
全工程完了後、最終応答テキスト(チャットに返すメッセージ) として以下をまとめて表示する。stdout echo や追加ファイル生成はしない。箇条書きで提示。
- 必要な Secret:
ANTHROPIC_API_KEY(リポジトリ Settings > Secrets > Actions) - Claude Code GitHub App のインストールが必須: https://github.com/apps/claude を開き、対象リポジトリに個別インストールする。workflow 投入だけでは動かず、App が無いと
401 Unauthorized - Claude Code is not installed on this repositoryで workflow が 3回リトライして失敗する。OAuth 同意が必要なユーザー手動作業 - Tier 3(Greptile を deselect した構成)の場合のみ追加案内: Greptile GitHub App が org にインストール済みの場合、設定ファイルなしでも初回レビューが走る。完全に無効化するには org admin に依頼して該当リポを Greptile App の Repository access から外してもらう(
https://github.com/organizations/<org>/settings/installationsの Greptile 行 → Configure → Repository access) - Branch Protection は維持したまま、Claude / Greptile の check を Required Check にしない
- Greptile
statusCheck: trueは状態表示用。Required Check にすると block 相当になるため注意 - Required review count は 2 以上を推奨(human + AI の 2 Approve 制): Claude のコンテキスト補正ルールにより「文脈依存P0 + PR本文の申告」でAI Approveに至る経路がある。AI単独マージを防ぐため、Branch Protection で
Require a pull request before merging→Required approvals: 2を設定し、少なくとも1件は human reviewer の Approve を必須にすること - 生成ファイルの確認を促し、コミット・PR作成はユーザーに委ねる
- 再レビューのトリガー方法を伝える:
- 自動: 新しいコミットをpushすると
synchronizeで再レビューが走る(force-push も検出してフルレビューに切り替わる) - 手動再レビューが必要な場合は空コミットを push する(
git commit --allow-empty -m "re-review" && git push)。issue_commentトリガー (@claude) は Wiz custom ruleCIWorkflow-020対応で削除済み
- 自動: 新しいコミットをpushすると
- 初回 workflow 追加 PR ではレビューがスキップされる("Action skipped due to workflow validation error")。動作確認はマージ後の次の PR で行うこと
- 増分レビューは
<!-- claude-code-review -->マーカー付きコメントに追記される仕組み。初回は新規コメント、2回目以降は既存コメントに履歴が蓄積される
既存インストールの更新
テンプレート(claude-review.yml / claude-code-review/SKILL.md / .greptile/config.json)を変更した場合、既にこの
skill で導入済みのリポジトリには自動では反映されない。scripts/update-existing.sh を使って差分を当てる。
bash ${CLAUDE_SKILL_DIR}/scripts/update-existing.sh /path/to/target-repo
# 差分を目視確認 → y で適用 → ユーザー側で commit & push
# 確認プロンプトをスキップしたい場合
bash ${CLAUDE_SKILL_DIR}/scripts/update-existing.sh /path/to/target-repo --yes
挙動:
claude-review.ymlは最新テンプレートで完全上書きSKILL.mdは最新テンプレートで完全上書き。ただしREVIEWER_ROLE/REVIEW_CRITERIAは既存ファイルから抽出して保持する(setup-ci-reviewが analyze=yes で埋めた値は消えない).greptile/config.jsonは preset を自動判定してconfig.json/config-iac.jsonのいずれかで全置換- IaC preset 判定:
.github/workflows/checkov.ymlの有無、または既存rules[]にiam-no-basic-roles/wif-attribute-condition/iam-use-member-not-bindingなどのIaC用 rule id が含まれるか .greptile/rules.md/files.jsonは analyze=yes で埋めた内容を壊さないよう対象外(手動で追随)
- IaC preset 判定:
- 各ファイルごとに差分を表示して y/N 確認(
--yesで省略可) - コミット・push は行わない
注意:
- 既存 SKILL.md に
REVIEWER_ROLE/REVIEW_CRITERIA以外の手動カスタマイズがある場合、全置換で失われる。差分を必ず目視確認すること - 抽出ロジックは「あなたは ... です。このPRをレビューします。」パターンと「3. 既存コードとの一貫性チェック ... 」から「## 優先度ラベル」の間で REVIEW_CRITERIA を識別する。SKILL.md の骨格を手動で大きく変えている場合は抽出失敗して WARN を出す(この場合は skip される)
.greptile/config.jsonのstrictness/ignorePatterns/instructions/rules[]を個別調整している場合、全置換で失われる。差分目視必須- PR ブランチが古い main 上にいると、そのブランチの
SKILL.mdは更新前のまま。git rebase origin/mainしてから再レビューを走らせる必要がある。テンプレート冒頭に rebase ガイドが入っているので Claude 自身も古い PR で rebase を促す
Gotchas
- action バージョンは v1.0.101(
38ec876110f9fbf8b950c79f534430740c3ac009)を pin:mcp__github_inline_comment__create_inline_commentは v1.0.94 / v1.0.101 いずれも引き続き使用可能(過去の「v1.0.101 で削除」という記述は誤り)。v1.0.94 で PR branch 上の.claude/と.mcp.jsonを base branch から自動 restore する防御が入り、attacker が PR branch でレビュー指示を改ざんする経路を塞いだ。v1.0.101 でも継承されているため、新しい方を pin する。SKILL.md はこの挙動を前提に書くこと(PR branch 上の SKILL.md 改変は効かず base branch の内容が読まれる) --max-turnsは 50 以上を推奨: SKILL.md が長い(コンテキスト補正ルール / ERROR-WHY-FIX / 追記テンプレート等)と、既定の 30 ターンでは Claude がgh pr review投稿前にerror_max_turnsで打ち切られる。最低 50、SKILL.md を大幅に拡張した場合はさらに増やす--allowedToolsにはmcp__github_inline_comment__create_inline_commentを必ず含める。これが無いと Claude が分析だけして何も投稿せず終わるケースがある(display_report: trueはworkflow summaryに出すだけでPRコメントには投稿しない)--allowedToolsの Bash パターンに空白と複数*を混ぜると Claude CLI の引数解釈が壊れてCould not resolve authentication credentialsで fail する。Bash(gh api --method PATCH repos/*/issues/comments/*:*)は動作確認済みだが、新規パターンを増やすときは単体で動作確認する- 2-pass レビュー(B+C 案):
claude-review.ymlのPrepare consistency contextstep が.claude-review-context.mdを生成し、 prompt のCONSISTENCY_CONTEXT_PATHで参照させる。SKILL.md template の「2-pass 順序」セクションで Phase 1 (logic/security) → Phase 2 (consistency) の順序を強制し、Phase 2 でCONSISTENCY_CONTEXT_PATHを Read する。Greptile 選択時もこの context 生成は走らせて構わない(害はない、むしろ補助情報として活用できる)。A 案(matrix で 2 セッションに分割)は ops / server-config 等のクリティカルリポでのみ別 workflow として後付けする anthropics/claude-code-actionはid-token: writepermission が必須。ANTHROPIC_API_KEY 直接認証の構成でも内部で OIDC token を要求するため、未使用に見えても削除してはいけない(削除するとCould not fetch an OIDC tokenで fail する)。Codex/AI レビュアが「未使用だから削除」と誤指摘することがあるので却下すること- PR レビューの最終判定は
--approveまたは--request-changesを必須で出す設計。--commentはレビュー状態が「commented」扱いで CI/Branch Protection 連携がしにくいため使わない。P0/P1 なし →--approve、あり →--request-changes。AI による approve を避けたい場合は--commentに差し替えるが、レビュー完了を機械的に判別できなくなる点を受容すること - Claude Code workflow を追加する初回 PR 自身では Claude のレビューはスキップされる("Action skipped due to workflow validation error" / セキュリティ対策)。CI status は pass 扱いだがレビューコメントは付かない。動作確認はマージ後の次の PRで行うよう案内すること
.greptile/は3ファイルを個別に競合判定。ディレクトリ存在だけでスキップ禁止- Greptile
triggerOnUpdatesの既定はfalse: 2026-03 の料金改定で 1 アカウントあたり 50 件超のレビューに $1/件 が追加課金されるようになり、org レベルで Auto-review on new commits が OFF に切り替えられた(2倍〜3倍に値上がり)。setup-ci-review のテンプレートも追随して既定false。trueに上げるのはWinTicket/opsとWinTicket/server-configのようにプロダクトに重要で追加料金を払う価値があるリポのみ。ステップ2のgreptileAutoReviewでyesを選んだ場合のみ、生成後に手動書き換えする - Checkov は IaC preset 選択時のみ候補に出す(Terraform専用)
- 商用 IaC scanner が既に動いているリポジトリには Checkov を入れない: Wiz / Prisma Cloud / Snyk IaC などが CI で動作している場合、Checkov は機能重複でノイズの二重化・baseline / skip_check の二重メンテが発生する。ステップ3(analyze)で
.github/workflows/を確認し、wiz-cli/prisma-cloud-scan/snyk-iac等の step が存在する、またはWiz IaC Scannerなどの status check が既に PR に付いている場合は、ステップ2のコンポーネント選択で Checkov をデフォルト非選択にして、その旨を option の description に明記する(例: 「Wiz IaC Scanner が検出されたため非推奨」) verify-sha-pin.shは生成ファイルのみ対象- analyze=yesでCLAUDE.mdが存在しない場合はREADME.mdとディレクトリ構造から推定する
- CIWorkflow-020 対応には
--disallowedToolsも必須: Wiz custom ruleCIWorkflow-020(Workflow should not use AI agents with dangerous tools on external triggers, MEDIUM) はanthropics/claude-code-actionの--allowedToolsに Bash / WebFetch / WebSearch 等の危険ツールが含まれていると、pull_requestトリガー単独でも実測で fire する(2026-06-03WinTicket/security-check-dbPR #24 で確認)。ルール説明はissues/issue_comment/pull_request_targetを例示するが、実装はpull_requestも外部入力トリガーとして扱う模様。対応として skill template は以下を両方適用する: (1)issue_commentトリガーを採用しない(Poisoned Pipeline Execution 経路の遮断と兼ねる)、(2)--disallowedTools "Edit,Write,NotebookEdit,Bash(git commit:*),..."で危険ツールの surface area を明示剥離する。手動再レビューは空コミット push で代替する allowed_botsは default (空) で運用する。dependabot[bot]/renovate[bot]のいずれも入れない。理由: Wiz custom rule459cd9a5-6932-401a-b31a-f7d9eb6b3c5a(claude-code-action should not use wildcard or dependabot in allowed_bots, HIGH) は dependabot と renovate の両方を Confused Deputy 攻撃ベクトルとして検出する。@dependabot recreate/@renovate run等のコメントで attacker が bot を perceived actor 化できる経路がある。bot PR への Claude レビューは諦め、Renovate 自身の Release Notes と人間レビューでカバーする方針。WinTicket org は Renovate の minor/patch/digest を automerge、major のみ手動レビュー対象なので便益喪失は限定的。exclude_comments_by_actor: "*[bot]"を併用して bot コメントを Claude のコンテキストから除外する- 増分レビュー(履歴蓄積)は server リポジトリで実運用されている方式。
<!-- claude-code-review -->マーカー検索 → 存在すればgh api --method PATCHで追記、無ければ新規作成。force-push はgit merge-base --is-ancestorで検出してフルレビューに切り替える - レビュー指示は
.claude/skills/claude-code-review/SKILL.mdに分離している。Skill invocation は使えない: Claude Code Action v1.0.72 の SDK は組み込み skill(debug / simplify / batch / loop / claude-api)しかロードしないため、Skilltool によるclaude-code-review呼び出しはis_error: trueで失敗する。回避策として workflow の prompt に「.claude/skills/claude-code-review/SKILL.mdを Read で読み込んで指示に従ってください」と書き、ただのマークダウンファイルとして読ませる。レビュー観点・投稿ルールを変更する場合は SKILL.md 側を編集する(workflow の再デプロイ不要) - concurrency:
pull_requestトリガーのみの構成ではcancel-in-progress: trueで問題ない。新コミット push で古いレビューを止める挙動が期待値。過去にissue_commentトリガー併用時は bot 自身のコメントが自己キャンセルループを引き起こすためcancel-in-progress: ${{ github.event_name != 'issue_comment' }}が必要だったが、issue_comment削除に伴い不要 - SKILL.md の投稿フロー最終ステップを省略する現象: 過去の実測で Claude がサマリコメント投稿後に
gh pr review --approve/--request-changesを忘れてタスク完了と判断するケースがあった。GitHub 上のレビュー状態が残らないため、SKILL.md の「PR レビュー判定」セクションは「省略禁止」「必ず最後に実行」と明示的に強調すること(テンプレート済み) - workflow ファイル変更を含む PR は Claude にレビューさせられない:
claude-code-actionは PR ブランチの workflow ファイルが main と一致しているか検証する(セキュリティ機構)。差異があるとWorkflow validation failedで即 fail する。skill template のDetect claude-review workflow changesstep が.github/workflows/claude-review.ymlの変更を検出して action を skip するため、claude-review.yml自体を変更する PR でも CI が fail することはない(skip された step は green 扱い)。ただしレビューコメントは付かないので、claude-review.ymlを編集する PR は人間レビュー必須 - ユーザーのローカル環境で
_gh_ensure_tokenエラーが出る:gh:1: command not found: _gh_ensure_tokenは zsh の gh 認証 wrapper の副作用で、コマンド自体は動く。Skill の挙動には影響しない - Claude Code GitHub App のインストール忘れで CI が 401 で失敗する: workflow 投入後に Claude Review が
401 Unauthorized - Claude Code is not installed on this repository. Please install the Claude Code GitHub App at https://github.com/apps/claudeで 3回リトライ失敗するパターン。App インストールは workflow ファイルとは別管理のため、新規リポジトリでは必ず https://github.com/apps/claude から対象リポジトリにインストールする必要がある。完了ガイドで明示するが、ユーザーが見落としやすいので症状を見たら真っ先に疑うこと
詳細は ${CLAUDE_SKILL_DIR}/reference.md を参照(必要時のみ読み込む)。