Skip to main content

DuoX — by AbteeX AI Labs

Claude Code · Codex · Ollama · OpenClaw — one terminal, one transcript.
A multi-peer AI CLI orchestrator with shared memory, cross-checking, parallel swarms, MCP passthrough, and automatic credit fallback.

an AbteeX AI Labs release · site · github · huggingface space

PyPI Python CI License


DuoX is a drop-in CLI alternative to Claude Code / Codex CLI that runs them together — plus Ollama (local) and OpenClaw (inter-agent channels) — under one supervisor loop. One prompt, many peers, a shared transcript, a single scrolling interface.

Why DuoX?

Claude Code Codex CLI DuoX
Single-agent chat ✓ ✓ ✓
Multiple agents in one transcript ✗ ✗ ✓
Cross-validation (planner ↔ executor) ✗ ✗ ✓
Parallel sub-agent fan-out ✗ ✗ ✓
Automatic credit/rate-limit fallback ✗ ✗ ✓
Local Ollama fallback ✗ ✗ ✓
MCP pass-through ✓ ✗ ✓
CLAUDE.md / AGENTS.md auto-context ✓ ✓ ✓
@file mentions, /compact, /remember ✓ partial ✓
Headless -p + JSON output ✓ ✓ ✓
HTTP API daemon ✗ ✗ ✓

Install

pip install duox

From source:

git clone https://github.com/aimaghsoodi/duo && cd duo
pip install -e .

Requires Python 3.10+. After install:

duox init      # write ~/.duo/config.toml + sample skill
duox doctor    # verify peers, MCP, readline, openclaw

duox doctor tells you exactly what's missing and how to fix it.

Quick start

Interactive (default — Claude-Code-like loop):

duox
# then type your goal, or any of:
#   /help  /tips  /examples  /peers  /cost  /compact  /remember  /doctor
#   @src/main.py                  (inline file excerpt)
#   @src/main.py:40-80            (line range)
#   /cd ../other-repo             (switch working dir mid-session)

Headless (for scripts / CI / git hooks):

duox -p "summarise the last 10 commits"
duox -p "run the test suite and fix any failures" --output-format json
echo "review my changes" | duox -p

With specific peers / supervisor:

duox --peers claude,codex,ollama --supervisor claude "refactor the auth module"
duox --parallel "run these three benchmarks"
duox --resume abc123   # resume a previous session

Try it live

A Gradio demo of the orchestration loop is hosted on Hugging Face:

👉 https://huggingface.co/spaces/AbteeXAILabs/duox

Features

  • Shared transcript — every peer sees every message.
  • Supervisor / executor loop — one peer plans & validates, others execute.
  • Parallel swarm mode — fan the same task across peers, supervisor merges.
  • Credit fallback — rate-limit/429/"out of credits" auto-fails over.
  • Context files — CLAUDE.md, AGENTS.md, DUO.md auto-loaded (walks up from cwd).
  • @file mentions — inline file/dir/line-range excerpts in any prompt.
  • Skills — markdown prompts in ~/.duo/skills/ auto-injected by keyword match.
  • Sessions — JSONL event log + transcript under ~/.duo/sessions/; duox --resume.
  • Hooks — run commands on pre_step/post_step (tests, linters, formatters).
  • MCP pass-through — [mcp.servers.*] in your config is forwarded to Claude.
  • HTTP API — duox serve --port 8787 exposes goals/sessions over JSON.
  • Per-project config — drop a .duo.toml in any repo to override globals.
  • Line editor — history, ↑/↓, tab-complete on slash commands + peer names.
  • 30+ slash commands — /help lists them all.

Configuration

~/.duo/config.toml:

peers        = ["claude", "codex", "ollama"]
supervisor   = "claude"
ollama_model = "llama3.1"
max_steps    = 30
parallel_default = false

[hooks]
pre_step  = []
post_step = ["pytest -q"]

[mcp.servers.context7]
command = "npx"
args    = ["-y", "@upstash/context7-mcp"]

[openclaw]
thinking = "high"

Project-level .duo.toml in your repo root is deep-merged on top.

Headless / scripting

# Plain text (stdout = final answer)
duox -p "give me a release-notes draft"

# JSON envelope with per-peer stats
duox -p "audit this PR" --output-format json | jq '.final'

JSON output shape:

{
  "ok": true,
  "final": "…final answer…",
  "session_id": "20260418-abc",
  "turns": 14,
  "peers": {"claude": {"calls": 4, "seconds": 12.3, "tokens_in": 4280, "tokens_out": 910}}
}

Architecture

user prompt
    ↓
 supervisor ──► JSON decision {action, to, instructions}
    │
    ├── delegate ─► executor peer(s) ─► output
    │                     │
    │                     └── (parallel) ─► merge
    ├── execute_self
    ├── validate
    └── done  ─► final answer

Under the hood: claude -p --dangerously-skip-permissions, codex exec --dangerously-bypass-approvals-and-sandbox, ollama run, and openclaw agent, streamed through a small Python orchestrator.

Note: the internal Python package is still named duo for backwards compatibility — from duo import … continues to work. The user-facing CLI is duox, with duo kept as a legacy alias.

Safety

DuoX runs peer CLIs with permissive flags so they can actually do work. Run it in a directory you trust — ideally a scratch repo, container, or VM. The transcript shows every action; read it.

Develop

pip install -e '.[test]'
pytest -q          # 47 tests, 3 OS × 3 Python versions in CI

License

MIT © 2026 AbteeX AI Labs.

Release files for duox 0.2.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for duox 0.2.7
File Size Uploaded
duox-0.2.7.tar.gz 44.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for duox 0.2.7
File Interpreter ABI Platform
duox-0.2.7-py3-none-any.whl Python 3 none any Details

Total release size: 87.5 kB

Release files / duox-0.2.7.tar.gz

Download URL duox-0.2.7.tar.gz
Size 44.3 kB
Tags Source
SHA-256 checksum
How to use checksums
16bf77b82b92f7466258258f779ba8ee5fa88ad18550a7d005c38c670d127293
BLAKE2b-256 checksum
How to use checksums
9c85dd2f9645e2dfed28dee6e1b61132de41c7fcae7b39bcf118dedf10f79926
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.5

Release files / duox-0.2.7-py3-none-any.whl

Download URL duox-0.2.7-py3-none-any.whl
Size 43.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3588858e76fbd93cdc9d89f6354c780f2f60e190f746020bff06aaca1ab87593
BLAKE2b-256 checksum
How to use checksums
67f05b188b59319a372cfaa333420eb03e495793d04efc62fce3ba2909996b0a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.5

Release history Release notifications | RSS feed

This release

0.2.7 This release

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page