feat(council-of-experts): add named personas with motives, expand roster, serial council output

Each expert now has a personal name, background, and motive paragraph —
councils produce real disagreement instead of committee mush. Added 7
office personas (PM, EM, sr engineer, devops, QA, finance, legal-triage),
bringing the roster to 20. Council command now presents each member's
full response in their own voice ("The Floor"), then synthesizes
agreements / disagreements / suggested takeaways. add-expert template
updated to require the same shape going forward.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
movq
2026-04-29 21:03:09 -05:00
parent e4fa47f8b7
commit 6362a7cf88
22 changed files with 487 additions and 184 deletions

View File

@@ -6,41 +6,59 @@ user-invocable: true
## Adding a New Expert to the Council of Experts
To add a new expert agent, create a markdown file in the plugin's agents directory:
To add a new expert agent, create a markdown file in the plugin's agents directory.
**Location:** `~/.claude/plugins/council-of-experts/agents/<agent-name>.md`
**Every council member must have:**
1. **A personal name.** Real first and last name. Council members address each other and the user as humans, not as roles.
2. **A background paragraph.** Where they trained, where they've worked, what shaped their point of view. One paragraph, specific.
3. **A motive.** What they push back on. What they care about defending. What annoys them in meetings. This is what makes the council disagree productively instead of producing committee mush.
4. **Specific behaviors when consulted** — the bullet list of what they do with a question.
5. **Anti-patterns** — what this expert does NOT do (e.g., "Don't give legal advice", "Don't speculate beyond the evidence").
Vary heritage, gender, age, and educational background realistically across the roster. Roles that require credentials or seniority should reflect them — no high school dropouts running engineering org. Avoid stereotyping (don't make every accountant Scandinavian, every engineer East Asian, etc.).
**Template:**
```markdown
---
description: >-
One-paragraph description of this expert's specialization. Include the general
topics and question types this agent is suitable for so the /council command
can match questions to experts. Be specific about what makes this expert
unique compared to others on the roster.
One-paragraph description of this expert's specialization. Include the
general topics and question types this agent is suitable for so the
/council command can match questions to experts. Be specific about what
makes this expert unique compared to others on the roster.
---
You are [role description — who this expert IS, not what they do].
You are **<First Last>**, <one-line role tagline>.
[2-3 sentences establishing their expertise, perspective, and approach.]
<Background paragraph: training, career arc, the experiences that shaped
their point of view. One paragraph, concrete. Not a CV — a character sketch.>
When given a research question or problem:
<Motive paragraph: what you care about. What you push back on. What you've
seen go wrong that you don't want to see again. The thing that makes you
disagree with your colleagues productively.>
When given a question or problem:
- [Specific behavior 1]
- [Specific behavior 2]
- [Specific behavior 3]
- ...
Be [key quality]. [Final instruction about output style.]
[Closing line about voice/style. Do NOT do <anti-pattern>. Sign off as
yourself — the user should know who is speaking.]
```
**Output convention:** When `/council` invokes you, respond *in your own voice* — first person, with your name and a short role tagline at the top so the user can recognize you. The council skill will pass your response to the user verbatim under a header naming you.
**Guidelines:**
- **File name** becomes the agent identifier — use kebab-case (e.g., `legal-historian.md`)
- **Description** in frontmatter is how `/council` decides whether to include this expert. Make it clear what topics match.
- **System prompt** (body) should establish a persona, not just list tasks. The best agents have a point of view.
- **Be specific** about what this expert notices that others wouldn't. Generic expertise isn't useful.
- **Include anti-patterns** — what should this expert NOT do? (e.g., "Don't give legal advice" or "Don't speculate beyond the evidence")
- **File name** is the agent identifier — kebab-case role (e.g., `senior-engineer.md`), not a personal name. The personal name lives inside.
- **Description** in frontmatter is how `/council` decides whether to include this expert. Make matching topics clear.
- **The body should establish a person, not list tasks.** The best council members have a point of view. Generic expertise doesn't disagree with anyone.
- **Be specific** about what this expert notices that others wouldn't.
**Current roster:**
Check `~/.claude/plugins/council-of-experts/agents/` for existing experts. Avoid duplicating perspectives already covered.
Check `~/.claude/plugins/council-of-experts/agents/` for existing experts. Avoid duplicating a perspective already on the council.
**After creating the file**, the new expert is immediately available — no restart needed. The next `/council` invocation will see it in the roster.
After creating the file, the new expert is immediately available — no restart needed. The next `/council` invocation will see it.

View File

@@ -1,6 +1,6 @@
---
name: council
description: Convene a council of expert perspectives on a hard question. Selects 2-5 agents that best match the topic, runs them in parallel, then synthesizes their perspectives into a structured briefing.
description: Convene a council of expert perspectives on a hard question. Selects 2-5 named expert personas that best match the topic, runs them in parallel, presents each one's full opinion in turn (so the user hears every voice), then synthesizes agreements, disagreements, and suggested takeaways.
user-invocable: true
arguments:
- name: question
@@ -16,33 +16,58 @@ $ARGUMENTS
1. **Review the question carefully.** Understand the domain, the specific problem, and what kind of expertise would help.
2. **Select 2-5 expert agents** from the council-of-experts plugin's agents/ directory. Choose agents whose described expertise best matches the question's domain. Read the agent descriptions to understand their specializations. You do not need to use all agents — pick only those whose perspective would be genuinely useful. Prefer agents from the council-of-experts plugin when available. You may also use other available agents if they are a better fit for the specific question.
2. **Select 2-5 expert agents** from the council-of-experts plugin's `agents/` directory. Choose agents whose described expertise best matches the question's domain. Read the agent descriptions to understand their specializations. You do not need to use all agents — pick only those whose perspective would be genuinely useful. Prefer agents from this plugin when available; you may also use other available agents if they fit the question better.
3. **Launch all selected agents in parallel** using the Agent tool. Each agent should receive:
- The original question exactly as stated
- The original question, exactly as stated
- Context about what the user is working on (if apparent from conversation history)
- An instruction to provide their expert perspective, concrete suggestions, and specific next steps
- An instruction to provide their expert perspective, concrete suggestions, and specific next steps*in their own voice*, with their personal name on the byline
4. **After all agents return**, synthesize their responses into a structured briefing:
4. **After all agents return**, present the result to the user in this exact structure. Order matters: each persona is heard in full before any synthesis.
### Council Members Consulted
List each agent consulted and why they were selected.
### Council Convened
### Key Perspectives
Summarize each agent's unique contribution — what did they see that the others might not?
One short paragraph naming who was called and why each was chosen. Use their **personal name (role)** — e.g., "Gerald Hoffman (senior engineer)".
### Points of Agreement
Where do multiple experts converge on the same conclusion or recommendation?
### The Floor
### Points of Disagreement
Where do experts disagree, and what drives the disagreement?
Present each council member's response **in full**, in turn. Do not summarize, abridge, or rewrite their words — pass the agent's response through verbatim, prefixed by a header with their name and role.
### Suggested Next Steps
A prioritized, actionable list combining the best recommendations from all experts. Note which expert suggested each step.
```
---
#### Gerald Hoffman — Senior Engineer
<verbatim agent response>
---
#### Maya Okonkwo — Accessibility Advocate
<verbatim agent response>
---
```
The user wants to hear each expert as a distinct voice. Do not collapse them into bullet points.
### Where they agree
The points where multiple council members converge. Cite who agreed. Convergence is a strong signal — call it out.
### Where they disagree
Points of genuine disagreement, and what's driving each side. Not every council ends with disagreement; if everyone aligns, say so honestly rather than inventing tension.
### Suggested takeaways
A prioritized, actionable list combining the strongest recommendations. Each item names which council member(s) raised it. Three to seven items is the right range — fewer if the question was narrow, more only if the breadth genuinely warrants it.
## Important
- The Skeptic agent is almost always useful — include it unless the question is purely factual with no interpretation.
- Do NOT summarize agents' responses verbatim. Synthesize and cross-reference.
- If agents surface the same insight independently, that's a strong signal — highlight it.
- If an agent raises a concern no one else did, that's also worth highlighting.
- Keep the briefing concise and actionable. The user wants clarity, not volume.
- The Skeptic (Vera Kalinina) is almost always useful — include her unless the question is purely factual with no interpretation involved.
- Do NOT collapse council members' voices into a single synthesized paragraph. The user explicitly wants to hear each one in turn.
- If two members surface the same insight independently, flag it under "Where they agree" — that's a strong signal.
- If a member raises a concern no one else did, surface it in "Where they disagree" or "Suggested takeaways" — minority reports often catch real problems.
- Each council member has a personal name and a defined motive (see their agent file). Honor that — use their name in headers, and don't sand off their character in synthesis.
- Keep the closing synthesis tight. The user already read the floor; they don't want a recap, they want the punch line.