Agent skill
disagreement-resolution
Resolve disagreements between agents or approaches using test-based adjudication. Use when agents disagree, when multiple valid approaches exist, when the user asks "which approach", or when making architectural decisions with tradeoffs.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/testing/disagreement-resolution
SKILL.md
Disagreement Resolution — Orchestrator
Test-based adjudication for multi-agent or multi-approach disagreements.
Pattern: This skill uses the orchestrator-subagent pattern. Each phase runs in a fresh context to prevent anchoring bias. See
docs/guides/ORCHESTRATOR_SUBAGENT_PATTERN.md.
When This Applies
| Signal | Action |
|---|---|
| Multiple agents disagree | Run full protocol |
| Multiple valid approaches | Run full protocol |
| User asks "which approach" | Run full protocol |
| Architectural decision needed | Run full protocol |
| User says "/resolve" | Run full protocol |
Philosophy
"Tests are the medium of disagreement, not rhetoric." — DebateCoder
Research backing:
research/003-debate-or-vote.md: Voting beats extended debateresearch/041-debatecoder.md: Tests adjudicate better than argumentsresearch/042-rankef.md: Selection beats unguided reasoning
Key principles:
- Tests decide, not rhetoric
- Max 2 discussion rounds without tests
- Preserve dissent for user decision when tests don't discriminate
- No compromise—evidence picks winner
Tool Reference
File Operations
| Tool | Purpose |
|---|---|
Read(context_paths) |
Read relevant code/docs |
Write(file_path, content) |
Write position/test reports |
Grep(pattern) |
Search codebase for patterns |
Testing
| Command | Purpose |
|---|---|
pytest tests/... |
Run discriminating tests |
npm test |
Run JS/TS tests |
Discriminating Tests
A discriminating test is one where:
- Position A passes, Position B fails (or vice versa)
- It directly tests the contested claim
- Result is observable and repeatable
Decision Outcomes
| Outcome | When | Action |
|---|---|---|
| Clear winner | Tests discriminate (2-1 or better) | Document decision |
| No winner | Tests don't discriminate | Preserve dissent, ask user |
| Value tradeoff | Equal test results | Present options to user |
Architecture
┌─────────────────────────────────────────────────────────────────┐
│ DISAGREEMENT-RESOLUTION ORCHESTRATOR │
│ - Creates session: sessions/resolve-{timestamp}/ │
│ - Manages TodoWrite state │
│ - Spawns subagents with isolated context (prevents anchoring) │
│ - Passes test results, not arguments, between phases │
└─────────────────────────────────────────────────────────────────┘
│
┌────────────────────┼────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Positions │ │ Test Generate │ │ Test Execute │
│ agents/ │ │ agents/ │ │ agents/ │
│ positions.md │ │ tests.md │ │ execute.md │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
01_positions.md 02_tests.md 03_results.md
│ │ │
└────────────────────┼────────────────────┘
│
▼
┌─────────────────┐
│ Adjudicate │ → Decision or user choice
│ agents/ │
│ adjudicate.md │
└────────┬────────┘
│
04_decision.md
Subagents
| Phase | Agent | Input | Output |
|---|---|---|---|
| 1 | agents/positions.md |
question, context | positions A, B, C... |
| 2 | agents/tests.md |
positions | discriminating tests |
| 3 | agents/execute.md |
tests, positions | test results matrix |
| 4 | agents/adjudicate.md |
results | decision or preserved dissent |
Execution Flow
1. Setup (Orchestrator)
1. Create session directory:
mkdir -p sessions/resolve-{timestamp}
2. Initialize TodoWrite with phases:
- [ ] Phase 1: Gather Positions
- [ ] Phase 2: Generate Discriminating Tests
- [ ] Phase 3: Execute Tests
- [ ] Phase 4: Adjudicate
3. Gather inputs:
- question: What is being decided?
- context: Relevant code/docs
- participants: Agents or approaches involved
2. Phase 1: Gather Positions
Spawn: agents/positions.md
Input:
{
"session_dir": "sessions/resolve-{timestamp}",
"question": "Should we use JWT or session tokens for auth?",
"context_paths": ["src/auth/**", "PLAN/requirements.md"]
}
Output:
{
"report_path": "sessions/.../01_positions.md",
"positions": [
{"id": "A", "approach": "JWT tokens", "rationale": "Stateless, scalable"},
{"id": "B", "approach": "Session tokens", "rationale": "Revocable, simpler"}
]
}
3. Phase 2: Generate Discriminating Tests
Spawn: agents/tests.md
Input:
{
"session_dir": "sessions/resolve-{timestamp}",
"positions_path": "<from Phase 1>"
}
Output:
{
"report_path": "sessions/.../02_tests.md",
"tests": [
{"id": "T1", "name": "test_immediate_revocation", "discriminates": "A fails, B passes"},
{"id": "T2", "name": "test_horizontal_scaling", "discriminates": "A passes, B fails"},
{"id": "T3", "name": "test_offline_validation", "discriminates": "A passes, B fails"}
]
}
4. Phase 3: Execute Tests
Spawn: agents/execute.md
Input:
{
"session_dir": "sessions/resolve-{timestamp}",
"tests_path": "<from Phase 2>",
"positions_path": "<from Phase 1>"
}
Output:
{
"report_path": "sessions/.../03_results.md",
"results_matrix": {
"T1": {"A": "FAIL", "B": "PASS"},
"T2": {"A": "PASS", "B": "FAIL"},
"T3": {"A": "PASS", "B": "FAIL"}
},
"a_wins": 2,
"b_wins": 1
}
5. Phase 4: Adjudicate
Spawn: agents/adjudicate.md
Input:
{
"session_dir": "sessions/resolve-{timestamp}",
"results_path": "<from Phase 3>",
"positions_path": "<from Phase 1>"
}
Output:
{
"report_path": "sessions/.../04_decision.md",
"winner": "A",
"confidence": "HIGH",
"rationale": "JWT wins 2-1 on discriminating tests",
"preserved_dissent": "Revocation concern valid—consider short expiry",
"user_decision_needed": false
}
6. Finalize (Orchestrator)
- Update TodoWrite (all phases complete)
- If clear winner: present decision with evidence
- If no winner: present both positions for user decision
- Record decision in ADR if architectural
When Tests Don't Discriminate
If tests pass/fail equally for all positions:
{
"winner": null,
"confidence": "LOW",
"rationale": "Tests don't discriminate—this is a value tradeoff",
"preserved_dissent": [
{"position": "A", "for": "Scalability priority"},
{"position": "B", "for": "Simplicity priority"}
],
"user_decision_needed": true,
"question_for_user": "Do you prioritize horizontal scaling or immediate revocation?"
}
Anti-Patterns
| Don't | Why |
|---|---|
| Extended rhetorical debate | Research shows it degrades outcomes |
| Compromise positions | Evidence picks winner, no averaging |
| Skip test generation | Rhetoric without tests is noise |
| Force consensus | Preserve dissent for user |
| More than 2 rounds without tests | Escalate to user instead |
See Also
agents/— Subagent definitionsdocs/guides/ORCHESTRATOR_SUBAGENT_PATTERN.md— Pattern documentationresearch/041-debatecoder.md— Test-based adjudication researchresearch/003-debate-or-vote.md— Why debate degrades
Didn't find tool you were looking for?