thwip
Universal Coding Agent Multiplexer
Detect all installed AI coding agents on your device, combine them in a unified terminal interface, and hot-swap models mid-conversation when hitting rate limits without losing context.
Features
- Auto-Detection: Discovers installed AI coding agents (Claude Code, Antigravity, Gemini CLI, OpenAI/Codex, Aider, Copilot, Cursor, Windsurf, Cline, Ollama) and configured credentials.
- Context Portability: Switch between Anthropic Claude, Google Gemini, OpenAI Codex, or local Ollama mid-project. Conversation history and working files transfer directly.
- Dynamic UI: Terminal interface adapts its status bar, capabilities, and theme based on the active provider.
- Capability Disclaimers: Highlights when an agent lacks specific capabilities such as file editing or code execution.
- Rate Limit Failover: Detects HTTP 429 errors or quota exhaustion and prompts instant switching to ready fallback models.
- Tool Layer: Shared file editing, code execution (Python, Node, Shell), and Git integration across connected models.
- Session Persistence: Save and resume sessions across projects with
/session saveand/session load. - Terminal Ergonomics: Autocompletion (Tab), keyboard shortcuts (Ctrl+S, Ctrl+T, Ctrl+H), and streaming markdown rendering.
Quickstart
1. Installation
Install in editable mode or via pip:
git clone https://github.com/thwip-cli/thwip.git
cd thwip
pip install -e .
2. Launching thwip
Start the interactive terminal in your current project directory:
thwip
Slash Commands and Shortcuts
| Command | Action |
|---|---|
/switch [agent] [model] |
Switch active agent or model mid-conversation |
/agents |
Show all detected coding agents, company status, and capabilities |
/models [agent] |
List available models for current or target agent |
/status |
Display current session, project, and token stats |
/limits |
View token usage, quota, and spend metrics |
/detect |
Re-scan system for newly installed coding agents |
/session save [name] |
Save current chat session |
/session load <name> |
Load a previously saved session |
/session list |
List all saved sessions |
/session clear |
Clear current conversation memory |
/history |
View conversation history with model attribution badges |
/cost |
Show estimated session and cumulative cost |
/project [path] |
View or change project working directory |
Ctrl + S |
Quick switch agent prompt |
Ctrl + T |
Show agent status |
Ctrl + H |
View history |
/quit |
Exit thwip |
Supported Companies and Agents
| Company | Agent | Capabilities |
|---|---|---|
| Anthropic | Claude Code (Sonnet, Opus, Haiku) | Chat, File Edit, Code Run, Terminal, Git, Search |
| Antigravity / Gemini CLI (2.5 Pro, 2.5 Flash) | Chat, File Edit, Code Run, Terminal, Browser, Search | |
| OpenAI | Codex / ChatGPT (GPT-4.1, o3, o4-mini) | Chat, File Edit, Code Run, Terminal |
| DeepSeek | DeepSeek V3 / R1 Reasoner | Chat, File Edit, Code Run, Reasoning |
| Groq | Llama 3.3 70B, Mixtral | Chat, File Edit, Code Run |
| Ollama | Local Models (Llama 3.3, Qwen Coder, DeepSeek R1) | Chat, File Edit, Code Run (Local, Offline) |
| OpenRouter | Multi-Company Models | Gateway Routing |
Configuration (~/.thwip/config.toml)
thwip auto-detects existing API keys from environment variables and existing agent configs (~/.claude.json, ~/.gemini/config.json). Configuration can also be set manually:
[defaults]
agent = "claude"
model = "claude-sonnet-4"
project = "."
theme = "dark"
stream = true
auto_save = true
[keys]
anthropic = "sk-ant-..."
google = "AIza..."
openai = "sk-..."
deepseek = "sk-..."
groq = "gsk_..."
openrouter = "sk-or-..."
[ollama]
host = "http://localhost:11434"
[fallback]
enabled = true
chain = [
"claude/claude-sonnet-4",
"google/gemini-2.5-pro",
"openai/gpt-4.1",
"deepseek/deepseek-chat",
"ollama/llama3.3"
]
License
MIT License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file thwip_cli-1.0.3.tar.gz.
File metadata
- Download URL: thwip_cli-1.0.3.tar.gz
- Upload date:
- Size: 110.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8aad9298a852e4b624a67115848a10f69cb73e2f233da8e6d0731db6e633d1b
|
|
| MD5 |
0ae17780d6e9d45c04eb2a97587fab10
|
|
| BLAKE2b-256 |
4d9acdcea1242457cc8ad61dcfc1a0f76388ecdb324c88303f815247848398c4
|
Provenance
The following attestation bundles were made for thwip_cli-1.0.3.tar.gz:
Publisher:
publish.yml on tanmayhutt/thwip-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
thwip_cli-1.0.3.tar.gz -
Subject digest:
b8aad9298a852e4b624a67115848a10f69cb73e2f233da8e6d0731db6e633d1b - Sigstore transparency entry: 2620919268
- Sigstore integration time:
-
Permalink:
tanmayhutt/thwip-cli@581b18e8e1e0fdd44e92561af1221b814fa5add9 -
Branch / Tag:
refs/tags/v1.0.3 - Owner: https://github.com/tanmayhutt
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@581b18e8e1e0fdd44e92561af1221b814fa5add9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file thwip_cli-1.0.3-py3-none-any.whl.
File metadata
- Download URL: thwip_cli-1.0.3-py3-none-any.whl
- Upload date:
- Size: 56.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8050b7073db232b258e69856263a2635afd91ff5affa681108a53240bf989a5a
|
|
| MD5 |
e7a121961e4a8a64f1cbc87db72bca76
|
|
| BLAKE2b-256 |
1d80bd87a4b98e3610e08b0f6073e36b6eb8a0e4ada21800c8399c7bf9ecb550
|
Provenance
The following attestation bundles were made for thwip_cli-1.0.3-py3-none-any.whl:
Publisher:
publish.yml on tanmayhutt/thwip-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
thwip_cli-1.0.3-py3-none-any.whl -
Subject digest:
8050b7073db232b258e69856263a2635afd91ff5affa681108a53240bf989a5a - Sigstore transparency entry: 2620919292
- Sigstore integration time:
-
Permalink:
tanmayhutt/thwip-cli@581b18e8e1e0fdd44e92561af1221b814fa5add9 -
Branch / Tag:
refs/tags/v1.0.3 - Owner: https://github.com/tanmayhutt
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@581b18e8e1e0fdd44e92561af1221b814fa5add9 -
Trigger Event:
push
-
Statement type: