One cockpit for all your coding agents. Run Claude Code, OpenAI Codex, local models, pi and AG-UI agents side by side — and talk to them wherever you like: a dedicated web console on your desktop or phone (with Entra ID sign-in), Discord, or Microsoft Teams. Let a strong model manage, hand the legwork to cheaper ones, and step in only when a decision is actually yours.
日本語 | 简体中文 | 한국어 | Español | Português | Français
Every screenshot in this README uses fictional sample data. Regenerate them with
scripts/readme_screenshots.cjs.
| 🖥️ A GUI built for supervising agents | The Ebi AI Console shows every agent thread on one screen, sorted by whose move it is. It tells you what to do next and lets you reply, attach files, switch models, pause or stop — without opening a terminal. |
| 📱 Multi-frontend | Discord, Microsoft Teams or the dedicated web console — use one, or all of them at once from one process. Bring the relay to your team's Teams tenant and sign in to the console with Entra ID, Google, any OIDC provider or passkeys. |
| 🔀 Multi-harness | Claude Code, OpenAI Codex, a local model, the pi CLI or any AG-UI agent — pick one per conversation and switch mid-thread. The conversation is handed over, not lost. |
| 💸 Multi-agent, cost-aware | A manager agent on your best model delegates to child agents on cheaper or flat-rate models. Triage runs on the cheapest model you have. Subscriptions you already pay for do the work. |
| 🛡️ Parallel without collisions | Every session works in its own git worktree, sees what the others are doing, and claims what it touches. Ten agents, one repository, no clobbered work. |
Running several agents is easy; keeping track of them is the hard part. The console answers one question first: "what do I do now?"
- Focus view — a cheap, tool-less model reads each thread with new activity and fills in priority, due date, the next step and whether it needs a particular place (📍 office, home). Your next move is pinned at the top. Anything a person sets by hand always wins.
- Focus modes — 🎯 one thread full screen, or 🔁 work through everything that needs you one thread at a time: send, and the next one opens. An estimate of your time per item (⚡ quick / ⏱ short / 🧘 deep) lets you clear only the quick ones when you have five minutes.
- Sorted by whose move it is — ❓ waiting for your answer, 👀 to review, 📋 your task,
⚠️ failed, running, idle, done. Agents report outcomes through the relay, so the board stays accurate without extra prompting. - Act in place — reply with files attached; preview images, Markdown, HTML, CSV and logs inline; autocomplete slash commands and skills; ⏸ pause, ■ stop and ▶ resume running work.
- See the cost before it bites — 5-hour and weekly quota meters for Claude and Codex in the header, and every thread shows how full its context window is (🧠 41%).
- Capture work instantly — write down a task and an agent starts on it right away, in a conversation the console owns (no chat app needed).
- Search, share, finish in bulk — search inside conversations, copy thread links, and complete several threads at once (a parent completes its children too).
On your phone too. Install the console to your home screen; the mobile layout keeps the composer within reach. Check on your agents from the train, answer the one question that blocks them, and let them carry on.
Secure by default. The console never runs unauthenticated: passkeys (WebAuthn) out of the box,
plus optional sign-in with Microsoft Entra ID, Google or any OIDC provider, Cloudflare Access and an
email allowlist. The JSON API under
/console/api is the contract; the bundled web client is one consumer.
The console is optional — nothing listens unless CCDB_CONSOLE_PORT is set — and it can also be your
only frontend: no Discord account needed (see the Quick start). Full guide: docs/console.md.
Where you talk and which agent works are two independent choices. Any frontend works with any
agent, and one relay process can serve several frontends at once
(CCDB_FRONTENDS=discord,teams,console) over the same sessions, scheduler and API.
| Frontend × backend | Claude Code | OpenAI Codex | Local (Ollama etc.) | pi | AG-UI | Antigravity |
|---|---|---|---|---|---|---|
| Ebi AI Console | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Discord | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Microsoft Teams | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
- Ebi AI Console — the dedicated GUI shown above, for desktop and phone. It can be your only frontend: no chat account needed.
- Discord — one thread per session, emoji status reactions, slash commands. The fastest way to get going on a personal server.
- Microsoft Teams — bring agents into your organization's Microsoft 365 tenant. A small public receiver accepts Bot Framework activities, and the private session host pulls them outbound-only, so the machine that runs your agents never opens an inbound port. Setup guide · security model.
- Entra ID sign-in — the console signs in with Microsoft Entra ID (or Google, any OpenID Connect provider, Cloudflare Access) on top of passkeys, limited to an allowlist of addresses. Console authentication.
The relay drives the official CLIs as subprocesses, so every agent keeps its own tools, skills, memory and project instructions. You bring your existing logins; the relay never sees an API key.
- Switch per conversation —
/backend,/modeland/effort(or the picker above the reply box) change the agent from the next turn. Model lists are discovered live, so a model released this morning is selectable without upgrading the relay. - Hand over, don't restart — session IDs are not portable between CLIs, so when you switch, the relay hands the conversation transcript to the new agent and carries on.
- Local when it matters — the
localbackend runs Codex against a model on your own hardware and refuses to start if the CLI would still phone home./ollamamanages the models. - Ask outside, safely —
/asksends one anonymized, isolated question to an external model.
Details: backend guide · local backend · pi · AG-UI · escalation.
Not every task needs your most expensive model. The relay lets you decide which model thinks and which model types:
- Manager and children are configured separately. A parent conversation on, say, Claude Opus breaks the work down and delegates it to child threads on Codex, a smaller Claude model or a local model. Set child defaults globally or per parent, right from the console.
- Delegated work stays visible. The parent shows a Delegated work panel with each child's status and latest report. You talk to the manager; it coordinates the children.
- Spread the load across subscriptions. Claude and Codex have separate quotas. Running the manager on one and the workers on the other uses both flat-rate plans in parallel instead of exhausting one. Account pools rotate several logins per backend on top.
- Housekeeping on the cheapest model. Console triage uses the cheapest model of your backend (Haiku on Claude, the cheapest catalog model on Codex), one-shot and without tools.
- Pin scheduled jobs to a model. Nightly audits and digests can run on a small model while interactive work keeps the big one.
- A concurrency limit you can change live keeps the number of running agents — and the bill — where you want it.
Ship storefront v2.0 Claude Opus 5.5 manager: plans, reviews, asks you
├─ Implement checkout flow Codex gpt-6.1-sol running
├─ Write E2E tests Codex gpt-6.1-sol running
├─ Security review of PR #128 Codex gpt-6.1-sol done
└─ Update API reference Local gpt-oss:120b waiting for your review
Each conversation is an isolated, persistent agent session. The relay injects coordination into every one of them, regardless of backend:
- Worktree isolation — every session is told to create a git worktree and never touch the main working directory.
- Active session registry — sessions can see who else is running and where.
- AI Lounge — a shared breakroom where sessions announce intent before acting, and which they check before disruptive operations such as restarts or force pushes.
- Resource claims — a session claims the repo, issue or file it is about to touch; a second session is turned away instead of duplicating the work.
Thread A (feature) ──→ Claude Code (worktree-A) ─┐
Thread B (PR review) ──→ OpenAI Codex (worktree-B) ├─→ #ai-lounge
Thread C (docs) ──→ local model (worktree-C) ─┘ "A: auth refactor in progress"
"B: PR #42 review done (codex)"
"C: updating README"
Plus: a scheduler for recurring agent jobs, CI waits that free the session slot until a pipeline finishes, startup resume after restarts, a REST API for spawning and messaging sessions from scripts and CI, and execution environments (bubblewrap, containers, SSH) that put an OS boundary around the agent. See What You Can Do.
No Discord, no Teams, no bot token: just the web console. You need Python 3.12+,
uv and at least one agent CLI you are already logged in to
(claude, codex, …).
git clone https://github.com/ebibibi/ebi-agent-chat-relay.git && cd ebi-agent-chat-relay
uv sync --extra console
mkdir -p data
printf 'CCDB_FRONTENDS=console\nAPI_PORT=8099\nCCDB_CONSOLE_PORT=8100\n' > .env
uv run ccdb startOpen http://localhost:8100, enter the one-time setup code printed in the log, register a passkey,
and write down your first task. Want Discord too? Run uv run ccdb setup — the wizard lists your
channels and writes .env for you. Full walkthrough: Getting Started.
| Guide | What's inside |
|---|---|
| Getting Started | Discord bot setup, the setup wizard, systemd, custom Cogs, configuration, permission modes, Microsoft Teams |
| What You Can Do | Parallel sessions, AI Lounge, claims, session-to-session relay, ingest API, backend switching, account pools, sandboxes |
| Feature Reference | Every feature at a glance — chat, coordination, scheduler, CI/CD, sessions, security |
| Automation, Scheduler & REST API | GitHub Actions recipes, scheduled tasks, auto-upgrade, the REST API |
| Architecture & Background | How it fits together, design philosophy, testing, how this project was built |
| Ebi AI Console · Backends · Teams setup | Deep dives |
| Security · Execution environments · ADRs | Why things are the way they are |
This project is written by AI agents and directed by a human — the whole codebase, tests and docs came from Claude Code (how) — so it is a good place to try contributing with your own Claude Code or Codex. PRs from humans and from agents are equally welcome.
- 🌱 First PR? Pick an issue labelled
good first issueorhelp wanted. - 🌍 Translations of the README and guides (Chinese, Korean, Spanish, Portuguese, French) are always appreciated.
- 🐛 Run it on macOS or Windows? Production runs on Linux; your bug reports are gold.
- 💡 Ideas go in a feature request.
Setup is one command (uv sync --dev). Read
CONTRIBUTING.md for the workflow.
Built by Masahiko Ebisuda (@ebibibi) — a Microsoft MVP for Azure Hybrid & Windows Server for 14 consecutive years, who works by delegating to a team of AI agents instead of managing people. This relay is the tool he uses every day to do it.
- 📺 YouTube: 胡田昌彦 / Windows, Azure, M365, 生成AI (Japanese, 11k+ subscribers)
- 🌐 Website: ebisuda.net
If the relay saves you time, a star helps other people find it.
Formerly Claude Code Discord Bridge, then Claude & Codex Discord Bridge — see
ADR-0001. Every existing identifier still works:
the package is claude-code-discord-bridge and the command is ccdb.
Release notes: v5.1.0 · v5.0.0 ·
v4.0.0 · CHANGELOG.
Disclaimer: This project is not affiliated with, endorsed by, or officially connected to Anthropic or OpenAI. "Claude" and "Claude Code" are trademarks of Anthropic, PBC; "OpenAI", "Codex", and "ChatGPT" are trademarks of OpenAI. This is an independent open-source tool that interfaces with the Claude Code CLI and the OpenAI Codex CLI.
MIT


