複数の 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) |
クライアントを ghpool 経由にする方法はクライアントの種類によります:
Coding agents(Claude Code、Codex、カスタムエージェント):ほとんどは GITHUB_API_BASE で GitHub API エンドポイントを上書きできます。
export GITHUB_API_BASE=${GHPOOL_BASE_URL}
gh CLI:ghpool に同梱される ghp シムを使います — 読み取りを ghpool 経由、書き込みを実際の gh 経由にルーティングするドロップイン代替品です。素の gh はベース URL 上書きを完全にはサポートしません(gh issue list のような組み込みコマンドは内部で GraphQL を使い迂回します)。ghp が信頼できる方法です。
直接 HTTP:
curl ${GHPOOL_BASE_URL}/repos/owner/repo
書き込み操作は常にクライアント自身の Authorization ヘッダーが必要です — ghpool は mutation に認証を注入しないため、GitHub の監査ログにはどのエージェントが書き込んだかが記録されたままになります。
テンプレートは 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 を増やしてください。