你的審查 skill,用在每一張 MR。

Argus 是自架的 GitLab AI 審查工具。你被指派為 reviewer 時,它用你自己的 skill 審查 MR,並以你的 GitLab 身分留下 inline 意見與總結。

開源 · MIT · Docker Compose

運作方式

不必設定 webhook。Argus 會自己找出你被指派為 reviewer 的 MR。

  1. 被指派為 reviewer

    Argus 每 30 秒向 GitLab 查詢以你為 reviewer 的開啟中 MR。想要即時?開完 MR 後呼叫 trigger API 即可。

  2. 自動審查

    Claude Code 在程式庫的 shallow clone 上唯讀執行,依你自己的審查 skill 與 diff 檢查。

  3. 留言並持續追蹤

    發現以 inline 討論加一則總結的形式、用你的名義留下。每次 push 後只重審新的變更,已修正的討論會自動 resolve。

主要功能

一個 Argus 可以服務整個團隊。每個人用自己的登入、skill 與訂閱。

  • 你的 skill,你的口吻

    每位使用者上傳自己的 SKILL.md,並自訂門檻、留言語言與模型。

  • 用你自己的 Claude 訂閱

    每人以 GitLab OAuth 登入,貼上 claude setup-token 產生的 token。用量計入自己的方案,不會動到別人的。

  • 增量重審

    只審上次審查之後的 diff。先前的發現會標示為已修正或仍存在,已修正的 inline 討論自動 resolve。

  • 由你裁決

    認為沒問題的發現,回覆 /argus accept 即可。Argus 會 resolve 並重算結論,不必重跑 AI。

  • Trigger API

    讓你的 coding agent 在開完 MR 後立刻請 Argus 審查。每位使用者有自己的 API key。

  • 選用功能

    可選擇開啟自動 approve(以你本人名義,且僅限乾淨的一輪),以及 Jira 需求背景(Server / Data Center)。

  • 審查紀錄

    依 MR 檢視每一輪的狀態、發現數與實際執行的模型。失敗的審查會自動重試。

  • 部署簡單

    單一 Node 程序、SQLite 儲存、伺服器端渲染的 Web UI。用 Docker Compose 部署。

  • 多人使用,owner 核准

    新註冊的使用者要等 owner 核准才會開始審查,不會有人收到沒要求的審查。

實際畫面

以下皆為示意,使用虛構的名稱與資料。

alice · Argus 審查,第 2 輪以 alice 的 GitLab 身分留言

結論:需要修改。仍存在 1 項、上輪至今已修正 1 項、審查者已接受 1 項。

發現

  • 仍存在minor src/auth/session.ts:58
    Session cookie 沒有設定到期時間,登入失效後仍會留著。
  • 已修正src/api/orders.ts:112
    order.items 缺少 null 檢查。討論已 resolve。
  • 已接受src/jobs/sync.ts:30
    重試迴圈沒有上限。已接受:另案追蹤於 PROJ-123。
/argus accept tracked in PROJ-123
MR 上一輪的總結示意。仍存在的項目維持可見,已修正的自動關閉,已接受的不再計入結論。
Argus 審查紀錄頁:依 MR 分組,第一組展開顯示三輪審查的狀態、模型與發現數。
審查紀錄依 MR 分組,展開即可看到各輪。
Argus 設定頁的 Claude token 卡片:狀態標籤顯示已設定,並說明 token 加密存放、只用於你自己的審查。
設定頁:每位使用者連結自己的 Claude 訂閱,儲存後不會再顯示 token。

安全設計

讀取不可信程式碼的 AI,不該拿著你的鑰匙。Argus 把兩者分開。

  • Token 不進 AIagent 只能對 shallow clone 使用 Read、Grep、Glob。你的 GitLab 與 Claude token 都不在它的上下文裡。
  • 寫入全由確定性程式碼負責留言、resolve、approve 都由一般程式碼根據 agent 輸出的結構化發現執行,不靠模型呼叫工具。
  • 預設 dry-run審查會執行並記錄,但在 owner 切換為正式模式前不會發出任何留言。
  • 加密存放儲存的 token 以 AES-256-GCM 加密。Web UI 有 CSRF token、嚴格的 content security policy,session id 只存雜湊。
  • 謹慎的自動 approve預設關閉,需自行開啟。approve 綁定被審查的那個 commit,且只會撤回 Argus 自己做的 approve。

快速開始

主機只需要 Docker 與 Compose v2。

git clone https://github.com/duedue/argus-gitlab-review.git && cd argus-gitlab-review
cp .env.example .env && chmod 600 .env
openssl rand -base64 32          # put the output in ARGUS_MASTER_KEY
$EDITOR .env                     # set BASE_URL, GITLAB_URL, ARGUS_MASTER_KEY
docker compose up -d --build

接著開啟 BASE_URL。第一次會進入 /setup,需要容器日誌中的一次性 setup code、你的 GitLab OAuth application 憑證,以及 owner 的 GitLab user id。之後用 GitLab 登入、上傳 skill、貼上你的 Claude token。結果看起來沒問題後,再到管理頁把 dry-run 切成正式模式。

完整步驟:docs/SETUP.md(英文),另有 README(英文)。

需求與限制

  • Claude 訂閱。每位使用者需要自己的訂閱。沒有 token 的使用者,審查會被略過,Argus 不會改用 owner 的訂閱。
  • GitLab OAuth application。需為 confidential,scope 為 api 與 read_repository。已在 GitLab 15.11 測試。
  • Jira 為選用,且僅支援 Server / Data Center。不支援 Jira Cloud。
  • Web UI 為繁體中文,詳細文件(docs/)為英文。留言語言可由每位使用者自行設定。
  • 採輪詢而非 webhook。約 30 秒內開始審查,使用 trigger API 則可即時。
  • 過大的 diff 不審查。Argus 會請作者拆分 MR。Draft MR 會被略過。