Claude-skill-registry 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
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/disagreement-resolution" ~/.claude/skills/majiayu000-claude-skill-registry-disagreement-resolution && rm -rf "$T"
manifest:
skills/data/disagreement-resolution/SKILL.mdsource content
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:
: Voting beats extended debateresearch/003-debate-or-vote.md
: Tests adjudicate better than argumentsresearch/041-debatecoder.md
: Selection beats unguided reasoningresearch/042-rankef.md
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 relevant code/docs |
| Write position/test reports |
| Search codebase for patterns |
Testing
| Command | Purpose |
|---|---|
| Run discriminating tests |
| 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 | | question, context | positions A, B, C... |
| 2 | | positions | discriminating tests |
| 3 | | tests, positions | test results matrix |
| 4 | | 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
— Subagent definitionsagents/
— Pattern documentationdocs/guides/ORCHESTRATOR_SUBAGENT_PATTERN.md
— Test-based adjudication researchresearch/041-debatecoder.md
— Why debate degradesresearch/003-debate-or-vote.md