Skip to content
Projects

bottomless/agent-duel has 35 GitHub stars and 8 forks. GitHot measured +1 stars in 24 hours. Last checked 2026-11-11 21:34 UTC. Last push 2026-11-09.

How these counts are measured

Blinded battles between coding agents: two agents, one prompt, you pick the winner. Desktop app, runs locally.

35 stars8 forks +1 in 24h

Measured star growth

in 24h
+1
in 7 days
Update delayed
in 15 days
Update delayed
in 1 month
Update delayed

Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.

README.md

Original

Agent Duel logo

Agent Duel

A desktop coding-agent battle interface built on Paseo.

Agent Duel runs two blinded coding agents against one prompt in isolated local worktrees. You compare their results, choose A, B, or Tie, and continue from the selected result as ordinary chat history.

Each contestant is a model drawn at random from a pool and run through the bundled engine. You only see which models they were after you vote.

A battle: two agents' results side by side, with Choose A, Tie and Choose B below

The shipped product is the Electron desktop app. packages/app can run in a browser during development and automated QA, but there is no hosted browser product.

Download

Download for macOS (Apple silicon)

E-mail signup required for use. No cost for unlimited inference with frontier models.

Current models

The hosted version draws from:

  • Claude Fable 5.1
  • Claude Opus 5.5
  • GPT-6 Astra
  • GPT-6.1 Sol
  • Kimi K3
  • Muse Wonder
  • Grok 4.7
  • Qwen 3.8 Max
  • Gemini 4 Argon
  • DeepSeek V4.1 Flash 1017
  • MiMo-V2.6 Flash

Architecture

Execution stays on your machine:

Electron UI -> local daemon -> local Arena runtime -> local repositories and agents
                                       |
                                       |-> Agent Duel cloud -> OpenRouter (official download)
                                       `-> OpenRouter (your key in a BYOK build)

The UI WebSocket terminates at the local daemon. The packaged desktop application contains the daemon, renderer, and compiled Arena runtime.

The official download uses Agent Duel's cloud service for sign-in, model assignments, and model calls. The cloud service is closed source and maintained outside this repository.

Arena history is canonical on the desktop: SQLite records live under $PASEO_HOME/arena/arena.sqlite and artifact bytes under $PASEO_HOME/arena/artifacts/sha256/.

Read docs/architecture.md for the complete system design and docs/arena.md for the battle.

Develop locally

Local development requires no sign-in. Battles run on your own OpenRouter key, and votes are not uploaded.

Requirements

  • macOS or Linux
  • Node.js 22 with npm
  • Bun 1.3.14
  • An OpenRouter API key

Install both package graphs, then start the desktop stack in bring-your-own-key mode from the repository root:

npm install
cd arena-backend && bun install && cd ..
npm run dev:desktop -- --byok

The launcher prepares an isolated checkout-local environment and starts the local daemon, the Electron-flavoured Expo server, and Electron. It reports [dev] healthy: when the stack is ready. Paste your OpenRouter key in Settings; battles run on that key.

Troubleshooting

  • If a dependency is missing, run npm install at the root and bun install in arena-backend.
  • If a port is busy, leave the daemon, Expo, and debugger ports unset where supported so the launcher can choose free ports.
  • Inspect .dev/paseo-home/daemon.log for daemon failures.

See docs/development.md for worktrees, multiple instances, Playwright/Chrome testing, logs, and focused validation commands. To package the desktop app with hosted sign-in or your own OpenRouter key, see the desktop build instructions.

Repository map

  • arena-backend/packages/opencode — local Arena engine compiled into desktop.
  • arena-backend/packages/arena-service — battle routes (model draw, model proxy, comparison) shared with the hosted service.
  • packages/desktop — Electron shell, daemon supervision, and packaging.
  • packages/app — shared renderer; browser execution is a development/QA surface.
  • packages/server — local daemon, WebSocket API, and agent lifecycle.
  • packages/protocol and packages/client — local wire protocol and client SDK.
  • packages/cli — local daemon CLI bundled with desktop.
  • packages/relay — inherited optional remote-access transport.

Common commands

npm run dev:desktop -- --byok        # Complete local desktop stack on your OpenRouter key
npm run dev                          # Local daemon only
npm run dev:app                      # Browser-based development/QA renderer
npm run build:server                 # Build daemon and shared packages
npm run typecheck
npm run lint
npm run format

Contributing

See CONTRIBUTING.md. Questions and help: SUPPORT.md. Security: SECURITY.md. Everyone taking part follows the Code of Conduct.

Built on

Agent Duel is a fork of Paseo, which provides the desktop app, local daemon, and agent integrations. Its bundled battle engine is built on a vendored fork of OpenCode.

Agent Duel adds blinded coding-agent battles, side-by-side comparison, and voting that carries the selected result into your chat and repository.

License

We plan to move the application to Apache-2.0 after rebasing onto Apache-licensed Paseo and clearing any remaining AGPL-only material.

NOTICE has the full licensing and attribution details. The hosted Agent Duel service is not part of this repository.

Explore related projects