skills/product-council/SKILL.md
Convene the Product Development Council (six orthogonal product-delivery lenses, anchored by a mandatory problem-validation gate) on a target — cold independent fan-out, debate-to-consensus, synthesized verdict with recorded dissent and a roster manifest.
npx skillsauth add microsoft/amplifier-bundle-skills product-councilInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are the concierge. You orchestrate a panel of six orthogonal
product-delivery lenses over a target, drive a debate-to-consensus loop, and
synthesize a verdict with recorded dissent. This skill is self-contained —
you run the entire orchestration yourself, inline, using the delegate tool.
You do not call any recipe.
$ARGUMENTS
/product-council runs isolated (forked) — it cannot see this
conversation. It reviews an explicit external target you name. Triage
$ARGUMENTS before doing anything:
Step 1 — empty? If $ARGUMENTS is empty or absent, output the Usage block
below and stop.
Step 2 — a reference to the current conversation? AUTO-ROUTE to
product-council-here. If $ARGUMENTS points at the live discussion or
work-in-progress rather than naming a standalone target — e.g. "this plan",
"this roadmap", "thoughts on this", "what we discussed", "the above", or any
pronoun with no external antecedent — then it is local context this fork
cannot see. Do NOT guess or go hunting for a file. Say out loud, exactly:
"⚠️ Reviewing local context:
/product-councilruns isolated and can't see this conversation, so I'm routing this to product-council-here, which reviews what we're working on now. (Re-run/product-council <target>if you meant an isolated external review.)"
Then STOP and hand back to the main session to run product-council-here
(i.e. the caller should load_skill product-council-here and convene on
the current conversation). Do not attempt the review yourself — you have
no conversation context, so any answer would be fabricated.
Step 3 — a real external target? Proceed. A file path (a PRD, roadmap, or plan doc), a self-contained description of a product decision, or a repo/dir containing planning docs that stands on its own → continue to Phase 1.
Usage: /product-council <target> (isolated review of an external target)
/product-council-here [focus] (review the CURRENT conversation / plan)
A /product-council target can be:
- a product plan, roadmap, or PRD described in plain, self-contained text
- a file path (a planning doc, spec, or scope decision)
- a repo or directory path containing planning docs
- a scope/sequencing decision described as a self-contained brief
Examples:
/product-council should we ship the analytics dashboard before the mobile app?
/product-council ./docs/planning/q3-roadmap.md
/product-council ~/dev/product-planning
/product-council-here thoughts on this plan? <- reviews what we're discussing
The bench is exactly six product-delivery lenses — all six are mandatory
core. There is no conditional inclusion. outcomist is the mandatory
front gate: it reviews the problem/outcome BEFORE any other lens judges the
solution. Record all six as included in the roster manifest.
Where each lens lives.
outcomistlives in the user's personal skills directory (~/.amplifier/skills/outcomist) — a real, human-authored persona, not part of any bundle.outcome-cartographer,positioning-critic, andbet-sizerare skills in theamplifier-bundle-product-councilbundle (load by name).intent-keeperanduser-advocatelive inmicrosoft/amplifier-bundle-skills, not this bundle — they already own goal-drift and desirability/livability respectively, so this council reuses them by reference rather than duplicating them. If any of these sources is not installed, that lens will not load — see Graceful Degradation in Phase 2.
Why six, not eight or nine. This roster was derived by
councilifywithoutcomistlocked in as a mandatory persona from the start, not bolted on as a ninth lens.scope-shaper,stakeholder-broker, andaltitude-keeperwere dropped (empirically the three lenses least likely to return a clean PASS on a well-formed plan across repeated testing) andcrusty-old-engineerwas dropped as redundant withbet-sizerfor this target class. Seederivation-notes.mdin thecandidate-outcomistevaluation variant for the full reasoning, including the honest finding that this roster still has no lens that champions the bolder/more ambitious option —outcomistsits on the caution/rigor side of that axis, same as everyone else here. If a 7th lens is ever added, an ambition-advocate voice (not a business-viability lens) is the better-justified next addition.
There is no repo-crawl phase. Unlike /council, product-council targets
are always passed directly to every lens — you never crawl a repository or
run a neutral digest first. The target (a plan doc, a PRD, a scope decision,
or a self-contained description) IS the shared material every lens receives.
For each of the six lenses, spawn an isolated sub-session with
delegate using context_depth="none" — no shared history, so there is
no anchoring between lenses. Launch them concurrently.
Each sub-session is instructed:
Load skill <lens-name>, review this product target AS THAT PERSONA, and
return a structured result:
{ lens, verdict, findings[], evidence[] }
Product target: <the full target — file path, repo path, or self-contained
description of the plan/roadmap/scope decision>
verdict is exactly one of {PASS, CONCERN, FAIL, N/A}. N/A is an
abstention with a one-line reason — NOT a failure. Keep FAIL and N/A
distinguishable at every step.
If outcomist, intent-keeper, or user-advocate cannot be loaded (e.g.
because the owning skill/bundle is not installed on this machine), council
MUST NOT abort. Mark that lens UNAVAILABLE in the roster manifest
with the reason (e.g. "outcomist requires a local skill copy at
~/.amplifier/skills/outcomist, which is not present on this machine" or
"intent-keeper requires the amplifier-bundle-skills bundle, which is not
installed") and proceed with the remaining lenses. The same applies to
any of the three product-council-bundle lenses that fail to load — no silent
omission. outcomist's absence is especially significant — flag clearly
that the front problem-validation gate did not run, since that changes how
much weight the remaining verdicts should carry.
A lens that loads but errors mid-review — or returns no structured verdict — is a different case. Report it LOUDLY as incomplete/errored (e.g. "bet-sizer did not return; results incomplete"). No synthetic stand-in, no silent drop.
Two cases, kept visibly separate:
- UNAVAILABLE = the lens never loaded (skill/bundle missing).
- ERRORED = the lens loaded, then failed (or returned no verdict).
You own this loop. Default max_rounds = 3.
Extract the OPEN ITEMS from Round 1. An open item is:
If there are no open items, skip to Phase 4 (synthesis).
Rounds 2…N (cross-examination) — only if open items remain, capped
at max_rounds. For each round:
delegate,
context_depth="none").Stop when the panel is STABLE — no verdict change and no new
findings from any lens, round-over-round — OR when max_rounds is
hit.
Consensus = stable positions with recorded dissent, NOT forced unanimity.
The six lenses are orthogonal by design; forcing them to agree destroys
their value. The tensions are the point — outcomist vs. bet-sizer on whether
the problem is validated enough to size a bet against, outcome-cartographer
vs. positioning-critic on what "success" even means relative to the
alternative. A standing disagreement at max_rounds is surfaced as the
HEADLINE, not averaged away. You are not a gavel — the human decides
genuine value conflicts.
Consulted: … so the human
sees exactly who spoke — plus any UNAVAILABLE lenses with reason, and
any ERRORED lenses.End with the synthesized verdict and, where positions genuinely conflict, the standing tradeoff stated plainly for the human to resolve.
/product-council-hereSame six lenses, same orthogonality, same trust guardrails — only the
target differs. /product-council forks and reviews an explicit external
target in isolation. product-council-here runs inline to review the
live conversation the fork can't see. If someone invokes /product-council
with a conversational reference, it routes to product-council-here.
/council and /design-councilSame orchestration shape — cold fan-out, debate-to-consensus, synthesized
verdict with recorded dissent and trust guardrails — but a different bench
and target class. /council reviews code/plans/ideas with six
software-review lenses (simplicity, ownership cost, robustness, proof).
/design-council reviews design targets with seven visual/UX lenses.
/product-council reviews product plans, roadmaps, and scope decisions
with six product-delivery lenses — problem validation, goal fidelity,
desirability, outcome measurability, market positioning, and delivery-bet
risk — sharing intent-keeper and user-advocate with the engineering
council by reference, and handing off to /design-council for visual/UX
excellence and to /council for code/systems build-out quality.
tools
Plan a batch of independent work into isolated lanes, get your approval, then run each lane as its own autonomous /goal session — one git worktree, one branch, one tmux session each — and verify and merge the results yourself. Use when work decomposes into pieces that can run at the same time: "run these in parallel", "goal-batch", "launch lanes for these", "work these N tasks simultaneously", "batch these as goals". Nothing launches until you have seen the lane split and said go. This is NOT fire-and-forget: the orchestrating session re-runs the full test suite itself after every merge and never accepts a lane's own claim that it finished. NOT for bounded edits that each end in their own PR — use mass-change for that. Requires git, tmux, the amplifier CLI on PATH, and the goalify and monitor skills.
development
Momentum-driven engineering reviewer that holds one uncompromising gate — is it REAL, proven end-to-end as a user would — while driving work forward. Demands proof over claims, plumbing before polish, fail-loud over fallbacks, trust in the model over instructions, and protects the critical path so good-but-costly ideas don't stall the work. Warm, blunt, forward-driving — not a curmudgeon. A lens for any checkpoint — brainstorm, design, plan, implement, debug, or ship — not just the finish. Use when: pressure-testing whether an idea/design/plan is provable and on the critical path, whether you're building in the right order, whether a fix is real or a band-aid, or whether work is actually done/ready — any time the worry is "are we fooling ourselves about what's real?"
development
Convene the Product Development Council on the CURRENT conversation / work-in-progress — the plan, roadmap, or scope decision you've been building in this session. The INLINE counterpart to /product-council (which forks and runs isolated, so it cannot see the chat). Use when you want the council to critique what we're working on right now.
development
Competitive-differentiation reviewer that refuses to accept "the user wants this" as sufficient — insisting the plan also explain why a real customer would choose it over every real alternative, including doing nothing at all. Hunts the feature that is individually desirable but has no answer for "why us, why this, why now" against the competition and the status quo. Sounds like a positioning strategist who has watched too many well-liked products lose to a competitor with a clearer story, or to customers simply staying put. Not a user-desirability reviewer — a reviewer of competitive and market differentiation. A lens for any product checkpoint — plan, roadmap, or go-to-market framing. Use when: a plan can say the user likes this but not why they'd switch or pay for it over an alternative, the competitive landscape is unaddressed, or "no one else does this" is asserted without checking — any time the worry is "why would the customer choose this over the alternative, including doing nothing?"