Skip to content
disagreement-resolution logo

Disagreement Resolution — Orchestrator

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.

SKILL.md

Full skill instructions

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

SignalAction
Multiple agents disagreeRun full protocol
Multiple valid approachesRun full protocol
User asks "which approach"Run full protocol
Architectural decision neededRun 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 debate
  • research/​041-debatecoder.md: Tests adjudicate better than arguments
  • research/​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

ToolPurpose
Read(context_paths)Read relevant code/​docs
Write(file_path, content)Write position/​test reports
Grep(pattern)Search codebase for patterns

Testing

CommandPurpose
pytest tests/​...Run discriminating tests
npm testRun 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

OutcomeWhenAction
Clear winnerTests discriminate (2-1 or better)Document decision
No winnerTests don't discriminatePreserve dissent, ask user
Value tradeoffEqual test resultsPresent 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

PhaseAgentInputOutput
1agents/​positions.mdquestion, contextpositions A, B, C...
2agents/​tests.mdpositionsdiscriminating tests
3agents/​execute.mdtests, positionstest results matrix
4agents/​adjudicate.mdresultsdecision 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)

  1. Update TodoWrite (all phases complete)
  2. If clear winner: present decision with evidence
  3. If no winner: present both positions for user decision
  4. 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'tWhy
Extended rhetorical debateResearch shows it degrades outcomes
Compromise positionsEvidence picks winner, no averaging
Skip test generationRhetoric without tests is noise
Force consensusPreserve dissent for user
More than 2 rounds without testsEscalate to user instead

See Also

  • agents/ — Subagent definitions
  • docs/​guides/​ORCHESTRATOR_SUBAGENT_PATTERN.md — Pattern documentation
  • research/​041-debatecoder.md — Test-based adjudication research
  • research/​003-debate-or-vote.md — Why debate degrades

More Other skills

Delegate independent tasks to specialized agents working concurrently with isolated context.

295.4K 206.3K
View

Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.

179.7K 100.1K
View

Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.

179.7K 89.5K
View

A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).

179.7K 76.1K
View

Fundamental design principles for writing maintainable, testable Python code.

40.2K 21.9K
View

Modern responsive layouts using container queries, fluid typography, CSS Grid, and mobile-first strategies.

40.2K 20K
View

Generate Playwright tests from scenarios using interactive browser exploration and validation.

39.7K 18.2K
View

Modern React state management with Redux Toolkit, Zustand, Jotai, and React Query for every state category.

40.2K 14.7K
View

GDPR-compliant data handling with consent management, data subject rights, and privacy controls.

40.2K 14.3K
View

Python error handling patterns including input validation, exception hierarchies, and partial failure handling. Use when implementing validation logic, designing exception strategies, handling batch processing failures, or building robust APIs.

40.2K 13.5K
View

Detailed multi-file refactor planning with safety checks and rollback guidance.

39.7K 13K
View