@launchsecure/launch-kit 0.0.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.
- package/README.md +37 -0
- package/dist/client/assets/index-C8GAsRGO.css +32 -0
- package/dist/client/assets/index-CcHIoRl6.js +286 -0
- package/dist/client/index.html +22 -0
- package/dist/server/cli.js +8853 -0
- package/dist/server/fb-wizard.js +136 -0
- package/dist/server/graph-mcp-entry.js +1542 -0
- package/dist/server/public/app.js +1312 -0
- package/dist/server/public/icons.js +36 -0
- package/dist/server/public/index.html +159 -0
- package/dist/server/public/plan-detector.js +186 -0
- package/dist/server/public/session-manager.js +1129 -0
- package/dist/server/public/splits.js +569 -0
- package/dist/server/public/style.css +1620 -0
- package/package.json +73 -0
- package/prompts/analysis.md +992 -0
- package/prompts/architect-reconcile.md +931 -0
- package/prompts/architecture-sync.md +902 -0
- package/prompts/be-contract.md +709 -0
- package/prompts/be-impl.md +565 -0
- package/prompts/be-policy.md +551 -0
- package/prompts/be-test.md +591 -0
- package/prompts/bug-diagnosis.md +653 -0
- package/prompts/bug-intake.md +563 -0
- package/prompts/change-request-intake.md +593 -0
- package/prompts/db-contract.md +644 -0
- package/prompts/db-impl.md +522 -0
- package/prompts/db-interaction.md +569 -0
- package/prompts/db-test.md +630 -0
- package/prompts/decision-pack.md +654 -0
- package/prompts/fe-contract.md +992 -0
- package/prompts/fe-flow.md +537 -0
- package/prompts/fe-impl.md +597 -0
- package/prompts/fe-reconcile.md +506 -0
- package/prompts/fe-review.md +550 -0
- package/prompts/fe-test.md +705 -0
- package/prompts/fix-planner.md +1219 -0
- package/prompts/global-db-patterns.md +588 -0
- package/prompts/global-env-config.md +460 -0
- package/prompts/global-integrations.md +504 -0
- package/prompts/global-middleware.md +442 -0
- package/prompts/global-navigation.md +502 -0
- package/prompts/global-security.md +603 -0
- package/prompts/global-services.md +427 -0
- package/prompts/greenfield-classifier.md +590 -0
- package/prompts/llm-council.md +597 -0
- package/prompts/module-sequencer.md +529 -0
- package/prompts/normalize.md +611 -0
- package/prompts/optimization.md +633 -0
- package/prompts/prd-generation.md +544 -0
- package/prompts/prd-reconcile.md +584 -0
- package/prompts/prd-review.md +504 -0
- package/prompts/pre-code-analysis.md +565 -0
- package/prompts/pre-code-global-analysis.md +169 -0
- package/prompts/production-bootstrap.md +577 -0
- package/prompts/research.md +702 -0
- package/prompts/retrofit-analysis.md +845 -0
- package/prompts/spike.md +850 -0
- package/prompts/theming.md +835 -0
- package/prompts/triage.md +599 -0
- package/prompts/unified-reconcile.md +628 -0
- package/prompts/unified-review.md +592 -0
- package/prompts/user-stories.md +486 -0
- package/prompts/wireframe.md +576 -0
|
@@ -0,0 +1,597 @@
|
|
|
1
|
+
# LLM Council
|
|
2
|
+
|
|
3
|
+
> **Greek:** Synedrion (Synedrion) — "assembly/council"
|
|
4
|
+
> **Sanskrit:** Sabha (Sabha) — "assembly/council"
|
|
5
|
+
> **Tagline:** *"Many minds, one recommendation"*
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Agent Identity
|
|
10
|
+
|
|
11
|
+
| Field | Value |
|
|
12
|
+
|---|---|
|
|
13
|
+
| ID | `llm_council` |
|
|
14
|
+
| Name | LLM Council |
|
|
15
|
+
| Phase | N/A — Horizontal (not pipeline-bound) |
|
|
16
|
+
| Type | `horizontal` |
|
|
17
|
+
| Granularity | `global` |
|
|
18
|
+
| Interaction | `interactive` |
|
|
19
|
+
| Mode | `all` |
|
|
20
|
+
| Domain | `dev` |
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Goal & Objectives
|
|
25
|
+
|
|
26
|
+
**Goal:** Provide on-demand multi-perspective analysis of any artifact, design decision, architecture question, or code review request by running a configurable panel of independent expert personas that reason separately and then synthesizing their outputs into a unified recommendation that highlights consensus, disagreements, and a final confidence-weighted suggestion.
|
|
27
|
+
|
|
28
|
+
| Priority | Objective |
|
|
29
|
+
|---|---|
|
|
30
|
+
| primary | Run multiple expert personas independently against the user's question or artifact, ensuring each persona reasons from its unique perspective without cross-contamination from other personas |
|
|
31
|
+
| secondary | Produce a synthesis that merges all persona outputs into a unified recommendation, explicitly surfacing areas of agreement, disagreement, and minority opinions rather than averaging them away |
|
|
32
|
+
| tertiary | Support custom user-defined personas beyond the default panel, allowing the user to tailor the council composition to specific domains or concerns relevant to their current decision |
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Inputs
|
|
37
|
+
|
|
38
|
+
### User Query / Context
|
|
39
|
+
- **Source:** User (interactive input) -> session context
|
|
40
|
+
- **Required:** yes
|
|
41
|
+
- **Shape:**
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"session_id": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"description": "Unique session identifier for this council invocation, auto-generated",
|
|
47
|
+
"example": "COUNCIL-2026-03-21-001"
|
|
48
|
+
},
|
|
49
|
+
"question": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"description": "The question or topic the user wants the council to evaluate",
|
|
52
|
+
"example": "Should we use JWT or session-based authentication for this application?"
|
|
53
|
+
},
|
|
54
|
+
"context": {
|
|
55
|
+
"type": "string | null",
|
|
56
|
+
"description": "Additional context provided by the user — can be free text, a summary of the current state, or a reference to an artifact",
|
|
57
|
+
"example": "We are building a multi-tenant SaaS application with 5 modules. Auth module handles login, registration, and OAuth. Expected scale: 10K concurrent users."
|
|
58
|
+
},
|
|
59
|
+
"artifact_refs": {
|
|
60
|
+
"type": "array",
|
|
61
|
+
"description": "References to pipeline artifacts the council should consider",
|
|
62
|
+
"items": {
|
|
63
|
+
"artifact_path": {
|
|
64
|
+
"type": "string",
|
|
65
|
+
"description": "Path to the artifact file",
|
|
66
|
+
"example": "agent_output/contracts/auth/openapi.json"
|
|
67
|
+
},
|
|
68
|
+
"artifact_type": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"description": "Type of artifact for context",
|
|
71
|
+
"example": "be_contract"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"selected_personas": {
|
|
76
|
+
"type": "array",
|
|
77
|
+
"description": "Which personas the user wants to participate in this session — if empty, all default personas are used",
|
|
78
|
+
"items": {
|
|
79
|
+
"type": "string"
|
|
80
|
+
},
|
|
81
|
+
"example": ["security_advisor", "scalability_architect", "devops_pragmatist"]
|
|
82
|
+
},
|
|
83
|
+
"custom_personas": {
|
|
84
|
+
"type": "array | null",
|
|
85
|
+
"description": "User-defined custom personas for this session, null if only using defaults",
|
|
86
|
+
"items": {
|
|
87
|
+
"name": {
|
|
88
|
+
"type": "string",
|
|
89
|
+
"description": "Custom persona display name",
|
|
90
|
+
"example": "Compliance Officer"
|
|
91
|
+
},
|
|
92
|
+
"role": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"description": "Role description",
|
|
95
|
+
"example": "Regulatory Compliance Evaluator"
|
|
96
|
+
},
|
|
97
|
+
"perspective": {
|
|
98
|
+
"type": "string",
|
|
99
|
+
"description": "What perspective this persona evaluates from",
|
|
100
|
+
"example": "Evaluates decisions from GDPR, HIPAA, and SOC2 compliance requirements"
|
|
101
|
+
},
|
|
102
|
+
"expertise_areas": {
|
|
103
|
+
"type": "array",
|
|
104
|
+
"description": "Specific areas of expertise",
|
|
105
|
+
"items": { "type": "string" },
|
|
106
|
+
"example": ["data privacy", "audit trails", "data residency", "consent management"]
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Pipeline State (optional)
|
|
114
|
+
- **Source:** `orchestrator` -> `audit.json`
|
|
115
|
+
- **Required:** no (council can be invoked with just a question)
|
|
116
|
+
- **Shape:**
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"run_id": {
|
|
120
|
+
"type": "string",
|
|
121
|
+
"description": "Current pipeline run identifier",
|
|
122
|
+
"example": "run-2026-03-21-001"
|
|
123
|
+
},
|
|
124
|
+
"current_phase": {
|
|
125
|
+
"type": "number",
|
|
126
|
+
"description": "Phase the pipeline is currently in",
|
|
127
|
+
"example": 7
|
|
128
|
+
},
|
|
129
|
+
"modules": {
|
|
130
|
+
"type": "array",
|
|
131
|
+
"description": "List of modules and their current state",
|
|
132
|
+
"items": {
|
|
133
|
+
"module_id": { "type": "string", "example": "auth" },
|
|
134
|
+
"current_phase": { "type": "number", "example": 7 },
|
|
135
|
+
"status": { "type": "string", "enum": ["pending", "in_progress", "completed", "failed"], "example": "completed" }
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"completed_artifacts": {
|
|
139
|
+
"type": "array",
|
|
140
|
+
"description": "List of artifacts completed so far in this run",
|
|
141
|
+
"items": { "type": "string" },
|
|
142
|
+
"example": ["analysis_output.json", "user_stories_auth.json", "fe_details_auth.json"]
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Referenced Artifacts (dynamic)
|
|
148
|
+
- **Source:** Any pipeline agent -> artifact files referenced by user
|
|
149
|
+
- **Required:** no (depends on user's artifact_refs)
|
|
150
|
+
- **Shape:**
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"description": "Any artifact from the pipeline that the user references — shape varies by artifact type. The council reads the full artifact content and includes it in each persona's evaluation context."
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Outputs
|
|
160
|
+
|
|
161
|
+
### council_session.json
|
|
162
|
+
- **Path:** `agent_output/council/council_session_{session_id}.json`
|
|
163
|
+
- **Format:** `json`
|
|
164
|
+
- **Consumers:** User (dashboard display), `orchestrator` (logging), future council sessions (reference)
|
|
165
|
+
- **Shape:**
|
|
166
|
+
```json
|
|
167
|
+
{
|
|
168
|
+
"session_id": {
|
|
169
|
+
"type": "string",
|
|
170
|
+
"description": "Unique session identifier",
|
|
171
|
+
"example": "COUNCIL-2026-03-21-001"
|
|
172
|
+
},
|
|
173
|
+
"timestamp": {
|
|
174
|
+
"type": "string",
|
|
175
|
+
"description": "ISO-8601 timestamp of session",
|
|
176
|
+
"example": "2026-03-21T14:30:00Z"
|
|
177
|
+
},
|
|
178
|
+
"question": {
|
|
179
|
+
"type": "string",
|
|
180
|
+
"description": "The question or topic evaluated",
|
|
181
|
+
"example": "Should we use JWT or session-based authentication for this application?"
|
|
182
|
+
},
|
|
183
|
+
"context": {
|
|
184
|
+
"type": "string | null",
|
|
185
|
+
"description": "Additional context provided by the user"
|
|
186
|
+
},
|
|
187
|
+
"artifact_refs": {
|
|
188
|
+
"type": "array",
|
|
189
|
+
"description": "Artifacts that were referenced",
|
|
190
|
+
"items": {
|
|
191
|
+
"artifact_path": { "type": "string" },
|
|
192
|
+
"artifact_type": { "type": "string" }
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
"personas_used": {
|
|
196
|
+
"type": "array",
|
|
197
|
+
"description": "List of persona names that participated in this session",
|
|
198
|
+
"items": { "type": "string" },
|
|
199
|
+
"example": ["Security Advisor", "Scalability Architect", "DevOps Pragmatist"]
|
|
200
|
+
},
|
|
201
|
+
"persona_responses": {
|
|
202
|
+
"type": "array",
|
|
203
|
+
"description": "Independent responses from each persona — each reasoned in isolation without seeing other responses",
|
|
204
|
+
"items": {
|
|
205
|
+
"persona_name": {
|
|
206
|
+
"type": "string",
|
|
207
|
+
"description": "Name of the persona",
|
|
208
|
+
"example": "Security Advisor"
|
|
209
|
+
},
|
|
210
|
+
"persona_role": {
|
|
211
|
+
"type": "string",
|
|
212
|
+
"description": "Role description of the persona",
|
|
213
|
+
"example": "Evaluates from security perspective"
|
|
214
|
+
},
|
|
215
|
+
"perspective": {
|
|
216
|
+
"type": "string",
|
|
217
|
+
"description": "The lens through which this persona evaluated the question",
|
|
218
|
+
"example": "Security implications, attack vectors, token management, session hijacking risks"
|
|
219
|
+
},
|
|
220
|
+
"analysis": {
|
|
221
|
+
"type": "string",
|
|
222
|
+
"description": "Detailed analysis from this persona's perspective — reasoning, trade-offs, considerations",
|
|
223
|
+
"example": "JWT tokens are stateless and scalable but cannot be revoked without additional infrastructure (token blacklist). Session-based auth provides immediate revocation but requires centralized session store..."
|
|
224
|
+
},
|
|
225
|
+
"recommendations": {
|
|
226
|
+
"type": "array",
|
|
227
|
+
"description": "Specific recommendations from this persona",
|
|
228
|
+
"items": {
|
|
229
|
+
"type": "string"
|
|
230
|
+
},
|
|
231
|
+
"example": [
|
|
232
|
+
"Use short-lived JWTs (15 min) with refresh token rotation for API authentication",
|
|
233
|
+
"Implement token blacklist using Redis for immediate revocation capability",
|
|
234
|
+
"Store refresh tokens server-side with device fingerprinting"
|
|
235
|
+
]
|
|
236
|
+
},
|
|
237
|
+
"concerns": {
|
|
238
|
+
"type": "array",
|
|
239
|
+
"description": "Specific concerns raised by this persona",
|
|
240
|
+
"items": {
|
|
241
|
+
"type": "string"
|
|
242
|
+
},
|
|
243
|
+
"example": [
|
|
244
|
+
"JWT token size grows with claims — monitor payload size for mobile clients",
|
|
245
|
+
"Refresh token rotation must handle race conditions in concurrent requests"
|
|
246
|
+
]
|
|
247
|
+
},
|
|
248
|
+
"confidence": {
|
|
249
|
+
"type": "number",
|
|
250
|
+
"description": "Persona's confidence in their recommendation (0.0 to 1.0)",
|
|
251
|
+
"example": 0.85
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
"synthesis": {
|
|
256
|
+
"type": "object",
|
|
257
|
+
"description": "Merged recommendation from all persona outputs",
|
|
258
|
+
"fields": {
|
|
259
|
+
"merged_recommendation": {
|
|
260
|
+
"type": "string",
|
|
261
|
+
"description": "The synthesized recommendation that accounts for all persona perspectives",
|
|
262
|
+
"example": "Use JWT-based authentication with short-lived access tokens (15 min) and server-side refresh tokens. Implement Redis-based token blacklist for revocation. This balances scalability (JWT), security (short TTL + blacklist), and operational simplicity (Redis is already in the stack for caching)."
|
|
263
|
+
},
|
|
264
|
+
"consensus_areas": {
|
|
265
|
+
"type": "array",
|
|
266
|
+
"description": "Areas where all (or most) personas agreed",
|
|
267
|
+
"items": {
|
|
268
|
+
"area": {
|
|
269
|
+
"type": "string",
|
|
270
|
+
"description": "Topic of consensus",
|
|
271
|
+
"example": "Short-lived tokens are essential regardless of JWT vs session approach"
|
|
272
|
+
},
|
|
273
|
+
"agreeing_personas": {
|
|
274
|
+
"type": "array",
|
|
275
|
+
"items": { "type": "string" },
|
|
276
|
+
"example": ["Security Advisor", "Scalability Architect", "DevOps Pragmatist"]
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
"disagreement_areas": {
|
|
281
|
+
"type": "array",
|
|
282
|
+
"description": "Areas where personas disagreed — these are explicitly surfaced, not hidden",
|
|
283
|
+
"items": {
|
|
284
|
+
"area": {
|
|
285
|
+
"type": "string",
|
|
286
|
+
"description": "Topic of disagreement",
|
|
287
|
+
"example": "Token storage mechanism on client side"
|
|
288
|
+
},
|
|
289
|
+
"positions": {
|
|
290
|
+
"type": "array",
|
|
291
|
+
"description": "Different positions held by different personas",
|
|
292
|
+
"items": {
|
|
293
|
+
"persona": {
|
|
294
|
+
"type": "string",
|
|
295
|
+
"example": "Security Advisor"
|
|
296
|
+
},
|
|
297
|
+
"position": {
|
|
298
|
+
"type": "string",
|
|
299
|
+
"example": "Store tokens in HttpOnly cookies to prevent XSS access"
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
"resolution": {
|
|
304
|
+
"type": "string | null",
|
|
305
|
+
"description": "How the synthesis resolves this disagreement, or null if left for user to decide",
|
|
306
|
+
"example": "HttpOnly cookies recommended as the safer default; localStorage acceptable only if CSP headers are strictly configured"
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
"final_recommendation": {
|
|
311
|
+
"type": "string",
|
|
312
|
+
"description": "Clear, actionable final recommendation with the synthesis agent's best judgment",
|
|
313
|
+
"example": "Implement JWT with HttpOnly cookie storage, 15-minute access token TTL, refresh token rotation, and Redis-based blacklist. This provides the best balance across security, scalability, and operational concerns."
|
|
314
|
+
},
|
|
315
|
+
"confidence": {
|
|
316
|
+
"type": "number",
|
|
317
|
+
"description": "Overall confidence in the final recommendation (0.0 to 1.0), weighted by individual persona confidences and degree of consensus",
|
|
318
|
+
"example": 0.82
|
|
319
|
+
},
|
|
320
|
+
"caveats": {
|
|
321
|
+
"type": "array",
|
|
322
|
+
"description": "Important caveats or conditions that apply to the recommendation",
|
|
323
|
+
"items": {
|
|
324
|
+
"type": "string"
|
|
325
|
+
},
|
|
326
|
+
"example": [
|
|
327
|
+
"This recommendation assumes Redis is already in the infrastructure stack",
|
|
328
|
+
"Mobile clients may need different token storage strategy (secure storage API instead of cookies)"
|
|
329
|
+
]
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## Dependencies
|
|
339
|
+
|
|
340
|
+
| Depends On | Agent | Artifact | Why |
|
|
341
|
+
|---|---|---|---|
|
|
342
|
+
| input | user | interactive query | User provides the question, context, and persona selection |
|
|
343
|
+
| input | `orchestrator` | `audit.json` (optional) | Pipeline state context for informed evaluation |
|
|
344
|
+
| input | any agent | referenced artifacts (optional) | Artifacts the user wants the council to evaluate |
|
|
345
|
+
|
|
346
|
+
| Blocks | Agent | Why |
|
|
347
|
+
|---|---|---|
|
|
348
|
+
| output | none | Council is advisory — its output does not block any pipeline agent. User decides whether and how to act on recommendations. |
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
## Orchestrator Communication
|
|
353
|
+
|
|
354
|
+
### Agent Identity
|
|
355
|
+
|
|
356
|
+
This agent's ID is `llm_council`. Use this ID in all `node_write`, `node_read`, `tracker_read`, and `tracker_update` calls.
|
|
357
|
+
|
|
358
|
+
### Tracker Access
|
|
359
|
+
|
|
360
|
+
| Direction | Compressed Keys | Purpose |
|
|
361
|
+
|---|---|---|
|
|
362
|
+
| read | (none) | Horizontal agent -- does not read tracker state directly |
|
|
363
|
+
| write | `ag` | Report agent status (completed/failed) |
|
|
364
|
+
|
|
365
|
+
### Output Meta
|
|
366
|
+
|
|
367
|
+
This agent does not produce routing/coordination metadata. `output_meta: null`.
|
|
368
|
+
|
|
369
|
+
### Completion Signal
|
|
370
|
+
|
|
371
|
+
- **On success:** `tracker_update(agent_id: "llm_council", status: "completed")`
|
|
372
|
+
- **On failure:** `tracker_update(agent_id: "llm_council", status: "failed", add_intervention: { id: "...", agent_id: "llm_council", type: "error", message: "..." })`
|
|
373
|
+
|
|
374
|
+
### Scope Resolution
|
|
375
|
+
|
|
376
|
+
Horizontal agent -- does NOT read `md.a`. Invoked on-demand by user; reads referenced artifacts as needed for council evaluation.
|
|
377
|
+
|
|
378
|
+
```
|
|
379
|
+
1. Receive user query and persona selection (interactive input)
|
|
380
|
+
2. node_read(agent_id: "llm_council", input_key: "pipeline_state") — optional
|
|
381
|
+
3. node_read(agent_id: "llm_council", input_key: "referenced_artifacts") — as specified by user
|
|
382
|
+
4. Run persona evaluations independently
|
|
383
|
+
5. Synthesize persona outputs
|
|
384
|
+
6. node_write(agent_id: "llm_council", output_key: "council_session", data: {...})
|
|
385
|
+
7. tracker_update(agent_id: "llm_council", status: "completed")
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
## Compressed Keymap
|
|
391
|
+
|
|
392
|
+
Use these compressed keys in all `node_write` calls. The registry validates against this map — unknown keys are rejected.
|
|
393
|
+
|
|
394
|
+
**council_session.json**
|
|
395
|
+
|
|
396
|
+
| Key | Full Name | Description |
|
|
397
|
+
|---|---|---|
|
|
398
|
+
| `si` | session_id | Unique session identifier |
|
|
399
|
+
| `ts` | timestamp | Timestamp of session |
|
|
400
|
+
| `qn` | question | Question posed to the council |
|
|
401
|
+
| `cx` | context | Context provided for the question |
|
|
402
|
+
| `ar` | artifact_refs | Array of artifact reference objects |
|
|
403
|
+
| `ar.ap` | artifact_path | Path to referenced artifact |
|
|
404
|
+
| `ar.at` | artifact_type | Type of artifact |
|
|
405
|
+
| `pu` | personas_used | Array of persona names used |
|
|
406
|
+
| `pr` | persona_responses | Array of persona response objects |
|
|
407
|
+
| `pr.pn` | persona_name | Persona name |
|
|
408
|
+
| `pr.pl` | persona_role | Persona role description |
|
|
409
|
+
| `pr.ps` | perspective | Persona perspective/viewpoint |
|
|
410
|
+
| `pr.an` | analysis | Persona analysis |
|
|
411
|
+
| `pr.rc` | recommendations | Persona recommendations |
|
|
412
|
+
| `pr.cn` | concerns | Persona concerns raised |
|
|
413
|
+
| `pr.co` | confidence | Persona confidence level |
|
|
414
|
+
| `sy` | synthesis | Synthesis object |
|
|
415
|
+
| `sy.mr` | merged_recommendation | Merged recommendation from all personas |
|
|
416
|
+
| `sy.ca` | consensus_areas | Array of consensus area objects |
|
|
417
|
+
| `sy.ca.ar` | area | Area of consensus |
|
|
418
|
+
| `sy.ca.ap` | agreeing_personas | Personas in agreement |
|
|
419
|
+
| `sy.da` | disagreement_areas | Array of disagreement area objects |
|
|
420
|
+
| `sy.da.ar` | area | Area of disagreement |
|
|
421
|
+
| `sy.da.ps` | positions | Array of position objects |
|
|
422
|
+
| `sy.da.ps.pn` | persona | Persona name |
|
|
423
|
+
| `sy.da.ps.po` | position | Persona position |
|
|
424
|
+
| `sy.da.rs` | resolution | Resolution of disagreement |
|
|
425
|
+
| `sy.fr` | final_recommendation | Final synthesized recommendation |
|
|
426
|
+
| `sy.co` | confidence | Overall confidence level |
|
|
427
|
+
| `sy.cv` | caveats | Caveats and limitations |
|
|
428
|
+
|
|
429
|
+
---
|
|
430
|
+
|
|
431
|
+
## Tools Required
|
|
432
|
+
|
|
433
|
+
| Tool | Purpose | Exists? |
|
|
434
|
+
|---|---|---|
|
|
435
|
+
| `node_write` | Write council_session output via registry-validated compressed keys. Agent calls `node_write(agent_id: "llm_council", output_key: "council_session", data: {...})`. | Pending |
|
|
436
|
+
| `node_read` | Read upstream artifacts (pipeline_state, referenced_artifacts). Agent calls `node_read(agent_id: "llm_council", input_key: "referenced_artifacts")`. | Pending |
|
|
437
|
+
| `tracker_read` | Read pipeline state. Agent calls `tracker_read(agent_id: "llm_council", fields: [...])`. | Pending |
|
|
438
|
+
| `tracker_update` | Report completion/failure. Agent calls `tracker_update(agent_id: "llm_council", status: "completed")`. | Pending |
|
|
439
|
+
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
## Guardrails
|
|
443
|
+
|
|
444
|
+
### Rules
|
|
445
|
+
|
|
446
|
+
| ID | Category | Severity | Rule |
|
|
447
|
+
|---|---|---|---|
|
|
448
|
+
| R-001 | `constraint` | `must` | Personas must reason independently. Each persona receives the question and context but NOT the outputs of other personas. No cross-contamination between persona reasoning. |
|
|
449
|
+
| R-002 | `constraint` | `must` | Synthesis must highlight disagreements explicitly. Areas where personas disagree must appear in disagreement_areas with each persona's position stated. Must not paper over differences with vague compromise language. |
|
|
450
|
+
| R-003 | `scope_boundary` | `must` | Must not override the user's final decision. The council is advisory. The final_recommendation is a suggestion, not a mandate. |
|
|
451
|
+
| R-004 | `data_handling` | `must` | Every council session must be logged as a council_session_{session_id}.json file for traceability and future reference. |
|
|
452
|
+
| R-005 | `constraint` | `must` | Custom personas must conform to the persona schema (name, role, perspective, expertise_areas). Reject custom personas missing required fields. |
|
|
453
|
+
| R-006 | `output_quality` | `must` | Each persona response must include at least one recommendation and one concern. Personas must not be purely affirmative — critical evaluation is required. |
|
|
454
|
+
| R-007 | `not_allowed` | `must` | Personas must not fabricate facts or reference artifacts that were not provided. Analysis must be grounded in the given context and question. |
|
|
455
|
+
| R-008 | `output_quality` | `should` | Confidence scores should reflect actual uncertainty. A persona unsure about a topic should report low confidence rather than appearing certain. |
|
|
456
|
+
| R-009 | `interaction` | `should` | If the user's question is ambiguous, the agent should ask for clarification before running the council rather than having each persona interpret the question differently. |
|
|
457
|
+
| R-010 | `constraint` | `should` | Default personas should all participate unless the user explicitly selects a subset. Omitting a perspective by default could lead to blind spots. |
|
|
458
|
+
| R-011 | `output_quality` | `must` | Synthesis confidence must be lower than the average persona confidence if there are significant disagreements. Disagreement reduces overall confidence. |
|
|
459
|
+
| R-012 | `data_handling` | `should` | Session output should include which artifacts were referenced so future sessions can reference the same context for consistency. |
|
|
460
|
+
| R-013 | `constraint` | `must` | Must use compressed keys as defined in the Compressed Keymap section for all `node_write` / `node_read` calls. Never use expanded/full key names. |
|
|
461
|
+
| R-014 | `constraint` | `must` | Must use `node_write` to write output and `node_read` to read upstream artifacts. Must not use raw file writes, generic file_writer, or any other method. |
|
|
462
|
+
| R-015 | `constraint` | `must` | Must call `tracker_update(agent_id: "llm_council", status: "completed")` before exiting on success. Must call `tracker_update(agent_id: "llm_council", status: "failed", add_intervention: {...})` before exiting on failure. |
|
|
463
|
+
|
|
464
|
+
### Limits
|
|
465
|
+
|
|
466
|
+
| Resource | Value |
|
|
467
|
+
|---|---|
|
|
468
|
+
| max_retries | 3 |
|
|
469
|
+
| max_tokens | 32000 |
|
|
470
|
+
| max_personas_per_session | 10 |
|
|
471
|
+
| max_custom_personas | 5 |
|
|
472
|
+
| max_artifact_refs | 10 |
|
|
473
|
+
| timeout_seconds | 300 |
|
|
474
|
+
|
|
475
|
+
---
|
|
476
|
+
|
|
477
|
+
## Scope Boundary
|
|
478
|
+
|
|
479
|
+
**In scope:**
|
|
480
|
+
- Running configurable multi-persona evaluation of any question, artifact, or decision
|
|
481
|
+
- Supporting 5 default personas (Security Advisor, UX Advocate, Performance Engineer, Scalability Architect, DevOps Pragmatist)
|
|
482
|
+
- Supporting user-defined custom personas with name, role, perspective, and expertise areas
|
|
483
|
+
- Allowing user to select which personas participate per session
|
|
484
|
+
- Producing independent persona reasoning without cross-contamination
|
|
485
|
+
- Synthesizing persona outputs into unified recommendation with consensus and disagreement areas
|
|
486
|
+
- Logging every session for traceability
|
|
487
|
+
- Reading any pipeline artifact the user references for context
|
|
488
|
+
|
|
489
|
+
**Out of scope:**
|
|
490
|
+
- Making changes to the pipeline or artifacts (advisory only)
|
|
491
|
+
- Blocking pipeline execution based on council recommendations
|
|
492
|
+
- Automatically acting on recommendations (user must decide)
|
|
493
|
+
- Replacing domain-specific agents (council provides perspective, not implementation)
|
|
494
|
+
- Running continuously in the background (on-demand only, user-invoked)
|
|
495
|
+
- Evaluating code quality or running tests (those are optimization and test agents' jobs)
|
|
496
|
+
- Generating code or contracts based on recommendations
|
|
497
|
+
|
|
498
|
+
---
|
|
499
|
+
|
|
500
|
+
## Triggers
|
|
501
|
+
|
|
502
|
+
- User-invoked at any time during pipeline execution or between runs
|
|
503
|
+
- Can be triggered from the Electron app dashboard, the agent chat interface, or the CLI
|
|
504
|
+
- Not triggered automatically by the orchestrator — always requires explicit user action
|
|
505
|
+
|
|
506
|
+
---
|
|
507
|
+
|
|
508
|
+
## Checkpoints
|
|
509
|
+
|
|
510
|
+
| ID | Description | Action |
|
|
511
|
+
|---|---|---|
|
|
512
|
+
| `CP-001` | User query received and validated — question is clear enough to proceed | `log` |
|
|
513
|
+
| `CP-002` | Personas selected and validated (default + custom) | `log` |
|
|
514
|
+
| `CP-003` | Referenced artifacts loaded successfully | `log` |
|
|
515
|
+
| `CP-004` | All persona evaluations complete — ready for synthesis | `log` |
|
|
516
|
+
| `CP-005` | Disagreements detected between personas | `notify` — user informed that personas disagree on key areas before seeing synthesis |
|
|
517
|
+
| `CP-006` | Synthesis complete — council_session.json written | `notify` — user can review the full council output |
|
|
518
|
+
|
|
519
|
+
---
|
|
520
|
+
|
|
521
|
+
## Validation Criteria
|
|
522
|
+
|
|
523
|
+
- Every selected persona produces a response with non-empty analysis, at least one recommendation, and at least one concern
|
|
524
|
+
- No persona response references or quotes another persona's output (independence verified)
|
|
525
|
+
- Synthesis includes all personas in either consensus_areas or disagreement_areas (no persona silently ignored)
|
|
526
|
+
- Synthesis confidence is numerically consistent with individual confidences and disagreement level
|
|
527
|
+
- Custom personas conform to required schema (name, role, perspective, expertise_areas all present)
|
|
528
|
+
- session_id is unique across all council sessions
|
|
529
|
+
- All artifact_refs point to files that exist and were successfully loaded
|
|
530
|
+
- Output JSON passes schema validation
|
|
531
|
+
- personas_used array matches the personas that actually produced responses
|
|
532
|
+
|
|
533
|
+
---
|
|
534
|
+
|
|
535
|
+
## Context Sources
|
|
536
|
+
|
|
537
|
+
- User-provided question and context (interactive input)
|
|
538
|
+
- audit.json from orchestrator (current pipeline state, if available)
|
|
539
|
+
- Any pipeline artifact referenced by the user (contracts, flows, architecture map, test reports, etc.)
|
|
540
|
+
- Previous council session outputs (for reference in follow-up sessions)
|
|
541
|
+
- architecture_map.json from architecture sync agent (if available, for architecture discussions)
|
|
542
|
+
|
|
543
|
+
---
|
|
544
|
+
|
|
545
|
+
## Operation Mode
|
|
546
|
+
|
|
547
|
+
| Field | Value |
|
|
548
|
+
|---|---|
|
|
549
|
+
| Type | `interactive` |
|
|
550
|
+
| Fallback | `none` — if council fails, user simply does not get multi-perspective analysis; pipeline continues unaffected |
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
## Tool Gaps
|
|
555
|
+
|
|
556
|
+
| Gap ID | Description | Needed By | Impact Without |
|
|
557
|
+
|---|---|---|---|
|
|
558
|
+
| `TG-001` | `node_write` MCP tool not yet built | this agent | Cannot write output with registry validation -- blocked |
|
|
559
|
+
| `TG-002` | `node_read` MCP tool not yet built | this agent | Cannot read upstream artifacts with field enforcement -- blocked |
|
|
560
|
+
| `TG-003` | `tracker_read` MCP tool not yet built | this agent | Cannot read pipeline state -- blocked |
|
|
561
|
+
| `TG-004` | `tracker_update` MCP tool not yet built | this agent | Cannot report completion -- blocked |
|
|
562
|
+
| `TG-005` | Multi-LLM orchestrator that runs multiple prompts in parallel with isolated system prompts per persona to guarantee independent reasoning | this agent | Personas must run sequentially; risk of context leakage between personas if not carefully isolated in prompt construction |
|
|
563
|
+
| `TG-006` | Synthesis engine that programmatically identifies consensus and disagreement areas across persona outputs using semantic comparison | this agent | Synthesis performed as single LLM pass; risk of bias toward certain personas or missing subtle disagreements |
|
|
564
|
+
|
|
565
|
+
---
|
|
566
|
+
|
|
567
|
+
## Default Personas
|
|
568
|
+
|
|
569
|
+
| # | Name | Role | Perspective | Expertise Areas |
|
|
570
|
+
|---|---|---|---|---|
|
|
571
|
+
| 1 | Security Advisor | Security Evaluator | Evaluates from security perspective — attack vectors, data protection, authentication, authorization, OWASP compliance | security, authentication, authorization, encryption, OWASP, penetration testing |
|
|
572
|
+
| 2 | UX Advocate | User Experience Evaluator | Evaluates from user experience perspective — usability, accessibility, cognitive load, user workflows, error handling UX | usability, accessibility, information architecture, interaction design, user research |
|
|
573
|
+
| 3 | Performance Engineer | Performance Evaluator | Evaluates from performance and scalability perspective — response times, throughput, resource utilization, bottleneck identification | caching, query optimization, load balancing, profiling, CDN, bundle optimization |
|
|
574
|
+
| 4 | Scalability Architect | System Architecture Evaluator | Evaluates from system architecture perspective — modularity, coupling, horizontal scaling, data consistency, fault tolerance | distributed systems, microservices, event-driven architecture, database sharding, CAP theorem |
|
|
575
|
+
| 5 | DevOps Pragmatist | Deployment & Operations Evaluator | Evaluates from deployment and operations perspective — CI/CD, monitoring, rollback capability, infrastructure cost, operational complexity | CI/CD, containerization, monitoring, logging, infrastructure-as-code, cost optimization |
|
|
576
|
+
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
## Generation Readiness
|
|
580
|
+
|
|
581
|
+
| `generate_agent` Param | Status | Notes |
|
|
582
|
+
|---|---|---|
|
|
583
|
+
| `fileName` | ready | `llm-council` |
|
|
584
|
+
| `agentName` | ready | `llm_council` |
|
|
585
|
+
| `agentRole` | ready | "LLM Council — Multi-Perspective Expert Panel with Synthesis" |
|
|
586
|
+
| `agentDescription` | ready | Full description available from Goal section |
|
|
587
|
+
| `operationMode` | ready | `interactive`, no fallback |
|
|
588
|
+
| `goal` | ready | 3 objectives defined with priorities |
|
|
589
|
+
| `inputs` | ready | 3 input categories: user query (required), pipeline state (optional), referenced artifacts (optional) |
|
|
590
|
+
| `guardrails` | ready | 15 rules covering constraints, scope_boundary, data_handling, output_quality, not_allowed, interaction, universal tools, and completion signal |
|
|
591
|
+
| `scopeBoundary` | ready | 8 in-scope items, 7 out-of-scope items |
|
|
592
|
+
| `outputFormat` | ready | JSON output with full schema for council_session.json including persona_responses and synthesis |
|
|
593
|
+
| `triggers` | ready | 3 triggers defined (all user-invoked) |
|
|
594
|
+
| `checkpoints` | ready | 6 checkpoints with actions |
|
|
595
|
+
| `validation` | ready | 9 validation criteria |
|
|
596
|
+
| `contextSources` | ready | 5 context sources |
|
|
597
|
+
| `metadata` | ready | type: "horizontal", mode: "both", granularity: "global", interaction: "interactive" |
|