GitHub API 代理伺服器,將多個 PAT 集中成共享 rate-limit 配額、在記憶體快取讀取結果、寫入操作透傳 client 自己的 token — 為多 agent 場景(OpenAB、OpenClaw、自訂 coding agent)共用同一批 repo 設計。

ghpool 是一個 GitHub API 代理伺服器,專為多 agent 場景設計 — 當多個 coding agent(OpenAB bots、OpenClaw workers、自訂 agent)共用同一批 repo 時,會各自撞到 GitHub 的 per-token rate limit。
它做三件事:
Authorization header,並用那個 token 轉發,GitHub audit log 才能記錄是哪個 agent 寫的此模板將 ghpool 部署為內部專用服務:
其他服務透過以下自動暴露的環境變數連線:
| 變數 | 值 |
|---|---|
GHPOOL_HOSTNAME | 容器主機名稱(例如 ghpool.zeabur.internal) |
GHPOOL_BASE_URL | 完整 base URL(例如 http://ghpool.zeabur.internal:8080) |
將 coding agent 或 gh CLI 的 GitHub API base URL 指向 ghpool:
export GITHUB_API_URL=${GHPOOL_BASE_URL}
export GITHUB_GRAPHQL_URL=${GHPOOL_BASE_URL}/graphql
需要身份歸屬的寫入操作,agent 依然使用自己的 GH_TOKEN / GITHUB_TOKEN — ghpool 只攔截網路路徑,不接管憑證。
模板僅初始化一個 PAT(GHPOOL_PAT_DEFAULT)。新增方式:
GHPOOL_PAT_<ID> 的環境變數(例如 GHPOOL_PAT_BOT_CLAUDE、GHPOOL_PAT_BOT_CODEX),值填入該 PAT — <ID> 會成為 /stats 顯示的身份名稱任何符合 GHPOOL_PAT_* 前綴的環境變數都會被自動識別。
| 路徑 | 用途 |
|---|---|
GET /<github-api-path> | 代理 GitHub REST API GET(合池+快取) |
POST /graphql | GraphQL — query 合池+快取、mutation 帶 client 自己的 auth 透傳 |
GET /healthz | 健康檢查 |
GET /stats | 池子的剩餘配額、快取命中率、各身份統計 |
GHPOOL_ALLOWED_OWNERS 嚴格生效:不在清單中的 org/user 請求一律 403,即使 PAT 外洩也只暴露明確列出的 repoAuthorization header(沒帶就 401),代理不能被當匿名寫入閘道濫用ghpool 是單一 Rust binary(distroless image)— 極為輕量。記憶體主要消耗在 in-memory 快取(預設上限 10000 entries)。若代理流量很大,請相應提高 RAM。