複数の PAT をプールして rate-limit 予算を共有し、読み取りレスポンスをメモリにキャッシュし、書き込み操作はクライアント自身のトークンでパススルーする GitHub API プロキシ。マルチエージェント環境(OpenAB、OpenClaw、カスタム coding agent)が同じリポジトリを共有する場合のために設計。

ghpool は、複数の coding agent(OpenAB bots、OpenClaw workers、カスタム agent)が同じリポジトリを共有して GitHub のトークン毎の rate limit を消費する状況のために設計された GitHub API プロキシです。
3 つのことをします:
Authorization ヘッダーが必要で、そのトークンで転送されるため、GitHub の監査ログには誰が書き込んだか記録されますこのテンプレートは ghpool を内部専用サービスとしてデプロイします:
他のサービスは以下の自動公開される環境変数で接続できます:
| 変数 | 値 |
|---|---|
GHPOOL_HOSTNAME | コンテナホスト名(例: ghpool.zeabur.internal) |
GHPOOL_BASE_URL | フルベース 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 はネットワークパスのみを傍受し、認証情報を引き継ぎません。
テンプレートは 1 つの 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 はクライアント認証でパススルー |
GET /healthz | ヘルスチェック |
GET /stats | プール予算、キャッシュヒット率、アイデンティティ別統計 |
GHPOOL_ALLOWED_OWNERS は厳格に適用:リストにない org/user へのリクエストは一律 403、PAT が漏洩しても明示的にリストされたリポジトリのみ露出しますAuthorization ヘッダーが必須(なければ 401)、匿名書き込みゲートウェイとして悪用されませんghpool は単一の Rust バイナリ(distroless image)です — 非常に軽量です。メモリは主にメモリ内キャッシュ(デフォルト上限 10000 エントリ)で消費されます。プロキシトラフィックが大きい場合は RAM を増やしてください。