Ploidy
Intentional context asymmetry to reduce confirmation bias in LLMs.
Why
Ask the same model the same question in separate sessions. You'll get different answers every time — some agree, some disagree, some equivocate. If you continue in just one session, the model's first stochastic response becomes an anchor. It reinforces its own prior, the user builds on it, and the session locks into a trajectory that prompt engineering cannot undo.
This means identical models, identical prompts, identical users — but different project outcomes depending on which random sample landed first. The user is in a probability lottery without knowing it. Task completion time varies, task success varies, and perceived "model performance" varies — all from the same model.
This is not the same problem that multi-agent teams solve. Agent teams (CrewAI, MetaGPT, Claude Agent Teams) divide labor across models for throughput. More hands, same perspective. Under symmetric information, scaling agents is mathematically equivalent to majority voting over identically biased samples — it cannot improve expected correctness.
Ploidy takes the orthogonal approach: deliberately create context asymmetry within the same model, then make the asymmetric sessions debate. A deep session carries full project context. A fresh session starts with zero prior commitment. When they disagree, the cause is isolatable — one has context the other doesn't. That disagreement is the signal.
Quick Start
# Install
pip install ploidy # core server
pip install ploidy[api] # + auto-debate mode (requires OpenAI SDK)
# Start the server
python -m ploidy
Terminal 1 (Deep session) — tell your AI:
"Start a Ploidy debate: Should we use monorepo or polyrepo?"
Terminal 2 (Fresh session) — tell your AI:
"Join Ploidy debate a1b2c3d4e5f6"
MCP Client Configuration
{
"mcpServers": {
"ploidy": {
"type": "streamable-http",
"url": "http://localhost:8765/mcp"
}
}
}
How It Works
Terminal 1 (Deep) Terminal 2 (Fresh)
[Full project context] [Zero context]
| |
└──── debate/start ──→ Ploidy Server ←── debate/join ────┘
(port 8765)
position ──────→ [SQLite + WAL] ←────── position
challenge ─────→ [State Machine] ←───── challenge
converge ──────→ [Convergence] ←────── converge
↓
Structured Result
(agreements, disagreements,
confidence score)
Sessions debate through typed semantic actions (agree, challenge, propose alternative, synthesize) across a five-phase protocol: Independent → Position → Challenge → Convergence → Complete. The Context Asymmetry Spectrum ranges from Deep (full context) through Semi-Fresh (compressed context, passively or actively delivered) to Fresh (zero context).
Tools
| Tool | Description |
|---|---|
debate_start |
Begin a debate with a prompt |
debate_join |
Join as a fresh (zero-context) session |
debate_position |
Submit your stance |
debate_challenge |
Critique with semantic actions (agree/challenge/propose_alternative/synthesize) |
debate_converge |
Trigger convergence analysis |
debate_status |
Check current state |
debate_cancel |
Cancel in progress |
debate_delete |
Permanently delete |
debate_history |
List past debates |
debate_auto |
Run a full two-sided debate automatically via API |
Configuration
All via environment variables:
PLOIDY_PORT=8765 # Server port
PLOIDY_DB_PATH=~/.ploidy/ploidy.db # Database location
PLOIDY_LOG_LEVEL=INFO # Logging level
PLOIDY_AUTH_TOKEN=secret # Bearer token auth (optional)
PLOIDY_API_BASE_URL=https://api.openai.com/v1 # Optional auto-debate backend
PLOIDY_API_KEY=... # Optional API key for auto mode
PLOIDY_API_MODEL=gpt-5.4 # Optional model override for auto mode
Single-Terminal Auto Mode
If you configure an OpenAI-compatible API backend, Ploidy can run both sides of the
debate automatically in one tool call. In debate_auto, the server generates:
- an Experienced position using the provided
context_documents - a Fresh or Semi-Fresh counter-position
- challenge messages from both sides
- the final convergence analysis
Fresh auto sessions must use delivery_mode="none". Semi-Fresh auto sessions must
use delivery_mode="passive" or delivery_mode="active".
Docker
docker compose up
Documentation
- Getting Started — Install and first debate
- How It Works — Core concept
- Architecture — Technical overview
- API Reference — Tool documentation
- Research — Academic positioning
Research
Ploidy extends Cross-Context Review (Song 2026) from unidirectional fresh-session review to bidirectional structured debate. The intersection of context asymmetry × same-model debate × structured protocol has zero published papers as of March 2026.
In pilot experiments, context asymmetry shows no benefit on short-context tasks where entrenchment does not occur — but on long-context tasks with anchoring bias, asymmetric debate achieves the highest ground-truth recall (5/5 vs. single session's 3/5). These results bound where the intervention applies.
License
MIT
Metadata
Release files for ploidy 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ploidy-0.3.2.tar.gz | 180.8 kB | Without provenance | Details for ploidy-0.3.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ploidy-0.3.2-py3-none-any.whl | Python 3 | none | any | Details for ploidy-0.3.2-py3-none-any.whl |
Total release size: 215.0 kB
Release files / ploidy-0.3.2.tar.gz
| Download URL | ploidy-0.3.2.tar.gz |
|---|---|
| Size | 180.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6c7e2cbda5db35f0bab6691e0f25c9184983130df66b5ebf712ea46c38099b03
|
|
BLAKE2b-256 checksum How to use checksums |
055f09c6e35a5f54214bd2b2211381ee0c969d35fe0f4e2bbfe126fccf3d3176
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.11
|
Release files / ploidy-0.3.2-py3-none-any.whl
| Download URL | ploidy-0.3.2-py3-none-any.whl |
|---|---|
| Size | 34.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
639904a4689490f3318bc14d1b3e7c25ceb563ff29e877baae701e65545621c7
|
|
BLAKE2b-256 checksum How to use checksums |
3042f02c8229c8c389a0c633ea144e7abbf9dc7123a30053ea54a23638a6cae7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.11
|
Security for ploidy 0.3.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.