Skip to content

conduit-cli/conduit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

601 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Conduit

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.

Features

  • 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

Installation

Prerequisites

  • Rust 1.70+ (for building from source)
  • At least one supported agent installed:

Build from Source

git clone https://github.com/conduit-cli/conduit.git
cd conduit
cargo build --release

The binary will be available at target/release/conduit.

Usage

# Start the TUI
conduit

# Debug keyboard input (useful for troubleshooting keybindings)
conduit debug-keys

Keyboard Shortcuts

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.

Architecture

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
        └── ...

Supported Agents

Claude Code

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

Codex CLI

Spawns the codex binary with structured JSON output:

  • Full automation mode
  • Session persistence
  • Event-based communication

Configuration

Default settings in src/config/settings.rs:

Setting Default
Default agent Claude Code
Max tabs 10
Show token usage Yes
Show cost Yes

Pricing (Claude Sonnet)

  • Input tokens: $3.00 / 1M tokens
  • Output tokens: $15.00 / 1M tokens

Website

The landing page at getconduit.sh is built with Astro.

Development

cd website
npm install
npm run dev

The dev server runs at http://localhost:4321

Build

cd website
npm run build

Output is in website/dist/.

Deploy

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 Actions

Netlify/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 server

License

MIT

About

πŸ–₯️ Run a Team of AI Agents. In Your Terminal.

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors