{ "schemaVersion": "1", "topologies": ["sequential", "parallel"], "personas": [ { "id": "product_manager", "displayName": "Product Manager", "systemPromptTemplate": "You are the product manager for {{repo}}. Define clear project goals, user outcomes, non-goals, and acceptance criteria. Maintain a concise PRD-level summary in payload fields so downstream agents can execute independently. Emit a requirements_defined domain event when product requirements are clear enough for implementation planning.", "toolClearance": { "allowlist": ["read_file", "search", "list_files"], "banlist": ["delete_file", "rm", "git_reset", "git_clean"] } }, { "id": "task_manager", "displayName": "Task Manager", "systemPromptTemplate": "You are the task planning agent for {{repo}}. Convert requirements into an implementation roadmap and dependency-aware task graph. Use claude-task-master tooling to create or update tasks, subtasks, and dependencies. Prioritize and surface undone + unblocked tasks first. Required output in payload.taskPlan.tasks: id, title, status, dependencies, subtasks, acceptanceCriteria, and ownerHint. Status values should align with pending/in_progress/blocked/done. Emit requirements_defined when clarifications materially update scope and emit tasks_planned when task graph updates are ready for coding lanes.", "modelConstraint": "claude-sonnet-4-5", "toolClearance": { "allowlist": [ "read_file", "write_file", "search", "list_files", "list_tasks", "get_task", "create_task", "update_task", "create_subtask", "update_subtask", "set_task_dependencies", "mcp__claude-task-master__read_file", "mcp__claude-task-master__write_file", "mcp__claude-task-master__search", "mcp__claude-task-master__list_tasks", "mcp__claude-task-master__get_task", "mcp__claude-task-master__create_task", "mcp__claude-task-master__update_task", "mcp__claude-task-master__create_subtask", "mcp__claude-task-master__update_subtask", "mcp__claude-task-master__set_task_dependencies" ], "banlist": ["delete_file", "rm", "git_reset", "git_clean"] } }, { "id": "developer", "displayName": "Developer", "systemPromptTemplate": "You are a coding agent for {{repo}}. Consume the task plan from handoff payload and select undone, unblocked tasks whose dependencies are satisfied. Keep changes scoped to your assigned lane/node and report completed task IDs. If requirements are unclear or blocked, return status validation_fail with a precise clarification request in payload and emit task_blocked. On successful implementation, emit code_committed and include changedFiles, completedTaskIds, and validation notes in payload.", "modelConstraint": "claude-sonnet-4-5", "toolClearance": { "allowlist": [ "read_file", "write_file", "search", "list_files", "bash", "run_command", "git_status", "git_diff", "npm_test" ], "banlist": ["delete_file", "rm", "git_reset", "git_clean", "git_push"] } }, { "id": "tester", "displayName": "Tester", "systemPromptTemplate": "You are the testing and validation agent for {{repo}}. Validate code and task acceptance criteria for your lane, prioritizing deterministic checks (tests, build, lint, targeted runtime checks). If validation fails, return status validation_fail with reproducible steps and concrete remediation notes. If validation passes, return success, include evidence in payload, and emit validation_passed.", "modelConstraint": "claude-sonnet-4-5", "toolClearance": { "allowlist": [ "read_file", "write_file", "search", "list_files", "bash", "run_command", "npm_test", "npm_run" ], "banlist": ["delete_file", "rm", "git_reset", "git_clean", "git_push"] } }, { "id": "git_integrator", "displayName": "Git Integrator", "systemPromptTemplate": "You are the git integration agent for {{repo}}. Validate lane readiness for merge into the integration target and ensure the worktree is merge-ready. Run status checks and report risks clearly. Do not force risky merge strategies. On successful readiness checks emit branch_merged and include mergeCommit (or readiness marker), mergedBranch, and targetBranch in payload.", "modelConstraint": "claude-sonnet-4-5", "toolClearance": { "allowlist": [ "read_file", "write_file", "search", "list_files", "bash", "run_command", "git", "git_status", "git_diff", "git_add", "git_commit", "git_merge" ], "banlist": ["delete_file", "rm", "git_reset", "git_clean", "git_push", "git_rebase"] } }, { "id": "conflict_resolver", "displayName": "Conflict Resolver", "systemPromptTemplate": "You are the merge conflict resolver for {{repo}}. Resolve conflict markers for the assigned task/worktree, run targeted validation checks, and return success only when conflicts are cleanly resolved. Include resolvedFiles and validation evidence in payload.", "modelConstraint": "claude-sonnet-4-5", "toolClearance": { "allowlist": [ "read_file", "write_file", "search", "list_files", "bash", "run_command", "git", "git_status", "git_diff", "git_add", "git_commit", "npm_test", "npm_run" ], "banlist": ["delete_file", "rm", "git_reset", "git_clean", "git_push", "git_rebase"] } } ], "relationships": [ { "parentPersonaId": "product_manager", "childPersonaId": "task_manager", "constraints": { "maxDepth": 2, "maxChildren": 1 } }, { "parentPersonaId": "task_manager", "childPersonaId": "developer", "constraints": { "maxDepth": 4, "maxChildren": 4 } }, { "parentPersonaId": "task_manager", "childPersonaId": "tester", "constraints": { "maxDepth": 4, "maxChildren": 4 } }, { "parentPersonaId": "task_manager", "childPersonaId": "git_integrator", "constraints": { "maxDepth": 5, "maxChildren": 2 } } ], "topologyConstraints": { "maxDepth": 6, "maxRetries": 0 }, "pipeline": { "entryNodeId": "product-intake", "nodes": [ { "id": "product-intake", "actorId": "product_manager_actor", "personaId": "product_manager" }, { "id": "task-roadmap", "actorId": "task_manager_actor", "personaId": "task_manager" }, { "id": "dev-impl-a", "actorId": "developer_actor", "personaId": "developer", "topology": { "kind": "parallel", "blockId": "implementation-pass-1" } }, { "id": "dev-impl-b", "actorId": "developer_actor", "personaId": "developer", "topology": { "kind": "parallel", "blockId": "implementation-pass-1" } }, { "id": "qa-a", "actorId": "tester_actor", "personaId": "tester", "topology": { "kind": "parallel", "blockId": "validation-pass-1" } }, { "id": "qa-b", "actorId": "tester_actor", "personaId": "tester", "topology": { "kind": "parallel", "blockId": "validation-pass-1" } }, { "id": "task-clarify-a", "actorId": "task_manager_actor", "personaId": "task_manager" }, { "id": "task-clarify-b", "actorId": "task_manager_actor", "personaId": "task_manager" }, { "id": "dev-rework-a", "actorId": "developer_actor", "personaId": "developer", "topology": { "kind": "parallel", "blockId": "implementation-pass-2" } }, { "id": "dev-rework-b", "actorId": "developer_actor", "personaId": "developer", "topology": { "kind": "parallel", "blockId": "implementation-pass-2" } }, { "id": "qa-rework-a", "actorId": "tester_actor", "personaId": "tester", "topology": { "kind": "parallel", "blockId": "validation-pass-2" } }, { "id": "qa-rework-b", "actorId": "tester_actor", "personaId": "tester", "topology": { "kind": "parallel", "blockId": "validation-pass-2" } }, { "id": "merge-a", "actorId": "git_integrator_actor", "personaId": "git_integrator" }, { "id": "merge-b", "actorId": "git_integrator_actor", "personaId": "git_integrator" }, { "id": "merge-conflict-resolve-a", "actorId": "conflict_resolver_actor", "personaId": "conflict_resolver" }, { "id": "merge-conflict-resolve-b", "actorId": "conflict_resolver_actor", "personaId": "conflict_resolver" } ], "edges": [ { "from": "product-intake", "to": "task-roadmap", "on": "success" }, { "from": "task-roadmap", "to": "dev-impl-a", "on": "success" }, { "from": "task-roadmap", "to": "dev-impl-b", "on": "success" }, { "from": "dev-impl-a", "to": "qa-a", "on": "success" }, { "from": "dev-impl-b", "to": "qa-b", "on": "success" }, { "from": "dev-impl-a", "to": "task-clarify-a", "on": "validation_fail" }, { "from": "dev-impl-b", "to": "task-clarify-b", "on": "validation_fail" }, { "from": "qa-a", "to": "dev-rework-a", "on": "validation_fail" }, { "from": "qa-b", "to": "dev-rework-b", "on": "validation_fail" }, { "from": "task-clarify-a", "to": "dev-rework-a", "on": "success" }, { "from": "task-clarify-b", "to": "dev-rework-b", "on": "success" }, { "from": "dev-rework-a", "to": "qa-rework-a", "on": "success" }, { "from": "dev-rework-b", "to": "qa-rework-b", "on": "success" }, { "from": "qa-a", "to": "merge-a", "on": "success" }, { "from": "qa-b", "to": "merge-b", "on": "success" }, { "from": "qa-rework-a", "to": "merge-a", "on": "success" }, { "from": "qa-rework-b", "to": "merge-b", "on": "success" }, { "from": "merge-a", "to": "merge-conflict-resolve-a", "event": "merge_conflict_detected" }, { "from": "merge-b", "to": "merge-conflict-resolve-b", "event": "merge_conflict_detected" } ] } }