Use, extend, and ship with Duel Agents: the IDE-native routing layer that runs prompts against multiple models and picks the cheapest answer that still wins.
This repo is the official integration package for duelagents.com.
Every tool in this repo routes LLM traffic through https://duelagents.com/v1 with a Duel API key (duel_<prefix>_<secret>).
You cannot use raw Anthropic or OpenAI keys with these integrations. Get a key from the dashboard:
https://duelagents.com/dashboard/settings (subscribe → create API key)
# 1. Get your key from the dashboard, then:
export DUEL_API_KEY=duel_yourprefix_yoursecret
# 2. Install for your tools
npx @duel-agents/install all
# 3. Verify
npx @duel-agents/install doctor| Tool | Command |
|---|---|
| Claude Code | npx @duel-agents/install claude-code |
| Cursor | npx @duel-agents/install cursor |
| Codex CLI | npx @duel-agents/install codex |
| OpenClaw | npx @duel-agents/install openclaw |
| All | npx @duel-agents/install all |
git clone https://github.com/2aronS/Duel-Agents.git
cd duel-agents
claude plugin install ./integrations/claude-plugin
npx @duel-agents/install claude-codeUse /duel-agents:setup in Claude Code for guided setup.
The installer copies a skill to .cursor/skills/duel-agents/ and writes DUEL_API_KEY to your project .env.
You still need to set Settings → Models → Override OpenAI Base URL to https://duelagents.com/v1 with your Duel key. See templates/cursor-models.override.md.
Writes OPENAI_BASE_URL and OPENAI_API_KEY (your Duel key) to .env. Restart Codex after install.
Patches ~/.openclaw/openclaw.json with a duel provider and sets default model to duel/duel-auto. Telegram/Discord channels are unchanged. Only the model backend switches to Duel.
npx @duel-agents/install openclaw
openclaw config validateReference config: templates/openclaw.duel.json5
Use @duel-agents/sdk in your apps, agents, and scripts. apiKey is required.
npm install @duel-agents/sdkimport { DuelClient } from "@duel-agents/sdk";
const duel = new DuelClient({
apiKey: process.env.DUEL_API_KEY!, // required (from dashboard)
});
// OpenAI-compatible
const chat = await duel.chat.completions.create({
model: "duel-auto",
messages: [{ role: "user", content: "Explain concurrent agents briefly." }],
});
// Anthropic-compatible
const msg = await duel.messages.create({
model: "duel-auto",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello" }],
});Hermes Agent, Venice, and any OpenAI-compatible client can use the same pattern:
OPENAI_BASE_URL=https://duelagents.com/v1
OPENAI_API_KEY=duel_yourprefix_yoursecret| Variable | Purpose |
|---|---|
DUEL_API_KEY |
Your Duel API key (required) |
DUEL_AGENTS_API_KEY |
Alias accepted by the installer |
DUEL_PROXY_URL |
Override proxy URL (staging only) |
OPENCLAW_CONFIG_PATH |
Custom OpenClaw config path |
| Symptom | Fix |
|---|---|
Invalid API key format |
Key must be duel_ + 8 chars + _ + 32 chars. Create one at the dashboard. |
401 from doctor |
Key revoked or subscription inactive. Create a new key on billing/settings. |
Could not reach Duel API |
The proxy at duelagents.com/v1 must be running. Key format can still be valid; retry later. |
| OpenClaw won't start | Run openclaw config validate after install; restore from openclaw.json.bak if needed. |
| Cursor still uses OpenAI | Confirm model override URL and that the API key field is your duel_* key. |
| Skill copy failed after npm install | Re-run npm run build in the repo, or reinstall @duel-agents/install. Skills ship inside the package. |
packages/core @duel-agents/core validation, env maps, connectivity
packages/cli @duel-agents/install installer CLI
packages/sdk @duel-agents/sdk TypeScript API client
integrations/ Claude plugin, Cursor skill, OpenClaw skill
templates/ Example env and config files
npm install
npm run build
npm testSee CONTRIBUTING.md.
MIT. See LICENSE.