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)— 极为轻量。内存主要消耗在内存缓存(默认上限 10000 entries)。若代理流量很大,请相应提高 RAM。