# Debate Hall Manual

> Manual turn-by-turn debate control for custom orchestration scenarios.

- Skill: `elevanaltd-debate-hall-mcp/debate-hall-manual` (Agent Skill)
- Install (CLI): `npx skillmds@latest add elevanaltd-debate-hall-mcp/debate-hall-manual`
- Raw SKILL.md: https://api.skillmd.com/api/skills/elevanaltd-debate-hall-mcp/debate-hall-manual/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: elevanaltd (https://skillmd.com/u/elevanaltd-debate-hall-mcp)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/elevanaltd-debate-hall-mcp/debate-hall-manual

---


===DEBATE_HALL_MANUAL===

META:
  TYPE::SKILL[FOCUSED]
  VERSION::"1.0"
  PURPOSE::"Manual turn-by-turn debate control"
  ROUTER::debate-hall

§1::WORKFLOW
  SEQUENCE::INIT→TURN→GET→CLOSE

§2::TOOLS

  INIT_DEBATE::[
    thread_id::REQUIRED[FORMAT:"YYYY-MM-DD-descriptor"],
    topic::REQUIRED,
    mode::"fixed"|"mediated"[default:fixed],
    max_turns::12[default],
    max_rounds::4[default],
    strict_cognition::false[default]
  ]

  ADD_TURN::[
    thread_id::REQUIRED,
    role::REQUIRED["Wind"|"Wall"|"Door"],
    content::REQUIRED,
    cognition::PATHOS|ETHOS|LOGOS[optional],
    agent_role::STRING[audit_trail],
    model::STRING[audit_trail]
  ]

  GET_DEBATE::[
    thread_id::REQUIRED,
    include_transcript::true[default],
    context_turns::INTEGER[optional_limit]
  ]

  CLOSE_DEBATE::[
    thread_id::REQUIRED,
    synthesis::REQUIRED[Door_final_text],
    output_format::"json"|"octave"|"both"
  ]

  PICK_NEXT_SPEAKER::[
    thread_id::REQUIRED,
    role::"Wind"|"Wall"|"Door",
    USE_IN::mediated_mode_only
  ]

§3::MODES

  FIXED::[
    SEQUENCE::Wind→Wall→Door→repeat,
    USE_FOR::[structured_decisions,guaranteed_coverage]
  ]

  MEDIATED::[
    SEQUENCE::pick_next_speaker_determines_order,
    USE_FOR::[dynamic_debates,breaking_deadlocks],
    WARNING::"Can bias outcomes if roles starved"
  ]

§4::EXAMPLE
  init_debate("2026-02-09-api-design","REST vs GraphQL?")
  add_turn(thread_id,"Wind","What if GraphQL? Single endpoint, client flexibility...")
  add_turn(thread_id,"Wall","Yes, but complexity. Team experience, caching challenges...")
  add_turn(thread_id,"Door","Therefore: REST for public API, GraphQL for internal dashboard...")
  close_debate(thread_id,synthesis,output_format:"octave")

§5::PARALLEL_AGENTS
  // Restored from monolith §4.1, §7.4, §11

  DEFINITIONS::[
    PARALLEL_THINKING::"Generate candidate turns concurrently off-server (multiple models/processes)",
    SEQUENTIAL_COMMIT::"Persist turns in strict order via add_turn (one committed head at a time)"
  ]

  HARD_RULES::[
    DOOR_NEVER_SYNTHESIZES_BEFORE_WIND_AND_WALL_COMMITTED,
    WALL_REALITY_TESTS_CONCRETE_WIND_OUTPUT,
    ONE_COMMIT_PER_THREAD_AT_A_TIME[avoid_lost_updates],
    RETRY_ON_STALE_STATE::get_debate→regenerate→add_turn
  ]

  BARRIER_PROTOCOL::[
    ROUND::Rk[
      STEP_1::snapshot=get_debate(thread_id),
      STEP_2::spawn_parallel_drafts[Wind_draft,Wall_draft],
      STEP_3::serial_commit::add_turn(Wind)→add_turn(Wall),
      STEP_4::Door_reads_latest=get_debate(thread_id)→synthesize→add_turn(Door),
      STEP_5::repeat_or_close
    ]
  ]

  BEST_PRACTICES::[
    DEFAULT::parallel_draft_sequential_commit,
    DOOR_BARRIER::"Door must read latest state after Wind+Wall commits",
    WALL_FRAMEWORK_MODE::"If drafting early, write constraints then apply post-Wind"
  ]

  DEPLOYMENT::REQUIRE::DEBATE_HALL_STATE_DIR_set_to_shared_location[avoid_split_brain]

===END===

