The Role System — Architecture
This marketplace grew from a set of independent skills into a small system: three orchestrators — dev-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 |
|
one role, one pass, one context |
the substrate (cheapest, instant) |
Panel |
|
many roles in parallel, critique + converge |
decide |
Relay |
|
many roles, gated pipeline, file handoffs |
deliver |
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
skepticis 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.