Council — Structured Multi-Voice Decision Making
Iron Law
NO MAJOR DECISION WITHOUT AT LEAST TWO OPPOSING VIEWPOINTS.
When to Trigger
- Architecture choices (monolith vs microservice, SQL vs NoSQL)
- Technology selection (framework, library, language)
- Design decisions with no clear right answer
- Trade-offs between competing requirements (speed vs quality, security vs usability)
- User explicitly requests deliberation
Process
1. Identify the Decision
State the decision in one clear question. Example: "Should we use WebSockets or SSE for real-time updates?"
2. Summon 4 Voices (Parallel)
Launch 4 independent subagents using the Agent tool, each with ONLY the question and relevant context (NOT the full conversation history — this prevents anchoring bias):
| Voice | Role | Focus |
|---|---|---|
| Architect | Long-term correctness | Maintainability, extensibility, architectural alignment |
| Skeptic | Challenge assumptions | Simpler alternatives, hidden costs, "what if we don't?" |
| Pragmatist | Ship it now | Timeline, user impact, operational complexity, team skills |
| Critic | Find the cracks | Edge cases, failure modes, migration risks, rollback difficulty |
Anti-Anchoring Rule: Each voice receives only:
- The decision question
- Relevant codebase context (file paths, current architecture)
- Their role and focus area They do NOT receive: the full conversation, other voices' opinions, or the user's leaning.
3. Synthesize
After all 4 voices report back:
- List areas of agreement (strong signal)
- List areas of disagreement (where trade-offs live)
- Present the user with:
- Recommended option (based on agreement weight)
- Key trade-off (the real decision to make)
- Reversibility (how hard to undo each option)
4. Record Decision
Save the decision to harness-mem:
mem_add(
title: "Decision: {question}",
type: "decision",
importance: 0.9,
body: "Context: ...\nOptions: ...\nChosen: ...\nRationale: ...\nTrade-off accepted: ..."
)
Anti-Rationalization
| Excuse | Rebuttal | What to do instead |
|---|---|---|
| "I already know the answer" | Your gut feeling is not analysis. Council surfaces blind spots. | Run Council anyway — you'll learn something. |
| "This is too slow for a simple decision" | 5 minutes of council prevents weeks of regret. | Set a 5-minute timer and run the full process. |
| "The team already agreed" | Groupthink is not consensus. Diverse perspectives prevent disasters. | Summon all 4 voices — especially the Skeptic and Critic. |
| "I don't need 4 voices for this" | Even simple decisions benefit from the Skeptic and Critic. | Run all 4 voices. Skipping voices skips insight. |
Evidence Required
- All 4 voices were summoned and reported back
- Areas of agreement and disagreement are listed
- A recommended option with key trade-off is presented
- Decision recorded in harness-mem with rationale
- No voice received the full conversation history
Red Flags
- Skipping the Council for "obvious" decisions
- Only summoning voices that agree with you
- Reading the full conversation to all voices (anchoring)
- Not recording the decision and rationale