讓 @claude 在 GitHub Actions workflow 中自動合併 PR,而不只是留言審查。當使用者說「@claude 合併後說沒有權限」「@claude 不會自動 merge」「想讓 claude 自動合併 upstream sync PR」「@claude 只留言不 merge」「讓 bot 自動按 merge」「workflow 自動 merge」時使用。
讓 @claude 在完成審查後直接呼叫 gh pr merge 合併 PR,而不是留言請人工合併。
@claude 說「合併 PR 超出我的操作權限」不是技術限制,而是沒有收到合併指令。
GITHUB_TOKEN 在 GitHub Actions 環境中永遠存在,gh pr merge 技術上一直可以執行。
在觸發 @claude 的 PR body 或 comment 裡明確寫出 merge 指令:
若無影響,使用 `dev-log` skill 寫入 DEV_LOG 後,執行以下指令直接合併本 PR:
```bash
gh pr merge <BRANCH_NAME> --merge --repo <owner>/<repo>
不需要留言,寫完 dev-log 後直接合併即可。
## 為什麼要指定分支名,不用 `gh pr merge --merge`(無參數)
| 觸發方式 | checkout ref | `gh pr merge --merge` 能否偵測 PR |
|----------|-------------|----------------------------------|
| `pull_request` event | PR merge commit | ✅ 可以(`GITHUB_REF` 含 PR 號) |
| `issue_comment` event | `main`(預設分支) | ❌ 偵測不到 PR,會出錯 |
大多數 @claude 觸發都是透過 `issue_comment`(在 PR 上留言),checkout 是 main。
**解法**:在 PR body 生成時(日期已知)直接把分支名寫死:
```bash
# 在生成 PR body 的 workflow step 裡($DATE 已知)
echo "gh pr merge chore/upstream-update-$DATE --merge --repo owner/repo"
這樣 PR body 裡會有具體的分支名,@claude 可以直接複製執行。
update-upstream.yml(生成 PR body 的 step)DATE=$(date -u +%Y-%m-%d)
# ...
{
echo "@claude 請審查本 PR 的上游變更,檢查是否影響以下路徑:"
echo "- \`.claude/skills/**\`"
echo "- 根目錄治理文件"
echo ""
echo "若有影響請直接 push commit 修正,修正後再合併。"
echo "若無影響,使用 \`dev-log\` skill 寫入 \`docs/DEV_LOG.md\` 後,執行:"
echo ""
echo "\`\`\`bash"
echo "gh pr merge chore/upstream-update-$DATE --merge --repo LostSunset/Buddha-skills"
echo "\`\`\`"
echo ""
echo "**不需要留言,寫完 dev-log 後直接合併即可。**"
} > /tmp/pr-body.md
claude-review.yml(讓 @claude 能執行 gh 指令)