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
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.
| 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 | ✗ | ✗ | ✓ |
pip install duoxFrom 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, openclawduox doctor tells you exactly what's missing and how to fix it.
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 -pWith 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 sessionA Gradio demo of the orchestration loop is hosted on Hugging Face:
👉 https://huggingface.co/spaces/AbteeXAILabs/duox
- 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.mdauto-loaded (walks up from cwd). @filementions — 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 8787exposes goals/sessions over JSON. - Per-project config — drop a
.duo.tomlin any repo to override globals. - Line editor — history,
↑/↓, tab-complete on slash commands + peer names. - 30+ slash commands —
/helplists them all.
~/.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.
# 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}}
}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
duofor backwards compatibility —from duo import …continues to work. The user-facing CLI isduox, withduokept as a legacy alias.
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.
pip install -e '.[test]'
pytest -q # 47 tests, 3 OS × 3 Python versions in CI- PyPI: https://pypi.org/project/duox/
- GitHub: https://github.com/aimaghsoodi/duo
- HF Space (demo): https://huggingface.co/spaces/AbteeXAILabs/duox
- HF model card: https://huggingface.co/AbteeXAILabs/duox
- Issues: https://github.com/aimaghsoodi/duo/issues
MIT © 2026 AbteeX AI Labs.