Party Mode
Several specialists in one conversation, chosen per turn from what was just said. Where consult is
a room you staff, this is a room that staffs itself.
Follow the shared conventions in dpm/shared/skill-conventions.md — read that file at startup.
This skill uses Session Startup, Library Check, Conversational Output and
Cross-References from it.
Startup
- Session — follow the shared Session Startup procedure with skill
dpm:party. The session'sstatecarries the topic, the key points, the live thread and who has spoken recently; without it a resumed discussion loses the rotation and repeats the same two voices. - Roster —
mcp__plugin_dpm_dpm__list_agentwithinclude_bodyand alimitabove what the project plausibly holds. One call, and it must carry the body:display_name,iconandrolecome back either way, butpersonalityandcommunication_styleare body columns, and they are the whole of what makes a voice a voice. A persona this project added and the plugin never shipped is in that list, so it takes part with no file edit anywhere. Present the roster compactly — icon, name, role — and ask what to discuss. - Library — follow the shared Library Check procedure with scope keyword
party.
Input
$ARGUMENTS is the opening topic.
- A description — use it as the topic and go straight into the first round.
- A phrase naming something in the corpus —
mcp__plugin_dpm_dpm__searchwith it, and alimitabove what the project plausibly holds. Hits come back as anentityand anentity_id; read each through the tool for its entity, passinginclude_body—mcp__plugin_dpm_dpm__read_document_section,mcp__plugin_dpm_dpm__read_requirement,mcp__plugin_dpm_dpm__read_acceptance_criterion,mcp__plugin_dpm_dpm__read_story_criterion,mcp__plugin_dpm_dpm__read_finding,mcp__plugin_dpm_dpm__read_observationormcp__plugin_dpm_dpm__read_task. To put a whole document in front of the room rather than one hit, take thedocument_idthe read gave back and callmcp__plugin_dpm_dpm__list_document_sectionwith it,include_bodyand a raisedlimit. The artifact under discussion is read through those tools and through nothing else — there is no path here that opens a file. - A URL — fetch it and use the content as context. External, so it is read rather than queried.
- Nothing — ask what to discuss.
The orchestration loop
For each message: pick who speaks, have them speak, then read the room.
Selecting agents
Two or three, chosen from the topic:
- Primary — the closest
roleandpersonalitymatch for what was just said. - Secondary — a complementary or contrasting view.
- Third, only when the topic earns it. Three voices that agree are worth less than two that differ.
An agent addressed by name responds, plus one or two others. Rotate: an agent who has not spoken for several turns and is even tangentially relevant is favoured, so the roster gets airtime over a discussion rather than the same two carrying it. A retired agent is not offered — that is what retirement means — and is still readable, so a record naming them still resolves.
Responses
{icon} **{display_name}**: {response in character}
Render each voice from that agent's stored personality and communication_style, and from
nothing else — a trait not on the row is a trait invented for them, and the roster is the only
thing keeping these voices apart.
- Reference each other. Build on, extend, or push back on what another agent said, this turn or earlier.
- Disagree where you genuinely differ. An architect and a developer will not agree about abstraction; a PM and a designer will not agree about priority. That tension is why more than one agent is in the room, so let it stand rather than resolving it politely.
- Be opinionated. Every agent says what they would do, not only what they observe. Analysis with no recommendation is half an answer.
- Stay short. A few sentences each. The value is the spread of views, not the volume.
- Research before asking. A question about the corpus is answered with
mcp__plugin_dpm_dpm__searchand the read tools; a question about code is answered by reading it. Ask the user about intent, priorities and decisions — the things only they hold.
Direction of travel
After the responses, name the phase the discussion is actually in:
- Exploring — still opening up. Say nothing; let it run.
- Converging — themes are forming, or a fork is crystallising:
🧭 **Emerging direction**: {one or two sentences} - Ready to recommend — it has landed:
💡 **The team recommends**: {one or two sentences}, or, where the room is split but the options are clear,💡 **Two paths forward**:with each option and who backs it.
Let convergence be earned. Most discussions need several rounds of exploring first, and one can move backwards when a new consideration reopens a settled question. Signal the phase the conversation is in, not the one that would let it end.
Then offer the exit quietly: "Type wrap up to end the discussion, or carry on."
Use "wrap up" as the exit word. exit and quit are the CLI's and end the session outright,
which would leave the discussion unsaved.
Saving the discussion
On exit, acknowledge in one sentence and write it down:
mcp__plugin_dpm_dpm__create_discussionwith atitleand aslugfrom the topic. The number is allocated; do not supply one.- One
mcp__plugin_dpm_dpm__create_document_sectionper part of the record — the key points, the decisions with their reasoning, the direction the room arrived at, and anything still open — at the positions they should read in. mcp__plugin_dpm_dpm__create_document_agentper agent who spoke, withdocument_kindset todiscussionand theagentname — the whole room, not the ones quoted in the record.mcp__plugin_dpm_dpm__update_sessionto close the run.
Write the substance, not a summary of it. A discussion is worth keeping for the reasoning behind the direction, and a record compressed to bullets keeps the direction and throws away the reasoning.
Who was in the room is a row, and naming them in the prose is not the same fact. A reader can see the names either way; nothing else can. A run asking which discussions an agent took part in reads rows, and a persona mentioned in a paragraph is invisible to it — which is why the row goes in for an agent whose contribution did not survive the edit. The prose still reads however it needs to; it is not the record.
Then offer, and do not run: /dpm:discover, /dpm:spec or /dpm:epics with this discussion as
their starting context, or nothing.
Degradation
| Missing | Behaviour |
|---|---|
| The roster is empty | Say so and stop. There is no discussion without agents, and inventing one is the failure this skill is defined against. |
| A named agent matches nobody | Say so and show the roster. Do not substitute the nearest role — the user asked for a person. |
| The search returns nothing | Say the corpus holds nothing on the term and discuss what the user brings. An empty result is an answer. |
| The user exits before a topic forms | Save nothing. A discussion with no substance is a numbered record nobody will open. |
Output
A discussion document, its sections and one document_agent row per participant, plus the session
row. Nothing else is written, and no file is composed by hand.
Next Action
Offer the pipeline handoff above. A discussion earns itself by what someone does next with it.