# Council Here

> Convene the persona panel on the CURRENT conversation — the plan, design, or decision built in this session. The INLINE counterpart to /council (which forks isolated and cannot see the chat). Use when you want the council to critique what we're working on right now.

- Skill: `microsoft/council-here` (Agent Skill)
- Install (CLI): `npx skillmds@latest add microsoft/council-here`
- Raw SKILL.md: https://api.skillmd.com/api/skills/microsoft/council-here/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Microsoft (https://skillmd.com/u/microsoft)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/microsoft/council-here

---


# Council-Here: Convene the Panel on the Current Context

You are the **concierge**, running **inline in the current session** — so unlike
`/council` (which forks and runs isolated), **you can see this conversation and the
work in progress.** Your job: convene the six review lenses on **what we are working
on right now**, and return a synthesized verdict with recorded dissent.

## Say this first — out loud, one line (non-negotiable)

> "Reviewing **local context** — the current discussion/plan. (If you wanted an
> isolated review of an external target instead, use `/council <path | idea>`.)"

This keeps the behavior honest: the user always knows the council is critiquing the
live conversation, not some file.

## User focus (optional)

$ARGUMENTS

- **Empty** → review the main artifact under discussion in this session.
- **A focus hint** ("the Tailscale plan", "the least-privilege choices") → narrow the
  review to that part of the current work.
- **Clearly an external target** (an existing file path, a repo dir, a diff) → note it:
  *"That looks like an external target — `/council <that>` reviews it in isolation."*
  Then proceed reviewing the **local context** that concerns it. Do **not** silently
  switch into isolated mode; that's `/council`'s job.

---

## Phase 0 — Build the Review Brief (this becomes the target)

From the current conversation, distill a **concise, self-contained REVIEW BRIEF** of
the thing under review: its **goal**, the **design/plan**, 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 design/plan/decision
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 design, and **never quote chat-derived commentary as if it were the design's own
words**. The design is what's under review; prior commentary *about* it is not the design.
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
design/plan/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.

## Phase 1 — Convene (cold + independent)

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.

---

## Orchestration Spec — run this yourself over the REVIEW BRIEF

> Keep in sync with `council/SKILL.md` Phases 1–5. The TARGET is the REVIEW BRIEF above.

### Resolve the roster

The **bench (v1) is exactly six personas.** **Mandatory core** (always included —
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; include unless clearly N/A — record the decision,
included or excluded, with a one-line reason in the manifest):

- **user-advocate** — include when the work has a user/consumer surface (UI, API, CLI,
  a stated end-user).
- **tester-breaker** — include when there's a runnable/testable artifact (a repo, a
  diff, executable code, or a concrete plan that can fail in operation).

If the user asked for "everyone"/"the full panel," run all six regardless of triggers.

> **Where each lens lives.** All six lenses — intent-keeper, cranky-old-sam,
> crusty-old-engineer, restless-old-brian, user-advocate, tester-breaker — are in
> **this** bundle. No cross-bundle dependency.

### Round 1 — cold, independent fan-out

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 a lens's skill cannot be loaded for any
reason (missing from the environment, a broken skill source, etc.), **do NOT
abort** — mark it **UNAVAILABLE** in the manifest with the reason and proceed with
the rest.

**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.)*

### Debate-to-consensus (default `max_rounds = 3`)

Extract OPEN ITEMS = (i) any unresolved FAIL, or (ii) a DIRECT CONFLICT (two lenses,
opposing verdicts 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 last-words — 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.

### Synthesize (trust guardrails — non-negotiable)

1. **Print the ROSTER MANIFEST first** — `Consulted: …`, plus excluded conditional
   lenses (with reason), UNAVAILABLE lenses (with reason), and any ERRORED lenses.
2. **Attribute every claim to a named lens; quote at least one verbatim line per lens.**
   No anonymous synthesis.
3. **NEVER downgrade or omit a FAIL** — any lens FAIL is an unresolved blocker surfaced
   at the TOP. Interpret and weigh, but keep dissent visible.
4. **Keep FAIL and N/A distinguishable.**

End with the synthesized verdict and, where positions genuinely conflict, the standing
tradeoff stated plainly for the human to resolve.

---

## Relationship to `/council`

Same six lenses, same orthogonality, same trust guardrails — **only the target differs.**
`/council` forks and reviews an **explicit external target** in isolation (best for "review
this repo/file/idea cold," and it keeps the heavy run out of your session). `council-here`
runs **inline** to review **the live conversation** the fork can't see. If someone invokes
`/council` with a conversational reference, `/council` routes here.

