一个现代化的 Claude Code & Codex API 代理服务,提供智能负载均衡、用户管理和使用统计功能。 https://claude-code-hub.app/

ding113 7ca44fc73d fix: regenerate timeout migration as 0019 to resolve conflict 2 месяцев назад
.github eb7a01e5ee chore: migrate from pnpm to Bun 1.3.2 2 месяцев назад
data 1070770496 feat: 增强日志自动刷新、优化 Docker 配置和供应商管理 3 месяцев назад
deploy eb7a01e5ee chore: migrate from pnpm to Bun 1.3.2 2 месяцев назад
drizzle 7ca44fc73d fix: regenerate timeout migration as 0019 to resolve conflict 2 месяцев назад
messages 95fbf3d040 chore: merge dev branch and resolve conflicts 2 месяцев назад
public bcbc335c15 Merge pull request #132 from Silentely/dev 2 месяцев назад
scripts 8b20da13ef chore: format code (dev-56742aa) 2 месяцев назад
src 95fbf3d040 chore: merge dev branch and resolve conflicts 2 месяцев назад
tests 25eeb4012b fix: auto-fix CI failures in PR Build Check 2 месяцев назад
.dockerignore 9a3d7157b0 feat(proxy): add configurable timeout settings for providers 3 месяцев назад
.editorconfig 47f3261fca 添加初始项目结构,包括配置文件、环境示例、数据库配置、UI组件、API路由及用户管理功能。引入必要的依赖和类型定义,设置基本的样式和布局。 4 месяцев назад
.env.example 6a09f8a73c Merge branch 'main' into dev 3 месяцев назад
.gitignore eb7a01e5ee chore: migrate from pnpm to Bun 1.3.2 2 месяцев назад
.mcp.json b4857987b7 feat: 引入 Prettier 代码格式化工具并集成到 CI/CD 3 месяцев назад
.prettierignore eb7a01e5ee chore: migrate from pnpm to Bun 1.3.2 2 месяцев назад
.prettierrc.json b4857987b7 feat: 引入 Prettier 代码格式化工具并集成到 CI/CD 3 месяцев назад
AGENTS.md eb7a01e5ee chore: migrate from pnpm to Bun 1.3.2 2 месяцев назад
CLAUDE.md 316aafae5f fix: resolve all PR review issues - security, UX, and code quality 2 месяцев назад
CONTRIBUTING.md eb7a01e5ee chore: migrate from pnpm to Bun 1.3.2 2 месяцев назад
LICENSE 41d05a1fc2 Create LICENSE 4 месяцев назад
Makefile c8a56d5d3d feat: 添加完整的本地开发工具集 3 месяцев назад
README.en.md eb7a01e5ee chore: migrate from pnpm to Bun 1.3.2 2 месяцев назад
README.md eb7a01e5ee chore: migrate from pnpm to Bun 1.3.2 2 месяцев назад
VERSION 327f0b1636 chore: sync VERSION file with release v0.2.38 [skip ci] 3 месяцев назад
bun.lock 25eeb4012b fix: auto-fix CI failures in PR Build Check 2 месяцев назад
components.json b4857987b7 feat: 引入 Prettier 代码格式化工具并集成到 CI/CD 3 месяцев назад
docker-compose.yaml d3fc2525fc chore: format code (dev-f3ee76f) 3 месяцев назад
drizzle.config.ts b4857987b7 feat: 引入 Prettier 代码格式化工具并集成到 CI/CD 3 месяцев назад
eslint.config.mjs b4857987b7 feat: 引入 Prettier 代码格式化工具并集成到 CI/CD 3 месяцев назад
next.config.ts 918600b0d9 feat: integrate next-intl for internationalization support 3 месяцев назад
package.json 95fbf3d040 chore: merge dev branch and resolve conflicts 2 месяцев назад
postcss.config.mjs 47f3261fca 添加初始项目结构,包括配置文件、环境示例、数据库配置、UI组件、API路由及用户管理功能。引入必要的依赖和类型定义,设置基本的样式和布局。 4 месяцев назад
tsconfig.json 7849323c6f fix: resolve TypeScript and ESLint errors 2 месяцев назад

README.en.md

English | 中文

# Claude Code Hub **🚀 Intelligent AI API relay platform — the control center for multi-provider onboarding, elastic routing, and granular operations** [![Container Image](https://img.shields.io/badge/ghcr.io-ding113%2Fclaude--code--hub-181717?logo=github)](https://github.com/ding113/claude-code-hub/pkgs/container/claude-code-hub) [![License](https://img.shields.io/github/license/ding113/claude-code-hub)](LICENSE) [![GitHub Stars](https://img.shields.io/github/stars/ding113/claude-code-hub)](https://github.com/ding113/claude-code-hub/stargazers) [![Telegram Group](https://img.shields.io/badge/Telegram-Join%20Group-blue?logo=telegram)](https://t.me/ygxz_group) Claude Code Hub combines Next.js 15, Hono, PostgreSQL, and Redis to deliver a Claude/OpenAI-compatible API gateway with smart load balancing, live observability, price governance, and automated documentation, enabling teams to manage multiple AI vendors safely and transparently. 💬 **Join the discussion**: Questions about deployment, features or technical issues? Join our [Telegram community](https://t.me/ygxz_group)!

✨ Core Highlights

  • 🤖 Intelligent load balancing: Weight + priority + grouping scheduler with built-in circuit breaker and up to three failover retries to keep requests stable.
  • 🧩 Multi-provider management: Connect Claude, Codex, Gemini CLI, and OpenAI-compatible vendors simultaneously with per-provider model redirection and HTTP/HTTPS/SOCKS proxy rules.
  • 🛡️ Rate limiting & concurrency control: Enforce RPM, monetary quotas (5-hour / weekly / monthly), and session concurrency via Redis Lua scripts with atomic counters and fail-open degradation.
  • 📘 Automated OpenAPI docs: 39 REST endpoints exported from Server Actions into OpenAPI 3.1.0, instantly browsable in Swagger and Scalar UI.
  • 📊 Real-time monitoring & analytics: Dashboards, active sessions, consumption leaderboards, decision-chain tracing, and proxy health tracking provide second-level visibility.
  • 💰 Price sheet management: Paginated SQL queries with debounce search and LiteLLM sync keep thousands of model prices searchable in milliseconds.
  • 🔁 Session management: Five-minute context cache preserves decision trails, reduces vendor switches, and maintains full auditability.
  • 🔄 OpenAI compatibility layer: Supports /v1/chat/completions, handles format conversions, tool calls, reasoning fields, and Codex CLI instruction injection automatically.

⚡️ Quick Start

Requirements

  • Docker and Docker Compose (latest version recommended)
  • Optional (for local development): Node.js ≥ 20, Bun ≥ 1.3

Three-Step Launch (Docker Compose)

  1. Clone and configure

    git clone https://github.com/ding113/claude-code-hub.git
    cd claude-code-hub
    cp .env.example .env
    
  2. Edit configuration

Edit the .env file and update ADMIN_TOKEN (admin login token):

   # MUST change this!
   ADMIN_TOKEN=your-secure-token-here

   # Docker Compose defaults (usually no changes needed)
   DSN=postgres://postgres:postgres@postgres:5432/claude_code_hub
   REDIS_URL=redis://redis:6379
  1. Start services

    docker compose up -d
    

Check status:

   docker compose ps
   docker compose logs -f app

Access the application

Once started:

  • Admin Dashboard: http://localhost:23000 (login with ADMIN_TOKEN from .env)
  • API Docs (Scalar UI): http://localhost:23000/api/actions/scalar
  • API Docs (Swagger UI): http://localhost:23000/api/actions/docs

💡 Tip: To change the port, edit the ports section in docker-compose.yml.

🖼️ Screenshots

Feature Screenshot Description
Dashboard Dashboard Aggregates request volume, spending, active sessions, and time-series distribution for instant situational awareness.
Provider management Provider Management Configure weight, cost multiplier, concurrency caps, proxies, and model redirection per vendor for precise routing.
Logs & audit Logs Unified request log with filters for time/user/provider/model plus token, cost, and cache-hit details.
Leaderboard Leaderboard Ranks users by requests, tokens, and spending to support chargeback and usage governance.

🏗️ Architecture

High-level view

Clients / CLI / Integrations
        │
        ▼
Next.js 15 App Router (v1 API routes)
        │
Hono + Proxy Pipeline (Auth → Session Allocation → Rate Limiting → Provider Selection → Forwarding → Response Handling)
        │
Multi-provider pool (Claude / OpenAI / Gemini / others) + PostgreSQL + Redis
  • App layer: src/app hosts dashboards, settings, and API actions for UI and internal APIs.
  • Proxy core: src/app/v1/_lib/proxy-handler.ts chains ProxyAuthenticator, ProxySessionGuard, ProxyRateLimitGuard, ProxyProviderResolver, ProxyForwarder, and ProxyResponseHandler.
  • Business logic: src/lib contains rate limiting, session manager, circuit breaker, proxy utilities, and price-sync; src/repository encapsulates Drizzle ORM queries.
  • Documentation system: src/app/api/actions/[...route]/route.ts converts Server Actions into OpenAPI endpoints automatically.

Data flow & components

  1. Ingress: Requests with API keys hit the Next.js route and pass through ProxyAuthenticator.
  2. Context control: SessionManager fetches the five-minute cache from Redis, enforces concurrency, and records the decision chain.
  3. Rate limiting: RateLimitService applies Lua-driven atomic counters for RPM, spend, and session caps, falling back gracefully if Redis is unavailable.
  4. Routing: ProxyProviderResolver scores vendors with weights, priorities, breaker states, and session reuse, retrying up to three times.
  5. Forwarding & compatibility: ProxyForwarder plus ResponseTransformer adapt Claude/OpenAI/Response formats, handle proxies, and honor model redirects.
  6. Observability: Dashboards, leaderboards, and price sheets query PostgreSQL via repositories with hourly aggregations.

🚢 Deployment

🐳 Docker Compose (✨ Recommended, Production-Ready)

Docker Compose is the preferred deployment method — it automatically provisions the database, Redis, and application services without manual dependency installation, ideal for production quick-start.

  1. Prepare .env (see .env.example) and point DSN/REDIS_URL to the Compose services.
  2. Start the stack:

    docker compose up -d
    
  3. Monitor:

    docker compose logs -f app
    docker compose ps
    
  4. Upgrade:

    docker compose pull && docker compose up -d
    

    Stop and clean up with docker compose down when necessary.

Local development (dev toolchain)

  1. Enter the dev/ folder: cd dev.
  2. Run make dev to launch PostgreSQL + Redis + bun dev in one command.
  3. Helpful targets:
    • make db: start only database and Redis.
    • make logs / make logs-app: tail all services or app logs.
    • make clean / make reset: clean or fully reset the environment.
  4. Use make migrate and make db-shell for schema operations.

Manual deployment (bun build + start)

  1. Install dependencies and build:

    bun install
    bun run build      # Copies the VERSION file automatically
    
  2. Export environment variables via your process manager (systemd, PM2, etc.) and ensure PostgreSQL/Redis endpoints are reachable.

  3. Launch production server:

    bun run start
    
  4. You may keep AUTO_MIGRATE=true for the first run, then disable it and manage migrations explicitly with Drizzle CLI.

⚙️ Configuration

Variable Default Description
ADMIN_TOKEN change-me Admin console token — must be updated before deployment.
DSN - PostgreSQL connection string, e.g., postgres://user:pass@host:5432/db.
AUTO_MIGRATE true Executes Drizzle migrations on startup; consider disabling in production for manual control.
REDIS_URL redis://localhost:6379 Redis endpoint, supports rediss:// for TLS providers.
ENABLE_RATE_LIMIT true Toggles multi-dimensional rate limiting; Fail-Open handles Redis outages gracefully.
SESSION_TTL 300 Session cache window (seconds) that drives vendor reuse.
ENABLE_SECURE_COOKIES true Browsers require HTTPS for Secure cookies; set to false when serving plain HTTP outside localhost.
ENABLE_CIRCUIT_BREAKER_ON_NETWORK_ERRORS false When true, network errors also trip the circuit breaker for quicker isolation.
APP_PORT 23000 Production port (override via container or process manager).
APP_URL empty Populate to expose correct servers entries in OpenAPI docs.

Boolean values should be true/false or 1/0 without quotes; otherwise Zod may coerce strings incorrectly. See .env.example for the full list.

❓ FAQ

  1. Database connection failures

    • Verify the DSN format and credentials; use service names (e.g., postgres:5432) within Docker.
    • Inspect docker compose ps or local PostgreSQL status, and use make db-shell for deeper checks.
  2. What if Redis goes offline?

    • The platform uses a fail-open policy: rate limiting and session metrics degrade gracefully while requests continue flowing. Monitor logs for Redis errors and restore the service asap.
  3. Circuit breaker keeps opening

    • Inspect [CircuitBreaker] logs to see whether repeated 4xx/5xx or network errors triggered it.
    • Check provider health in the admin console and wait 30 minutes or restart the app to reset state.
  4. “No provider available” errors

    • Ensure providers are enabled, have reasonable weights/priorities, and haven’t hit concurrency or spend caps.
    • Review the decision-chain log to confirm whether breakers or proxy failures removed them.
  5. Proxy configuration issues

    • Make sure URLs include a protocol (http://, socks5://, etc.) and validate via the “Test Connection” button in the UI.
    • If proxy_fallback_to_direct is enabled, confirm via logs that the system retried without the proxy when failures occur.

🤝 Contributing

We welcome issues and PRs! Please read CONTRIBUTING.md for the bilingual guidelines, branch strategy, and Conventional Commits requirements before submitting changes.

🌐 Acknowledgments

This project builds on zsio/claude-code-hub and references router-for-me/CLIProxyAPI for the OpenAI-compatible layer. Huge thanks to the original authors and community contributors!

⭐ Star History

Star History Chart

📜 License

Released under the MIT License. You’re welcome to use and extend the project as long as you comply with the license and retain the attribution.