Copilot Extended - Resilient wrapper for GitHub Copilot SDK with auto-retry, Ralph Wiggum loops, and more
Project description
Copex — Copilot Extended
A resilient Python wrapper for the GitHub Copilot SDK with automatic retry, Ralph Wiggum loops, fleet orchestration, and a beautiful CLI.
Features
- Automatic retry with adaptive exponential backoff and jitter
- Circuit breaker (sliding-window) to avoid hammering a failing backend
- Model fallback chains — automatically try the next model when one fails
- Session pooling with LRU eviction and pre-warming
- Agent loop — turn-based agent with tool calls and iterative reasoning
- Squad orchestration — multi-agent team (Lead architect, Developer, Tester, Docs expert) with auto-discovery of project context and parallel execution
- Squad as default for root prompts —
copex -p "prompt"runs squad mode by default; use--no-squadto force single-agent mode, or callcopex chatdirectly - Ralph Wiggum loops — iterative AI development via repeated prompts
- Fleet mode — run multiple tasks in parallel with dependency ordering
- Council mode — multi-model deliberation with a chair model
- Plan mode — AI-generated step-by-step plans with execution & checkpointing
- Repo-awareness — automatic discovery of project structure, README, pyproject.toml, and conventions
- MCP integration — connect external Model Context Protocol servers
- Skill discovery — auto-discover and load skill files from repo/user dirs
- PDF vision analysis — render PDF pages for the active model to inspect text, charts, and figures
- Beautiful CLI with Rich terminal output, themes, and streaming
- CLI client mode — bypass the SDK to access all models via subprocess
- Metrics & cost tracking — token usage, timing, success rates
Installation
pip install copex
Or with pipx for isolated CLI usage:
pipx install copex
Optional extras:
pip install "copex[pdf]" # Enable --pdf-analyze
pip install "copex[repo-map]" # Enhanced repository mapping
pip install "copex[scrape]" # Built-in Scrapling MCP integration
pip install -e ".[dev]" # Test/lint tooling for contributors
Extras can be combined, for example: pip install "copex[pdf,repo-map]".
Prerequisite: The GitHub Copilot CLI must be installed and authenticated:
npm i -g @github/copilot
copilot login
Quick Start
CLI
# One-shot single-agent chat
copex chat "Explain the builder pattern in Python"
# One-shot squad run from the root command
copex -p "Build a REST API with auth and tests"
# Interactive session
copex interactive
# Pipe from stdin
echo "What is a monad?" | copex chat --stdin
# Root prompt, but disable squad and force single-agent mode
copex -p "Explain quicksort" --no-squad
# Choose model and reasoning
copex chat "Optimize this SQL" -m gpt-5.2-codex -r xhigh
Python API
import asyncio
from copex import Copex, CopexConfig, Model, ReasoningEffort
async def main():
config = CopexConfig(
model=Model.CLAUDE_OPUS_4_6,
reasoning_effort=ReasoningEffort.HIGH,
)
async with Copex(config) as client:
response = await client.send("Explain quicksort")
print(response.content)
asyncio.run(main())
Streaming
async with Copex(config) as client:
async for chunk in client.stream("Write a prime sieve"):
if chunk.type == "message":
print(chunk.delta, end="", flush=True)
elif chunk.type == "reasoning":
print(f"\033[2m{chunk.delta}\033[0m", end="", flush=True)
Squad Orchestration
Squad is Copex's built-in multi-agent team that auto-decomposes tasks and executes them in parallel:
# Root prompt path — orchestrate with Lead, Developer, Tester
copex -p "Build a REST API with auth and tests"
# Or explicitly:
copex squad "Build a REST API with CRUD operations"
# With specific model:
copex squad "Build a REST API" -m gpt-5.2-codex -r high
How Squad works:
- Lead Architect analyzes the task, breaks it into steps, identifies patterns and conventions
- Developer implements according to the plan (parallel with Tester)
- Tester writes comprehensive tests (parallel with Developer)
- Docs Expert updates documentation and examples
Squad auto-discovers project context (README, pyproject.toml, directory structure) and applies project-specific conventions. Results are tracked via Fleet with adaptive concurrency, retries, and cost tracking.
from copex import SquadCoordinator, CopexConfig
async with SquadCoordinator(config) as squad:
result = await squad.run("Build a REST API with auth")
print(result.final_content)
Use copex chat for direct single-agent mode, or keep the root prompt flow and add --no-squad:
copex chat "Explain quicksort"
copex -p "Explain quicksort" --no-squad
Agent Loops
For machine-consumption or fine-grained turn-by-turn control, use the Agent command with JSON Lines output:
# JSON Lines: one JSON object per turn (for subprocess/orchestrator consumption)
copex agent "Build a simple HTTP server" --json --max-turns 10
Each turn outputs JSON with: turn, content, tool_calls, stop_reason, error, duration_ms.
from copex import AgentSession, CopexConfig, make_client
config = CopexConfig()
client = make_client(config)
async with AgentSession(client, max_turns=10) as agent:
result = await agent.run("Implement a stack data structure")
for turn in result.turns:
print(f"Turn {turn.turn}: {turn.content[:100]}...")
Configuration
Copex loads configuration from ~/.config/copex/config.toml automatically.
Generate a starter config with:
copex init
Config file example
model = "claude-opus-4.6"
reasoning_effort = "high"
streaming = true
use_cli = false
timeout = 300.0
auto_continue = true
ui_theme = "default" # default, midnight, mono, sunset, tokyo
ui_density = "extended" # compact, extended
[retry]
max_retries = 5
base_delay = 1.0
max_delay = 30.0
exponential_base = 2.0
# Skills
skills = ["code-review"]
# skill_directories = ["/path/to/skills"]
# disabled_skills = ["some-skill"]
# MCP servers
# mcp_config_file = "~/.config/copex/mcp.json"
# Tool filtering
# available_tools = ["bash", "view"]
# excluded_tools = ["dangerous-tool"]
Environment variables
| Variable | Description |
|---|---|
COPEX_MODEL |
Override the default model |
COPEX_REASONING |
Override the reasoning effort |
CLI Commands
The root command also accepts -p/--prompt to run a prompt without a subcommand; that path uses squad by default and honors --no-squad.
| Command | Description |
|---|---|
copex plan |
Generate and execute step-by-step plans |
copex fleet |
Run multiple tasks in parallel |
copex council |
Run a council workflow: Codex + Gemini + Opus, with Opus as chair |
copex squad |
Run a squad or manage the repo .squad file |
copex chat |
Send a prompt through the direct single-agent chat command |
copex models |
List available models |
copex render |
Render JSONL session logs with readable formatting |
copex tui |
Start the Copex TUI |
copex init |
Create a default config file |
copex interactive |
Start an interactive chat session |
copex ralph |
Start a Ralph Wiggum iterative loop |
copex login |
Login to GitHub |
copex logout |
Logout from GitHub |
copex status |
Check Copilot CLI and GitHub authentication status |
copex config |
Validate and display the current Copex configuration |
copex map |
Display the repository map or task-relevant files |
copex campaign |
Run a campaign: discover targets, batch them, and run fleet waves |
copex agent |
Run an agent loop: prompt -> tool calls -> respond -> repeat |
copex edit |
Apply structured edits (unified diff, SEARCH/REPLACE, whole-file blocks) |
copex undo |
Undo structured edits from the latest (or listed) undo batch |
copex completions |
Generate shell completion scripts |
copex stats |
Show statistics for recent Copex runs |
copex audit |
Show approval audit log entries |
copex diff |
Show what changed since the last Copex run started |
copex memory |
Manage persistent project memory (show, add, clear, import) |
copex skills |
Manage and discover skills (list, show) |
Common flags
-m, --model Model to use
-r, --reasoning Reasoning effort (none, low, medium, high, xhigh)
-c, --config Config file path
-S, --skill-dir Add skill directory
--use-cli Use CLI subprocess instead of SDK
--json Machine-readable JSON output
-q, --quiet Content only, no formatting
Models
Copex supports all models available through the Copilot SDK:
| Model | Reasoning | xhigh |
|---|---|---|
gpt-5.4 |
✅ | ✅ |
gpt-5.3-codex |
✅ | ✅ |
gpt-5.2-codex |
✅ | ✅ |
gpt-5.1-codex |
✅ | ❌ |
gpt-5.1-codex-max |
✅ | ❌ |
gpt-5.1-codex-mini |
✅ | ❌ |
gpt-5.2 |
✅ | ✅ |
gpt-5.1 |
✅ | ❌ |
gpt-5 |
✅ | ❌ |
gpt-5-mini |
✅ | ❌ |
gpt-4.1 |
❌ | ❌ |
claude-sonnet-4.5 |
❌ | ❌ |
claude-sonnet-4 |
❌ | ❌ |
claude-haiku-4.5 |
❌ | ❌ |
claude-opus-4.5 |
❌ | ❌ |
claude-opus-4.6 |
✅ | ❌ |
claude-opus-4.6-fast |
✅ | ❌ |
claude-opus-4.6-1m |
✅ | ❌ |
claude-sonnet-4.6 |
✅ | ❌ |
gemini-3-pro-preview |
❌ | ❌ |
Copex also discovers models dynamically from copilot --help at runtime, so newly added models work automatically.
copex models # List all available models
Reasoning Effort
Five levels control how much thinking the model does:
| Level | Description |
|---|---|
none |
No extended reasoning |
low |
Minimal reasoning |
medium |
Balanced |
high |
Thorough reasoning (default for CLI commands) |
xhigh |
Maximum reasoning (GPT-5.2+ only) |
If you request an unsupported level, Copex automatically downgrades and warns you. The CLI defaults --reasoning to high; config and API values are still normalized per model capability.
Advanced Features
Retry & Backoff
Copex uses adaptive per-error-category backoff strategies:
config = CopexConfig(
retry=RetryConfig(
max_retries=5,
base_delay=1.0,
max_delay=30.0,
exponential_base=2.0,
),
)
Error categories (rate limit, network, server, auth, client) each have their own backoff curve. Rate limit errors respect Retry-After headers when available.
Circuit Breaker
A sliding-window circuit breaker opens when the failure rate exceeds 50% in the last 10 requests, then enters a 60-second cooldown before retrying.
Model Fallback Chains
client = Copex(config, fallback_chain=["claude-opus-4.6", "gpt-5.2-codex", "gpt-5.1-codex"])
If the primary model fails, Copex transparently tries the next model in the chain.
Session Pooling
from copex.client import SessionPool
pool = SessionPool(max_sessions=5, max_idle_time=300)
async with pool.acquire(client, config) as session:
await session.send({"prompt": "Hello"})
Ralph Wiggum Loops
Iterative AI development: the same prompt is fed repeatedly, with the AI seeing its own previous work to iteratively improve.
copex ralph "Build a REST API with CRUD and tests" \
--promise "ALL TESTS PASSING" \
-n 20
from copex.ralph import RalphWiggum
ralph = RalphWiggum(copex_client)
result = await ralph.loop(
prompt="Build a REST API with CRUD operations",
completion_promise="API COMPLETE",
max_iterations=30,
)
Plan Mode
AI-generated step-by-step execution with checkpointing and resume:
copex plan "Build a REST API" --execute
copex plan "Build a REST API" --review # Confirm before executing
copex plan --resume # Resume from checkpoint
copex plan "Build a REST API" --visualize ascii
Fleet Mode
Run multiple tasks in parallel with optional dependency ordering:
copex fleet "Write tests" "Fix linting" "Update docs" --max-concurrent 3
copex fleet --file tasks.toml
from copex import Fleet, FleetConfig
async with Fleet(config) as fleet:
fleet.add("Write auth tests")
fleet.add("Refactor DB", depends_on=["write-auth-tests"])
results = await fleet.run()
Features: adaptive concurrency, rate-limit backoff, git finalize, artifact export.
Council Mode
Multi-model deliberation — multiple models investigate a problem, then a chair model synthesizes the best solution:
copex council "Design a caching strategy for our API" \
--chair-model claude-opus-4.6 \
--codex-model gpt-5.2-codex \
--gemini-model gemini-3-pro-preview
MCP Integration
Connect external Model Context Protocol servers:
# In config.toml
mcp_config_file = "~/.config/copex/mcp.json"
Or pass inline:
copex fleet --mcp-config mcp.json "Analyze the codebase"
Checkpointing & Persistence
Ralph loops and plan execution save checkpoints to disk for crash recovery. Sessions can be saved and restored across runs.
CLI Client Mode
Use --use-cli to bypass the SDK and invoke the Copilot CLI directly as a subprocess. This is useful when the SDK doesn't support a model but the CLI does:
copex chat "Hello" --use-cli -m claude-opus-4.6
config = CopexConfig(use_cli=True, model=Model.CLAUDE_OPUS_4_6)
client = make_client(config) # Returns CopilotCLI instead of Copex
Development
# Clone and install
git clone https://github.com/Arthur742Ramos/copex.git
cd copex
pip install -e ".[dev]"
# Include optional feature extras when working on those paths
pip install -e ".[dev,pdf,repo-map,scrape]"
# Run tests
python -m pytest tests/ -v
# Run with coverage
python -m pytest tests/ --cov=copex --cov-report=term-missing
# Lint
ruff check src/
ruff format src/
License
Project details
Release history Release notifications | RSS feed
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 copex-2.23.0.tar.gz.
File metadata
- Download URL: copex-2.23.0.tar.gz
- Upload date:
- Size: 296.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c936d3c9de10e207812b1d0ad57045ced597b038618270eaf2f2eb770185cd9f
|
|
| MD5 |
a4b7661b05ac4cea161f60b59776fd35
|
|
| BLAKE2b-256 |
c9a4d2496382b971412ae4d9fdf8788257225170cb391ea87443481d93d70908
|
File details
Details for the file copex-2.23.0-py3-none-any.whl.
File metadata
- Download URL: copex-2.23.0-py3-none-any.whl
- Upload date:
- Size: 331.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82616b0b6a3a10cba53f3850b00a383b9f617cc0a3c36f2deb16c2fbda80607b
|
|
| MD5 |
c89b9e3767a02d03e4b55aae42224bdd
|
|
| BLAKE2b-256 |
ad974b044e0b9aaa476fb966ed1a46e6b35c47e3649b043490dbe8810655ba36
|