Skip to main content

Cross-vendor multi-model debate and consensus engine for AI response distillation

Project description

Mutual Dissent

pre-commit CI CodeQL

Python 3.11+ License: MIT

Docs

Cross-vendor multi-model debate and consensus engine for AI response distillation.

Web UI with chat-style debate view, dashboard, and full CLI. Multi-model and single-model multi-agent modes. Direct vendor APIs, replay, cost tracking, and markdown export. 400+ tests across Windows and Linux CI.

Built by Richard Spicer · GitHub


Install

pip install mutual-dissent

Or from source:

git clone https://github.com/richardspicer/mutual-dissent.git
cd mutual-dissent
uv sync --group dev

How It Works

  1. Fan out — Query goes to your panel: multiple vendors (Claude, GPT, Gemini, Grok) or multiple agents of the same model
  2. Reflect — Each agent sees the others' responses and argues back
  3. Synthesize — A user-selected model distills the debate into a final answer
  4. Log — Full debate transcript saved as structured JSON with cost and token data

Why Multi-Model Debate?

Single-vendor multi-agent systems (Grok's 4-agent debate, Anthropic's agent teams) share the same training data and blind spots. Cross-vendor debate surfaces disagreements that correlated architectures can't. Mutual Dissent supports both modes: cross-vendor panels for maximum diversity, or single-model multi-agent panels (e.g., --panel claude,claude,claude) where context isolation drives independent evaluation.

Usage

# Run a debate
dissent ask "Your query here"

# With explicit panel and options
dissent ask "Your query here" --synthesizer claude --rounds 2 --panel claude,gpt,gemini
dissent ask "Summarize this" --file report.pdf
dissent replay <transcript-id> --synthesizer grok
dissent serve
dissent config test

mutual-dissent also works as the full command name. Full documentation at docs.mutual-dissent.dev.


Status

Capability Status
Core debate loop ✅ Complete — fan-out, reflection, synthesis
Provider abstraction ✅ Complete — direct Anthropic API, OpenRouter, mixed-panel routing
Single-model multi-agent ✅ Complete — duplicate aliases with context-isolated agents
CLI tools ✅ Complete — replay, scoring, cost tracking, markdown export
Web UI ✅ Complete — Starlette + DaisyUI chat interface, dashboard, settings
Documentation ✅ Complete — Mintlify docs site with AI assistant and MCP server
Desktop app & batch mode Planned — Tauri wrapper, alternative topologies

Transcript Logging

Full debate transcripts are logged as structured JSON — every round, every response, with cost, token, latency, and routing data. Browse and export transcripts via the web dashboard or CLI.

License

MIT

AI Disclosure

This project uses a human-led, AI-augmented workflow. See AI-STATEMENT.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mutual_dissent-0.3.0.tar.gz (773.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mutual_dissent-0.3.0-py3-none-any.whl (74.1 kB view details)

Uploaded Python 3

File details

Details for the file mutual_dissent-0.3.0.tar.gz.

File metadata

  • Download URL: mutual_dissent-0.3.0.tar.gz
  • Upload date:
  • Size: 773.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mutual_dissent-0.3.0.tar.gz
Algorithm Hash digest
SHA256 2efe9ea723ff08111ed8ed059633ddad45d4585334dbfa2fe145e415a78bd4ae
MD5 891e4880d20bfcf78791dd8939208ee0
BLAKE2b-256 85c25ada95ee40b9e1aeeed98be27115ff572c6415c192a10cb4723cad736b34

See more details on using hashes here.

Provenance

The following attestation bundles were made for mutual_dissent-0.3.0.tar.gz:

Publisher: release.yml on richardspicer/mutual-dissent

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mutual_dissent-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: mutual_dissent-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 74.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mutual_dissent-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d1a558d2195fe5e71dfa395ef5fc909ec5deb872f5cd55e2033690377b5fff13
MD5 11b0f82bd27fd9dc5d6a19513bb73d10
BLAKE2b-256 4b1715731710b02d92e7433c8bd7fd13bc5322a345c6d3e5adcb105473e66e11

See more details on using hashes here.

Provenance

The following attestation bundles were made for mutual_dissent-0.3.0-py3-none-any.whl:

Publisher: release.yml on richardspicer/mutual-dissent

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page