The Role System — Architecture

This marketplace grew from a set of independent skills into a small system: three orchestratorsdev-crew, brainstorm-panel, and research-sweep — over one shared substrate, the roles plugin (four plugins total). They all share one underlying abstraction, the evolving role.

This page is the concept: what a role is, what problem it solves, and where the system sits. Choosing & chaining covers which orchestrator to reach for and in what order; The file model covers how roles are stored and evolve.

The idea in one sentence

The role is the unit of reuse; the orchestrators are just contexts a role runs in. One persona — say a senior debugger — can run several ways without being redefined: invoked solo for a quick pass, or seated into any of the three orchestrators (as a gated crew role inside a delivery relay, a panel lens in a brainstorming session, or a research verifier in a coverage sweep). Its identity lives in one place and its hard-won lessons accumulate there, regardless of which context produced them.

The roles plugin is the substrate — one role, one solo pass; the three orchestrators each compose a task-fit roster of those roles toward a different end:

Mode Plugin Unit of work End

Solo

roles

one role, one pass, one context

the substrate (cheapest, instant)

Panel

brainstorm-panel

many roles in parallel, critique + converge

decide

Relay

dev-crew

many roles, gated pipeline, file handoffs

deliver

Sweep

research-sweep

many roles fan-out, synthesize + verify

discover

The three orchestrators (and what roles is)

roles is not an orchestrator — it is the substrate: the shared, evolving talent pool plus solo invocation (/roles:as). It’s the noun the three verbs operate on. Each orchestrator composes a task-fit roster of those roles, but they differ on every axis below.

Axis brainstorm-panel — decide dev-crew — deliver research-sweep — discover

Produces

a judgment / decision (advisory, no artifact shipped)

a shipped target, gated

verified, cited findings

Roles relate by

disagreement — the clash is the point

handoff — sequential, each builds on the last

independence — disjoint coverage, no clash

Flow

parallel diverge → converge

sequential gated relay

parallel fan-out → synthesize + verify

Compose roles from

quality axes (perspectives)

the delivery target (functions)

the information space (coverage angles)

Guards against

groupthink / blind spots (unanimity = red flag)

shipping broken / unverified work

incomplete coverage + unverified facts

Two properties tie them together:

  • They chain. research (discover the facts) → panel (decide what to do) → crew (deliver it) — see Usage sequence for the hand-offs between stages and how to pick just one.

  • They share roles. The skeptic is a panel seat, a crew adversarial check, and a research fact-verifier — one evolving persona, three contexts. That cross-context reuse is exactly what the shared core (below) exists for; research-sweep is the third consumer that proves it.

The problem it solves

Before this system, each orchestrator had exactly half of the right mechanism:

Formation (how the team is picked) Evolution (do roles improve?)

brainstorm-panel

✅ Dynamic — seats derived from the task

❌ Ephemeral — every seat re-invented cold each run; accumulated wisdom buried in log prose

dev-crew

❌ Static — category → fixed lineup lookup

✅ Roles persist with learnings, model tiers, a probationary→stable lifecycle

Worse, the same persona could live in both worlds with unconnected lessons — an art-historian role that learned one thing as a crew member and another as a panel seat, its knowledge split across two files that never talked. The role system gives both orchestrators both halves: dynamic formation and evolving roles, over one shared talent pool.

Field position

No surveyed public project has roles that accumulate experience across orchestration contexts. Large agent catalogs (VoltAgent’s 154, wshobson’s 192) are static libraries; dynamic-selection panels learn nothing between runs; the one pack that fuses prompts with a learning loop stores it in an opaque global database. Dynamic formation plus lane-scoped evolving roles, shared across solo / crew / panel as reviewable per-repo markdown, is — as of this writing — unique. See the full survey and rationale in the project’s decision record, docs/decisions/2026-06-12-ecosystem-review.md.

Read next

  • Choosing & chaining — which orchestrator, in what order, with a worked example, and what happens when a role gets stuck.

  • The file model — everything under .claude/roles/, how lanes keep evolution from corrupting shared identity, and the no-downgrade principle.