@planu/cli 0.32.0 → 0.33.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/config/license-plans.json +4 -1
  2. package/dist/config/team-templates.json +39 -0
  3. package/dist/engine/license-validator/core.d.ts.map +1 -1
  4. package/dist/engine/license-validator/core.js +7 -4
  5. package/dist/engine/license-validator/core.js.map +1 -1
  6. package/dist/engine/team-planner/distribution-planner.d.ts +7 -0
  7. package/dist/engine/team-planner/distribution-planner.d.ts.map +1 -0
  8. package/dist/engine/team-planner/distribution-planner.js +78 -0
  9. package/dist/engine/team-planner/distribution-planner.js.map +1 -0
  10. package/dist/engine/team-planner/index.d.ts +4 -0
  11. package/dist/engine/team-planner/index.d.ts.map +1 -0
  12. package/dist/engine/team-planner/index.js +5 -0
  13. package/dist/engine/team-planner/index.js.map +1 -0
  14. package/dist/engine/team-planner/prompt-builder.d.ts +7 -0
  15. package/dist/engine/team-planner/prompt-builder.d.ts.map +1 -0
  16. package/dist/engine/team-planner/prompt-builder.js +79 -0
  17. package/dist/engine/team-planner/prompt-builder.js.map +1 -0
  18. package/dist/engine/team-planner/result-validator.d.ts +7 -0
  19. package/dist/engine/team-planner/result-validator.d.ts.map +1 -0
  20. package/dist/engine/team-planner/result-validator.js +51 -0
  21. package/dist/engine/team-planner/result-validator.js.map +1 -0
  22. package/dist/index.js +2 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/resources/process.js +1 -1
  25. package/dist/resources/process.js.map +1 -1
  26. package/dist/tools/create-spec/post-creation.d.ts +3 -1
  27. package/dist/tools/create-spec/post-creation.d.ts.map +1 -1
  28. package/dist/tools/create-spec/post-creation.js +37 -1
  29. package/dist/tools/create-spec/post-creation.js.map +1 -1
  30. package/dist/tools/create-spec/spec-builder.js +1 -1
  31. package/dist/tools/create-spec/spec-builder.js.map +1 -1
  32. package/dist/tools/create-spec-helpers.d.ts +3 -1
  33. package/dist/tools/create-spec-helpers.d.ts.map +1 -1
  34. package/dist/tools/create-spec-helpers.js +7 -2
  35. package/dist/tools/create-spec-helpers.js.map +1 -1
  36. package/dist/tools/create-spec.d.ts.map +1 -1
  37. package/dist/tools/create-spec.js +6 -1
  38. package/dist/tools/create-spec.js.map +1 -1
  39. package/dist/tools/generate-teammate-prompt.d.ts +17 -0
  40. package/dist/tools/generate-teammate-prompt.d.ts.map +1 -0
  41. package/dist/tools/generate-teammate-prompt.js +86 -0
  42. package/dist/tools/generate-teammate-prompt.js.map +1 -0
  43. package/dist/tools/git/hook-ops.d.ts.map +1 -1
  44. package/dist/tools/git/hook-ops.js +10 -1
  45. package/dist/tools/git/hook-ops.js.map +1 -1
  46. package/dist/tools/init-project/handler.d.ts.map +1 -1
  47. package/dist/tools/init-project/handler.js +71 -1
  48. package/dist/tools/init-project/handler.js.map +1 -1
  49. package/dist/tools/init-project/helpers.d.ts +2 -2
  50. package/dist/tools/init-project/helpers.d.ts.map +1 -1
  51. package/dist/tools/init-project/helpers.js +3 -11
  52. package/dist/tools/init-project/helpers.js.map +1 -1
  53. package/dist/tools/init-project/result-builder.d.ts.map +1 -1
  54. package/dist/tools/init-project/result-builder.js +6 -0
  55. package/dist/tools/init-project/result-builder.js.map +1 -1
  56. package/dist/tools/list-specs.d.ts.map +1 -1
  57. package/dist/tools/list-specs.js +16 -0
  58. package/dist/tools/list-specs.js.map +1 -1
  59. package/dist/tools/plan-team-distribution.d.ts +9 -0
  60. package/dist/tools/plan-team-distribution.d.ts.map +1 -0
  61. package/dist/tools/plan-team-distribution.js +138 -0
  62. package/dist/tools/plan-team-distribution.js.map +1 -0
  63. package/dist/tools/register-team-tools.d.ts +3 -0
  64. package/dist/tools/register-team-tools.d.ts.map +1 -0
  65. package/dist/tools/register-team-tools.js +47 -0
  66. package/dist/tools/register-team-tools.js.map +1 -0
  67. package/dist/tools/update-status.d.ts.map +1 -1
  68. package/dist/tools/update-status.js +71 -3
  69. package/dist/tools/update-status.js.map +1 -1
  70. package/dist/tools/validate-team-results.d.ts +9 -0
  71. package/dist/tools/validate-team-results.d.ts.map +1 -0
  72. package/dist/tools/validate-team-results.js +82 -0
  73. package/dist/tools/validate-team-results.js.map +1 -0
  74. package/dist/types/index.d.ts +1 -0
  75. package/dist/types/index.d.ts.map +1 -1
  76. package/dist/types/index.js +1 -0
  77. package/dist/types/index.js.map +1 -1
  78. package/dist/types/project/planu-config.d.ts +4 -0
  79. package/dist/types/project/planu-config.d.ts.map +1 -1
  80. package/dist/types/spec/inputs.d.ts +5 -0
  81. package/dist/types/spec/inputs.d.ts.map +1 -1
  82. package/dist/types/team-planner.d.ts +183 -0
  83. package/dist/types/team-planner.d.ts.map +1 -0
  84. package/dist/types/team-planner.js +3 -0
  85. package/dist/types/team-planner.js.map +1 -0
  86. package/package.json +1 -1
  87. package/src/config/license-plans.json +4 -1
  88. package/src/config/team-templates.json +39 -0
@@ -0,0 +1,183 @@
1
+ import type { AgentRole, ModelTier } from './multi-agent.js';
2
+ /** Complete distribution plan for a team of Claude Code agents. */
3
+ export interface TeamDistributionPlan {
4
+ /** Human-readable team name. */
5
+ teamName: string;
6
+ /** Total number of teammates in the team. */
7
+ teamSize: number;
8
+ /** Per-teammate assignment details. */
9
+ teammates: TeammateAssignment[];
10
+ /** Ordered execution phases (parallel within each phase). */
11
+ executionOrder: TeamExecutionPhase[];
12
+ /** Estimated wall-clock duration for the full team run. */
13
+ estimatedDuration: string;
14
+ /** Warnings about potential issues (e.g. file conflicts, large specs). */
15
+ warnings: string[];
16
+ }
17
+ /** Assignment details for a single teammate in the team. */
18
+ export interface TeammateAssignment {
19
+ /** Unique teammate name (e.g. "spec-042-impl"). */
20
+ name: string;
21
+ /** Role this teammate fulfils. */
22
+ role: AgentRole;
23
+ /** Model tier assigned to this teammate. */
24
+ model: ModelTier;
25
+ /** Spec IDs this teammate is responsible for. */
26
+ specs: string[];
27
+ /** Files this teammate has exclusive write access to. */
28
+ ownedFiles: string[];
29
+ /** Generated prompt to send to this teammate. */
30
+ prompt: string;
31
+ }
32
+ /** A phase of execution where all listed teammates run in parallel. */
33
+ export interface TeamExecutionPhase {
34
+ /** Phase number (1-based). */
35
+ phase: number;
36
+ /** Teammate names that run in parallel during this phase. */
37
+ teammates: string[];
38
+ /** Reason these teammates are grouped together (or separated). */
39
+ reason: string;
40
+ }
41
+ /** Predefined team composition template. */
42
+ export interface TeamTemplate {
43
+ /** Unique template identifier. */
44
+ id: string;
45
+ /** Human-readable template name. */
46
+ name: string;
47
+ /** Short description of the template strategy. */
48
+ description: string;
49
+ /** Pattern category for matching. */
50
+ pattern: string;
51
+ /** Role composition for the team. */
52
+ roles: TeamTemplateRole[];
53
+ }
54
+ /** A role slot within a TeamTemplate. */
55
+ export interface TeamTemplateRole {
56
+ /** Agent role for this slot. */
57
+ role: AgentRole;
58
+ /** Model tier for agents in this slot. */
59
+ model: ModelTier;
60
+ /** Fixed count or "per-spec" for dynamic sizing. */
61
+ count: number | 'per-spec';
62
+ }
63
+ /** Recommendation on whether to use Agent Teams for a set of specs. */
64
+ export interface TeamSuggestion {
65
+ /** Whether Agent Teams are recommended for this workload. */
66
+ recommended: boolean;
67
+ /** Explanation of the recommendation. */
68
+ reason: string;
69
+ /** Suggested template ID. */
70
+ templateId: string;
71
+ /** Recommended team size. */
72
+ teamSize: number;
73
+ /** Spec IDs included in the recommendation. */
74
+ specs: string[];
75
+ /** Exact tool call suggestions for the LLM to execute. */
76
+ toolCalls: string[];
77
+ }
78
+ /** Context provided to the prompt builder for a single teammate. */
79
+ export interface TeammatePromptContext {
80
+ /** Primary language of the project (e.g. "typescript", "python"). */
81
+ projectLanguage: string;
82
+ /** Primary framework if detected (e.g. "next.js", "django"). */
83
+ projectFramework: string | null;
84
+ /** Architecture pattern (e.g. "hexagonal", "layered"). */
85
+ architecture: string;
86
+ /** Project conventions extracted from constitution/config. */
87
+ conventions: Record<string, unknown>;
88
+ /** Spec details for this teammate's assignment. */
89
+ specDetails: {
90
+ id: string;
91
+ title: string;
92
+ criteria: string[];
93
+ };
94
+ /** Files this teammate owns (exclusive write access). */
95
+ ownedFiles: string[];
96
+ /** Files this teammate must NOT modify. */
97
+ forbiddenFiles: string[];
98
+ /** Quality rules from the project constitution. */
99
+ qualityRules: string[];
100
+ /** Testing requirements (coverage thresholds, runner commands). */
101
+ testingRequirements: string[];
102
+ /** Git conventions (branch naming, commit format). */
103
+ gitConventions: string[];
104
+ /** Commands to run for validation before reporting done. */
105
+ validationCommands: string[];
106
+ }
107
+ /** Result of validating team outputs after all teammates complete. */
108
+ export interface TeamValidationResult {
109
+ /** Whether the overall validation passed. */
110
+ passed: boolean;
111
+ /** Whether TypeScript type-checking passed. */
112
+ typecheckPassed: boolean;
113
+ /** Whether linting passed. */
114
+ lintPassed: boolean;
115
+ /** Whether tests passed. */
116
+ testsPassed: boolean;
117
+ /** Whether coverage thresholds were met. */
118
+ coveragePassed: boolean;
119
+ /** Files modified by more than one teammate (violations). */
120
+ fileConflicts: {
121
+ file: string;
122
+ teammates: string[];
123
+ }[];
124
+ /** Per-spec criteria coverage report. */
125
+ criteriaReport: {
126
+ specId: string;
127
+ covered: number;
128
+ total: number;
129
+ }[];
130
+ /** Recommended order for merging teammate branches. */
131
+ mergeOrder: string[];
132
+ /** Human-readable summary of validation results. */
133
+ summary: string;
134
+ }
135
+ /** Minimal spec-like input for the distribution planner. */
136
+ export interface TeamPlannerSpecInput {
137
+ id: string;
138
+ title: string;
139
+ criteria?: string[];
140
+ }
141
+ /** Minimal reference to a team template. */
142
+ export interface TeamTemplateRef {
143
+ id: string;
144
+ name: string;
145
+ }
146
+ /** Output produced by a teammate, used for validation. */
147
+ export interface TeammateOutput {
148
+ name: string;
149
+ modifiedFiles: string[];
150
+ coveredCriteria: string[];
151
+ }
152
+ /** Input for the plan_team_distribution tool. */
153
+ export interface PlanTeamDistributionInput {
154
+ /** Project identifier. */
155
+ projectId: string;
156
+ /** Spec IDs to distribute across the team. */
157
+ specIds: string[];
158
+ /** Optional template ID to use for team composition. */
159
+ template?: string;
160
+ }
161
+ /** Input for the generate_teammate_prompt tool. */
162
+ export interface GenerateTeammatePromptInput {
163
+ /** Project identifier. */
164
+ projectId: string;
165
+ /** Spec ID assigned to this teammate. */
166
+ specId: string;
167
+ /** Name for this teammate. */
168
+ teammateName: string;
169
+ /** Files assigned to this teammate. */
170
+ assignedFiles: string[];
171
+ /** Role for this teammate. */
172
+ role: AgentRole;
173
+ }
174
+ /** Input for the validate_team_results tool. */
175
+ export interface ValidateTeamResultsInput {
176
+ /** Project identifier. */
177
+ projectId: string;
178
+ /** Spec IDs that were distributed. */
179
+ specIds: string[];
180
+ /** Names of teammates whose results to validate. */
181
+ teammateNames: string[];
182
+ }
183
+ //# sourceMappingURL=team-planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-planner.d.ts","sourceRoot":"","sources":["../../src/types/team-planner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7D,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACnC,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,6DAA6D;IAC7D,cAAc,EAAE,kBAAkB,EAAE,CAAC;IACrC,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,IAAI,EAAE,SAAS,CAAC;IAChB,4CAA4C;IAC5C,KAAK,EAAE,SAAS,CAAC;IACjB,iDAAiD;IACjD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,yDAAyD;IACzD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,uEAAuE;AACvE,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED,yCAAyC;AACzC,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,IAAI,EAAE,SAAS,CAAC;IAChB,0CAA0C;IAC1C,KAAK,EAAE,SAAS,CAAC;IACjB,oDAAoD;IACpD,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC;CAC5B;AAED,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,WAAW,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,oEAAoE;AACpE,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,eAAe,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,mDAAmD;IACnD,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC/D,yDAAyD;IACzD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,2CAA2C;IAC3C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,mDAAmD;IACnD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mEAAmE;IACnE,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,sDAAsD;IACtD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,4DAA4D;IAC5D,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,sEAAsE;AACtE,MAAM,WAAW,oBAAoB;IACnC,6CAA6C;IAC7C,MAAM,EAAE,OAAO,CAAC;IAChB,+CAA+C;IAC/C,eAAe,EAAE,OAAO,CAAC;IACzB,8BAA8B;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,4BAA4B;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,4CAA4C;IAC5C,cAAc,EAAE,OAAO,CAAC;IACxB,6DAA6D;IAC7D,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IACvD,yCAAyC;IACzC,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrE,uDAAuD;IACvD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,4DAA4D;AAC5D,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,4CAA4C;AAC5C,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,0DAA0D;AAC1D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAID,iDAAiD;AACjD,MAAM,WAAW,yBAAyB;IACxC,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,mDAAmD;AACnD,MAAM,WAAW,2BAA2B;IAC1C,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,8BAA8B;IAC9B,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,gDAAgD;AAChD,MAAM,WAAW,wBAAwB;IACvC,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oDAAoD;IACpD,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB"}
@@ -0,0 +1,3 @@
1
+ // Planu — Team Planner types for Claude Code Agent Teams (SPEC-091)
2
+ export {};
3
+ //# sourceMappingURL=team-planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-planner.js","sourceRoot":"","sources":["../../src/types/team-planner.ts"],"names":[],"mappings":"AAAA,oEAAoE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planu/cli",
3
- "version": "0.32.0",
3
+ "version": "0.33.1",
4
4
  "description": "Planu — MCP Server for Spec Driven Development. Manages specs, estimations, reverse engineering, and auto-learning across any language/framework.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -71,6 +71,7 @@
71
71
  "generate_rules",
72
72
  "generate_skill",
73
73
  "generate_sub_agent",
74
+ "generate_teammate_prompt",
74
75
  "integrate_pm",
75
76
  "log_decision",
76
77
  "manage_context",
@@ -79,6 +80,7 @@
79
80
  "orchestrate",
80
81
  "orchestrate_agents",
81
82
  "package_handoff",
83
+ "plan_team_distribution",
82
84
  "paradigm_report",
83
85
  "plan_upgrade",
84
86
  "reality_check",
@@ -118,7 +120,8 @@
118
120
  "create_pr_from_spec",
119
121
  "review_pr",
120
122
  "create_release",
121
- "generate_changelog"
123
+ "generate_changelog",
124
+ "validate_team_results"
122
125
  ],
123
126
  "alwaysAllowed": [
124
127
  "activate_license",
@@ -0,0 +1,39 @@
1
+ [
2
+ {
3
+ "id": "implement-and-test",
4
+ "name": "Implement & Test",
5
+ "description": "1 implementer + 1 tester per spec",
6
+ "pattern": "implement-and-test",
7
+ "roles": [
8
+ { "role": "implementer", "model": "sonnet", "count": "per-spec" },
9
+ { "role": "tester", "model": "sonnet", "count": "per-spec" }
10
+ ]
11
+ },
12
+ {
13
+ "id": "full-stack",
14
+ "name": "Full Stack",
15
+ "description": "Frontend + backend + test teammates",
16
+ "pattern": "full-stack",
17
+ "roles": [
18
+ { "role": "implementer", "model": "sonnet", "count": 2 },
19
+ { "role": "tester", "model": "sonnet", "count": 1 }
20
+ ]
21
+ },
22
+ {
23
+ "id": "research-then-build",
24
+ "name": "Research Then Build",
25
+ "description": "1 researcher feeds N implementers",
26
+ "pattern": "research-then-build",
27
+ "roles": [
28
+ { "role": "researcher", "model": "opus", "count": 1 },
29
+ { "role": "implementer", "model": "sonnet", "count": "per-spec" }
30
+ ]
31
+ },
32
+ {
33
+ "id": "parallel-specs",
34
+ "name": "Parallel Specs",
35
+ "description": "N implementers for independent specs",
36
+ "pattern": "parallel-specs",
37
+ "roles": [{ "role": "implementer", "model": "sonnet", "count": "per-spec" }]
38
+ }
39
+ ]