教學:打造 GitHub PR 審查代理
**問題:**你的團隊提交 PR 的速度比你審查的速度還快。PR 放了幾天等待被檢視。初級工程師合併了 Bug 因為沒有人有時間檢查。你每天早上都在補看 diff 而不是在開發。
**解決方案:**一個全天候監控你的儲存庫的 AI 代理,審查每個新 PR 的 Bug、安全問題和程式碼品質,然後發送摘要給你——讓你只花時間在真正需要人工判斷的 PR 上。
你將打造的東西:
┌───────────────────────────────────────────────────────────────────┐
│ │
│ Cron 定時器 ──▶ Hermes 代理 ──▶ GitHub API ──▶ 審查結果 │
│ (每 2 小時) + gh CLI (PR diff) 遞送 │
│ + 技能 (Telegram、│
│ + 記憶 Discord、 │
│ 本地) │
│ │
└───────────────────────────────────────────────────────────────────┘
本指南使用 cron 排程作業定期輪詢 PR——不需要伺服器或公開端點。可在 NAT 和防火牆後運作。
TIP — 想要即時審查?
如果你有公開端點可用,請參閱 使用 Webhooks 自動化 GitHub PR 評論——GitHub 在 PR 開啟或更新時會即時推送事件到 Hermes。
前置需求
- 已安裝 Hermes Agent — 請見 安裝指南
- Gateway 正在執行以使用 cron 排程作業:
hermes gateway install # 安裝為服務 # 或 hermes gateway # 在前景執行 - 已安裝並認證 GitHub CLI(
gh):# 安裝 brew install gh # macOS sudo apt install gh # Ubuntu/Debian # 認證 gh auth login - 已設定訊息傳遞(選擇性)— Telegram 或 Discord
TIP — 沒有訊息傳遞?沒問題
使用
deliver: "local"將審查結果儲存到~/.hermes/cron/output/。非常適合在設定通知之前進行測試。
步驟 1:驗證設定
確保 Hermes 可以存取 GitHub。啟動一個對話:
hermes
用一個簡單的指令測試:
執行:gh pr list --repo NousResearch/hermes-agent --state open --limit 3
你應該會看到一份開放的 PR 列表。如果這成功了,你就準備好了。
步驟 2:試試手動審查
仍然在對話中,要求 Hermes 審查一個真實的 PR:
審查這個 Pull Request。讀取 diff,檢查 Bug、安全問題
和程式碼品質。具體指出程式碼行號並引用有問題的程式碼。
執行:gh pr diff 3888 --repo NousResearch/hermes-agent
Hermes 會:
- 執行
gh pr diff取得程式碼變更 - 閱讀整個 diff
- 產生一份帶有具體發現的結構化審查
如果你對品質感到滿意,就可以開始自動化了。
步驟 3:建立審查技能
技能可以讓 Hermes 擁有一致的審查指引,並在不同的對話和 cron 排程作業中持續存在。沒有技能的話,審查品質會不穩定。
mkdir -p ~/.hermes/skills/code-review
建立 ~/.hermes/skills/code-review/SKILL.md:
---
name: code-review
description: Review pull requests for bugs, security issues, and code quality
---
# Code Review Guidelines
When reviewing a pull request:
## What to Check
1. **Bugs** — Logic errors, off-by-one, null/undefined handling
2. **Security** — Injection, auth bypass, secrets in code, SSRF
3. **Performance** — N+1 queries, unbounded loops, memory leaks
4. **Style** — Naming conventions, dead code, missing error handling
5. **Tests** — Are changes tested? Do tests cover edge cases?
## Output Format
For each finding:
- **File:Line** — exact location
- **Severity** — Critical / Warning / Suggestion
- **What's wrong** — one sentence
- **Fix** — how to fix it
## Rules
- Be specific. Quote the problematic code.
- Don't flag style nitpicks unless they affect readability.
- If the PR looks good, say so. Don't invent problems.
- End with: APPROVE / REQUEST_CHANGES / COMMENT
驗證是否載入成功——啟動 hermes,你應該會在啟動時的技能列表中看到 code-review。
步驟 4:教它你的慣例
這是讓審查者真正有用的關鍵。啟動一個對話並教 Hermes 你團隊的標準:
記住:在我們的後端儲存庫中,我們使用 Python 搭配 FastAPI。
所有端點必須有型別註解和 Pydantic 模型。
我們不允許原生 SQL——只使用 SQLAlchemy ORM。
測試檔案放在 tests/ 並必須使用 pytest fixtures。
記住:在我們的前端儲存庫中,我們使用 TypeScript 搭配 React。
不允許 `any` 型別。所有元件必須有 props 介面。
我們使用 React Query 進行資料取得,從不使用 useEffect 呼叫 API。
這些記憶會永久儲存——審查者會自動執行你的慣例,不需要每次都提醒。
步驟 5:建立自動化 Cron 排程作業
現在把所有東西串接起來。建立一個每 2 小時執行的 cron 排程作業:
hermes cron create "0 */2 * * *" \
"檢查新的開放 PR 並審查它們。
要監控的儲存庫:
- myorg/backend-api
- myorg/frontend-app
步驟:
1. 執行:gh pr list --repo REPO --state open --limit 5 --json number,title,author,createdAt
2. 對於過去 4 小時內建立或更新的每個 PR:
- 執行:gh pr diff NUMBER --repo REPO
- 使用 code-review 技能審查 diff
3. 格式化輸出為:
## PR 審查 — 今日
### [repo] #[number]: [title]
**作者:** [name] | **結論:** APPROVE/REQUEST_CHANGES/COMMENT
[findings]
如果沒有新的 PR,回覆:沒有新的 PR 需要審查。" \
--name "pr-review" \
--deliver telegram \
--skill code-review
驗證是否已排程:
hermes cron list
其他有用的排程
| 排程 | 時間 |
|---|---|
0 */2 * * * | 每 2 小時 |
0 9,13,17 * * 1-5 | 每天三次,僅工作日 |
0 9 * * 1 | 每週一早上彙整 |
30m | 每 30 分鐘(高流量儲存庫) |
步驟 6:按需執行
不想等待排程?手動觸發:
hermes cron run pr-review
或在對話中:
/cron run pr-review
進階用法
直接在 GitHub 上發佈審查
不要遞送到 Telegram,而是讓代理在 PR 上直接發佈評論:
將此加入你的 cron 提示:
審查後,發佈你的審查:
- 對於問題:gh pr review NUMBER --repo REPO --comment --body "YOUR_REVIEW"
- 對於嚴重問題:gh pr review NUMBER --repo REPO --request-changes --body "YOUR_REVIEW"
- 對於乾淨的 PR:gh pr review NUMBER --repo REPO --approve --body "Looks good"
CAUTION
確保
gh擁有帶有repo範圍的 token。審查會以gh認證的使用者身份發佈。
每週 PR 儀表板
建立一個每週一早上的所有儲存庫概覽:
hermes cron create "0 9 * * 1" \
"產生每週 PR 儀表板:
- myorg/backend-api
- myorg/frontend-app
- myorg/infra
針對每個儲存庫顯示:
1. 開放 PR 數量和最舊 PR 的時間
2. 本週已合併的 PR
3. 過期 PR(超過 5 天)
4. 沒有指派審查者的 PR
格式化為簡潔的摘要。" \
--name "weekly-dashboard" \
--deliver telegram
多儲存庫監控
透過在提示中加入更多儲存庫來擴展。代理會依序處理它們——不需要額外設定。
疑難排解
"gh: command not found"
Gateway 在精簡環境中執行。確保 gh 在系統 PATH 中並重新啟動 Gateway。
審查太過泛用
- 加入
code-review技能(步驟 3) - 透過記憶教 Hermes 你的慣例(步驟 4)
- 它對你的技術棧了解越多,審查品質就越好
Cron 排程作業沒有執行
hermes gateway status # Gateway 有在執行嗎?
hermes cron list # 排程作業有啟用嗎?
速率限制
GitHub 允許已認證使用者每小時 5,000 次 API 請求。每次 PR 審查使用約 3-5 次請求(list + diff + 選擇性評論)。即使每天審查 100 個 PR 也遠在限制之內。
下一步
- 基於 Webhook 的 PR 審查 — PR 開啟時獲得即時審查(需要公開端點)
- 每日簡報機器人 — 將 PR 審查與你的每日新聞摘要結合
- 打造外掛 — 將審查邏輯封裝為可分享的外掛
- Profile — 使用自己的記憶和設定運行專用的審查者 profile
- Fallback Providers — 確保即使某個 provider 宕機也能執行審查