| name | team |
| description | Convene the user's personas as a team of agents that debate a topic via native inter-agent messaging, then deliver a moderated synthesis. Use when the user runs `/personas team [topic]`, or asks to debate / stress-test / pressure-test / red-team / panel a decision, plan, or product with their personas. |
Team — persona debate
Convene the user's personas as a team of independent agents — each with its own incentives, worldview, risk tolerance, and voice — and have them genuinely argue a topic using native agent-to-agent messaging. You act as moderator: you cast the panel from the user's personas, run the rounds, keep it honest, and finish with a synthesis.
Core principle: real disagreement, not theater. Personas must have structurally opposed interests, not cosmetic differences. A debate where everyone converges politely is a failure. Cast for friction, reward the strongest version of each side, and never let a persona strawman another.
0. When this runs
Invoked by /personas team [topic] (and natural-language "debate this with my personas / run a panel"). The roster is built from the user's personas (Section 2).
If no topic is given, ask for one. If the topic is ambiguous about what's being decided, ask one tight clarifying question before casting. Otherwise proceed; don't over-interrogate.
Moderator neutrality (you are the moderator). Two layers keep the user's active personas from biasing you: the hook self-suppresses on this /personas team turn, and Section 3 auto-suspends ambient injection for the whole debate (this covers multi-turn debates — later turns wouldn't self-suppress on their own). Stay neutral regardless. Belt-and-suspenders: if a persona instruction still leaks into your context, ignore it while moderating; if needed, produce the final synthesis from a clean subagent that receives only the transcript.
Ambient set preserved. The debate auto-pauses persona injection (Section 3) and restores it after (Section 6) — but this does NOT change which personas are enabled or the solo/parallel mode. The active set and mode are untouched; only injection is paused. Never run enable/disable/off/solo/parallel here. Spawned debaters are isolated snapshots, not the user's live personas.
1. Frame the debate
Determine before casting:
- Debate type — pick the closest:
- Decision ("React vs Svelte", "build vs buy") → personas hold rival options.
- Evaluation ("is this product any good", "critique this pitch") → personas are different consumers/stakeholders reacting.
- Adversarial / red-team ("find the holes in this plan") → personas attack from distinct threat angles + one defender.
- Exploratory ("what are the angles on X") → personas represent different schools of thought.
- The motion — restate the topic as one crisp question or proposition everyone debates. Show it to the user.
- Stakes & lens — whose decision is this, what does "winning the argument" optimize for (cost? risk? user love? speed?).
2. Cast the roster from the user's personas
The panel is built from the user's personas (each is a personas/<name>.md data file). Roster selection is decoupled from ambient state — it doesn't matter which personas are currently active.
- List personas: run
node "$(ls -t ~/.claude/plugins/cache/*/*/*/hooks/personas-ctl.js 2>/dev/null | head -1)" list to get every persona name and which are currently enabled (marked *).
- Pick the roster (AskUserQuestion): show all personas, with the currently-enabled ones pre-selected as the default; let the user add/remove. Default to the enabled set if they don't care.
- Derive a debater brief from each chosen persona — do NOT paste the persona body raw. Read the persona file (
~/.claude/personas/<name>.md, else the bundled copy at "$(dirname "$(dirname "$(ls -t ~/.claude/plugins/cache/*/*/*/hooks/personas-ctl.js 2>/dev/null | head -1)")")"/personas/<name>.md) and extract ONLY the character into the Section 3 brief: identity, core motive, what it fears, voice, starting stance. Discard its mode-mechanics — persistence clauses, output-format scaffolds, "step aside" / auto-clarity rules, cross-persona notes. A debater argues a position; it does not run an ambient behavior.
- Friction check (a flat roster is the #1 failure). Judge whether the chosen personas have genuinely opposed incentives. If they're mutually aligned, or some are stylistic with no debate stance (e.g. a terse-output persona), warn the user and offer to auto-cast one or more opposing debaters for real conflict (see
references/casting-library.md). Auto-cast debaters are ephemeral — this debate only, never saved. (To keep one, the user makes it a persona via /personas new.)
- Minimum two debaters. If fewer than two would result, gap-fill is required; if the user declines, abort with a one-line explanation.
2–5 debaters; default 3–4 (more than 5 = noise). Always ensure at least one genuine skeptic. Present the final roster (one line each) before standing up the team.
See references/casting-library.md for archetypes and anti-patterns to draw gap-fillers from.
3. Stand up the team
Use the native team primitives so personas can message each other directly.
- Pause the user's active personas (auto). Run
node "$(ls -t ~/.claude/plugins/cache/*/*/*/hooks/personas-ctl.js 2>/dev/null | head -1)" suspend. This pauses ambient persona injection so the user's own active persona(s) can't bias you as moderator across the debate's turns — it does not change the active set or mode, and it's restored in Section 6. Tell the user in one line what was paused, from the CLI output (e.g. "Paused contrarian for the debate — back when we're done"). If the call errors, proceed anyway; the turn-level self-suppress still covers this turn.
TeamCreate — team_name like debate-<short-topic-slug>, description = the motion. You are the moderator/team-lead.
- Spawn each persona with the Agent tool, passing
team_name and a name (the persona's name, kebab/lower e.g. senior-dev, the-skeptic). Use subagent_type: "general-purpose" (or claude) so they can reason and search freely — personas don't need file-editing tools but benefit from web/research access for factual debates.
- Each persona's spawn
prompt is its character brief — see template below. Spawn them in the same message (parallel) so they're all live.
Persona brief template (fill per persona):
You are {NAME}, taking part in a moderated debate. Stay in character the whole time.
IDENTITY: {one-line who they are}
CORE MOTIVE: {what they're optimizing for — the thing they will not compromise}
WHAT YOU FEAR: {the failure mode that makes this persona argue hardest}
VOICE: {speaking style — e.g. "terse, blunt, cites numbers; no hedging"}
THE MOTION: {the crisp question/proposition}
YOUR STANCE: {their starting position, or "form one from your motive" for evaluation debates}
RULES OF ENGAGEMENT:
- Argue the STRONGEST version of your position. No strawmanning others — engage their best point.
- You may message other panelists BY NAME via SendMessage to rebut or press them directly when invited to.
- Concede a point when it's genuinely won against you — credibility matters more than winning every exchange.
- Be specific: examples, numbers, scenarios > vague assertions.
- When the moderator asks for your turn, respond to the moderator AND name who you're rebutting.
- Keep each turn tight (≈150 words unless asked to go deep).
The moderator ({your role}) will run the rounds. Wait for prompts; don't flood the channel.
If team/Agent spawning is unavailable in this environment, fall back to single-context simulation: role-play every persona yourself in a clearly-labeled back-and-forth using the same rounds below. Note the fallback to the user in one line.
4. Run the rounds
You (moderator) drive turn order via SendMessage. Keep a running transcript. Default arc:
- Opening positions — message each persona in turn for their opening statement on the motion. Collect.
- Clash (1–3 rounds) — feed each persona the others' key points; ask them to rebut the strongest one. Invite direct exchanges: when two personas sharply disagree, tell them to debate each other directly via SendMessage for 1–2 volleys, then report back. This is where native messaging earns its keep.
- Pressure test — pose the hardest question to whoever's position is weakest; make the skeptic attack the front-runner.
- Closing — each persona's final position in 1–2 sentences, including anything they conceded.
Scale rounds to the ask: a quick "have them argue X" = opening + one clash + closing. "Thoroughly stress-test" = more clash rounds, more direct exchanges, a dedicated red-team round.
Moderator discipline:
- Don't let it converge prematurely or collapse into agreement — if it does, inject a sharper counter-question.
- Don't let one persona dominate; pull in quiet ones.
- Cut loops: if two personas restate the same point, move on.
- Stay neutral during the debate. Your opinion comes only in synthesis.
5. Output: transcript + synthesis
Two parts:
A. Transcript. Show the debate. If it's bulky (long turns, many rounds), summarize each round to its essential moves — who argued what, key rebuttals, concessions — rather than dumping every word. Keep direct quotes only for the sharpest or most decisive lines. If it's short, show it closer to verbatim. Label speakers clearly.
B. Synthesis (always, as the moderator):
- Key tensions — the 2–4 real fault lines the debate exposed.
- Where they converged — points all/most sides accepted.
- Strongest argument each side landed — steelman, one line each.
- What it depends on — the conditions that decide which side is right (so the user can map to their reality).
- Recommendation / verdict — your call, if the debate type warrants one (decisions/evaluations yes; pure exploration maybe not). Be decisive but show the load-bearing assumption.
- Open questions — what the debate couldn't resolve and what info would.
6. Clean up
After synthesis, shut the team down and restore the user's personas:
SendMessage each persona {type: "shutdown_request"}.
- Once all are down,
TeamDelete.
- Restore the user's personas (auto). Run
node "$(ls -t ~/.claude/plugins/cache/*/*/*/hooks/personas-ctl.js 2>/dev/null | head -1)" resume and confirm in one line (e.g. "Restored: contrarian"). This MUST run last, and even if the debate errored or was cut short — otherwise injection stays paused. (Safety net: a stranded pause also auto-expires on its own within ~30 min, and any manual activation or fresh session clears it instantly — but don't rely on it; always run resume.)
Do all of this even if the debate is cut short. Don't leave agents running or personas paused.
Robustness notes
- Any domain. The casting step is the adapter — if the topic is unfamiliar, infer who has skin in the game and cast their representatives. No hardcoded domain assumptions.
- Bad casting is the #1 failure. If the debate is flat, the roster lacked opposed incentives — re-cast with sharper conflict rather than pushing harder on weak personas.
- Factual debates: let personas use research tools so they argue with real facts; flag clearly if a persona is speculating.
- Don't fake consensus. If sides genuinely don't resolve, say so — an honest "it depends on X" beats a forced winner.
- Keep the user oriented: show the motion and cast up front, narrate round transitions briefly so they can follow.