logo
icon

ghpool

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

template cover
展開済み0
発行者zeaburZeabur
作成日2026-05-29
最小構成1 コア1 GB
推奨構成1 コア1 GB
タグ
Developer ToolsGitHubAI

ghpool

ghpool は、複数の coding agent(OpenAB bots、OpenClaw workers、カスタム agent)が同じリポジトリを共有して GitHub のトークン毎の rate limit を消費する状況のために設計された GitHub API プロキシです。

3 つのことをします:

  • 読み取り用 PAT プール — すべての GET リクエストは残り rate-limit 予算が最も多いアイデンティティ経由でルーティングされ、複数の agent が各自の上限に達する代わりに合算予算を共有します
  • 読み取りレスポンスのキャッシュ — REST GET と GraphQL query 結果はリソース別 TTL でメモリにキャッシュされます(PR view 30 秒、run list 15 秒、repo view 5 分など)
  • 書き込みのパススルー — POST/PATCH/DELETE と GraphQL mutation はクライアント自身の Authorization ヘッダーが必要で、そのトークンで転送されるため、GitHub の監査ログには誰が書き込んだか記録されます

アーキテクチャ

このテンプレートは ghpool を内部専用サービスとしてデプロイします:

  • パブリックドメインは紐付けません — 同じ Zeabur プロジェクト内の他サービスがコンテナネットワーク経由でアクセスします
  • ポート 8080 は TCP として公開(Ingress なし、TLS 終端なし)
  • ポートフォワーディングはデフォルトで無効、外部からテストする場合は ネットワーク タブで有効化してください

他のサービスは以下の自動公開される環境変数で接続できます:

変数
GHPOOL_HOSTNAMEコンテナホスト名(例: ghpool.zeabur.internal
GHPOOL_BASE_URLフルベース URL(例: http://ghpool.zeabur.internal:8080

エージェントを ghpool 経由で接続させる

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 の追加

テンプレートは 1 つの PAT(GHPOOL_PAT_DEFAULT)でプールをシードします。追加方法:

  1. ghpool サービスの環境変数タブを開く
  2. GHPOOL_PAT_<ID> という名前の環境変数(例: GHPOOL_PAT_BOT_CLAUDEGHPOOL_PAT_BOT_CODEX)を PAT 値で追加 — <ID>/stats に表示されるアイデンティティ名になります
  3. サービスを再起動して新しいアイデンティティを反映

GHPOOL_PAT_* プレフィックスに一致する環境変数はすべて自動検出されます。

エンドポイント

パス用途
GET /<github-api-path>GitHub REST API GET をプロキシ(プール+キャッシュ)
POST /graphqlGraphQL — query はプール+キャッシュ、mutation はクライアント認証でパススルー
GET /healthzヘルスチェック
GET /statsプール予算、キャッシュヒット率、アイデンティティ別統計

セキュリティに関する注意

  • PAT は環境変数のみに保持され、コンテナ内のファイルには書き込まれません
  • GHPOOL_ALLOWED_OWNERS は厳格に適用:リストにない org/user へのリクエストは一律 403、PAT が漏洩しても明示的にリストされたリポジトリのみ露出します
  • Mutation には Authorization ヘッダーが必須(なければ 401)、匿名書き込みゲートウェイとして悪用されません

リソース

ghpool は単一の Rust バイナリ(distroless image)です — 非常に軽量です。メモリは主にメモリ内キャッシュ(デフォルト上限 10000 エントリ)で消費されます。プロキシトラフィックが大きい場合は RAM を増やしてください。

リンクとライセンス