Use Claude Code, Gemini CLI, and Codex as OpenAI-compatible APIs — managed through a modern web dashboard.
We have a Discord server — installation help, release announcements, and community chat.
discord.gg/7SrXxNueGA
CLIProxyAPIPlus wraps OAuth-based CLI tools (Claude Code, Gemini CLI, Codex, GitHub Copilot, Kiro, Antigravity, Kimi, Qwen) into OpenAI-compatible APIs. This dashboard gives you a web UI to manage everything — providers, API keys, configs, logs, and updates — without touching YAML files.
Local use (macOS/Windows/Linux): Only Docker Desktop required.
git clone https://github.com/itsmylife44/cliproxyapi-dashboard.git
cd cliproxyapi-dashboard
./setup-local.sh # macOS/Linux
# .\setup-local.ps1 # WindowsThe local setup scripts start Docker Compose with a local dashboard build (--build) so your current source changes are used.
Open http://localhost:3000 → create admin account → done.
Server deployment: See the full Installation Guide.
- Visual Configuration — Manage CLIProxyAPIPlus settings through structured forms, no YAML editing
- Multi-Provider OAuth — Connect Claude, Gemini, Codex, Copilot, Kiro, Antigravity, iFlow, Kimi, and Qwen accounts
- Custom Providers — Add any OpenAI-compatible endpoint (OpenRouter, Ollama, etc.) with model mappings
- API Key Management — Create, revoke, and track API keys with per-user ownership
- Real-time Monitoring — Live log streaming, container health, and service management
- Quota Tracking — Rate limits and usage per provider (Claude, Codex, Kimi, Antigravity)
- Telegram Quota Alerts — Automatic notifications when OAuth quota drops below threshold (configurable per-provider, 1-hour cooldown)
- Usage Analytics — Request counts, provider breakdown, model stats, error rates
- Oh-My-Open-Agent Variant Toggle — Choose between oh-my-openagent (9 agents + categories) and oh-my-opencode-slim (6 agents, lower tokens, fallback chains) with per-agent model/skills configuration
- Config Sync — Auto-sync OpenCode configs via the
opencode-cliproxyapi-syncplugin (includes slim config) - Config Sharing — Share model configs with others via share codes (
XXXX-XXXX) - One-Click Updates — Update both Dashboard (GHCR) and CLIProxyAPIPlus (Docker Hub) from the admin panel
- Container Management — Start, stop, restart containers directly from the UI
- Automatic TLS — Let's Encrypt certificates via Caddy, auto-renewed
Get notified on Telegram when your OAuth provider quota is running low.
Setup (Admin → Settings → Telegram Alerts):
- Create a Telegram bot via @BotFather and copy the bot token
- Get your chat ID (send a message to the bot, then check
https://api.telegram.org/bot<TOKEN>/getUpdates) - In the dashboard, go to Admin → Settings → Telegram and enter:
- Bot token
- Chat ID
- Quota threshold (e.g. 20% remaining)
- Which providers to monitor (Claude, Codex, Kimi, Antigravity)
- Enable alerts — the scheduler checks every 5 minutes with a 1-hour cooldown between notifications
Use the Test Message button to verify your configuration before enabling.
The dashboard supports two OpenCode orchestration variants. Toggle between them in the Using with OpenCode section:
| Variant | Agents | Description |
|---|---|---|
| Oh-My-Open-Agent | 9 agents + 8 categories | Full-featured orchestration with sisyphus, atlas, prometheus, oracle, and more |
| Oh-My-OpenCode Slim | 6 agents | Lightweight: orchestrator, oracle, designer, explorer, librarian, fixer. Lower token usage with dedicated fallback chains |
How it works:
- Select your variant in the dashboard -- the plugin in
opencode.jsonswitches automatically - Assign models to agents (auto-assigned by tier, or manually override)
- Toggle skills per agent (simplify, cartography, agent-browser)
- Config syncs automatically via the sync plugin
First-time setup (run once per variant):
bunx oh-my-openagent@latest install # Normal variant
bunx oh-my-opencode-slim@latest install # Slim variantEach variant has its own config file (oh-my-openagent.json / oh-my-opencode-slim.json) -- they don't conflict.
Setup Wizard — guided initial configuration
Provider Configuration — manage API keys and OAuth accounts
Quota Management — track rate limits with Telegram alerts
Settings — config sync, system info, and updates
Six Docker containers, two isolated networks:
| Service | Role |
|---|---|
| Caddy | Reverse proxy, automatic TLS, HTTP/3 |
| Dashboard | Next.js web app, JWT auth, Docker management via socket proxy |
| CLIProxyAPIPlus | AI proxy server, OAuth callbacks, management API |
| Perplexity Sidecar | OpenAI-compatible wrapper for Perplexity Pro subscription |
| Docker Socket Proxy | Restricted Docker API access (containers/images only) |
| PostgreSQL | Database on isolated internal network |
| Component | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| UI | React 19 |
| Styling | Tailwind CSS v4 |
| Database | PostgreSQL 16 + Prisma 7 |
| Auth | JWT (jose) + bcrypt |
| Container Mgmt | Docker CLI via socket proxy |
cd dashboard
./dev-local.sh # Start dev environment
./dev-local.sh --reset # Reset database
./dev-local.sh --down # Stop containersOr manually:
cd dashboard
npm install
cp .env.example .env.local # Edit with your DB credentials
npx prisma migrate dev
npm run devDashboard at http://localhost:3000.
To browse the dashboard UI without PostgreSQL or login:
cd dashboard
SKIP_AUTH=1 npm run devOpens all routes as a fake admin user — useful for testing themes, layouts, and components.
| Guide | Description |
|---|---|
| Installation | Server deployment, local setup, manual installation |
| Configuration | Environment variables, config.yaml, config sync |
| Usage Collection | Usage tracking service, troubleshooting, manual collection |
| Troubleshooting | Common issues and solutions |
| Security | Best practices for production |
| Backup & Restore | Automated and manual backups |
| Service Management | Systemd and Docker Compose commands |
- Fork → feature branch → PR
- Use Conventional Commits (
feat:,fix:,chore:) - Test locally before submitting
Release-Please auto-generates releases from commit messages.
Thanks to these wonderful people (emoji key):
itsmylife44 💻 📖 🚧 🚇 |
Rizki Hidayat 💻 |
Đặng Quốc Phong 💻 |
smart-tinker 💻 🐛 |
islee 💻 |
deftdawg 💻 🐛 |
dslife2025 💻 |
The dashboard supports multi-language UI. Currently, we offer English (en) and German (de). We welcome community contributions for additional languages!
-
Copy the English template:
cp dashboard/messages/en.json dashboard/messages/{locale}.jsonReplace
{locale}with the language code (e.g.,frfor French,esfor Spanish,jafor Japanese). -
Translate all strings:
- Open the new file in your editor
- Translate every value (keep all keys unchanged)
- Example:
{ "common": { "loading": "Wird geladen...", // Keep this structure "cancel": "Abbrechen" } }
-
Register the new locale:
- Edit
dashboard/src/i18n/config.ts - Add your locale to the
supportedLocalesarray:export const supportedLocales = ["en", "de", "fr"] as const;
- Add the display name to
localeNames:export const localeNames: Record<Locale, string> = { en: "English", de: "Deutsch", fr: "Français", // Add this };
- Edit
-
Test locally:
- Run
npm run devindashboard/ - Log in to the dashboard
- Open the User Panel (top right)
- Select your language from the Language dropdown
- Verify all UI strings display correctly in your language
- Run
-
Submit a PR:
- Title:
feat(i18n): add {language} translation - Include the three files:
messages/{locale}.json, and changes tosrc/i18n/config.ts - PR description: Link to any external translation resources or notes
- Title:
- Keep translations concise and match the tone of the English version
- Use formal/business-appropriate language
- Test that UI elements don't overflow or break with your translations
- Plurals and gender (where applicable) should follow target language conventions
- Date/time formatting handled by
next-intl— no need to change - Currency codes are kept in English (e.g.,
USD,EUR)
| Code | Language | Status |
|---|---|---|
en |
English | ✓ Complete |
de |
German | ✓ Complete |
Add more by following the steps above!
- Discord — Community chat, installation help, announcements
- CLIProxyAPIPlus — Core proxy documentation
- Issues — Bug reports and feature requests
- Discussions — Questions and community
Built with ❤️ using Next.js, React, and Tailwind CSS

