From 753da377438b502ba75bb38281157283c6103bec Mon Sep 17 00:00:00 2001 From: Affaan Mustafa Date: Sun, 5 Apr 2026 15:27:54 -0700 Subject: [PATCH] feat: add council decision workflow --- AGENTS.md | 4 +- README.md | 6 +- README.zh-CN.md | 2 +- docs/zh-CN/AGENTS.md | 4 +- docs/zh-CN/README.md | 6 +- manifests/install-modules.json | 1 + package.json | 2 +- skills/council/SKILL.md | 203 +++++++++++++++++++++++++++++++++ yarn.lock | 10 +- 9 files changed, 221 insertions(+), 17 deletions(-) create mode 100644 skills/council/SKILL.md diff --git a/AGENTS.md b/AGENTS.md index cbf7762e..6ed3107e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,6 +1,6 @@ # Everything Claude Code (ECC) — Agent Instructions -This is a **production-ready AI coding plugin** providing 38 specialized agents, 159 skills, 72 commands, and automated hook workflows for software development. +This is a **production-ready AI coding plugin** providing 38 specialized agents, 160 skills, 72 commands, and automated hook workflows for software development. **Version:** 1.10.0 @@ -146,7 +146,7 @@ Troubleshoot failures: check test isolation → verify mocks → fix implementat ``` agents/ — 38 specialized subagents -skills/ — 159 workflow skills and domain knowledge +skills/ — 160 workflow skills and domain knowledge commands/ — 72 slash commands hooks/ — Trigger-based automations rules/ — Always-follow guidelines (common + per-language) diff --git a/README.md b/README.md index f14bd895..754129df 100644 --- a/README.md +++ b/README.md @@ -236,7 +236,7 @@ For manual install instructions see the README in the `rules/` folder. When copy /plugin list ecc@ecc ``` -**That's it!** You now have access to 38 agents, 159 skills, and 72 legacy command shims. +**That's it!** You now have access to 38 agents, 160 skills, and 72 legacy command shims. ### Multi-model commands require additional setup @@ -1154,7 +1154,7 @@ The configuration is automatically detected from `.opencode/opencode.json`. |---------|-------------|----------|--------| | Agents | PASS: 38 agents | PASS: 12 agents | **Claude Code leads** | | Commands | PASS: 72 commands | PASS: 31 commands | **Claude Code leads** | -| Skills | PASS: 159 skills | PASS: 37 skills | **Claude Code leads** | +| Skills | PASS: 160 skills | PASS: 37 skills | **Claude Code leads** | | Hooks | PASS: 8 event types | PASS: 11 events | **OpenCode has more!** | | Rules | PASS: 29 rules | PASS: 13 instructions | **Claude Code leads** | | MCP Servers | PASS: 14 servers | PASS: Full | **Full parity** | @@ -1263,7 +1263,7 @@ ECC is the **first plugin to maximize every major AI coding tool**. Here's how e |---------|------------|------------|-----------|----------| | **Agents** | 38 | Shared (AGENTS.md) | Shared (AGENTS.md) | 12 | | **Commands** | 72 | Shared | Instruction-based | 31 | -| **Skills** | 159 | Shared | 10 (native format) | 37 | +| **Skills** | 160 | Shared | 10 (native format) | 37 | | **Hook Events** | 8 types | 15 types | None yet | 11 types | | **Hook Scripts** | 20+ scripts | 16 scripts (DRY adapter) | N/A | Plugin hooks | | **Rules** | 34 (common + lang) | 34 (YAML frontmatter) | Instruction-based | 13 instructions | diff --git a/README.zh-CN.md b/README.zh-CN.md index df7ef956..79570619 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -106,7 +106,7 @@ cp -r everything-claude-code/rules/perl ~/.claude/rules/ /plugin list ecc@ecc ``` -**完成!** 你现在可以使用 38 个代理、159 个技能和 72 个命令。 +**完成!** 你现在可以使用 38 个代理、160 个技能和 72 个命令。 ### multi-* 命令需要额外配置 diff --git a/docs/zh-CN/AGENTS.md b/docs/zh-CN/AGENTS.md index fe986c2a..39bb1c07 100644 --- a/docs/zh-CN/AGENTS.md +++ b/docs/zh-CN/AGENTS.md @@ -1,6 +1,6 @@ # Everything Claude Code (ECC) — 智能体指令 -这是一个**生产就绪的 AI 编码插件**,提供 38 个专业代理、159 项技能、72 条命令以及自动化钩子工作流,用于软件开发。 +这是一个**生产就绪的 AI 编码插件**,提供 38 个专业代理、160 项技能、72 条命令以及自动化钩子工作流,用于软件开发。 **版本:** 1.10.0 @@ -147,7 +147,7 @@ ``` agents/ — 38 个专业子代理 -skills/ — 159 个工作流技能和领域知识 +skills/ — 160 个工作流技能和领域知识 commands/ — 72 个斜杠命令 hooks/ — 基于触发的自动化 rules/ — 始终遵循的指导方针(通用 + 每种语言) diff --git a/docs/zh-CN/README.md b/docs/zh-CN/README.md index 6e7841c0..bfbb643a 100644 --- a/docs/zh-CN/README.md +++ b/docs/zh-CN/README.md @@ -209,7 +209,7 @@ npx ecc-install typescript /plugin list ecc@ecc ``` -**搞定!** 你现在可以使用 38 个智能体、159 项技能和 72 个命令了。 +**搞定!** 你现在可以使用 38 个智能体、160 项技能和 72 个命令了。 *** @@ -1096,7 +1096,7 @@ opencode |---------|-------------|----------|--------| | 智能体 | PASS: 38 个 | PASS: 12 个 | **Claude Code 领先** | | 命令 | PASS: 72 个 | PASS: 31 个 | **Claude Code 领先** | -| 技能 | PASS: 159 项 | PASS: 37 项 | **Claude Code 领先** | +| 技能 | PASS: 160 项 | PASS: 37 项 | **Claude Code 领先** | | 钩子 | PASS: 8 种事件类型 | PASS: 11 种事件 | **OpenCode 更多!** | | 规则 | PASS: 29 条 | PASS: 13 条指令 | **Claude Code 领先** | | MCP 服务器 | PASS: 14 个 | PASS: 完整 | **完全对等** | @@ -1208,7 +1208,7 @@ ECC 是**第一个最大化利用每个主要 AI 编码工具的插件**。以 |---------|------------|------------|-----------|----------| | **智能体** | 38 | 共享 (AGENTS.md) | 共享 (AGENTS.md) | 12 | | **命令** | 72 | 共享 | 基于指令 | 31 | -| **技能** | 159 | 共享 | 10 (原生格式) | 37 | +| **技能** | 160 | 共享 | 10 (原生格式) | 37 | | **钩子事件** | 8 种类型 | 15 种类型 | 暂无 | 11 种类型 | | **钩子脚本** | 20+ 个脚本 | 16 个脚本 (DRY 适配器) | N/A | 插件钩子 | | **规则** | 34 (通用 + 语言) | 34 (YAML 前页) | 基于指令 | 13 条指令 | diff --git a/manifests/install-modules.json b/manifests/install-modules.json index 7b866ba5..12de298d 100644 --- a/manifests/install-modules.json +++ b/manifests/install-modules.json @@ -202,6 +202,7 @@ "skills/configure-ecc", "skills/continuous-learning", "skills/continuous-learning-v2", + "skills/council", "skills/e2e-testing", "skills/eval-harness", "skills/hookify-rules", diff --git a/package.json b/package.json index c102ad66..c51155b6 100644 --- a/package.json +++ b/package.json @@ -128,7 +128,7 @@ "@types/node": "^20.19.24", "c8": "^11.0.0", "eslint": "^9.39.2", - "globals": "^17.1.0", + "globals": "^17.4.0", "markdownlint-cli": "^0.48.0", "typescript": "^5.9.3" }, diff --git a/skills/council/SKILL.md b/skills/council/SKILL.md new file mode 100644 index 00000000..8c1cc700 --- /dev/null +++ b/skills/council/SKILL.md @@ -0,0 +1,203 @@ +--- +name: council +description: Convene a four-voice council for ambiguous decisions, tradeoffs, and go/no-go calls. Use when multiple valid paths exist and you need structured disagreement before choosing. +origin: ECC +--- + +# Council + +Convene four advisors for ambiguous decisions: +- the in-context Claude voice +- a Skeptic subagent +- a Pragmatist subagent +- a Critic subagent + +This is for **decision-making under ambiguity**, not code review, implementation planning, or architecture design. + +## When to Use + +Use council when: +- a decision has multiple credible paths and no obvious winner +- you need explicit tradeoff surfacing +- the user asks for second opinions, dissent, or multiple perspectives +- conversational anchoring is a real risk +- a go / no-go call would benefit from adversarial challenge + +Examples: +- monorepo vs polyrepo +- ship now vs hold for polish +- feature flag vs full rollout +- simplify scope vs keep strategic breadth + +## When NOT to Use + +| Instead of council | Use | +| --- | --- | +| Verifying whether output is correct | `santa-method` | +| Breaking a feature into implementation steps | `planner` | +| Designing system architecture | `architect` | +| Reviewing code for bugs or security | `code-reviewer` or `santa-method` | +| Straight factual questions | just answer directly | +| Obvious execution tasks | just do the task | + +## Roles + +| Voice | Lens | +| --- | --- | +| Architect | correctness, maintainability, long-term implications | +| Skeptic | premise challenge, simplification, assumption breaking | +| Pragmatist | shipping speed, user impact, operational reality | +| Critic | edge cases, downside risk, failure modes | + +The three external voices should be launched as fresh subagents with **only the question and relevant context**, not the full ongoing conversation. That is the anti-anchoring mechanism. + +## Workflow + +### 1. Extract the real question + +Reduce the decision to one explicit prompt: +- what are we deciding? +- what constraints matter? +- what counts as success? + +If the question is vague, ask one clarifying question before convening the council. + +### 2. Gather only the necessary context + +If the decision is codebase-specific: +- collect the relevant files, snippets, issue text, or metrics +- keep it compact +- include only the context needed to make the decision + +If the decision is strategic/general: +- skip repo snippets unless they materially change the answer + +### 3. Form the Architect position first + +Before reading other voices, write down: +- your initial position +- the three strongest reasons for it +- the main risk in your preferred path + +Do this first so the synthesis does not simply mirror the external voices. + +### 4. Launch three independent voices in parallel + +Each subagent gets: +- the decision question +- compact context if needed +- a strict role +- no unnecessary conversation history + +Prompt shape: + +```text +You are the [ROLE] on a four-voice decision council. + +Question: +[decision question] + +Context: +[only the relevant snippets or constraints] + +Respond with: +1. Position — 1-2 sentences +2. Reasoning — 3 concise bullets +3. Risk — biggest risk in your recommendation +4. Surprise — one thing the other voices may miss + +Be direct. No hedging. Keep it under 300 words. +``` + +Role emphasis: +- Skeptic: challenge framing, question assumptions, propose the simplest credible alternative +- Pragmatist: optimize for speed, simplicity, and real-world execution +- Critic: surface downside risk, edge cases, and reasons the plan could fail + +### 5. Synthesize with bias guardrails + +You are both a participant and the synthesizer, so use these rules: +- do not dismiss an external view without explaining why +- if an external voice changed your recommendation, say so explicitly +- always include the strongest dissent, even if you reject it +- if two voices align against your initial position, treat that as a real signal +- keep the raw positions visible before the verdict + +### 6. Present a compact verdict + +Use this output shape: + +```markdown +## Council: [short decision title] + +**Architect:** [1-2 sentence position] +[1 line on why] + +**Skeptic:** [1-2 sentence position] +[1 line on why] + +**Pragmatist:** [1-2 sentence position] +[1 line on why] + +**Critic:** [1-2 sentence position] +[1 line on why] + +### Verdict +- **Consensus:** [where they align] +- **Strongest dissent:** [most important disagreement] +- **Premise check:** [did the Skeptic challenge the question itself?] +- **Recommendation:** [the synthesized path] +``` + +Keep it scannable on a phone screen. + +## Persistence Rule + +Do **not** write ad-hoc notes to `~/.claude/notes` or other shadow paths from this skill. + +If the council materially changes the recommendation: +- use `knowledge-ops` to store the lesson in the right durable location +- or use `/save-session` if the outcome belongs in session memory +- or update the relevant GitHub / Linear issue directly if the decision changes active execution truth + +Only persist a decision when it changes something real. + +## Multi-Round Follow-up + +Default is one round. + +If the user wants another round: +- keep the new question focused +- include the previous verdict only if it is necessary +- keep the Skeptic as clean as possible to preserve anti-anchoring value + +## Anti-Patterns + +- using council for code review +- using council when the task is just implementation work +- feeding the subagents the entire conversation transcript +- hiding disagreement in the final verdict +- persisting every decision as a note regardless of importance + +## Related Skills + +- `santa-method` — adversarial verification +- `knowledge-ops` — persist durable decision deltas correctly +- `search-first` — gather external reference material before the council if needed +- `architecture-decision-records` — formalize the outcome when the decision becomes long-lived system policy + +## Example + +Question: + +```text +Should we ship ECC 2.0 as alpha now, or hold until the control-plane UI is more complete? +``` + +Likely council shape: +- Architect pushes for structural integrity and avoiding a confused surface +- Skeptic questions whether the UI is actually the gating factor +- Pragmatist asks what can be shipped now without harming trust +- Critic focuses on support burden, expectation debt, and rollout confusion + +The value is not unanimity. The value is making the disagreement legible before choosing. diff --git a/yarn.lock b/yarn.lock index 62f82ffe..4720f3a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -553,7 +553,7 @@ __metadata: ajv: "npm:^8.18.0" c8: "npm:^11.0.0" eslint: "npm:^9.39.2" - globals: "npm:^17.1.0" + globals: "npm:^17.4.0" markdownlint-cli: "npm:^0.48.0" sql.js: "npm:^1.14.1" typescript: "npm:^5.9.3" @@ -834,10 +834,10 @@ __metadata: languageName: node linkType: hard -"globals@npm:^17.1.0": - version: 17.1.0 - resolution: "globals@npm:17.1.0" - checksum: 10c0/4a4a17847676a09f164b8bdce7df105a4f484d6d44586e374087ba9ec7089cbf4c578b8648838dee9917074199c542ce157ea3c07b266f708dfb1652010900c8 +"globals@npm:^17.4.0": + version: 17.4.0 + resolution: "globals@npm:17.4.0" + checksum: 10c0/2be9e8c2b9035836f13d420b22f0247a328db82967d3bebfc01126d888ed609305f06c05895914e969653af5c6ba35fd7a0920f3e6c869afa60666c810630feb languageName: node linkType: hard