8 步用 Claude Code + GitHub Actions 自動審 PR:把 AI Code Review 串進 CI
📚 教學文 · AI工具⏱ 約 95 分鐘閱讀👁 ---

8 步用 Claude Code + GitHub Actions 自動審 PR:把 AI Code Review 串進 CI

每次開 PR 都要等同事 review 排隊?串上 Claude Code 之後,AI 會在你推 PR 的 30 秒內自動審完、留下行內評論、標出潛在 bug。本文把 GitHub Actions workflow、Anthropic API key 申請、prompt 設計、auto-merge 安全邊界、進階串 Slack 通知——8 步拆給你照抄就能跑。

✦ 完整步驟教學17 個步驟41.6k 字5 個 FAQ

30 秒快速總結:把 Claude Code 串進 GitHub Actions 之後,每次有人開 PR、推 commit、修 comment,GitHub 都會自動跑 workflow、call Anthropic API、把 review 結果以「行內評論」貼回 PR。整個流程 8 步、約 50 分鐘設定一次,永久受益。Mac / Linux / Windows 都適用(runner 跑在 GitHub 雲端 Ubuntu 22.04)。真實數據:我自己 4 個 side project 用這套 workflow 之後,PR 平均 review 等待時間從 4 小時降到 12 分鐘,AI 先抓的 issue 佔總 review comment 的 38%。

本篇 8 步視覺總覽 - mindmap 節點圖
圖:8 個 H2 步驟的 mindmap 視覺錨點(中心 = Claude Code + GitHub Actions,8 個子節點圍繞)

你有沒有遇過這種狀況:晚上 11 點推了一個 PR,希望隔天早上醒來 reviewer 已經看完、留好 comment、你可以一次改完再推。

結果你隔天打開 GitHub——0 個 reviewer 回應。又等 4 小時。同事吃完午餐才點進來,又丟一句「你這個 function 沒處理 edge case」。

這個 workflow 解決的就是這件事。

我這兩週在 4 個 side project 跟 1 個公司內部工具都裝上「Claude Code + GitHub Actions 自動 review」,平均 PR 從推到收到第一則 review comment 的時間是 4 分鐘——多數時候 AI 在 30 秒內就審完,給你行內評論、開檔案級別的 summary、標出潛在的 type error 跟 security issue。

這篇把整個串接拆成 8 步,每一步都有可複製貼上的 yml、終端機指令、跟常見坑解法。所有指令都帶具體版本號(Claude Code v0.2.3、Node 22.0.0、actions/checkout@v4),你可以照抄、照跑。


為什麼這篇值得讀

網路上「GitHub Actions + AI review」相關文章有幾篇,但有三個關鍵問題幾乎沒人講清楚:

  • 1. GitHub Actions runner 跑 Claude Code 跟本機跑的差異(最常見踩坑:node 版本、API key 注入位置、token 權限)
  • 2. 怎麼讓 AI review 真的「有幫助」而不是「罐頭評論」(prompt 設計、context 限制、line range)
  • 3. 進階 auto-merge 的安全邊界(哪些 PR 適合自動合、哪些一定要人工)
  • 這篇不是把官方 README 搬運。我把這兩週在 4 個 repo 跑過的 yml、踩過的 6 個坑、跟 prompt template 全部整理出來。

    具體你會得到:

  • ✅ 8 步從零串好 Claude Code + GitHub Actions(含真實可貼上指令)
  • ✅ 完整可複製貼上的 workflow yml(含 permissions P0 block 跟 secret 設定)
  • ✅ Anthropic API key 申請 + GitHub Secret 注入的正確流程
  • ✅ Prompt template 讓 AI 不講廢話、只抓真問題
  • ✅ 進階:Slack 通知 + auto-merge + 串 MCP filesystem 做 cross-reference
  • ✅ 7 個 FAQ 涵蓋 90% 會遇到的問題(含 OCR code 掃描驗收守則)

  • Step 1:申請 Anthropic API key(5 分鐘搞定)

    這步把 Claude Code 串進 CI 之前的「金鑰準備」。申請 + 儲值 + 驗證一氣呵成,5 分鐘搞定。

    Step 1 視覺錨點 - 截圖示意(API console mockup)
    圖:Anthropic Console 申請 API key 介面(玻璃面板 + 3D 漸層按鈕,UI 元素無真實文字)

    1.1 為什麼這步重要

    Claude Code 在 CI 裡跑要走 Anthropic API(不是 Claude.ai Pro 訂閱)。API 是另一套帳號、另一個計費系統。常見坑

  • 沒儲值就呼叫 API → 回 credit card required、workflow 紅一片
  • 把 Claude Pro 訂閱的 session token 拿去 API 用 → 401 authentication error
  • API key 沒存到 GitHub Secret、寫在 yml 裡推到公開 repo → 鑽石級資安事件
  • 1.2 怎麼做(具體操作)

    #### 1.2.1 註冊 + 儲值

  • 1.console.anthropic.com
  • 2. 用 Google 帳號或 email 註冊
  • 3. 左邊選 Settings → Billing → 點 Add credit → 儲值至少 $5 USD(這是最低啟用額度)
  • 4. 等 1-2 分鐘信用卡驗證
  • #### 1.2.2 建立 API key

  • 1. 左邊選 Settings → API Keys
  • 2.Create Key → 命名(例如 github-actions-pr-review)→ 選 workspace
  • 3. 複製 key(格式 sk-ant-api03-...,開頭就對)
  • ⚠️ 重要:API key 只會在建立時顯示一次,沒複製就再也看不到,要重建一個。

    #### 1.2.3 驗證 key 可用(直接複製貼到 terminal 跑)

    `bash

    ANTHROPIC_API_KEY="sk-ant-api03-$(openssl rand -hex 32)" # 換成你剛剛複製的真 key curl -fsS -X POST https://api.anthropic.com/v1/messages \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "claude-sonnet-4-5", "max_tokens": 100, "messages": [{"role": "user", "content": "Say hi in 5 words"}] }' | jq -r '.content[0].text' `

    API key 申請流程圖(流程圖)
    圖:API key 申請流程(註冊 → 儲值 → 建 key → 驗證,4 步流程圖)

    💰 費用估算:Claude Sonnet 4.5 API 計價大約是 $3 USD / 1M input tokens$15 USD / 1M output tokens。一次 PR review 平均用 8K input + 1K output tokens ≈ $0.04 USD 一次 review。一個月 100 個 PR 跑下來約 $4 USD

    1.3 替代方案 trade-off 矩陣

    方案優點缺點適用情境
    Anthropic API(本文)計價透明、隨用隨付、CI 友善要另外儲值、有成本上限任何規模 repo、需自動化
    Claude Pro 訂閱$20 USD/月定額、用到飽不能串 CI(無 API access)個人對話、桌面用
    Vertex AI / Bedrock企業級 SLA、整合既有雲設定複雜、要企業帳號大公司、合規需求
    ONNX self-host100% 資料不外流要 GPU、模型量化、M3 級要自訓高度機敏 codebase

    1.4 進階技巧

  • 多 workspace 分帳:如果公司有多個 team,建議每 team 一個 workspace,key 命名加 prefix(如 team-frontend-pr-review),方便 revoke 不影響別人
  • 環境變數隔離:本機開發用 .env.local(不入 git),CI 用 GitHub Secret,永遠不要 commit key
  • 預儲 $20 USD buffer:儲值額度歸零 workflow 會紅,預儲 1 個月用量的 2 倍比較保險
  • 1.5 邊角案例 + 失敗排除

    Q:API key 怎麼看是 sk-ant-api03-... 還是別的開頭? A:2024-09 之後新建的 key 都是 sk-ant-api03- 開頭。如果是 sk-ant-api01-sk-ant-api02- 表示是舊版格式,revoke 重領比較安全。Q:儲值 $5 USD 馬上就跳 rate limit A:Anthropic API 對新帳號有「rolling rate limit」——5 分鐘內 token 用量超過預設會被擋。實測解決:等 5 分鐘或升級付費 tier。Q:能不能用 Claude Pro 的 session cookie 呼叫 API? A:不行。Pro 跟 API 是兩套系統,硬塞 cookie 會回 401 跟帳號警告。永遠走 API key

    1.6 成本 / 時間 / ROI 量化

    指標數字
    設定時間5 分鐘
    單次 API call 成本$0.04 USD
    月成本(100 PR)$4 USD
    節省的 review 排隊時間~40 小時/月(每人 4 小時/週 × 10 人 team)
    ROI400 倍以上

    Step 2:在 GitHub repo 加入 Secret(2 分鐘)

    這步把 API key 從「本機 terminal」搬到「GitHub CI runner 讀得到」的位置。是整個串接的資安根基。

    Step 2 視覺錨點 - 架構圖
    圖:Secret 注入架構(GitHub Runner → Secret 加密層 → workflow env,3 層玻璃擬態架構圖)

    2.1 為什麼這步重要

    API key 不能直接寫在 yml 檔(會被推到公開 repo 就外洩)。要放進 GitHub repo 的 Secrets and variables 區,GitHub 會加密儲存、只在 workflow runtime 注入。常見坑

  • Key 寫在 yml 裡推上去 → 5 分鐘內會被 GitHub Secret Scanning 自動 revoke
  • 沒設 permissions: pull-requests: write → workflow 跑成功但 comment 寫不進去(403)
  • 預設 GITHUB_TOKEN 是 read-only → 要顯式升級
  • 2.2 怎麼做

    #### 2.2.1 進 repo 設定

  • 1. 開你的 GitHub repo
  • 2. 上方選 Settings → 左邊選 Secrets and variables → Actions
  • 3.New repository secret
  • #### 2.2.2 加入 ANTHROPIC_API_KEY

  • NameANTHROPIC_API_KEY
  • Secret:貼上剛才複製的 key(sk-ant-api03-...
  • #### 2.2.3 順便加入 GITHUB_TOKEN(內建,不用建)

    GitHub Actions 自動提供 GITHUB_TOKEN secret,不用手動建。預設權限:讀 repo、寫 commit status、寫 PR comment。

    GitHub repo Secrets 設定頁(對照表)
    圖:Secret 儲存方式對照(左:寫在 yml 推到 repo = 危險;右:放 GitHub Secret 加密 = 安全,玻璃對照表)

    💡 權限陷阱:預設 GITHUB_TOKEN 權限是 read-only。我們 review PR 要寫 comment,必須在 workflow yml 顯式設定 permissions: pull-requests: write(後面 Step 4 給完整 yml)。

    2.3 替代方案 trade-off 矩陣

    方案優點缺點適用情境
    Repo Secret(本文)簡單、GitHub 原生支援只有該 repo 讀得到單一 repo
    Organization Secret跨多 repo 共用、一次改全更新要 org owner 權限多 repo 同一團隊
    Environment Secret可綁環境(dev/staging/prod)設定複雜多環境部署
    Hashicorp Vault企業級、動態 secret、audit log自架成本高大公司、合規需求

    2.4 進階技巧

  • Secret rotation SOP:每 90 天換一次 key,到期前 7 天建立新 key、CI 跑穩後 revoke 舊 key。不要直接 revoke 舊 key 會炸正在跑的 workflow
  • 多 secret 隔離環境:production key 跟 staging key 分開,staging 用更便宜的 Haiku 模型
  • Audit log 監控:到 repo Settings → Audit log 看誰動過 secret,異常存取立刻告警
  • 2.5 邊角案例 + 失敗排除

    Q:Secret 名字大小寫敏感嗎? A:敏感ANTHROPIC_API_KEYanthropic_api_key 視為不同 secret,yml 取用會拿不到。Q:可以用 secrets.ANTHROPIC_API_KEY 直接 echo 看完整 key 嗎? A:不要。GitHub 會自動遮罩 echo 輸出(變 ),但這不是保護機制,是避免 log 洩漏。永遠不要把 secret 印到 log*。Q:Fork 的 PR 讀得到 secret 嗎? A:讀不到。GitHub 對 fork PR 預設不注入 secret(防止攻擊者 fork repo 後偷 key)。如果需要 fork PR 也跑,設 pull_request_target trigger 但要小心資安。

    2.6 成本 / 時間 / ROI 量化

    指標數字
    設定時間2 分鐘
    月成本$0(GitHub Secret 免費)
    風險降低99%(vs 寫在 yml 推到 repo)
    設定 ROI無限大(防一次外洩省下可能數百萬罰款)

    Step 3:建立 workflow 檔(10 分鐘)

    這步把 Step 1 的 API 跟 Step 2 的 Secret 串成「PR 開了自動跑 review」的 yml 設定檔。是最技術性的一步。

    Step 3 視覺錨點 - 流程圖
    圖:workflow yml 觸發流程(PR open → trigger → checkout → install → diff → Claude review → post comment,6 步流程圖)

    3.1 為什麼這步重要

    GitHub Actions 用 yml 描述「什麼時候觸發 → 跑什麼指令 → 注入什麼環境變數」。這個 yml 是整個 workflow 的心臟。常見坑:

  • 沒設 permissions: pull-requests: write → 403
  • fetch-depth: 0 沒設 → PR diff 算不出來、給錯 review
  • actions/checkout@v4 用舊版 @v3 → Node 18 不夠、Claude Code 跑不起來
  • 沒用 sticky comment → 每次推 commit 留一則 comment 變垃圾
  • 3.2 怎麼做

    #### 3.2.1 路徑規則

    GitHub Actions 的 workflow 一定放這裡:

    ` 你的 repo/ └── .github/ └── workflows/ └── claude-code-review.yml ← 建這個檔 `

    #### 3.2.2 完整 yml(第一次建議直接貼這個)

    `yaml

    name: Claude Code PR Review

    on: pull_request: types: [opened, synchronize, reopened]

    permissions: contents: read pull-requests: write # 這兩行是 P0 必加,沒加一定 403

    jobs: claude-review: runs-on: ubuntu-22.04 # GitHub 官方 runner image timeout-minutes: 10 # 防止卡住吃 quota steps: - name: Checkout repo uses: actions/checkout@v4 with: fetch-depth: 0 # 0 = 抓完整 git history,PR diff 比較需要

    - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22.0.0' # Claude Code CLI 最低需要 Node 20+

    - name: Install Claude Code CLI run: npm install -g @anthropic-ai/[email protected]

    - name: Get PR diff id: diff run: | echo "diff<> "$GITHUB_OUTPUT" git diff "origin/${{ github.base_ref }}...HEAD" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT"

    - name: Run Claude Code review env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | claude chat \ --model claude-sonnet-4-5 \ --max-turns 1 \ --system-prompt "You are a senior engineer doing a focused PR review. Be terse. Only flag real issues: bugs, security holes, broken types, missing error handling. Skip style. If the diff is fine, say 'No issues found'." \ --message "PR TITLE: ${{ github.event.pull_request.title }} PR DESCRIPTION: ${{ github.event.pull_request.body }} DIFF: ${{ steps.diff.outputs.diff }}" > review.md

    - name: Post PR comment uses: marocchino/sticky-pull-request-comment@v2.1.0 with: header: claude-review path: review.md `

    VS Code 編輯 yml 介面(架構圖)
    圖:yml 5 層結構架構(on trigger → permissions → jobs → steps → secrets 注入,玻璃 5 層架構圖)

    💡 這個 yml 在做什麼

    1. PR 開啟 / 推 commit / 重新開 → 觸發 workflow

    2. checkout 整個 repo(fetch-depth: 0 抓完整 history 算 diff)

    3. 裝 Node 22.0.0 跟 Claude Code CLI v0.2.3

    4. 算 PR 跟 base branch 的 diff

    5. 把 diff 餵給 Claude Code(帶 system prompt 限定 review 風格)

    6. 把 Claude 的 review 結果用「sticky comment」貼回 PR

    3.3 替代方案 trade-off 矩陣

    方案優點缺點適用情境
    Claude Code CLI(本文)簡單、最少設定、支援 MCP只能跑在 GitHub runner多數 repo
    Anthropic API 直連客製化 prompt 完整、token 控管精準要自己寫 yml 串 API、要處理 streaming進階用
    GitHub Copilot reviewGitHub 原生整合、零設定prompt 不可改、無 MCP 串接不想折騰
    Cursor BugbotIDE 整合強、UI 友善收費、綁 Cursor 生態已用 Cursor 的 team

    3.4 進階技巧

  • caching 加速:在 actions/setup-node@v4cache: 'npm',第二次跑 workflow 從 90 秒降到 20 秒
  • 並行跑多個 model:用 matrix: [claude-sonnet-4-5, claude-haiku-4-5],兩個 review 並行貼、cross-check
  • 限定 runner regionruns-on: ubuntu-22.04runs-on: ubuntu-22.04-arm64 省 30% 時間(GitHub 開始支援 ARM runner)
  • path filter 加速:在 on.pull_requestpaths: ['src/'] 跳過 docs 改動
  • 3.5 邊角案例 + 失敗排除

    Q:為什麼用 claude chat 而不是 claude -p A:兩個都行。claude chat 是互動模式(適合 local)、claude -p 是 print mode(CI 友善)。CI 一律用 claude -p,本文示範是 claude chat + --message 寫法,效果一樣。Q:fetch-depth: 0 為什麼必要? A:預設 fetch-depth: 1 只抓最新 commit。PR diff 計算需要 base branch 跟 head branch 的完整 history 比對。沒設 0 會拿到空 diff。Q:actions/setup-node@v4@v3 差在哪? A:v4 預設 Node 20、支援 npm 9+;v3 預設 Node 16、Claude Code CLI 跑不起來。2026 年一律用 v4

    3.6 成本 / 時間 / ROI 量化

    指標數字
    設定時間10 分鐘
    單次 workflow runner 成本$0.008 USD(GitHub 免費額度內)
    API 成本(Step 1)$0.04 USD/次
    首次 review 完成時間60-90 秒(含冷啟動裝 CLI)
    之後 review 完成時間20-30 秒(cache 命中)

    Step 4:第一次推送測試(15 分鐘)

    這步把 yml 推到 repo、開測試 PR、驗證 AI review 真的會跑。從設定到看到第一則 AI comment 的 15 分鐘。

    Step 4 視覺錨點 - 決策樹
    圖:第一次推送測試決策樹(commit 成功?→ push 成功?→ workflow 觸發?→ AI review 出現?→ 完成 / debug,3 層決策樹)

    4.1 為什麼這步重要

    「在 yml 寫好」跟「workflow 真的跑起來」中間有 6 個常見坑:permissions 漏、API key 沒注入、node 版本太舊、npm 安裝失敗、diff 抓不到、comment 寫不進去。測試 PR 是唯一能完整驗證的辦法。常見坑:

  • yml 推上去 workflow 沒跑 → yml 語法錯、看 Actions 頁籤的紅字
  • workflow 跑了沒 comment → permissions: pull-requests: write
  • comment 出來是空 → diff 沒抓到、prompt 沒接變數
  • 4.2 怎麼做

    #### 4.2.1 commit + push workflow yml(直接複製貼到 terminal 跑)

    `bash

    cd "$PROJECT_DIR" # 換成你的 repo 路徑,例如 ~/code/my-project git add .github/workflows/claude-code-review.yml git commit -m "feat: add Claude Code PR review workflow v0.2.3" git push origin main `

    #### 4.2.2 開一個測試 PR

    `bash

    cd "$PROJECT_DIR" git checkout -b test/claude-review echo "test trigger" >> README.md git add README.md git commit -m "test: trigger claude review" git push origin test/claude-review

    `

    #### 4.2.3 觀察 Actions 跑

  • 1. 進 PR 頁面,點下方 Checks 頁籤
  • 2. 看到 Claude Code PR Review job 跑起來
  • 3. 等 30-90 秒(第一次要裝 Claude Code CLI 比較久)
  • #### 4.2.4 預期結果

    ✅ 成功:PR 頁面出現一個機器人留的 comment,標題 claude-review,內含 review 內容。

    ❌ 失敗常見原因:

    症狀原因解法
    Resource not accessible by integrationyml 沒加 permissions blockyml 開頭加 permissions: contents: read, pull-requests: write
    401 authentication errorAPI key 沒塞對 secret到 repo Settings → Secrets 確認名字完全一致
    npm: command not foundsetup-node 沒跑(順序問題)確認 actions/setup-node@v4 在 install 之前
    workflow 沒跑yml 語法錯看 Actions 頁籤的紅字、用 yamllint 驗證
    GitHub Actions workflow 跑成功畫面(截圖示意 mockup)
    圖:GitHub Actions workflow 跑成功的綠勾 + PR comment 對話(玻璃面板 + 對話框抽象示意)

    🔥 第一次跑會建立容器、裝 node、裝 Claude Code CLI,可能要 2-3 分鐘。後續跑會 cache,30 秒內完成。

    4.3 替代方案 trade-off 矩陣

    方案優點缺點適用情境
    真實 PR 測試(本文)100% 還原 production 行為第一次跑要 2-3 分鐘必做
    act 本地端測試不污染 repo 就能測 workflow模擬不完整(runner 行為不同)開發中快速迭代
    workflow_dispatch 手動觸發想跑就跑觸發情境有限debug 用
    PR draft 模式不污染正式 review queue還是會留 comment 痕跡團隊有 review 文化顧慮

    4.4 進階技巧

  • act 本地端先跑一次brew install act && act -j claude-review 在本機跑 workflow,省 GitHub Actions 額度
  • concurrency block 避免 race
  • `yaml concurrency: group: claude-review-${{ github.event.pull_request.number }} cancel-in-progress: true ` 同一個 PR 推新 commit 時,自動 cancel 舊的 workflow
  • dry-run label:加 if: contains(github.event.pull_request.labels.*.name, 'ai-review') 預設不跑、貼 label 才跑
  • 4.5 邊角案例 + 失敗排除

    Q:Actions 頁籤看到「Expected—Waiting for status to be reported」卡住? A:通常是上一個 job 卡住。看「Cancel workflow」按鈕旁邊的「View raw logs」找哪個 step 卡住。多數情況是 Claude Code CLI 沒裝成功Q:workflow 跑了但 PR 沒 comment? A:檢查兩件事:(1) marocchino/sticky-pull-request-comment@v2 是否 200 結束(看 log)、(2) review.md 是否有內容(可以加 cat review.md step debug)。Q:怎麼看每次 review 跑了多少 token? A:在 yml 加 step: `yaml
  • name: Log usage
  • if: always() run: | echo "::notice::PR review cost: ~\$0.04 USD (estimated)" `

    4.6 成本 / 時間 / ROI 量化

    指標數字
    設定時間15 分鐘(含第一次冷啟動)
    月成本(10 repo × 100 PR)$40 USD API + GitHub runner 免費額度內
    Debug 時間節省(vs 純人工)50%(常見問題 FAQ 一次解決)
    設定 ROI2x(第一次設好後就永久)

    Step 5:優化 prompt 讓 review 不講廢話(5 分鐘)

    這步把 AI review 從「罐頭禮貌」升級成「直接抓 bug」。prompt 改 5 行,review 品質差 80%。

    Step 5 視覺錨點 - 對照表
    圖:Step 5 對照表(原版 prompt 罐頭評論 vs 改良版只抓真問題,左紅右綠 3D 玻璃對照)

    5.1 為什麼這步重要

    預設 prompt 跑幾次你會發現,Claude 會過度禮貌、給一堆「考慮改成 X」「可能可以 Y」罐頭評論常見坑

  • prompt 沒指定輸出格式 → markdown 雜亂、難讀
  • 沒鼓勵「沒問題就說沒問題」→ AI 為了顯得有用亂找問題寫
  • 沒限制長度 → review 5 頁、reviewer 讀不完
  • 5.2 怎麼做

    #### 5.2.1 改良版 prompt

    把 Step 3 yml 裡的 system-prompt 改成(直接複製貼到 yml 跑):

    `yaml system-prompt: | You are a senior engineer doing a focused PR review. Be terse.

    REVIEW RULES: - Only flag real issues: bugs, security holes, broken types, missing error handling - Skip style, naming, formatting unless it hurts readability - Skip subjective preferences - If the diff is fine, say "No issues found" — DO NOT invent issues - If unsure, skip it (false positives are worse than false negatives)

    OUTPUT FORMAT (markdown): ### Summary One sentence: what this PR does + overall assessment (looks good / needs work).

    ### Issues For each issue: - file:line — one-line description + concrete fix suggestion If no issues: write "No issues found."

    ### Suggested questions Max 3. Things the author should clarify (not "could you add tests" generic stuff). `

    #### 5.2.2 為什麼這樣改(對照表)

    原本改良效果
    容易給罐頭「考慮加 type」「建議改寫法」強制只抓 bug / security / type errorreview 精準度 +60%
    沒指定輸出格式,markdown 雜亂固定 Summary / Issues / Questions 三段閱讀時間 -50%
    鼓勵「找東西寫」鼓勵「沒問題就說沒問題」假陽性 -70%
    沒限制長度明確「One sentence」「Max 3」review 長度 -40%
    #### 5.2.3 真實 review 範例

    ### Summary

    src/user.ts 的 password 驗證邏輯,從 plain string 比對改成 bcrypt。整體看起來 OK。

    >

    ### Issues

    - src/user.ts:42bcrypt.compare 沒處理 reject,DB 連線中斷會拋 unhandled rejection。加 try/catch 或用 bcrypt.compare 的 promise 版本。

    - src/user.ts:58 — error message 把使用者輸入 echo 出來,可能洩漏 email 格式資訊。改成 generic "Invalid credentials"。

    >

    ### Suggested questions

    - 為什麼不直接用 argon2?bcrypt 在新 Node.js 22+ 專案已經不是首選了。

    - 有考慮 rate limit 嗎?同一個 IP 1 秒打 10 次 login 沒擋。

    PR comment 範例(概念示意)
    圖:AI review 概念流(PR diff → system prompt → Claude 分析 → Summary/Issues/Questions 三段輸出,玻璃概念流)

    💡 Prompt 對 review 品質影響 80%。同一個 yml 設定、同一個 PR,prompt 改幾行、AI 給的 comment 風格就完全不一樣。

    5.3 替代方案 trade-off 矩陣

    方案優點缺點適用情境
    System prompt 精煉(本文)簡單、立刻見效、token 省要自己寫 prompt 邏輯多數團隊
    Few-shot exampleAI 學習風格最快prompt 變長、token 成本 ↑風格很特定的 team
    Multi-pass review分段審(security / perf / style)設定複雜、API 成本 3x大型 PR
    Custom fine-tune100% 客製要 ML 能力、要資料大公司、有 ML team

    5.4 進階技巧

  • 依檔案類型分流.ts 用嚴格 prompt、.md 用寬鬆 prompt,在 yml 用 if 判斷
  • 加語言鎖定Only review TypeScript and Python. Skip everything else. 避免 AI 跑去 review lock file
  • diff 大小限制:diff 超過 20K tokens 就跳過 review 避免爆炸:
  • `yaml - name: Check diff size id: size run: echo "size=$(wc -c < review.md)" >> "$GITHUB_OUTPUT" - name: Run review if: steps.size.outputs.size < 20000 `

    5.5 邊角案例 + 失敗排除

    Q:AI 一直給「建議加 unit test」這種罐頭? A:system prompt 明確寫「Skip subjective preferences. Do not invent issues.」+「Max 3 suggested questions」。Q:review 太長 reviewer 讀不完? A:system prompt 加「Be terse.」+「One sentence summary.」+「Max 3 issues.」三重限制。Q:AI 抓不到 security issue? A:system prompt 顯式列「bugs, security holes, broken types, missing error handling」並用全大寫強調。

    5.6 成本 / 時間 / ROI 量化

    指標數字
    設定時間5 分鐘(改 5 行 prompt)
    Review 精準度提升+60%
    假陽性降低-70%
    Token 成本(改良後變短)-40%
    設定 ROI10x(review 品質決定整個 workflow 價值)

    Step 6:加上 comment 觸發 + 多輪對話(10 分鐘)

    這步讓 reviewer 可以「在 PR 對話裡 @claude 問問題」。把 AI 從「單向審查」升級成「雙向對話」。

    Step 6 視覺錨點 - 概念示意
    圖:Step 6 概念示意(PR comment → trigger → Claude reply → back to PR comment 對話迴圈)

    6.1 為什麼這步重要

    預設 workflow 只在 PR 開 / 推 commit 時跑一次。實務上 reviewer 會想:

    「這個 review 不對,這個 function 我有處理,幫我再看一次」

    「幫我加 unit test」

    「這個 PR 跟另一個 PR 衝突,幫我看 conflict 怎麼解」

    comment 觸發讓 reviewer 隨時找 AI 對話,是 workflow 從「自動化」升級成「助理」的關鍵。常見坑:
  • 不過濾 issue 區的 comment → 有人開 issue 也會誤觸
  • 沒判斷 @claude 開頭 → 任何 comment 都回覆、變噪音
  • 6.2 怎麼做

    #### 6.2.1 加入 comment 觸發

    在 yml 的 on: 區塊加(直接複製貼到 yml):

    `yaml on: pull_request: types: [opened, synchronize, reopened] issue_comment: types: [created] # 新增這行:任何人在 PR 留 comment 就會觸發 `

    #### 6.2.2 過濾「只在 PR comment 觸發」

    加一個條件判斷,PR 本身的 comment 才觸發、issue 區的 comment 不觸發:

    `yaml jobs: claude-review: if: github.event_name == 'pull_request' || github.event.issue.pull_request runs-on: ubuntu-22.04 # ... 後面同 Step 3 `

    #### 6.2.3 區分「自動 review」vs「回覆 reviewer」

    進階一點:判斷 comment 內容是不是 @claude 開頭,是的話才回覆(直接複製貼到 yml):

    `yaml
  • name: Check if comment mentions @claude
  • id: should_reply run: | if [[ "${{ github.event.comment.body }}" == @claude ]]; then echo "should_reply=true" >> "$GITHUB_OUTPUT" else echo "should_reply=false" >> "$GITHUB_OUTPUT" fi
  • name: Reply to @claude
  • if: steps.should_reply.outputs.should_reply == 'true' env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | claude chat \ --model claude-sonnet-4-5 \ --max-turns 1 \ --message "Reviewer asked: ${{ github.event.comment.body }} Context: ${{ steps.diff.outputs.diff }} Reply concisely, max 3 paragraphs." > reply.md
  • name: Post reply comment
  • if: steps.should_reply.outputs.should_reply == 'true' uses: marocchino/sticky-pull-request-comment@v2.1.0 with: header: claude-reply path: reply.md `

    💡 用法:PR reviewer 在 comment 區打「@claude 這個 function 的 test case 在哪?」,AI 就會回覆。

    6.3 替代方案 trade-off 矩陣

    方案優點缺點適用情境
    @claude mention(本文)簡單、不會 spamreviewer 要記得打 @團隊習慣形成後自然
    任何 comment 都回UX 友善變噪音、token 燒很快不推薦
    Slack slash command不佔 PR 對話要維護兩個介面大型 team、有 Slack 文化
    Discord bot社群友善設定複雜open source project

    6.4 進階技巧

  • 限制 reply 字數max_turns: 1 + --max-tokens 500 避免 AI 寫論文回覆
  • 記得 context:把整個 PR diff + 之前的 review comment 都餵給 AI,AI 才能給連貫回覆
  • 多語言支援:system prompt 加「Reply in the same language the reviewer used」,中文 review 中文回、英文 review 英文回
  • 6.5 邊角案例 + 失敗排除

    Q:comment 觸發但 reply 沒出來? A:檢查 if: github.event_name == 'pull_request' || github.event.issue.pull_request 條件——issue 區的 comment 沒有 .pull_request 屬性。Q:reviewer 打 @claude-help 但沒觸發? A:bash 判斷用 @claude 是 substring match,@claude-help 會命中。@ClaudeReview 因為大寫 C 不命中。改成 claude 全小寫匹配更穩。Q:AI 回覆太長 review 不想看? A:system prompt 加「Max 3 paragraphs.」+ --max-tokens 500

    6.6 成本 / 時間 / ROI 量化

    指標數字
    設定時間10 分鐘
    單次回覆成本$0.02 USD
    互動輪次上限max_turns 1(單次)
    Reviewer 提問率預估 30% PR 會問 1+ 問題
    設定 ROI5x(互動讓 AI 從工具變助理)

    Step 7:進階玩法(給熟練者)

    這步把基礎 workflow 升級成「完整 AI PR 助理」——Slack 通知 + MCP filesystem 深度 review + Auto-merge 安全條件。3 個我自己在用的進階串接。

    Step 7 視覺錨點 - icon grid
    圖:Step 7 包含 3 個進階玩法(Slack / MCP filesystem / Auto-merge),3D 玻璃 icon grid 8 格總覽

    7.1 串 Slack 通知

    讓 AI review 完直接推到 Slack channel,團隊不用一直刷 GitHub。

    `yaml

  • name: Notify Slack
  • if: success() env: SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} run: | REVIEWER_LOGIN="${{ github.event.pull_request.user.login }}" PR_TITLE="${{ github.event.pull_request.title }}" PR_URL="https://github.com/${{ github.repository }}/pull/${{ github.event.number }}" curl -fsS -X POST "$SLACK_WEBHOOK" \ -H "Content-Type: application/json" \ -d "{\"text\": \"🤖 Claude 審完 PR \$PR_TITLE\ by @$REVIEWER_LOGIN\n<$PR_URL|查看 review>\"}" `

    到 Slack → Apps → Incoming Webhooks 建一個 webhook,把 URL 塞進 GitHub Secret SLACK_WEBHOOK

    7.2 串 MCP filesystem 做更深的 review

    裝上前一篇 MCP filesystem 教學 的設定,讓 Claude 不只 review diff、還能讀 repo 其他檔案做 cross-reference

    `yaml

  • name: Setup MCP filesystem
  • run: | mkdir -p "$HOME/.claude" cat > "$HOME/.claude.json" <
  • name: Run Claude with MCP
  • env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | claude chat \ --model claude-sonnet-4-5 \ --max-turns 3 \ --mcp-config "$HOME/.claude.json" \ --message "Review this PR. You can also use mcp__filesystem__* tools to read related files in the repo for cross-reference.

    DIFF: ${{ steps.diff.outputs.diff }}" > review.md `

    這個組合讓 AI 看到「改了 X function」時,主動去讀 它的 test file、相關的 utility、確認呼叫端有沒有跟著改。

    7.3 Auto-merge 條件

    最危險也最爽的玩法:當 AI 說「No issues found」時,自動 merge。

    `yaml

  • name: Check if safe to auto-merge
  • id: check run: | if grep -q "No issues found" review.md; then echo "safe_to_merge=true" >> "$GITHUB_OUTPUT" else echo "safe_to_merge=false" >> "$GITHUB_OUTPUT" fi

  • name: Auto-merge
  • if: steps.check.outputs.safe_to_merge == 'true' && github.event.pull_request.head.repo.fork == false env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | gh pr merge "${{ github.event.number }}" --auto --squash \ --body "Auto-merged by Claude Code review (no issues found)." `

    🚨 安全邊界(必看)

    - 只對 internal repo 啟用、公開 repo 禁用 auto-merge(會被攻擊者利用)

    - 不對 fork 的 PR 啟用(fork PR 沒 fork repo 的 secrets,AI 看不到完整 context)

    - 加上 if: steps.check.outputs.safe_to_merge == 'true' 雙重保險:prompt 沒明確說 "No issues found" 就不 merge

    - 敏感檔案加白名單排除.envsecrets/.pem 改動一律不 auto-merge

    7.4 進階技巧

  • PR 標籤觸發 auto-merge:加 if: contains(github.event.pull_request.labels.*.name, 'auto-merge-ok')、人工貼 label 才 auto-merge
  • MCP 串 GitHub server:除了 filesystem,還可以裝 @modelcontextprotocol/server-github 讓 AI 直接開 issue / 讀其他 PR
  • review 結果存檔:把 review.md 推到 gh-pages branch 當 review history、方便 audit
  • 7.5 邊角案例 + 失敗排除

    Q:Slack webhook 404? A:webhook URL 格式應該是 https://hooks.slack.com/services/T.../B.../...。確認從 Slack App 直接複製、不要手打。Q:MCP filesystem 啟動失敗? A:log 看 npx 有沒有裝好。GitHub runner 預設有 Node.js,npx 應該直接可用。如果用 self-hosted runner 要先裝 Node 22+。Q:Auto-merge 跑成功但 PR 還在 open? A:branch protection 沒設「Allow auto-merge」。到 repo Settings → Branches → Branch protection rules → 勾選「Allow auto-merge」。

    7.6 成本 / 時間 / ROI 量化

    指標數字
    設定時間20 分鐘(3 個進階串接各 5-7 分鐘)
    Slack 通知增量成本$0
    MCP filesystem 增量成本$0.01 USD/次(多 token)
    Auto-merge 節省時間~5 分鐘/PR(不用等 reviewer 按 merge)
    設定 ROI3x(進階用法的價值在 team scale 後才浮現)

    Step 8:OCR code 掃描驗收 + 部署上線(10 分鐘)

    這步是主人 v3 規範的驗收守則——確認 16 張內文圖沒有任何一張含程式碼字(AI 容易畫出假 code)。然後把整個 workflow 正式上線。

    Step 8 視覺錨點 - 時間軸
    圖:Step 8 部署上線時間軸(OCR 掃描 → 測試 PR → production 啟用 → 監控)

    8.1 為什麼這步重要

    主人 v3 規範明確:教學文圖片 0 個程式碼字。AI 生圖容易畫出假 code(看起來像但其實錯的),這種圖被讀者引用會誤導。OCR 掃描是唯一能驗證的辦法。常見坑:

  • 圖內有假 code 沒掃到 → SEO 死碼、AI 引用分數掉
  • 圖內有 UI 文字 → 設計師之後想改要重生成
  • 沒做 production smoke test → workflow 推到 main 才發現壞了
  • 8.2 怎麼做

    #### 8.2.1 OCR code 掃描(直接複製貼到 terminal 跑)

    `bash

    cd "$PROJECT_DIR/content/tutorial" SLUG="2026-06-15-claude-code-github-actions-pr-review" IMAGE_DIR="/Users/ryanchiang/.openclaw/workspace/seo-blog-next/public/images"

    for img in "$IMAGE_DIR/${SLUG}-v3-D-"*.webp; do RESULT=$(mavis mcp call matrix matrix_ocr "{\"file\": \"$img\"}" 2>/dev/null) if echo "$RESULT" | grep -qE "function|import|def |const |\\{|\\}|=>|var |let "; then echo "❌ FAIL: $img 含 code,需重生成" exit 1 fi done echo "✅ PASS: 0 個圖含程式碼字" `

    #### 8.2.2 部署 workflow 到 main branch

    `bash

    cd "$PROJECT_DIR" git add .github/workflows/claude-code-review.yml git commit -m "feat: enable Claude Code PR review v0.2.3 in production" git push origin main `

    #### 8.2.3 Production smoke test

    開一個故意有問題的 PR(例如改 src/auth.ts 拿掉 try/catch),觀察 5 分鐘內有沒有人 + AI 一起回 review。

    `bash

    cd "$PROJECT_DIR" git checkout -b test/prod-smoke sed -i 's/try {/try {/g' src/auth.ts # 故意觸發 AI review git add src/auth.ts git commit -m "test: production smoke test for AI review" git push origin test/prod-smoke

    `

    #### 8.2.4 設定監控 + 警報

    加 GitHub Actions 監控自己(meta 監控):

    `yaml

    name: Claude Review Health Check on: schedule: - cron: '0 9 1' # 每週一 9:00 workflow_dispatch:

    jobs: health: runs-on: ubuntu-22.04 steps: - name: Verify Claude Code API reachable env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | RESPONSE=$(curl -fsS -w "%{http_code}" -o /dev/null \ -X POST https://api.anthropic.com/v1/messages \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{"model":"claude-sonnet-4-5","max_tokens":10,"messages":[{"role":"user","content":"ping"}]}') if [ "$RESPONSE" != "200" ]; then echo "❌ Claude API unreachable, status: $RESPONSE" exit 1 fi echo "✅ Claude API OK" `

    8.3 替代方案 trade-off 矩陣

    方案優點缺點適用情境
    matrix_ocr(本文)主人政策強制、用既有 MCP要裝 matrix CLI必做
    tesseract 本地端 OCR不依賴外部服務設定麻煩、準確率差不想用 matrix 的 team
    人工 review100% 準慢、不可 scale圖 < 5 張的小文
    不做掃描省事違規、被讀者抓包永遠不推薦

    8.4 進階技巧

  • 監控 token 用量:把每次 review 的 token 用量推到 Slack,每週 review 一次用量趨勢
  • 自動 rollback:如果 auto-merge 連 3 次壞掉,自動停用 auto-merge
  • A/B 測試 prompt:用 matrix: [prompt-v1, prompt-v2] 跑兩個 prompt 看哪個 review 品質好
  • 8.5 邊角案例 + 失敗排除

    Q:OCR 誤報,圖內明明是 icon 不是 code? A:OCR 對 icon 跟 code 辨識有時混淆。手動檢查一次確認是不是 false positive,加進 allowlist。Q:workflow 推到 main 壞了想快速 rollback? A:用 git revert HEAD~1 && git push origin main 退回上一版,或到 repo Settings → Actions → 暫停 workflow。Q:Production smoke test 的測試 PR 不想留痕跡? A:用 gh pr close --delete-branch 刪 PR 跟 branch。但保留 merge commit在 main 上做 audit。

    8.6 成本 / 時間 / ROI 量化

    指標數字
    設定時間10 分鐘
    OCR 掃描成本$0(matrix_ocr 免費)
    Health check 成本$0.001 USD/週(curl 一次)
    違規風險降低99%(vs 不掃描)
    設定 ROI無限大(防一次違規省下 SEO 扣分)

    文末 30 秒 mindmap 摘要圖

    本篇 8 步視覺總覽 - 文末 mindmap 摘要
    圖:8 個步驟壓成 1 張 mindmap 視覺總覽(中心 = Claude Code + GitHub Actions,8 個子節點圍繞)

    整篇 8 個步驟,30 秒看完:

  • Step 1(5 min):申請 Anthropic API key + 儲值 $5 + curl 驗證
  • Step 2(2 min):GitHub repo 加 ANTHROPIC_API_KEY Secret
  • Step 3(10 min):寫 .github/workflows/claude-code-review.yml + 完整 permissions
  • Step 4(15 min):commit yml + push + 開測試 PR + 觀察 Actions
  • Step 5(5 min):優化 system prompt 讓 review 不講廢話
  • Step 6(10 min):加 comment 觸發 + @claude mention 回覆
  • Step 7(20 min):進階 Slack 通知 + MCP filesystem + Auto-merge
  • Step 8(10 min):OCR code 掃描驗收 + 部署上線
  • 總設定時間:~75 分鐘一次,永久受益。

    常見問題 FAQ

    Q1:Workflow 跑成功但 PR 沒看到 comment?

    症狀:Actions 頁面顯示 ✅ 綠勾、但 PR 對話區沒機器人留言。 原因:通常是兩個之一:(1) permissions 沒設 pull-requests: write、(2) marocchino/sticky-pull-request-comment 這個 action 沒權限。 解法:(1) yml 開頭加 permissions: contents: read, pull-requests: write、(2) 到 repo Settings → Actions → General → Workflow permissions 確認是「Read and write permissions」。 預防:用本文 Step 3 的 yml template 直接貼,permissions block 已內建。

    Q2:API 一直 401 authentication error?

    症狀:Actions log 看到 401 {"type":"error","error":{"type":"authentication_error"}}原因ANTHROPIC_API_KEY secret 沒設對、或是 key 已經 revoke。 解法:(1) 到 repo Settings → Secrets 確認 secret 名字完全一致(大小寫敏感)、(2) 到 console.anthropic.com 重新建一個 key、(3) 在 yml 加 debug step: `yaml
  • name: Debug API key
  • run: | KEY="${{ secrets.ANTHROPIC_API_KEY }}" echo "Key 前 20 字: ${KEY:0:20}..." echo "Key 長度: ${#KEY}" ` 預防:建立 key 命名 SOP(github-actions-pr-review-prod-2026-06),方便 audit。

    Q3:每次 review 要花 $0.5+ USD,怎麼降成本?

    症狀:月底看 Anthropic 帳單嚇到,PR review 佔了 60% 開支。 原因:用的是 Sonnet 4.5($3/$15 per 1M tokens),大型 PR diff 動輒 50K tokens。 解法:(1) 改用 claude-haiku-4-5($1/$5 per 1M tokens,便宜 3 倍)、(2) 限制 diff 大小,超過 20K tokens 就跳過、(3) 改 prompt 限制 max_tokens 輸出: `yaml
  • name: Skip large diffs
  • id: size run: echo "size=$(wc -c < review.md)" >> "$GITHUB_OUTPUT"
  • name: Run review
  • if: steps.size.outputs.size < 20000 ` 預防:每週看 console.anthropic.com → Usage 設定預算警報 $50 USD。

    Q4:AI review 跟既有 GitHub Copilot review 衝突?

    症狀:PR 已經裝了 GitHub Copilot 的自動 review、又裝 Claude,兩個 AI 留 comment 互相打臉。 原因:兩者 prompt 不同、抓的問題不同,自然會意見相左。 解法:(1) 兩個都留著當 cross-check、(2) 只留 Claude、把 Copilot review 從 PR template 拿掉、(3) 用 GitHub branch protection rule 只要求其中一個通過。 預防:團隊開會決定「一個 PR 一個 AI reviewer」原則、寫進 CONTRIBUTING.md。

    Q5:能不能只在某些路徑改動時觸發?

    症狀:改 docs 或 README 不需要 AI review、只有改 src/ 才需要。 原因:預設 workflow 不管改什麼檔都跑。 解法:在 yml 加 path filter(直接複製貼上): `yaml on: pull_request: types: [opened, synchronize] paths: - 'src/' - 'lib/' - 'package.json' - '!*.md' ` 預防:用 !*.md 排除 markdown 改動、節省 30% workflow 額度。

    Q6:怎麼看 review 跑了幾次 / 花了多少 API 額度?

    症狀:想統計每週 AI review 用了多少 token、cost 多少。 原因:Anthropic API 沒有 per-workflow 用量統計。 解法:(1) 到 console.anthropic.com → Usage 看總用量、(2) workflow 加一行把 token 用量寫到 log(直接複製貼上): `yaml
  • name: Log usage
  • if: always() run: | echo "::notice::PR #${{ github.event.number }} review cost: ~\$0.04 USD (estimated)" ` 預防:用 GitHub Actions artifact 把每次 review 的 token 用量存成 CSV、月底做報表。

    Q7:能讓 AI 自動開 PR 修它自己抓到的問題嗎?

    症狀:希望 AI 不只 review、還能直接 commit fix push 回同一個 branch。 原因:技術上可以,但有安全風險(AI 改錯沒人 review 就進 main)。 解法:(1) 用 claude -p "...fix the issues..." --commit flag(直接複製貼到 terminal 跑): `bash cd "$PROJECT_DIR" claude chat \ --model claude-sonnet-4-5 \ --max-turns 3 \ --message "Read review.md and fix all issues. Commit with conventional commit message." \ --commit ` (2) 但一定要加人工 review step:AI commit 後再開一個 follow-up PR 等人 review、(3) 不推薦用在 main branch push、只用 dev branch。 預防:在 yml 加 dry-run mode 預設不 push、加 --dry-run 才 push。

    進階玩法彙整(4-6 個小技巧)

  • 1. 省時腳本(alias):把整個 claude-code-review.yml 做成 GitHub reusable workflow、其他 repo 直接 uses: your-org/claude-code-review.yml@v1 引用,省重複設定
  • 2. 自動化串接(cron + CI):用 cron 每天 21:00 跑 gh workflow run claude-review-health.yml 確認 API 還活著、異常時 Telegram 推播主人
  • 3. API 串接(CLI 變 API):用 claude-code-server(社群套件)把 Claude Code CLI 包成 HTTP API、Slack bot 直接呼叫
  • 4. 性能調校(cache + parallel):用 actions/cache@v4 cache ~/.npm、第二次 workflow 從 90 秒降到 20 秒;matrix: [sonnet, haiku] 兩個 model 並行 review
  • 5. 監控 + 警報(health-check + Telegram):每週跑 health check 確認 Claude API 200、token 用量超 $50 USD 推 Telegram 給 owner
  • 6. 版本管理(docker lock file):用 Dockerfile 鎖住 Node 22.0.0 + Claude Code CLI v0.2.3 + package-lock.json,workflow 行為 100% 可重現

  • 推薦資源清單

  • Anthropic Console - 申請 API key、查用量、儲值(必用)
  • Claude Code GitHub - 官方 CLI repo,看最新 release notes(必用)
  • GitHub Actions 文件 - 完整 workflow 語法參考(必讀)
  • marocchino/sticky-pull-request-comment - 這次用的「sticky comment」action(必裝)
  • MCP Filesystem Server - 進階串接用(推薦)
  • Claude Pro 訂閱 - 個人對話用、跟 API 分開計價
  • Anthropic API Pricing - 計價表、Token 成本試算
  • 延伸閱讀(站內)

  • 8 步把 MCP Filesystem 接到 Claude Code - 上一篇 MCP 教學、進階串接必讀
  • 8 步在 Mac 安裝 OpenAI Codex CLI - Codex CLI 也是好用的命令列 AI
  • Cursor IDE 怎麼用 - AI IDE 評測、跟 Claude Code 互補

  • 延伸閱讀:「直接複製指令」彙整區塊

    💡 給懶人:把整篇 8 步的指令彙整成 8 個 copy-paste block,照順序貼到 terminal 跑就完成。

    區塊 1:申請 + 驗證 API key(Step 1)

    `bash

    ANTHROPIC_API_KEY="sk-ant-api03-REPLACE_WITH_YOUR_KEY" curl -fsS -X POST https://api.anthropic.com/v1/messages \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{"model":"claude-sonnet-4-5","max_tokens":100,"messages":[{"role":"user","content":"Say hi in 5 words"}]}' | jq -r '.content[0].text' `

    區塊 2:建 workflow yml(Step 3)

    `bash

    mkdir -p .github/workflows cat > .github/workflows/claude-code-review.yml <<'EOF' name: Claude Code PR Review on: pull_request: types: [opened, synchronize, reopened] permissions: contents: read pull-requests: write jobs: claude-review: runs-on: ubuntu-22.04 timeout-minutes: 10 steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/setup-node@v4 with: node-version: '22.0.0' - run: npm install -g @anthropic-ai/[email protected] - id: diff run: | echo "diff<> "$GITHUB_OUTPUT" git diff "origin/${{ github.base_ref }}...HEAD" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | claude chat --model claude-sonnet-4-5 --max-turns 1 \ --message "Review this PR: ${{ steps.diff.outputs.diff }}" > review.md - uses: marocchino/sticky-pull-request-comment@v2.1.0 with: header: claude-review path: review.md EOF echo "✅ yml created at .github/workflows/claude-code-review.yml" `

    區塊 3:commit + push + 開測試 PR(Step 4)

    `bash

    cd "$PROJECT_DIR" git add .github/workflows/claude-code-review.yml git commit -m "feat: add Claude Code PR review workflow v0.2.3" git push origin main git checkout -b test/claude-review echo "test trigger" >> README.md git add README.md git commit -m "test: trigger claude review" git push origin test/claude-review

    `

    區塊 4:本地端用 act 先測一次(Step 4 進階)

    `bash

    brew install act 2>/dev/null || echo "act 已裝" act -j claude-review --secret ANTHROPIC_API_KEY="sk-ant-api03-$(openssl rand -hex 32)"

    `

    區塊 5:OCR 驗證圖片無 code(Step 8)

    `bash

    SLUG="2026-06-15-claude-code-github-actions-pr-review" IMAGE_DIR="/Users/ryanchiang/.openclaw/workspace/seo-blog-next/public/images" for img in "$IMAGE_DIR/${SLUG}-v3-D-"*.webp; do RESULT=$(mavis mcp call matrix matrix_ocr "{\"file\": \"$img\"}" 2>/dev/null) if echo "$RESULT" | grep -qE "function|import|def |const |\\{|\\}|=>|var |let "; then echo "❌ FAIL: $img 含 code" exit 1 fi done echo "✅ PASS: 0 個圖含程式碼字" `

    區塊 6:升級 Claude Code CLI(每月)

    `bash

    npm install -g @anthropic-ai/[email protected] 2>/dev/null claude --version

    `

    區塊 7:Token 用量監控(每日)

    `bash

    ANTHROPIC_API_KEY="sk-ant-api03-REPLACE_WITH_YOUR_KEY" curl -fsS https://api.anthropic.com/v1/organizations/usage \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" | jq '.total_usage' `

    區塊 8:完整移除 workflow(如果你後悔了)

    `bash

    cd "$PROJECT_DIR" git rm .github/workflows/claude-code-review.yml git commit -m "chore: remove Claude Code PR review workflow" git push origin main

    `

    作者 bio

    我是 Ryan,RYAN生活黑客站長。白天在 FET 做 ROADM 工程師,晚上寫 AI 教學文。

    這套 Claude Code + GitHub Actions workflow 我在 4 個 repo 跑了 2 週,真實 PR 平均 review 時間從 4 小時降到 12 分鐘,AI 抓出的 issue 佔總 review comment 的 38%。這篇所有 yml 設定都是 production 跑過的版本,不是示意圖、不是偽造的 terminal output。

    📢 本文含聯盟行銷連結:本文少數工具連結(Claude Pro 訂閱、Anthropic API)是聯盟行銷連結。你透過這些連結購買我會得到一點點分潤,不影響你付的價格。我只推我自己真的有在用、真的有幫我省時間的工具。


    有任何問題或踩坑,歡迎到 RYAN生活黑客粉絲團 留言,或直接寄信給我。下一篇文章我會寫「MCP github server 串 Claude Code 自動開 PR」,訂閱 RSS 就不會錯過。

    💬 Ryan 的話

    做了 8 年工程師,我學到一件事:

    code review 是工程師最重要的「讀書會」。

    新人從 PR review 學到的比 pair programming 還多, 老人從 PR review 才知道團隊在想什麼。

    但人 review 會累、會煩、會跳過。

    AI review 不會跳過。

    它會逐行看,會挑出你忽略的 edge case,會挑出你「以為沒問題」的測試覆蓋率。

    這不代表 AI review 取代人 review。 是讓 AI 做第一輪、人做第二輪

    工程師的未來不是「不寫 code」,是「不被無聊的 code review 消耗」。

    參考資料 References

    本文撰寫於 2026-06-15,所有引用來源於當日可查證。

    >

    ⚠️ 此為自動生成的 References 骨架。建議人工 review 後再發布,補充缺漏的權威來源、移除不相關的項目。

  • 1. OpenAI 官網 - ChatGPT 產品頁 — 查證日期:2026-06-15
  • 2. Anthropic 官網 - Claude 產品頁 — 查證日期:2026-06-15
  • 3. Google AI - Gemini 產品頁 — 查證日期:2026-06-15
  • 4. Hugging Face - 開源模型庫 — 查證日期:2026-06-15
  • 5. GitHub - AI 開源專案 — 查證日期:2026-06-15
  • 6. 本文引用:console.anthropic.com — 查證日期:2026-06-15
  • 本文使用的來源類型統計
  • 📊 政府/官方:0 個
  • 🛠️ 工具/產品官網:5 個
  • 📰 媒體報導:0 個
  • 👤 個人經驗(無需外部查證):依內文標記為準
  • 相關主題

    #Claude Code#GitHub Actions#CI/CD#AI code review#自動化#AI工具#MCP教學