Assigning 5 Personas to Claude Code for Parallel Development A developer has devised a multi-persona architecture for Claude Code that assigns distinct roles—Architect, UI Designer, Coder, Reviewer, and Conflict Resolver—to enable parallel development on large requests. The approach constrains each persona's permissions to create checkpoints and reduce conflicts, with the developer noting that the real challenge lies in how issues are split rather than in the model's capabilities. The developer reports building 10 personal apps in three months and releasing two to the App Store using this method. When you give a large request to Claude Code, doesn't this happen? While building 10 personal apps in three months and releasing two to the App Store, I encountered these issues extensively. Here is the architecture I arrived at. The conclusion is that this was not a capability problem. It was a permission design problem. You are asking one persona to handle design, implementation, review, and merging. You decide the design, implement it yourself, review it yourself, and merge it yourself. There is no check or balance anywhere. No human team would approve this configuration. | Persona | Can Do | Cannot Do | |---|---|---| | Architect | Create/split Issues | Write code | | UI Designer | Write UI specifications | Write code | | Coder | Change only within the assigned Issue's scope | Touch outside scope, merge, or decide structure | | Reviewer | Review and merge | Implement or resolve conflicts | | Conflict Resolver | Resolve conflicts | Merge or act before being called | All use the same model. There is no difference in intelligence. The only difference is what they are allowed to do. Why does this change the result? AI selects the most plausible next step within the given context. If you just say "build a login feature," it is plausible for it to do everything related to that topic. If you say "change only src/auth/ and satisfy these three acceptance criteria," the most plausible next step becomes completely different. Constraints create context, and context determines output. Request → Architect Split into Issues create groups with non-overlapping scopes │ ├─ Coder issue/12-xxx ─┐ ├─ Coder issue/13-yyy ─┤ Parallel └─ Coder issue/14-zzz ─┘ │ One by one per PR ▼ Reviewer Check acceptance criteria and scope → Merge │ └─ Conflict → Conflict Resolver → Reviewer .claude/agents/architect.md looks like this: --- name: architect description: Use to turn a feature request into GitHub issues for issue-driven parallel development. Defines per-issue scope owned paths , dependencies, branch names, and acceptance criteria. Never implements code. tools: Bash, Read, Grep, Glob model: inherit --- You are the Architect . You do not write code. Your job is to "split Issues into units that can be executed safely in parallel." What to do when called 1. Read the request and identify necessary tasks. 2. Split tasks into 1 Issue = 1 scope = 1 branch . - Keep scopes as narrow as possible and ensure they do not overlap with other Issues. - Group non-overlapping Issues together as a "parallel start group." 3. When creating an issue via gh issue create , always include: - Scope: Paths of files/directories you are allowed to modify - Branch: issue/