bug-reproduce
Turn a known bug into a tight, red-capable reproducer, then prove the reproducer locks that…
Expert-council meeting protocol. Given a Brief + a persona cast (from persona-generator), propose the council to the Team Manager, and once convened FACILITATE it: each round post a NEW group message that @-mentions the persona-agents by their ASCII usernameSlug, collect their
$ npx -y skills add Prismer-AI/PrismerCloud --skill council-creator --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/council-creatorContext preview
The summary Claude sees to decide when to auto-load this skill.
Expert-council meeting protocol. Given a Brief + a persona cast (from persona-generator), propose the council to the Team Manager, and once convened FACILITATE it: each round post a NEW group message that @-mentions the persona-agents by their ASCII usernameSlug, collect their
name: council-creator scope: common description: > Expert-council meeting protocol. Given a Brief + a persona cast (from persona-generator), propose the council to the Team Manager, and once convened FACILITATE it: each round post a NEW group message that @-mentions the persona-agents by their ASCII usernameSlug, collect their independent replies, stage-summarize, exchange memory, and settle into a disagreement map + report + memory writeback + task drafts. Personas are REAL agents (role instances), each speaking from its own session — you are the facilitator, NOT a puppeteer playing five roles. The group stays resident for @persona follow-ups. This is a PLAYBOOK the workspace orchestrator executes. license: MIT compatibility: - prismer-sdk - hermes metadata: category: council disclaimerRequired: true
**How they speak together.** A **facilitation playbook** layered onto the workspace orchestrator. There is **no "Council Agent"** — but you are **not** the only execution unit either: each persona is a **real agent** (a role instance provisioned at convene), with its own identity, dispatch, and LLM session. Your job is to **facilitate** — set the agenda, @-mention personas, collect their replies, summarize, exchange memory — **never** to speak for them. Load this skill after `persona-generator` has produced a cast.
| Do | Do NOT | | --- | --- | | propose the council to the Team Manager (`--plan <planId>` + one sentence), then **stop and wait** | **Convene it yourself** — that is the Team Manager's one click, and no command exists for it | | facilitate: each round post a NEW group message that **@-mentions personas by ASCII `usernameSlug`** | Speak a persona's words yourself — personas are real agents, they reply on their own | | collect the personas' replies, stage-summarize, exchange memory | @-mention a persona by its Chinese `displayName` (silently drops → 0 dispatch) | | settle: disagreement map + report + memory + task drafts | Generate persona definitions (persona-generator) | | Keep the group resident; answer @persona follow-ups | Narrate status chatter into the group between rounds | | Say plainly when the Brief does not stand | Chain persona↔persona relays (burns the hop budget — see hop rule) |
**The lifecycle commands are real: `plan`, `propose`, `finalize`.** A council exists only when `plan`/`propose` have run and the Team Manager has convened; the discussion itself is **normal group messages that @-mention the persona-agents** (not a CLI command). Writing a document that *describes* a roundtable creates nothing, and reporting it as done is a false claim of delivery. If you cannot get past a phase, say what failed and why. Never substitute prose for the protocol.
**When to start:** the Team Manager does not ask for "a council" — he drops a deck, or says "帮我找几个人聊聊这个 idea", or asks a question that plainly needs positions other than his own. That is your cue to read the material, assemble the Brief, run `persona-generator`, and **propose**. You start the flow; he only decides whether to hold it.
Phase A plan prismer council plan --file plan.json → planId
propose prismer council propose <ceoConvId> --plan <planId> --text "一句人话"
↓ ⛔ YOU STOP HERE. The Team Manager clicks [好,开吧].
Phase B convene — no command exists. The Team Manager's click instantiates the persona-agents + group.
Phase C facilitate (you receive a "facilitate round N" task) → post ONE new group message
that @-mentions the personas by ASCII usernameSlug → each persona-agent
replies on its own session → you collect + summarize, then STOP.
Phase D settle (you receive a settle task) → prismer council finalize <convId> --file report.json
readback prismer council report <convId>`--workspace-id` defaults to `$PRISMER_WORKSPACE_ID`. Nested bodies come in as a JSON file you write first (shapes below). Each command prints the endpoint's JSON response; a nonzero exit means the phase did **not** happen.
Read this before anything else. **You cannot convene.** There is no `council convene` command, on purpose. The whole flow gives the Team Manager one single decision — *"好,开吧"* or *"先不用"* — and that click is what creates the group. Your job in Phase A ends with `council propose`: the `planId` and one human sentence, and then **you stop and wait**.
**You do NOT pass the cast.** The cloud fills the head-avatars preview on the proposal bubble by reading the cast straight out of your plan draft (`councilPlan.cast` — the same `PersonaDef[]` you gave `council plan`) and projecting only the display-safe subset (never the per-turn `voice`). So all you give `propose` is `--plan <planId>` + `--text "一句人话"` — say, in plain words, *why these positions*. The cloud guarantees the component data; you cannot leave the roster preview empty by forgetting a flag (that was the real e2e failure — 28 §L1). The only variant is `--gap` (Brief did not stand — there is no cast to show).
Do not "helpfully" push past this. Do not describe the roundtable you would have held. Do not write the report early. A council the Team Manager never agreed to is not a council, and a document describing an unheld discussion is a fabricated deliverable — the exact thing this skill exists to make impossible.
What the Team Manager sees is a bubble in your conversation:
> 读完了。这件事牵涉几个很不一样的位置 —— 量产过来人、早期投资人、发动机工程师、 > 政府采购方,各自能看到你看不到的一块。要不要我请他们来聊聊? > [👤👤👤👤👤 5 位 ⌄] **[好,开吧]** **[先不用]**
That sentence is yours to write (`--text`). It should say *why these positions*, in plain language, from what you actually read. Never name internal machinery (`lens`, `cast`, `Brief`, `persona`) to the Team Manager.
Repo: Prismer-AI/PrismerCloud
Turn a known bug into a tight, red-capable reproducer, then prove the reproducer locks that…
Review a diff against its acceptance criteria in four segments (convention adherence, bug…
Five-dimension design audit (frontend UI/UX · server data-model & flow · endpoint spec ·…
Before merge, mechanize Documentation-First — derive the code delta from git diff, then…
Diagnose the local dev machine before any APC loop step — run apc env doctor, classify each…
Close out a local coding task on the bound daemon — stage, commit, branch, merge, push via…