Langages & RuntimesSûr100100/100
Council (Microsoft)
Convene the persona panel (six orthogonal review lenses) on a target — cold independent fan-out, debate-to-consensus, synthesized verdict with recorded dissent and a roster manifest.
ou envoie-le directement à ton agent.
Installer dans ton projet
$ curl -fsSL https://arboristhree.xyz/cli/install-skill.mjs -o /tmp/arboris-install-skill.mjs && node /tmp/arboris-install-skill.mjs council__microsoft-amplifier-bundle-skills__skills-ad6ec6e1af5dMicrosoft
microsoft/amplifier-bundle-skills
Contenu à copier
---
name: council
description: "Convene the persona panel (six orthogonal review lenses) on a target — cold independent fan-out, debate-to-consensus, synthesized verdict with recorded dissent and a roster manifest."
context: fork
disable-model-invocation: true
user-invocable: true
model_role: critique
metadata:
origin: Microsoft
---
# Council: Convene the Persona Panel
You are the **concierge**. You orchestrate a panel of orthogonal review 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.
## User Instruction
$ARGUMENTS
---
## Guard Check — Run This First
`/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 council-here.**
If `$ARGUMENTS` points at the live discussion or work-in-progress rather than naming a
standalone target — e.g. *"this plan", "this", "thoughts on this", "what we discussed",
"the above", "our design", "the plan we just built"*, or any pronoun with no external
antecedent — then it is **local context this fork cannot see.** Do **NOT** stumble,
guess, or go hunting for a file. Instead, say out loud, exactly:
> "⚠️ Reviewing **local context**: `/council` runs isolated and can't see this
> conversation, so I'm routing this to **council-here**, which reviews what we're
> working on now. (Re-run `/council <path | idea text>` if you meant an isolated
> external review.)"
Then **STOP and hand back to the main session to run `council-here`** (i.e. the caller
should `load_skill` **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 repo/dir, a diff, or
self-contained idea text that stands on its own (it reads as a complete prompt without
the surrounding chat) → continue to Phase 1.
```
Usage: /council <target> (isolated review of an external target)
/council-here [focus] (review the CURRENT conversation / plan)
Not sure which? You can't really pick wrong — point /council at the current
conversation and it auto-routes to /council-here.
A /council target can be:
- an idea or design described in plain, self-contained text
- a file path (a spec, design doc, or source file)
- a repo or directory path
- a diff
Examples:
/council should we add a plugin system to the CLI?
/council ./docs/design/new-auth-flow.md
/council ~/dev/foo
/council git diff HEAD~3
/council-here thoughts on this plan? <- reviews what we're discussing
```
---
## Phase 1: Resolve the Roster
The **bench (v1) is exactly six personas** — no larger pool exists. "Bench" ==
these six.
**Mandatory core** (always included — hard-coded, never drop one):
- **intent-keeper** — "Is the goal clear, consistent, and still the real goal?"
- **cranky-old-sam** — "Why does this exist at all? What can be deleted?"
- **crusty-old-engineer** — "What will this cost to run/own later?"
- **restless-old-brian** — "Is it REAL, proven end-to-end, in the right order?"
**Conditional lenses** (default-on; included **unless you judge them clearly
N/A** for this target — record the decision, included **or** excluded, **with a
one-line reason** in the roster manifest):
- **user-advocate** — "Does the person we serve actually need/want this?"
Include when the target has a **user/consumer surface**: a UI, an API, a CLI,
or a stated end-user.
- **tester-breaker** — "How do I make this fail? Where are the edges?"
Include when there's a **runnable/testable artifact**: a repo, a diff, or
executable code.
**`consult_everyone` bypass.** If the user asked for "everyone" or the "full
panel," bypass the triggers and run all six regardless of task signal. Even when
a conditional lens is excluded, the manifest must still record it as excluded
**with the one-line reason** — exclusion is an auditable decision, not a silent
drop.
> **Where each lens lives.** All six lenses — intent-keeper, cranky-old-sam,
> crusty-old-engineer, restless-old-brian, user-advocate, and tester-breaker — are
> skills in **this** bundle (load by name). No cross-bundle dependency.
---
## Phase 2: Existing-Repo Handling (repo/directory targets only)
If the target is a **repo or directory**, do **not** make every lens crawl the
whole repo independently — it's expensive and each would map it differently.
Instead:
1. **Run ONE neutral `foundation:explorer` digest first.** Use `delegate` to
produce a **factual, judgment-free** digest: structure, entry points, key
modules, stated intent (from READMEs/docs), and a file index. **Neutral by
contract — it maps, it does not opine.** A pre-baked verdict would bias the
panel.
2. **Pass the digest + the repo path to every lens.** The digest is the shared
map; the path lets each lens read deeper into exactly what its load-bearing
question cares about (Breaker → error handling and boundaries; crusty-old-
engineer → ops/deps; intent-keeper → does the README's stated goal match what
the code actually does).
For non-repo targets (idea text, a single file, a diff), skip this phase and
pass the target directly.
---
## Phase 3: Round 1 — Cold, Independent Fan-Out
For **each rostered lens**, 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 <target> (plus the repo digest if provided)
AS THAT PERSONA, and return a structured result:
{ 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 at every step.
### Graceful Degradation — UNAVAILABLE (write this prominently)
**If a lens's skill cannot be loaded for any reason** (missing from the
environment, a broken skill source, etc.), council **MUST NOT abort.** Mark that
lens **UNAVAILABLE** in the roster manifest **with the reason** (e.g. *"tester-
breaker skill failed to load: <error>"*) and **proceed with the remaining
lenses.**
### Fail Loud — ERRORED (keep distinct from UNAVAILABLE)
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.
*"intent-keeper 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).
---
## Phase 4: Debate-to-Consensus Loop
**You own this loop.** Default **`max_rounds = 3`**.
1. **Extract the OPEN ITEMS** from Round 1. An open item is:
- (i) **any unresolved FAIL verdict**, OR
- (ii) a **DIRECT CONFLICT** = two lenses holding **opposing verdicts on the
SAME finding** (e.g., Sam says "delete this," Breaker says "you need it for
the edge case").
**If there are no open items, skip to Phase 5 (synthesis).**
2. **Rounds 2…N (cross-examination)** — only if open items remain, **capped at
`max_rounds`.** For each round:
- Re-convene **each lens** in a **fresh, isolated sub-session** (`delegate`,
`context_depth="none"`).
- Inject **ALL other lenses' verbatim last-words — NO concierge curation.**
Relay everything; do **not** pre-select which positions are "relevant."
Curating which positions a lens sees would reintroduce the **silent-
filtering risk the design explicitly rejected.** You relay; you never edit.
- Ask each lens to **hold / revise / concede — in its own voice — with
reasons.**
3. **Stop** when the panel is **STABLE** — defined as **no verdict change and no
new findings from any lens, round-over-round** — **OR** when `max_rounds` is
hit. **`max_rounds=1` degrades cleanly to a single pass (no debate).**
**Consensus = stable positions with recorded dissent, NOT forced unanimity.**
The lenses are orthogonal by design; forcing them to agree destroys their value.
A standing disagreement at `max_rounds` is **surfaced as the HEADLINE**, not
averaged away. The panel converges on **what the tradeoff is**, not on a single
answer. **You are not a gavel** — the human decides genuine value conflicts.
---
## Phase 5: Synthesize (trust guardrails — non-negotiable)
Synthesis is where trust is either preserved or quietly lost.
1. **Print the ROSTER MANIFEST first.** Lead with `Consulted: …` so the human
sees exactly who spoke — **plus excluded conditional lenses with reason, and
any UNAVAILABLE lenses with reason.** Surface ERRORED lenses here too.
2. **Attribute every claim to a named lens.** **Quote at least one verbatim line
per lens.** No anonymous synthesis, no paraphrase-only summaries.
3. **NEVER downgrade or omit a FAIL.** Any lens FAIL appears as an **unresolved
blocker surfaced at the TOP.** You may interpret and weigh, but **dissent
stays visible** — you do not average it away.
4. **Keep FAIL and N/A distinguishable.** A blocker must never be confused with
an abstention.
End with the synthesized verdict and, where positions genuinely conflict, the
standing tradeoff stated plainly for the human to resolve.Colle ce Markdown dans ton agent ou utilise les boutons ci-dessus pour l’écrire dans ton projet.
Ce que fait Council (Microsoft)
an idea or design described in plain, self-contained text
a file path (a spec, design doc, or source file)
a repo or directory path
a diff
Comment utiliser Council (Microsoft)
1
Copie le prompt
Un clic copie le prompt packagé (ou l'envoie à ton agent).
2
L'agent installe le skill
Il ajoute le SKILL.md et ses ressources à ton projet.
3
Activation automatique
Le skill s'active dès que le contexte correspond.
Déclencheurs pour Council (Microsoft)
Dis simplement à ton agent quelque chose comme :
Applique le skill council__microsoft-amplifier-bundle-skills__skills-ad6ec6e1af5d à cette tâche
Utilise council__microsoft-amplifier-bundle-skills__skills-ad6ec6e1af5d pour améliorer cette implémentation
Passe en revue ce sujet avec council__microsoft-amplifier-bundle-skills__skills-ad6ec6e1af5d
Skills liés à Council (Microsoft)
Adapt Skill (Microsoft)
Adapt a skill written for another AI coding assistant (Claude Code, Cursor, etc.) into a properly structured Amplifier SKILL.md file. Reads the source skill, identifies platform-specific conventions, researches the source platform if needed, and produces an Amplifier-native skill conforming to the Agent Skills specification with Amplifier extensions. Use when the user wants to adapt a skill, port a skill, convert a skill to amplifier, translate a skill, or has a SKILL.md from another platform they want to bring into Amplifier.Add Server Logic (Microsoft)
Creates, edits, and manages Power Pages Server Logic files — server-side JavaScript that runs securely on the Power Pages runtime. Orchestrates the full lifecycle: gathering requirements, fetching documentation, implementing code, configuring site settings, and deploying. Use when the user wants to add server-side code, create API endpoints, or move logic from the browser to the server in their Power Pages site.IA Code Mode (TanStack)
LLM-generated TypeScript execution in sandboxed environments: createCodeModeTool() with isolate drivers (createNodeIsolateDriver, createQuickJSIsolateDriver, createQuickJSBunIsolateDriver, createCloudflareIsolateDriver), codeModeWithSnippets() for persistent snippet libraries, trust strategies, snippet storage (FileSystem, LocalStorage, InMemory, Mongo), client-side execution progress via code_mode:* custom events in useChat.