src/core-skills/bmad-party-mode/SKILL.md
Run a round-table where these agents talk to each other and to the user like real, distinct people in conversation. You're the orchestrator.
references/create-party.md) resolve from {skill-root} (where customize.toml lives); {project-root}-prefixed paths from the project working dir. {workflow.<name>} resolves to customize.toml's [workflow] table (overrides win).uv run): {project-root}/_bmad/scripts/resolve_customization.py resolves {workflow.*}; {skill-root}/scripts/resolve_party.py resolves the roster, party_mode, memory_enabled, and scene/open_cast; {project-root}/_bmad/scripts/memlog.py reads/writes per-party memory.{workflow.memory_dir}/<party>/.memlog.md; custom members and groups live in the user's customize.toml overrides. Mechanics in references/party-memory.md (memory) and references/create-party.md (authoring).uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow. On failure, read {skill-root}/customize.toml directly and use defaults. Then run each {workflow.activation_steps_prepend} entry, and hold each {workflow.persistent_facts} entry as session-long context (file:-prefixed = paths/globs whose contents load as facts; skill:-prefixed = a skill to consult; others = literal facts).{project-root}/_bmad/core/config.yaml: greet with {user_name}, speak in {communication_language}, and resolve {output_folder} and {date}.references/create-party.md and follow it. Otherwise run a party — continue below.uv run {skill-root}/scripts/resolve_party.py --project-root {project-root} --skill {skill-root}. It returns the active roster ({workflow.default_party} group if set, else the installed agents), the other group names, party_mode, memory_enabled, and any scene/open_cast. Apply them: open already in the scene and let it shape how the room behaves; cast open_cast rooms on the fly (whoever fits the moment, varying as the topic shifts); if installed_agents_resolved is false or codes come back unresolved, tell the user, carry on with what returned, and improvise. Overrides: an inline-named cast IS the roster for the session (conjure them, go straight in); --party <id> (alias --group <id>) overrides the configured default_party (unknown id -> show the available names and ask); --list-groups for just the menu. Mid-session the same levers apply: switch rooms by re-running resolve_party.py --party <id> and carrying the thread over, or summon any collective member by name.memory_enabled (from resolve_party.py), follow references/party-memory.md for the whole run.{workflow.activation_steps_append} entry; if either hook list was non-empty, confirm every entry ran before continuing.This is the bar — strive for every one of these, every round. It's the difference between a party and a panel:
{icon} **{name}:**, back to back — not a row of answers. Add staging and connective tissue, but never change what a persona argued, and never paraphrase their speech in third person; let them say it. Weave the delivery, keep the substance.Use {workflow.party_mode} for the session unless the user passed --mode <session|auto|subagent|agent-team> (the older --subagents means subagent) — runtime intent always wins. One mode is active at a time; if its mechanism isn't available in your harness, fall back to session without comment.
session — voice every persona inline, one mind behind every voice. The floor every other mode degrades to; needs no extra instructions.auto — voice inline for ordinary back-and-forth, spawn real agents only when independent thinking changes the outcome. Load references/mode-auto.md for that call; when it says to spawn, follow references/mode-subagent.md.subagent — spawn a real agent per substantive round so each persona thinks independently. Load references/mode-subagent.md, favor faster cheaper models if available for each subagent.agent-team — stand the personas up as a persistent team who address each other directly (Claude Code only). Load references/mode-agent-team.md.When the user signals done (read the room — don't wait for a magic word):
references/party-memory.md) — a top-up; memory accrued live.{date}-stamped .html into {workflow.output_dir}/, or wherever they ask.references/create-party.md (declinable; don't stall the close).{workflow.on_complete} if non-empty, then drop back to normal mode.