--- name: council description: "Trigger: architecture, tech selection, or design decisions with significant trade-offs and no clear answer." --- # 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: 1. List areas of **agreement** (strong signal) 2. List areas of **disagreement** (where trade-offs live) 3. 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