Skip to content

feat: signal-driven persona selection, constraints, handoffs, and orchestration#2

Merged
robinojw merged 1 commit intomainfrom
feat/persona-improvements
Mar 23, 2026
Merged

feat: signal-driven persona selection, constraints, handoffs, and orchestration#2
robinojw merged 1 commit intomainfrom
feat/persona-improvements

Conversation

@robinojw
Copy link
Copy Markdown
Owner

Summary

Inspired by opensoft/oh-my-opencode's multi-agent architecture, this PR makes roster's personas smarter, more actionable, and self-orchestrating.

Changes

Signal-driven persona selection (selector.go)

  • Only relevant personas are now written to .roster/personas/ based on detected repo signals
  • 5 core personas always included: architect, reviewer, test, docs, security
  • Frontend personas (design, accessibility) added when TypeScript/JavaScript, design systems, Storybook, or frontend frameworks detected
  • Conditional personas: devops (CI/Docker), api (web frameworks), data (data-heavy languages/frameworks), performance (frontend/E2E)
  • A minimal Go CLI gets 5 personas instead of 11 — no more irrelevant design/accessibility advice

Richer persona definitions (all 11 .md files)

  • role field (planning / execution / review) — enables hierarchical orchestration patterns
  • ## Constraints section — explicit anti-patterns and "must not" rules per persona, preventing common failure modes
  • ## Handoffs section — defines upstream/downstream relationships between personas for delegation and verification flows

Enhanced managed section (managed.go)

  • Codebase Context Hints — detected signals rendered as structured hints (languages, frameworks, test tools, CI, linter, etc.) to streamline persona hydration
  • Orchestration Rules — trigger-keyword-to-persona routing table with role-based interaction patterns (planning → execution → review)

Pipeline changes (writer.go)

  • WriteAll now selects personas via Select() before writing, so only relevant persona files and table entries are emitted

Testing

  • 10 new selector tests covering: core always-included, Go-only exclusions, CI/Docker triggers, React/Tailwind frontend, Django data+api, Python data, full-stack all-11, minimal 5-core
  • New TestPersonaRoleIsValid ensures all personas have valid role values
  • Updated integration test expectations for signal-based counts
  • All tests pass with -race, golangci-lint run reports 0 issues

…hestration

Inspired by opensoft/oh-my-opencode's agent architecture, this adds:

- Signal-driven persona selection: only relevant personas are written
  based on detected repo signals (e.g. Go CLI gets 5 core personas,
  React+Tailwind gets design + accessibility + performance)
- Role classification: each persona now has a role field (planning,
  execution, or review) enabling hierarchical orchestration
- Constraints section: every persona defines what it must NOT do,
  preventing common failure modes
- Handoffs section: explicit upstream/downstream relationships between
  personas for delegation and verification flows
- Codebase context hints: detected signals are rendered as structured
  hints to streamline persona hydration
- Orchestration rules: managed section now includes routing rules
  mapping trigger keywords to personas by role
@robinojw robinojw force-pushed the feat/persona-improvements branch from 38bfd2b to 31f0009 Compare March 23, 2026 14:37
@robinojw robinojw merged commit 34e4219 into main Mar 23, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant