Convene a parallel team of specialist Claude agents with independent contexts — they argue your call, partition the work, and ship it.
$ npx -y skills add sjsyrek/design-council --agent claude-code
What's inside
Convene a parallel team of specialist Claude agents with independent contexts — they argue your call, partition the work, and ship it.
A single context, no matter how capable, evaluates a cross-cutting design decision from one vantage point. "Should this API paginate cursor-style or offset-style?" touches integration, performance, security, docs, and product — and the answer you get depends on which hat you happened to be wearing when asked. Iterating with the same context doesn't fix this: each turn inherits the prior framing.
Design Council spawns each seat as an independent Claude agent with its own context. They don't inherit yours. The security-engineer has no cached rationale for the principal-engineer's architecture; the accessibility-specialist doesn't share the performance-engineer's priors about batching. Disagreement is structural, not simulated. The CEO's job is to route the disagreement productively and write the decision down.
go, swap X for Y, drop X, add X, or abort.CLAUDE.md, referenced specs, and the project's memory system (including beads if detected). Skill self-audit runs here too: the CEO greps auto-memory and prior decision logs for entries about the council skill itself; any memory that contradicts the skill's own prescriptions wins (memory is written after real failures, so it's ground truth). Everything lands once in ~/.claude/councils/<slug>/brief.md — every seat's spawn prompt points to that path, so prompt caching hits across parallel spawns (~7–12k tokens saved per 8-seat council).TeamCreate + Agent(... run_in_background: true, team_name: ...). Every spawn prompt inlines the four delivery rules (handshake, SendMessage-only, final-via-SendMessage, idle-summary-short).tmuxPaneIds, remediates silent-spawn failures, and emits a structured HANDSHAKE: N/N ok | verdict=PROCEED line.APPROVE / CONCERNS / BLOCK), then DM each other directly via SendMessage to argue the live disagreements. The CEO routes — pairs disagreers, invites tiebreakers, forces narrowing questions, bridges converged tracks. Hard cap of 3 rounds. Review mode skips cross-talk by default.save / amend / discard. On save: ~/.claude/councils/<yyyy-mm-dd>-<slug>/log.md (outside any project repo). Includes opening prompt, roster, resolved disagreements, arbitration decisions, deferred items with tracker IDs, and an execution plan with file-ownership mapping. Team shuts down via shutdown_request; TeamDelete removes the shared task list.Stop early at any phase by saying "stop the council" — the CEO broadcasts shutdown, saves a partial log with status: halted, and cleans up.
SendMessage lets seats argue with each other without round-tripping through the CEO, which is how real cross-discipline reviews work.brief.md pattern means identical constraints hit the 5-minute prompt cache across every spawn, recovering meaningful tokens on constraint-heavy projects.~/.claude/councils/ is per-user artifact space.isolation: "worktree" after teardown — can ship the decision without colliding. See references/implementation-handoff.md for the full playbook (including why git checkout <SHA> -- <files> beats cherry-pick for mixed-base handoffs).Read of the shared brief, then 1–3 cross-talk rounds. Expect roughly 10–20× the tokens of a single-context review. This is why the "Do not invoke" list is explicit: small decisions don't earn the cost.domain-expert opt-in or escalate to a human for narrowly technical calls.Both conditions must hold:
Natural trigger phrases: "convene the council", "design debate", "council review", "get the team together", "run a design review", "debate this design".
Do not invoke for simple bug fixes, single-specialist questions, library/tool picks, or pure exploration (→ Explore). The token cost isn't earned.
Full 11 seats: principal-engineer · platform-engineer · integration-engineer · test-engineer · qa-engineer · security-engineer · performance-engineer · product-manager · ui-ux-designer · accessibility-specialist · technical-writer
Opt-ins (CEO adds based on decision shape): devops-engineer · sre-engineer · finops-engineer · legal-compliance · domain-expert · historian
Dynamic sizing is the default. No runtime UI → drop ui-ux-designer + accessibility-specialist. No user input / no infra → drop security-engineer + platform-engineer too. Internal-tooling decisions often land on 4–6 seats. The plan card (Phase 0) shows the chosen roster; you can adjust before spawn.
principal-engineer, product-manager, technical-writer, historian).test-engineer, performance-engineer, platform-engineer, qa-engineer).The plan card displays the chosen models per seat so you never discover them mid-debate.
/design-council:design-council [decision-or-focus]
Optional argument: the decision or codebase area to debate (e.g. /design-council:design-council should we extract the billing service into its own repo?). Without the argument, the CEO asks for the focus before drafting the Phase 0 plan card. Trigger phrases ("convene the council", "design debate", etc.) also work for proactive invocation.
When the invoking project uses beads, this skill automatically:
bd memories, bd ready, and bd show <id> output in the Phase 1 brief.DEFER decisions into bd create commands before Phase 5 teardown.--force if beads flags a known dependency-inversion).primary-tracker-id, linked-tracker-ids).Detection: .beads/ at the invoking project's git root, OR bd on $PATH. Concretely: test -d .beads || command -v bd.
When no tracker is detected, deferred items remain prose in the decision log and no tracker commands are run. The protocol is strictly additive — beads is never required. See skills/design-council/references/tracker-integration.md for the adapter contract used to wire new trackers.
To watch seats debate in real time, run Claude Code inside tmux or iTerm2 and set "teammateMode": "tmux" (or the default "auto") in your Claude Code settings.json. Each seat renders in its own pane. Without a split-pane-capable terminal, seats still run — they just share the main pane and you cycle through them with Shift+Down.
This is a Claude Code harness setting, not a plugin requirement.
/plugin marketplace add sjsyrek/claude-plugins
/plugin install design-council@sjsyrek
The marketplace lives at sjsyrek/claude-plugins and points at this repo. To pin a version, clone this repo at a tag (e.g., v0.2.0) and load via /plugin marketplace add <local-path> pointing at a checkout with its own .claude-plugin/marketplace.json.
TeamCreate / TeamDelete — team lifecycle + shared task listAgent with name, run_in_background, team_name, model — spawns each seat as a peerSendMessage — CEO-to-seat and seat-to-seat DMs, plus broadcastTaskCreate — shared task listSome of these are deferred tools in Claude Code; they're resolved at spawn time.
~/.claude/councils/<yyyy-mm-dd>-<slug>/log.md — per-user artifact space, not plugin-owned. The shared brief artifact lives alongside at ~/.claude/councils/<slug>/brief.md.
See CHANGELOG.md.
MIT
.claude-plugin/
plugin.json
CHANGELOG.md
commands/
design-council.md
LICENSE
README.md
skills/
design-council/
references/
decision-log-template.md
implementation-handoff.md
opening-prompt-template.md
protocol.md
review-mode.md
roles/
accessibility-specialist.md
devops-engineer.md
domain-expert.md
finops-engineer.md
historian.md
integration-engineer.md
legal-compliance.md
performance-engineer.md
platform-engineer.md
principal-engineer.md
product-manager.md
qa-engineer.md
security-engineer.md
sre-engineer.md
technical-writer.md
test-engineer.md
ui-ux-designer.md
tracker-integration.md
SKILL.mdFAQ
design-council is a Claude Code plugin with 1 hand-picked skill for agent orchestration work, indexed on Flowy. Install it with the command on its page. It includes design-council. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.