A unified terminal client for AI coding agents. Connect to Claude Code, GitHub Copilot, OpenCode, Qwen Code, and Codex through a single interface with voice input.
Modern developers use multiple AI coding assistants. Each has strengths: Claude excels at reasoning, Copilot integrates with GitHub, Codex handles complex refactors. But switching between them means losing context, repeating yourself, and managing multiple terminal windows.
Reef Coder solves this. One interface, many agents, shared memory.
- Unified Interface — Same terminal UI for all supported agents
- Voice Input — Code hands-free with speech-to-text transcription
- Agent Client Protocol — Built on ACP for standardized agent communication
| Engine | CLI Required | Description |
|---|---|---|
| Claude Code | claude |
Anthropic's coding assistant |
| GitHub Copilot | gh copilot |
GitHub's AI pair programmer |
| OpenCode | opencode |
Open-source coding agent |
| Qwen Code | qwen |
Alibaba's coding model |
| Codex | codex |
OpenAI's code generation model |
Prerequisites:
- Bun runtime
- At least one supported engine CLI installed
# Clone the repository
git clone https://github.com/user/reef-coder.git
cd reef-coder
# Install dependencies
bun install
# Install globally
bun run buildAfter that, you can run reef from anywhere in your terminal.
Reef Coder loads environment variables from ~/.config/reef/.env, so your API keys work from any directory without setting them globally.
# Create the config directory
mkdir -p ~/.config/reef
# Add your API keys
cp .env.sample ~/.config/reef/.env
# Edit ~/.config/reef/.env with your keys# Start Reef Coder
reef
# With custom working directory
reef --workdir /path/to/project# Run locally without installing
bun run dev- Select Engine — Choose which AI agent to connect to
- Select Model — Pick the model variant (engine-specific defaults provided)
- Chat — Start coding with your AI assistant
Press the voice input key to start recording. Speak your prompt naturally and Reef Coder will transcribe it and send to the agent. Perfect for:
- Describing complex requirements without typing
- Hands-free coding while reviewing documentation
- Accessibility for developers who prefer speech
Inside a chat session:
exitorquit— Close the session/command— Execute slash commands (engine-specific)
┌─────────────────────────────────────────────────────────┐
│ Reef Coder CLI │
├─────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Engine │ │ Model │ │ Terminal │ │
│ │ Select │ │ Select │ │ Chat │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────┤
│ Voice Input + Session Store │
│ (Speech-to-Text + React State) │
├─────────────────────────────────────────────────────────┤
│ Agent Client (ACP) │
├──────────┬──────────┬──────────┬──────────┬────────────┤
│ Claude │ Copilot │ OpenCode │ Qwen │ Codex │
└──────────┴──────────┴──────────┴──────────┴────────────┘
- Runtime: Bun
- Language: TypeScript (strict mode)
- UI Framework: Ink (React for terminal)
- Protocol: Agent Client Protocol
# Run locally
bun run dev
# Type check
bunx tsc --noEmitMIT
