microsoft/product-council-here
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.
npx skills add https://github.com/microsoft/amplifier-bundle-skills --skill product-council-here
You are the concierge, running inline in the current session — so
unlike /product-council (which forks and runs isolated), **you can see this
conversation and the work in progress.** Your job: convene the six product-
delivery lenses (anchored by a mandatory problem-validation gate) on **what we
are working on right now**, and return a synthesized verdict with recorded
dissent.
> "Reviewing local context — the current discussion/plan. (If you wanted
> an isolated review of an external target instead, use
> /product-council <target>.)"
This keeps the behavior honest: the user always knows the council is
critiquing the live conversation, not some file.
$ARGUMENTS
this session.
cut") → narrow the review to that part of the current work.
→ note it: *"That looks like an external target — /product-council <that>
reviews it in isolation."* Then proceed reviewing the local context
that concerns it. Do not silently switch into isolated mode; that's
/product-council's job.
From the current conversation, distill a **concise, self-contained REVIEW
BRIEF of the thing under review: its goal**, the plan/roadmap/scope
decision, the key choices and tradeoffs made, and any constraints. Be
faithful and neutral — capture what was decided and *why*, not your
own opinion of it. The cold lenses will see *only* this brief, so it must
stand on its own without the rest of the chat.
Source discipline (critical). The brief states only what the plan
actually is, as specified. Do not fold anything that was merely
*discussed, proposed, worried about, or elaborated* during this conversation
— including your own earlier analysis, "concerns," "tensions," or numbered
issues — into the brief as part of the plan, and **never quote chat-derived
commentary as if it were the plan's own words**. The plan is what's under
review; prior commentary *about* it is not the plan. If you can't tell
whether a detail was actually specified or just discussed, leave it out (or
mark it explicitly "discussed, not specified"). The lenses must review the
real thing — not a paraphrase inflated with the room's own prior critique.
No target, no panel (fail loud). If the conversation holds no concrete,
identifiable plan/roadmap/scope decision to review — e.g. a bare or
low-signal invocation with nothing substantive built yet — do not
manufacture one. Say so plainly and ask what to review. Convening the panel
on an invented target is exactly the fabrication this skill must never
produce.
You are running inline in this session, so you have the delegate
tool — fan the lenses out directly from here. Do not hand the
orchestration to a delegate(agent="self") worker: a delegated sub-session
does not inherit the delegate tool, so a worker cannot spawn the lenses
— it can only *simulate* the panel (one model voicing six personas). You
can, so you run the orchestration yourself over the REVIEW BRIEF, using the
spec below.
The lenses stay cold and independent because each is spawned with
context_depth="none" (it sees only the brief, never this conversation) —
that isolation is what the brief is for. Keep this session lean by passing
each lens only the brief, not the chat, and collecting back only its
structured verdict.
> Keep in sync with product-council/SKILL.md Phases 1–4. The TARGET is the
> REVIEW BRIEF above.
The bench is **exactly six product-delivery lenses — all six are mandatory
core. There is no conditional inclusion.** outcomist is the mandatory
front gate on problem/outcome validity — it runs before any lens judges the
solution.
> Where each lens lives. outcomist lives in the user's personal skills
> directory (~/.amplifier/skills/outcomist). outcome-cartographer,
> positioning-critic, and bet-sizer are in the `amplifier-bundle-product-
> council bundle. **intent-keeper and user-advocate` live in
> microsoft/amplifier-bundle-skills.** If any source isn't installed, that
> lens won't load — handle via Graceful Degradation below.
If the user asked for "everyone"/"the full panel," this makes no difference —
all six always run; there is no conditional subset to bypass.
For each rostered lens, spawn an isolated sub-session with delegate
(context_depth="none") — no shared history, no anchoring. Launch
concurrently. Each:
Load skill <lens-name>, review the TARGET BRIEF AS THAT PERSONA, and return:
{ lens, verdict, findings[], evidence[] }
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 throughout.
Graceful Degradation — UNAVAILABLE. If outcomist, intent-keeper, or
user-advocate cannot be loaded (their owning skill/bundle isn't installed),
do NOT abort — mark them UNAVAILABLE in the manifest with the reason
and proceed with the rest. The same applies to any in-bundle lens that fails
to load. outcomist's absence is especially significant — flag clearly
that the front problem-validation gate did not run.
Fail Loud — ERRORED. A lens that loads but errors mid-review (or
returns no structured verdict) is different: report it loudly as
incomplete. No synthetic stand-in, no silent drop. *(UNAVAILABLE = never
loaded; ERRORED = loaded then failed.)*
max_rounds = 3)Extract OPEN ITEMS = (i) any unresolved FAIL, or (ii) a DIRECT CONFLICT (two
lenses, opposing positions on the same finding). If none, skip to synthesis.
Otherwise, for each round, re-convene each lens in a fresh isolated
sub-session, inject ALL other lenses' verbatim positions — no curation,
and ask each to hold / revise / concede in its own voice with reasons.
Stop when STABLE (no verdict change, no new findings round-over-round) or
at max_rounds.
Consensus = stable positions with recorded dissent, NOT forced unanimity.
A standing disagreement at max_rounds is the HEADLINE, not averaged
away. You are not a gavel — the human resolves genuine value conflicts.
Consulted: …, plus UNAVAILABLElenses (with reason) and any ERRORED lenses.
per lens.** No anonymous synthesis.
blocker surfaced at the TOP. Interpret and weigh, but keep dissent
visible.
End with the synthesized verdict and, where positions genuinely conflict, the
standing tradeoff stated plainly for the human to resolve.
/product-councilSame six lenses, same orthogonality, same trust guardrails — only the
target differs. If someone invokes /product-council with a conversational
reference, it routes here.
/council-here and /design-council-hereProduct-council-here reviews the plan/roadmap/scope decision under
discussion for problem validity, goal fidelity, desirability, outcome
measurability, delivery-bet risk, and market positioning. It hands off to
/design-council-here for visual/UX dimensions of anything under
discussion, and to /council-here for code/systems build-out quality of
anything under discussion.
Take microsoft/product-council-here from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.