Skip to content
Development
Skill

/persona-panel

Use this skill when you need multi-persona parallel content review — domain experts, buyer personas, compliance reviewers, or custom catalog entries reviewing a target file or output. Dispatches N persona agents in parallel, consolidates verdicts via a configurable mode

From plugin
session-orchestrator
5144 skills14 agents26 commands10 hooks
+1
Install
$ npx -y skills add Kanevry/session-orchestrator --skill persona-panel --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/persona-panel

Context preview

The summary Claude sees to decide when to auto-load this skill.

Use this skill when you need multi-persona parallel content review — domain experts, buyer personas, compliance reviewers, or custom catalog entries reviewing a target file or output. Dispatches N persona agents in parallel, consolidates verdicts via a configurable mode

SKILL.md

persona-panel.SKILL.md
name: persona-panel
user-invocable: true
tags: [review, personas, content, quality, multi-agent]
model: inherit
description: >
  Use this skill when you need multi-persona parallel content review — domain experts, buyer
  personas, compliance reviewers, or custom catalog entries reviewing a target file or output.
  Dispatches N persona agents in parallel, consolidates verdicts via a configurable mode
  (voting-quorum, hard-gate-threshold, or coordinator-summary), and writes a timestamped sidecar
  to .orchestrator/persona-panel/. Invoked via /persona-panel <target-path>.

Persona Panel Skill

Overview

Persona Panel runs any number of catalog-defined personas in parallel against a single target (file, document, or output range). Each persona agent produces a structured verdict. The coordinator consolidates the verdicts into a final result using one of three configurable modes and persists a sidecar record for audit and trend-tracking.

The catalog lives in `.claude/personas/*.md` — per-repo, never plugin-central. This is intentional: climate-research repos need physicists; SaaS repos need buyer personas; compliance repos need auditors. Plugin-central catalogs block that diversity.

Bundled Presets

The plugin ships one ready-made preset alongside the general `templates/personas/` catalog: a 3-lens PM/Designer/Engineer panel at `skills/persona-panel/presets/` (`pm-lens.md`, `designer-lens.md`, `engineer-lens.md`; tier `domain-expert`). Each lens audits one assumption dimension — value (PM), usability (Designer), feasibility (Engineer) — as three parallel domain-expert personas rather than one reviewer working all three serially.

Reach for it on feature/PRD/design reviews in a repo whose `.claude/personas/` is empty or missing and no domain-specific catalog exists yet. It is a starting point, not a substitute — the per-repo catalog philosophy above still holds; copy and adapt into the project's own catalog rather than referencing the plugin copy in place.

Install:

mkdir -p .claude/personas
# Claude Code has no `plugin dir` subcommand — resolve the install path from the cache.
SO_DIR="$(dirname "$(find ~/.claude/plugins/cache -path '*session-orchestrator*' -name package.json 2>/dev/null | head -1)")"
cp "$SO_DIR/skills/persona-panel/presets/"*.md .claude/personas/

Phase 0: Bootstrap Gate

Read `skills/_shared/bootstrap-gate.md` and execute the gate check. If the gate is CLOSED, invoke `skills/bootstrap/SKILL.md` and wait for completion before proceeding. If the gate is OPEN, continue to Phase 1.

<HARD-GATE> Do NOT proceed past Phase 0 if GATE_CLOSED. There is no bypass. Refer to `skills/_shared/bootstrap-gate.md` for the full HARD-GATE constraints. </HARD-GATE>

Phase 1: Catalog Discovery

Load the per-repo persona catalog via `loadCatalog()` from `scripts/lib/persona-panel/catalog-loader.mjs`.

**Failure modes — all are hard stops:**

**(a) `.claude/personas/` directory missing:**

Error (exit 2): .claude/personas/ directory not found in this repo.
Create persona files there to use /persona-panel.
See templates/personas/ for starter templates (issue #458).

**(b) `.claude/personas/` present but empty (no `.md` files):**

Error (exit 2): .claude/personas/ exists but contains no persona files (*.md).
Add at least one persona file to use /persona-panel.
See templates/personas/ for starter templates (issue #458).

**(c) `--personas <name>` arg specified but `name` not found in catalog:**

Error (exit 1): Persona "<name>" not found in .claude/personas/.
Available personas: <list of names from catalog>.

**(d) Malformed YAML frontmatter in a catalog file:**

Error (exit 1): Malformed YAML in .claude/personas/<filename>.md at line <N>: <error>.
Fix the frontmatter before running /persona-panel.

**Model validation (H2 security guard):** The catalog loader validates each persona's `model:` field against `MODEL_ID_RE` + `ALLOWED_MODEL_ALIASES` from `scripts/lib/agent-frontmatter.mjs` at load time. A persona with an invalid model string triggers failure mode (d) with an informative message: "invalid model '<value>' — must be a Claude model ID or alias (inherit|sonnet|opus|haiku)".

**`output_contract` structural pre-check (H3 security guard):** After YAML parse and before AJV compile, the loader inspects each persona's `output_contract` object for forbidden keys: `$ref`, `$defs`, `allOf`, `anyOf`. Any occurrence triggers failure mode (d). This structural pre-check runs BEFORE `ajv.compile()`. The AJV compile call wraps in a 2-second AbortSignal timeout to guard against pathological schema inputs.

After successful load, emit a one-line status banner:

Catalog: [N] personas loaded from .claude/personas/. Tier breakdown: domain-expert [N], buyer-persona [N], compliance [N], custom [N].

If `--personas <names>` was passed, filter to the named subset. Report the active set.

Phase 2: Target-Input-Resolution

Resolve the `<target-path>` argument against the project root.

1. Expand to absolute path (relative inputs are resolved from `git rev-parse --show-toplevel`). 2. Call `validatePathInsideProject(absolutePath, projectRoot)` from `scripts/lib/path-utils.mjs`. This function performs a two-phase lexical + realpath guard.

  • If the path resolves outside the project root: exit 1 with message

"Target path escapes project root — /persona-panel only reviews files inside the repo." 3. Confirm the file exists and is readable. If not: exit 1 with "Target file not found: <path>". 4. If a range was specified (`--lines <start>-<end>`), validate that start ≤ end and both are positive integers.

Store the resolved absolute path as `$TARGET`.

Phase 3: Parallel Dispatch

Dispatch one Agent per persona from the active catalog set.

**Model selection per persona:**

  • If `persona.model` is a full Claude model ID (`MODEL_ID_RE`): use it as-is.
  • If `persona.model` is `opus` or unset AND `persona.tier == 'domain-expert'`: override
Read more
Ships withsession-orchestrator

Give your agents a working rhythm. You type three commands: /session reads your repository, your open issues and the last session, proposes what to work on, and waits for your correction.

Get the whole plugin

Other skills on session-orchestrator.