Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Orchestrates lively group discussions between installed BMAD agents or custom personas, and helps author custom parties. Use when the user requests party mode, a roundtable, or multiple agent perspectives — or wants to create/configure a party, define personas, or build an AI focus-group panel
.claude/skills/bmad-code-org-bmad-party-mode/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 74% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 33% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 102% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 67% | 0% |
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_config.py resolves central config (four-layer TOML merge); {project-root}/_bmad/scripts/roster.py reports the agents, guests and groups the installed skills offer; {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} --project-root {project-root} --key workflow.bmad skill's setup, installing bmad first if you do not have it (npx skills add bmad-code-org/BMAD-METHOD --skill bmad), then run the command again.{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).
uv run {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}. From the merged JSON's core table resolve {output_folder}; {date} is today's date. Greet the user.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 (yours, the built-in ones, and any an installed module offers), 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, codes come back unresolved, or roster_problems is present, tell the user, carry on with what returned, and improvise. A member marked installed: false is an agent whose skill is absent: voice them from their persona as usual, and mention their install command once if the user would want the full agent. 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.
A party is interactive and open-ended. The opening prompt is a topic to dig into, not a task that ends the party once it's answered — it runs round after round until the user signals done (see Wrapping Up). A served opening intent means what's next?, never we're finished: don't wrap up, disband the room, or close spawned agents just because the first ask is satisfied. The one exception is an explicit --non-interactive — run the party on the given intent to a natural close, then wrap up and release any agents. That's the only non-interactive path, and only when the user asked for it.
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 — a real agent behind each persona every substantive round so each 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 — or an explicit --non-interactive run has served its intent (never merely because the opening prompt got answered):
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.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 24,521 | 14,060 | -43% | 1 | 1 | 0% | 2,083 | 2,844 | +37% | 0 | 0 | — |
case-02 | fail→fail | 21,753 | 38,421 | +77% | 1 | 1 | 0% | 2,985 | 2,916 | -2% | 0 | 0 | — |
case-03 | fail→fail | 33,397 | 12,452 | -63% | 1 | 1 | 0% | 6,437 | 2,796 | -57% | 0 | 0 | — |
case-04 | fail→pass | 25,689 | 6,042 | -76% | 1 | 1 | 0% | 1,938 | 3,381 | +74% | 0 | 0 | — |
case-05 | fail→pass | 16,021 | 7,321 | -54% | 1 | 1 | 0% | 2,174 | 2,885 | +33% | 0 | 0 | — |
case-06 | fail→pass | 23,276 | 10,743 | -54% | 1 | 1 | 0% | 2,651 | 3,025 | +14% | 0 | 0 | — |
case-07 | fail→pass | 20,941 | 8,518 | -59% | 1 | 1 | 0% | 1,869 | 3,771 | +102% | 0 | 0 | — |
case-08 | fail→pass | 14,089 | 16,874 | +20% | 1 | 1 | 0% | 1,960 | 3,272 | +67% | 0 | 0 | — |
case-09 | fail→fail | 10,313 | 4,551 | -56% | 1 | 1 | 0% | 1,743 | 3,148 | +81% | 0 | 0 | — |
case-10 | fail→fail | 12,506 | 4,998 | -60% | 1 | 1 | 0% | 2,038 | 2,728 | +34% | 0 | 0 | — |
case-11 | fail→fail | 12,071 | 4,200 | -65% | 1 | 1 | 0% | 1,723 | 3,072 | +78% | 0 | 0 | — |
case-12 | fail→pass | 11,450 | 4,523 | -60% | 1 | 1 | 0% | 1,859 | 3,120 | +68% | 0 | 0 | — |
case-13 | fail→pass | 51,219 | 3,956 | -92% | 1 | 1 | 0% | 2,150 | 2,980 | +39% | 0 | 0 | — |
case-14 | pass→pass | 15,829 | 5,579 | -65% | 1 | 1 | 0% | 2,192 | 3,102 | +42% | 0 | 0 | — |
case-15 | fail→pass | 13,340 | 5,005 | -62% | 1 | 1 | 0% | 1,786 | 3,186 | +78% | 0 | 0 | — |
case-16 | fail→pass | 41,062 | 2,687 | -93% | 1 | 1 | 0% | 7,117 | 2,775 | -61% | 0 | 0 | — |
case-17 | pass→fail | 16,269 | 11,629 | -29% | 1 | 1 | 0% | 2,456 | 3,222 | +31% | 0 | 0 | — |
case-18 | fail→fail | 32,435 | 10,353 | -68% | 1 | 1 | 0% | 1,732 | 3,073 | +77% | 0 | 0 | — |
case-19 | fail→pass | 28,083 | 2,734 | -90% | 1 | 1 | 0% | 1,765 | 2,772 | +57% | 0 | 0 | — |
case-20 | pass→pass | 13,546 | 24,096 | +78% | 1 | 1 | 0% | 2,646 | 6,865 | +159% | 0 | 0 | — |
case-21 | pass→fail | 7,614 | 9,680 | +27% | 1 | 1 | 0% | 882 | 2,928 | +232% | 0 | 0 | — |
case-22 | pass→pass | 40,759 | 25,785 | -37% | 1 | 1 | 0% | 1,699 | 5,887 | +246% | 0 | 0 | — |
case-23 | pass→fail | 33,377 | 13,497 | -60% | 1 | 1 | 0% | 2,929 | 4,286 | +46% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 19 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +30 percentage points is the difference between those two pass rates over the 19 comparable cases. 5 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.