A multi-agent Terminal User Interface (TUI) for orchestrating AI coding assistants. Run Claude Code and Codex CLI side-by-side with tab-based session management.
- Multi-Agent Support - Seamlessly switch between Claude Code and Codex CLI
- Tab-Based Sessions - Run multiple concurrent agent sessions (up to 10 tabs)
- Real-Time Streaming - Watch agent responses as they're generated
- Token Usage Tracking - Monitor input/output tokens and estimated costs
- Session Persistence - Resume previous sessions with their full context
- Rich Terminal UI - Markdown rendering, syntax highlighting, and animations
- Rust 1.70+ (for building from source)
- At least one supported agent installed:
- Claude Code (
claudebinary) - Codex CLI (
codexbinary)
- Claude Code (
git clone https://github.com/conduit-cli/conduit.git
cd conduit
cargo build --releaseThe binary will be available at target/release/conduit.
# Start the TUI
conduit
# Debug keyboard input (useful for troubleshooting keybindings)
conduit debug-keys| Shortcut | Action |
|---|---|
Ctrl+N |
New project (opens project picker) |
Alt+Shift+W |
Close current tab |
Tab / Shift+Tab |
Switch to next/previous tab |
Alt+1-9 |
Jump to specific tab |
Alt+Shift+Fβ |
Fork current session |
/fork (slash menu) |
Fork current session |
Enter |
Submit prompt |
Shift+Enter or Alt+Enter |
Add newline in input |
Ctrl+C |
Interrupt agent |
Ctrl+Q |
Quit |
Ctrl+T |
Toggle sidebar |
Ctrl+G |
Toggle view mode (Chat/Raw Events) |
Ctrl+O |
Show model selector |
Ctrl+\ |
Toggle Build/Plan mode* |
Alt+I |
Import session |
? or :help |
Show help |
* Note on Ctrl+\: Terminal emulators vary in how they report this key combination. Some terminals send it as Ctrl+4. Use conduit debug-keys to verify how your terminal reports this shortcut. If it doesn't work, you can customize the keybinding in your config.
β Note on Alt+Shift+F: Some terminals don't emit distinct Alt+Shift combos. Use conduit debug-keys to verify how your terminal reports this shortcut and override the keybinding in your config if needed.
src/
βββ main.rs # Entry point
βββ lib.rs # Library exports
βββ agent/ # Agent integration layer
β βββ runner.rs # AgentRunner trait
β βββ events.rs # Unified event types
β βββ stream.rs # JSONL stream parser
β βββ claude.rs # Claude Code implementation
β βββ codex.rs # Codex CLI implementation
β βββ models.rs # Model registry and pricing
β βββ session.rs # Session metadata
β βββ history.rs # History loading utilities
βββ config/ # Configuration
β βββ settings.rs # App settings and pricing
β βββ keys.rs # Keybinding types and parsing
β βββ default_keys.rs # Default keybindings
βββ data/ # Data persistence
β βββ database.rs # SQLite database
β βββ repository.rs # Data access layer
β βββ workspace.rs # Workspace management
βββ session/ # Session management
β βββ cache.rs # Session caching
β βββ import.rs # Session import from agents
βββ git/ # Git integration
β βββ pr.rs # PR operations
β βββ worktree.rs # Worktree utilities
βββ util/ # Utilities
β βββ paths.rs # Path helpers
β βββ names.rs # Name generation
βββ ui/ # Terminal UI
βββ app.rs # Main event loop
βββ action.rs # Action definitions
βββ events.rs # Input mode handling
βββ tab_manager.rs # Tab orchestration
βββ session.rs # Per-tab state
βββ components/ # UI components
βββ chat_view.rs
βββ input_box.rs
βββ sidebar.rs
βββ status_bar.rs
βββ tab_bar.rs
βββ ...
Spawns the claude binary in headless mode with streaming JSON output:
- Real-time event streaming
- Tool execution (Read, Edit, Write, Bash, Glob, Grep)
- Session resumption
Spawns the codex binary with structured JSON output:
- Full automation mode
- Session persistence
- Event-based communication
Default settings in src/config/settings.rs:
| Setting | Default |
|---|---|
| Default agent | Claude Code |
| Max tabs | 10 |
| Show token usage | Yes |
| Show cost | Yes |
- Input tokens: $3.00 / 1M tokens
- Output tokens: $15.00 / 1M tokens
The landing page at getconduit.sh is built with Astro.
cd website
npm install
npm run devThe dev server runs at http://localhost:4321
cd website
npm run buildOutput is in website/dist/.
The site is static and can be deployed to any hosting provider:
GitHub Pages:
cd website
npm run build
# Push dist/ to gh-pages branch or configure GitHub ActionsNetlify/Vercel:
- Connect repo and set build command to
cd website && npm run build - Set publish directory to
website/dist
Manual:
cd website
npm run build
# Upload contents of dist/ to your serverMIT