How the engine works
From the prescriptive architecture to the actual dispatch loop: the 4-stage pipeline as designed, then the code that runs engagements.
src/agents/definitions.ts753 lines
Outline 9 symbols
- enrichPrompt function
- readOnlyTools const
- debateTools const
- scoringTools const
- verificationTools const
- memoryReadTools const
- memoryWriteTools const
- learningReadTools const
- agentDefinitions const export
1/**
2 * Agent Definitions — All specialist agents for The Shem.
3 *
4 * v2: Added 3 multidisciplinary agents (Mitchell-inspired):
5 * - service-designer: Full user journey analysis
6 * - plain-language-specialist: Cognitive load & readability
7 * - client-proxy: Role-plays as the actual reader
8 *
9 * v5: Added evaluator and contract-reviewer agents:
10 * - evaluator: Automated quality gate (different model from specialist)
11 * - contract-reviewer: Clause-by-clause risk-scored contract analysis
12 *
13 * Each agent has maxTurns to prevent runaway costs from compound failure rates.
14 * Keep tasks SHORT — long pipelines compound errors.
15 */
16
17import { designReviewerPrompt } from './prompts/design-reviewer.js';
18import { ethicsAuditorPrompt } from './prompts/ethics-auditor.js';
19import { transformationPrompt } from './prompts/transformation.js';
20import { meaningGuardianPrompt } from './prompts/meaning-guardian.js';
21import { synthesisEditorPrompt } from './prompts/synthesis-editor.js';
22import { serviceDesignerPrompt } from './prompts/service-designer.js';
23import { plainLanguageSpecialistPrompt } from './prompts/plain-language-specialist.js';
24import { clientProxyPrompt } from './prompts/client-proxy.js';
25// v5: New agent prompts
26import { evaluatorPrompt } from './prompts/evaluator.js';
27import { contractReviewerPrompt } from './prompts/contract-reviewer.js';
28// v6: Legal core, risk, and adversarial agent prompts
29import { legalResearcherPrompt } from './prompts/legal-researcher.js';
30import { riskPricerPrompt } from './prompts/risk-pricer.js';
31import { redTeamPrompt } from './prompts/red-team.js';
32// v8: Law Firm Leadership
33import { managingPartnerPrompt } from './prompts/managing-partner.js';
34import { supervisingPartnerPrompt } from './prompts/supervising-partner.js';
35import { ofCounselPrompt } from './prompts/of-counsel.js';
36// v8: Law Firm Corporate & Transactional
37import { corporateGeneralistPrompt } from './prompts/corporate-generalist.js';
38import { maSpecialistPrompt } from './prompts/ma-specialist.js';
39import { contractSpecialistPrompt } from './prompts/contract-specialist.js';
40import { bankingFinancePrompt } from './prompts/banking-finance.js';
41import { capitalMarketsPrompt } from './prompts/capital-markets.js';
42// v8: Law Firm Disputes & Litigation
43import { litigationPartnerPrompt } from './prompts/litigation-partner.js';
44import { litigationAssociatePrompt } from './prompts/litigation-associate.js';
45import { arbitrationSpecialistPrompt } from './prompts/arbitration-specialist.js';
46import { disputeResolutionPrompt } from './prompts/dispute-resolution.js';
47// v8: Law Firm Regulatory & Compliance
48import { regulatoryCounselPrompt } from './prompts/regulatory-counsel.js';
49import { complianceOfficerPrompt } from './prompts/compliance-officer.js';
50import { antitrustSpecialistPrompt } from './prompts/antitrust-specialist.js';
51import { sanctionsSpecialistPrompt } from './prompts/sanctions-specialist.js';
52// v8: Law Firm Specialist Practice
53import { taxCounselPrompt } from './prompts/tax-counsel.js';
54import { ipSpecialistPrompt } from './prompts/ip-specialist.js';
55import { privacyCounselPrompt } from './prompts/privacy-counsel.js';
56import { employmentCounselPrompt } from './prompts/employment-counsel.js';
57import { realEstateCounselPrompt } from './prompts/real-estate-counsel.js';
58import { environmentalCounselPrompt } from './prompts/environmental-counsel.js';
59// v8: Law Firm Junior Lawyers
60import { juniorAssociatePrompt } from './prompts/junior-associate.js';
61import { paralegalPrompt } from './prompts/paralegal.js';
62import { legalInternPrompt } from './prompts/legal-intern.js';
63// v8: Experts — Design & Communication (new ones only, service-designer/plain-language/client-proxy already imported)
64// v8: Experts — User Research & Testing (client-proxy already imported)
65import { accessibilitySpecialistPrompt } from './prompts/accessibility-specialist.js';
66import { userResearcherPrompt } from './prompts/user-researcher.js';
67import { behavioralScientistPrompt } from './prompts/behavioral-scientist.js';
68// v8: Experts — Ethics & Governance (ethics-auditor already imported)
69// v8: Experts — Technology & Data
70import { legalEngineerPrompt } from './prompts/legal-engineer.js';
71import { cybersecurityAdvisorPrompt } from './prompts/cybersecurity-advisor.js';
72import { aiEthicsSpecialistPrompt } from './prompts/ai-ethics-specialist.js';
73// v8: Experts — Industry Specialists
74import { fintechSpecialistPrompt } from './prompts/fintech-specialist.js';
75import { healthcareSpecialistPrompt } from './prompts/healthcare-specialist.js';
76import { mediaSpecialistPrompt } from './prompts/media-specialist.js';
77import { energySpecialistPrompt } from './prompts/energy-specialist.js';
78// v8: Experts — Quality & Infrastructure (evaluator/risk-pricer already imported)
79import { projectManagerPrompt } from './prompts/project-manager.js';
80// v19: Missing agents for Full Bench workflow
81import { innovationPartnerPrompt } from './prompts/innovation-partner.js';
82import { internationalCounselPrompt } from './prompts/international-counsel.js';
83// v20: Previously profile-only agents (7 agents with profiles but no definitions)
84import { clientRelationsPartnerPrompt } from './prompts/client-relations-partner.js';
85import { riskPartnerPrompt } from './prompts/risk-partner.js';
86import { transactionPartnerPrompt } from './prompts/transaction-partner.js';
87import { publicLawCounselPrompt } from './prompts/public-law-counsel.js';
88import { restructuringSpecialistPrompt } from './prompts/restructuring-specialist.js';
89import { startupCounselPrompt } from './prompts/startup-counsel.js';
90import { techTransactionsPrompt } from './prompts/tech-transactions.js';
91// Ethics reviewer — engagement-level ethical review (distinct from ethics-auditor's document-level dark pattern scan)
92import { ethicsReviewerPrompt } from './prompts/ethics-reviewer.js';
93import { outputFormats } from '../types/output-schemas.js';
94import { agentProfiles } from './profiles.js';
95
96/**
97 * Enrich an agent's system prompt with Critical Rules and Success Metrics
98 * from its profile. These structured constraints are appended so the agent
99 * is aware of its behavioral boundaries and measurable outcomes.
100 */
101function enrichPrompt(role: string, basePrompt: string): string {
102 const profile = agentProfiles[role];
103 if (!profile) return basePrompt;
104 const sections: string[] = [];
105 if (profile.criticalRules?.length) {
106 sections.push(`\n## Critical Rules (NEVER violate these)\n${profile.criticalRules.map(r => `- ${r}`).join('\n')}`);
107 }
108 if (profile.successMetrics?.length) {
109 sections.push(`\n## Success Metrics (your output is measured by these)\n${profile.successMetrics.map(m => `- ${m}`).join('\n')}`);
110 }
111 // Universal uncertainty guidance — applies to all agents
112 sections.push(`\n## When You Are Not Sure
113If you cannot make a confident determination about something, use the \`decline_to_find\` tool instead of posting a low-confidence finding. It is better to say "I don't know" than to guess.
114Use decline_to_find when:
115- The document lacks information needed for your analysis
116- The text is ambiguous and could be read multiple ways
117- You would need jurisdiction-specific knowledge you don't have
118- Your confidence would be below 0.5
119A declined finding triggers human review. A wrong finding causes harm.`);
120 return basePrompt + '\n' + sections.join('\n');
121}
122
123// Shared read-only tools available to all agents
124const readOnlyTools = ['Read', 'Grep', 'Glob'];
125
126// Debate board tools (prefixed with MCP server name)
127const debateTools = [
128 'mcp__shem__post_finding',
129 'mcp__shem__decline_to_find',
130 'mcp__shem__post_challenge',
131 'mcp__shem__post_response',
132 'mcp__shem__get_findings',
133 'mcp__shem__get_challenges',
134 'mcp__shem__get_debate_summary',
135 'mcp__shem__get_unresolved_debates',
136];
137
138// Scoring engine tools
139const scoringTools = [
140 'mcp__shem__calculate_complexity_tax',
141 'mcp__shem__calculate_readability_score',
142 'mcp__shem__calculate_findability_score',
143 'mcp__shem__compare_before_after',
144];
145
146// Verification engine tools
147const verificationTools = [
148 'mcp__shem__run_self_verification',
149 'mcp__shem__run_cross_verification',
150 'mcp__shem__run_score_verification',
151 'mcp__shem__get_verification_summary',
152];
153
154// Memory system tools (read-only for most agents)
155const memoryReadTools = [
156 'mcp__shem__query_institutional_memory',
157 'mcp__shem__load_matter_memory',
158 'mcp__shem__query_precedents',
159];
160
161// Memory system tools (write — only for orchestrator and synthesis-editor)
162const memoryWriteTools = [
163 'mcp__shem__add_institutional_memory',
164 'mcp__shem__save_matter_memory',
165 'mcp__shem__save_precedent',
166];
167
168// v4: Learning system read-only tools (accessible to synthesis-editor)
169const learningReadTools = [
170 'mcp__shem__get_report_card',
171 'mcp__shem__get_legal_md',
172 'mcp__shem__query_anti_patterns',
173 'mcp__shem__get_baseline',
174 'mcp__shem__get_quality_trend',
175 'mcp__shem__check_against_baseline',
176 'mcp__shem__run_regression_test',
177 'mcp__shem__run_batch_regression',
178 'mcp__shem__compare_sessions',
179];
180
181export const agentDefinitions = {
182 // ── Original 5 Agents (with maxTurns) ─────────────────────────────────
183
184 'design-reviewer': {
185 description: 'Expert legal design reviewer. Use when you need to score a document across readability, findability, clarity, visual design, and ethics dimensions using a 0-4 scale with RED/YELLOW/GREEN severity classifications. Also calculates Complexity Tax.',
186 prompt: enrichPrompt('design-reviewer', designReviewerPrompt),
187 tools: [...readOnlyTools, ...debateTools, ...scoringTools, ...memoryReadTools],
188 model: 'sonnet' as const,
189 maxTurns: 8,
190 outputFormat: outputFormats['design-reviewer'],
191 },
192
193 'ethics-auditor': {
194 description: 'Dark pattern and manipulation detection specialist. Use when you need to scan a document for seven categories of dark patterns and map compliance touchpoints to GDPR, FTC, CCPA, CPA regulations.',
195 prompt: enrichPrompt('ethics-auditor', ethicsAuditorPrompt),
196 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
197 model: 'sonnet' as const,
198 maxTurns: 8,
199 outputFormat: outputFormats['ethics-auditor'],
200 },
201
202 'transformation-specialist': {
203 description: 'Plain language transformation expert. Use when you need to convert legalese to plain language while preserving legal meaning. Produces user-facing version and change log with risk levels (Low/REVIEW/CRITICAL). Can query precedents for successful transformations.',
204 prompt: enrichPrompt('transformation-specialist', transformationPrompt),
205 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
206 model: 'opus' as const,
207 maxTurns: 15, // More turns — transformation is the most complex task
208 outputFormat: outputFormats['transformation-specialist'],
209 },
210
211 'meaning-guardian': {
212 description: 'Legal meaning preservation verifier. Use when you need to verify that a transformation has preserved all legal meaning, check non-negotiables, run five legal checkpoints, and flag ambiguity.',
213 prompt: enrichPrompt('meaning-guardian', meaningGuardianPrompt),
214 tools: [...readOnlyTools, ...debateTools, ...verificationTools, ...memoryReadTools],
215 model: 'opus' as const,
216 maxTurns: 10,
217 outputFormat: outputFormats['meaning-guardian'],
218 },
219
220 'synthesis-editor': {
221 description: 'Final document assembly and quality editor. Use when you need to assemble the final dual-artifact output (user-facing version + legal review package) by applying design patterns and maintaining voice/tone consistency. Can save successful precedents. Has access to report cards and institutional knowledge.',
222 prompt: enrichPrompt('synthesis-editor', synthesisEditorPrompt),
223 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...memoryWriteTools, ...learningReadTools],
224 model: 'sonnet' as const,
225 maxTurns: 10,
226 outputFormat: outputFormats['synthesis-editor'],
227 },
228
229 // ── New Multidisciplinary Agents (v2) ─────────────────────────────────
230
231 'service-designer': {
232 description: 'Service design specialist who analyzes the full user journey — touchpoints, tasks, emotional state, pain points, and opportunities. Use for journey mapping, information architecture assessment, and cognitive load analysis. Thinks like a designer, not a lawyer.',
233 prompt: enrichPrompt('service-designer', serviceDesignerPrompt),
234 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
235 model: 'sonnet' as const,
236 maxTurns: 8,
237 outputFormat: outputFormats['service-designer'],
238 },
239
240 'plain-language-specialist': {
241 description: 'Language scientist focused on cognitive load, sentence structure, word choice, and readability metrics. Use for sentence-level, word-level, and structure-level analysis. Produces specific rewrite suggestions with before/after improvements.',
242 prompt: enrichPrompt('plain-language-specialist', plainLanguageSpecialistPrompt),
243 tools: [...readOnlyTools, ...debateTools, ...scoringTools, ...memoryReadTools],
244 model: 'sonnet' as const,
245 maxTurns: 8,
246 outputFormat: outputFormats['plain-language-specialist'],
247 },
248
249 'client-proxy': {
250 description: 'Role-plays as a REAL PERSON from the target audience reading the document. Runs comprehension tests, task completion tests, emotional response mapping. Reports what confused, scared, or frustrated the reader. Their voice matters MORE than legal experts.',
251 prompt: enrichPrompt('client-proxy', clientProxyPrompt),
252 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
253 model: 'sonnet' as const,
254 maxTurns: 8,
255 outputFormat: outputFormats['client-proxy'],
256 },
257
258 // ── v5: New Adaptive Pipeline Agents ─────────────────────────────────
259
260 'evaluator': {
261 description: 'Automated quality gate. Evaluates specialist deliverables against an 8-dimension rubric (factual correctness, citation validity, policy compliance, tool consistency, jurisdictional accuracy, internal consistency, completeness). MUST use a different model than the specialist to prevent correlated errors.',
262 prompt: enrichPrompt('evaluator', evaluatorPrompt),
263 tools: [...readOnlyTools, ...memoryReadTools, 'mcp__shem__record_evaluation_result'],
264 model: 'opus' as const, // Different from Sonnet specialists — prevents correlated errors
265 maxTurns: 6,
266 outputFormat: outputFormats['evaluator'],
267 },
268
269 'contract-reviewer': {
270 description: 'Contract review specialist. Performs clause-by-clause risk-scored analysis with deviation flagging, standard position comparison, recommended redlines, and negotiation priorities. Posts findings to debate board with contract-specific types.',
271 prompt: enrichPrompt('contract-reviewer', contractReviewerPrompt),
272 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...scoringTools],
273 model: 'opus' as const,
274 maxTurns: 12,
275 outputFormat: outputFormats['contract-reviewer'],
276 },
277
278 // ── v6: Legal Core, Risk, and Adversarial Agents ─────────────────────
279
280 'legal-researcher': {
281 description: 'Legal research specialist. Produces structured research memos with citations, confidence levels, and conflicting authorities. Saves findings as precedents. Escalates when precedent is unclear or conflicting.',
282 prompt: enrichPrompt('legal-researcher', legalResearcherPrompt),
283 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...memoryWriteTools],
284 model: 'opus' as const,
285 maxTurns: 10,
286 outputFormat: outputFormats['legal-researcher'],
287 },
288
289 'risk-pricer': {
290 description: 'Risk pricing specialist. Calculates error probability, potential loss magnitude, and insurability for any specialist deliverable. Continuous — runs on every piece of work. Uses workflow history and anti-patterns as signals.',
291 prompt: enrichPrompt('risk-pricer', riskPricerPrompt),
292 tools: [...readOnlyTools, ...memoryReadTools,
293 'mcp__shem__get_workflow_history',
294 'mcp__shem__query_anti_patterns',
295 ],
296 model: 'sonnet' as const, // Fast model — runs on every deliverable
297 maxTurns: 6,
298 outputFormat: outputFormats['risk-pricer'],
299 },
300
301 'red-team': {
302 description: 'Adversarial testing agent. Attacks deliverables from a hostile counterparty perspective. Finds vulnerabilities, edge cases, ambiguities, and failure modes. Gets 1-2 shots at breaking the work. Posts findings to debate board.',
303 prompt: enrichPrompt('red-team', redTeamPrompt),
304 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
305 model: 'opus' as const, // Needs strong reasoning to find subtle flaws
306 maxTurns: 8,
307 outputFormat: outputFormats['red-team'],
308 },
309
310 // ── v8: Law Firm — Leadership (3) ─────────────────────────────────────
311
312 'managing-partner': {
313 description: 'Strategic oversight and final sign-off. Reviews all deliverables before client delivery. Conservative, meticulous, nothing ships without approval.',
314 prompt: enrichPrompt('managing-partner', managingPartnerPrompt),
315 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...memoryWriteTools, ...verificationTools, ...learningReadTools],
316 model: 'opus' as const,
317 maxTurns: 10,
318 outputFormat: outputFormats['managing-partner'],
319 },
320
321 'supervising-partner': {
322 description: 'Mentors junior team members and ensures consistent work quality. Guides through structured feedback and coaching.',
323 prompt: enrichPrompt('supervising-partner', supervisingPartnerPrompt),
324 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...verificationTools],
325 model: 'opus' as const,
326 maxTurns: 8,
327 outputFormat: outputFormats['managing-partner'],
328 },
329
330 'of-counsel': {
331 description: 'Deep expertise and creative problem-solving for novel legal questions. Called in for the hardest, most unusual matters.',
332 prompt: enrichPrompt('of-counsel', ofCounselPrompt),
333 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...memoryWriteTools],
334 model: 'opus' as const,
335 maxTurns: 12,
336 outputFormat: outputFormats['managing-partner'],
337 },
338
339 // ── v8: Law Firm — Corporate & Transactional (5) ──────────────────────
340
341 'corporate-generalist': {
342 description: 'Handles corporate matters — governance, structuring, general commercial. Reliable workhorse for anything corporate.',
343 prompt: enrichPrompt('corporate-generalist', corporateGeneralistPrompt),
344 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
345 model: 'opus' as const,
346 maxTurns: 10,
347 outputFormat: outputFormats['corporate-lawyer'],
348 },
349
350 'ma-specialist': {
351 description: 'Mergers & acquisitions specialist. Due diligence, deal structuring, transaction documentation. Fast, risk-tolerant, thrives under deadline pressure.',
352 prompt: enrichPrompt('ma-specialist', maSpecialistPrompt),
353 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...scoringTools],
354 model: 'opus' as const,
355 maxTurns: 12,
356 outputFormat: outputFormats['corporate-lawyer'],
357 },
358
359 'contract-specialist': {
360 description: 'Contract drafting, redlining, and clause-by-clause analysis. Every word deliberate, zero tolerance for ambiguity.',
361 prompt: enrichPrompt('contract-specialist', contractSpecialistPrompt),
362 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...scoringTools],
363 model: 'sonnet' as const,
364 maxTurns: 12,
365 outputFormat: outputFormats['corporate-lawyer'],
366 },
367
368 'banking-finance': {
369 description: 'Banking and finance specialist. Loan agreements, security documents, financial regulation. Thinks in term sheets and credit facilities.',
370 prompt: enrichPrompt('banking-finance', bankingFinancePrompt),
371 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
372 model: 'sonnet' as const,
373 maxTurns: 10,
374 outputFormat: outputFormats['corporate-lawyer'],
375 },
376
377 'capital-markets': {
378 description: 'Capital markets and securities specialist. IPOs, bond issuances, regulatory filings. Deadline-driven, comfortable with complexity.',
379 prompt: enrichPrompt('capital-markets', capitalMarketsPrompt),
380 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
381 model: 'sonnet' as const,
382 maxTurns: 10,
383 outputFormat: outputFormats['corporate-lawyer'],
384 },
385
386 // ── v8: Law Firm — Disputes & Litigation (4) ─────────────────────────
387
388 'litigation-partner': {
389 description: 'Senior litigation strategist. Adversarial, relentless, finds every weakness. Thinks like opposing counsel to stress-test positions.',
390 prompt: enrichPrompt('litigation-partner', litigationPartnerPrompt),
391 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...memoryWriteTools],
392 model: 'opus' as const,
393 maxTurns: 10,
394 outputFormat: outputFormats['litigation-lawyer'],
395 },
396
397 'litigation-associate': {
398 description: 'Litigation associate building cases brick by brick. Research, discovery analysis, motion drafting, evidence review.',
399 prompt: enrichPrompt('litigation-associate', litigationAssociatePrompt),
400 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
401 model: 'sonnet' as const,
402 maxTurns: 10,
403 outputFormat: outputFormats['litigation-lawyer'],
404 },
405
406 'arbitration-specialist': {
407 description: 'International arbitration and alternative dispute resolution. Diplomatic, seeks efficient resolution. ICC/LCIA/UNCITRAL expertise.',
408 prompt: enrichPrompt('arbitration-specialist', arbitrationSpecialistPrompt),
409 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
410 model: 'opus' as const,
411 maxTurns: 10,
412 outputFormat: outputFormats['litigation-lawyer'],
413 },
414
415 'dispute-resolution': {
416 description: 'Mediation and creative dispute resolution. Avoids scorched earth, finds settlement pathways. Communication-focused.',
417 prompt: enrichPrompt('dispute-resolution', disputeResolutionPrompt),
418 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
419 model: 'sonnet' as const,
420 maxTurns: 8,
421 outputFormat: outputFormats['litigation-lawyer'],
422 },
423
424 // ── v8: Law Firm — Regulatory & Compliance (4) ────────────────────────
425
426 'regulatory-counsel': {
427 description: 'Regulatory specialist covering financial services, healthcare, tech regulation. Knows every rule, maps compliance obligations.',
428 prompt: enrichPrompt('regulatory-counsel', regulatoryCounselPrompt),
429 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
430 model: 'opus' as const,
431 maxTurns: 10,
432 outputFormat: outputFormats['regulatory-lawyer'],
433 },
434
435 'compliance-officer': {
436 description: 'Compliance program design and audit. Checklist-driven, flags everything. Internal controls, training programs, monitoring.',
437 prompt: enrichPrompt('compliance-officer', complianceOfficerPrompt),
438 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...verificationTools],
439 model: 'sonnet' as const,
440 maxTurns: 8,
441 outputFormat: outputFormats['regulatory-lawyer'],
442 },
443
444 'antitrust-specialist': {
445 description: 'Competition law and antitrust specialist. Market analysis, merger control, cartel investigations. Strategic competitive dynamics.',
446 prompt: enrichPrompt('antitrust-specialist', antitrustSpecialistPrompt),
447 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
448 model: 'sonnet' as const,
449 maxTurns: 10,
450 outputFormat: outputFormats['regulatory-lawyer'],
451 },
452
453 'sanctions-specialist': {
454 description: 'Sanctions, export controls, and trade compliance. Zero tolerance for risk. OFAC, EU sanctions, UN sanctions screening.',
455 prompt: enrichPrompt('sanctions-specialist', sanctionsSpecialistPrompt),
456 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
457 model: 'sonnet' as const,
458 maxTurns: 8,
459 outputFormat: outputFormats['regulatory-lawyer'],
460 },
461
462 // ── v8: Law Firm — Specialist Practice (6) ────────────────────────────
463
464 'tax-counsel': {
465 description: 'Tax structuring and planning specialist. Structures transactions for efficiency, navigates multi-jurisdiction tax regimes.',
466 prompt: enrichPrompt('tax-counsel', taxCounselPrompt),
467 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
468 model: 'opus' as const,
469 maxTurns: 10,
470 outputFormat: outputFormats['specialist-lawyer'],
471 },
472
473 'ip-specialist': {
474 description: 'Intellectual property specialist — patents, trademarks, copyrights, trade secrets. Creative, tech-savvy, portfolio strategy.',
475 prompt: enrichPrompt('ip-specialist', ipSpecialistPrompt),
476 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
477 model: 'sonnet' as const,
478 maxTurns: 10,
479 outputFormat: outputFormats['specialist-lawyer'],
480 },
481
482 'privacy-counsel': {
483 description: 'Data protection and privacy specialist. GDPR, CCPA, PIPL, cross-border data transfers. Chapter-and-verse regulatory knowledge.',
484 prompt: enrichPrompt('privacy-counsel', privacyCounselPrompt),
485 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
486 model: 'opus' as const,
487 maxTurns: 10,
488 outputFormat: outputFormats['specialist-lawyer'],
489 },
490
491 'employment-counsel': {
492 description: 'Employment and labor law specialist. Hiring, termination, discrimination, benefits, workplace safety. Sensitive to power dynamics.',
493 prompt: enrichPrompt('employment-counsel', employmentCounselPrompt),
494 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
495 model: 'sonnet' as const,
496 maxTurns: 8,
497 outputFormat: outputFormats['specialist-lawyer'],
498 },
499
500 'real-estate-counsel': {
501 description: 'Real property and real estate transactions. Acquisitions, leasing, development, zoning. Rights and boundaries.',
502 prompt: enrichPrompt('real-estate-counsel', realEstateCounselPrompt),
503 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
504 model: 'sonnet' as const,
505 maxTurns: 8,
506 outputFormat: outputFormats['specialist-lawyer'],
507 },
508
509 'environmental-counsel': {
510 description: 'Environmental law and ESG specialist. Permitting, contamination, compliance, sustainability reporting. Precautionary approach.',
511 prompt: enrichPrompt('environmental-counsel', environmentalCounselPrompt),
512 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
513 model: 'sonnet' as const,
514 maxTurns: 8,
515 outputFormat: outputFormats['specialist-lawyer'],
516 },
517
518 // ── v8: Law Firm — Junior Lawyers (3) ─────────────────────────────────
519
520 'junior-associate': {
521 description: 'Junior lawyer for research, first drafts, and support work. Fast, enthusiastic, thorough researcher with fresh perspective.',
522 prompt: enrichPrompt('junior-associate', juniorAssociatePrompt),
523 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
524 model: 'sonnet' as const,
525 maxTurns: 8,
526 outputFormat: outputFormats['junior-lawyer'],
527 },
528
529 'paralegal': {
530 description: 'Paralegal handling volume work — document review, due diligence, formatting, cite-checking. Fast and precise.',
531 prompt: enrichPrompt('paralegal', paralegalPrompt),
532 tools: [...readOnlyTools, ...memoryReadTools, ...scoringTools],
533 model: 'haiku' as const,
534 maxTurns: 6,
535 outputFormat: outputFormats['junior-lawyer'],
536 },
537
538 'legal-intern': {
539 description: 'Legal intern for research tasks and fresh perspective. Asks good questions, identifies assumptions others miss.',
540 prompt: enrichPrompt('legal-intern', legalInternPrompt),
541 tools: [...readOnlyTools, ...memoryReadTools],
542 model: 'haiku' as const,
543 maxTurns: 6,
544 outputFormat: outputFormats['junior-lawyer'],
545 },
546
547
548 // ── v8: Experts — User Research & Testing (3 new) ─────────────────────
549
550 'accessibility-specialist': {
551 description: 'Accessibility specialist. WCAG compliance, screen reader testing, cognitive load, inclusive design.',
552 prompt: enrichPrompt('accessibility-specialist', accessibilitySpecialistPrompt),
553 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
554 model: 'sonnet' as const,
555 maxTurns: 8,
556 outputFormat: outputFormats['research-expert'],
557 },
558
559 'user-researcher': {
560 description: 'User research specialist. Interview insights, usability findings, comprehension testing, behavioral analysis.',
561 prompt: enrichPrompt('user-researcher', userResearcherPrompt),
562 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
563 model: 'sonnet' as const,
564 maxTurns: 8,
565 outputFormat: outputFormats['research-expert'],
566 },
567
568 'behavioral-scientist': {
569 description: 'Behavioral science specialist. Choice architecture, cognitive biases, nudge design, decision-making analysis.',
570 prompt: enrichPrompt('behavioral-scientist', behavioralScientistPrompt),
571 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
572 model: 'opus' as const,
573 maxTurns: 8,
574 outputFormat: outputFormats['research-expert'],
575 },
576
577
578 // ── v8: Experts — Technology & Data (4 new) ───────────────────────────
579
580 'legal-engineer': {
581 description: 'Legal technology specialist. Automation, document assembly, legal tech integration, computational law.',
582 prompt: enrichPrompt('legal-engineer', legalEngineerPrompt),
583 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...memoryWriteTools],
584 model: 'opus' as const,
585 maxTurns: 10,
586 outputFormat: outputFormats['tech-expert'],
587 },
588
589 'cybersecurity-advisor': {
590 description: 'Cybersecurity specialist. Threat modeling, breach scenarios, security assessment, data protection technical controls.',
591 prompt: enrichPrompt('cybersecurity-advisor', cybersecurityAdvisorPrompt),
592 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
593 model: 'sonnet' as const,
594 maxTurns: 8,
595 outputFormat: outputFormats['tech-expert'],
596 },
597
598 'ai-ethics-specialist': {
599 description: 'AI governance and algorithmic fairness specialist. AI regulation, algorithmic bias, model governance, responsible AI.',
600 prompt: enrichPrompt('ai-ethics-specialist', aiEthicsSpecialistPrompt),
601 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
602 model: 'opus' as const,
603 maxTurns: 8,
604 outputFormat: outputFormats['tech-expert'],
605 },
606
607 // ── v8: Experts — Industry Specialists (4 new) ────────────────────────
608
609 'fintech-specialist': {
610 description: 'Fintech and financial innovation specialist. Payments, crypto, DeFi, regulatory sandbox, PSD2/MiCA.',
611 prompt: enrichPrompt('fintech-specialist', fintechSpecialistPrompt),
612 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
613 model: 'sonnet' as const,
614 maxTurns: 8,
615 outputFormat: outputFormats['industry-expert'],
616 },
617
618 'healthcare-specialist': {
619 description: 'Healthcare and life sciences specialist. HIPAA, clinical trials, health data, pharmaceutical regulation.',
620 prompt: enrichPrompt('healthcare-specialist', healthcareSpecialistPrompt),
621 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
622 model: 'sonnet' as const,
623 maxTurns: 8,
624 outputFormat: outputFormats['industry-expert'],
625 },
626
627 'media-specialist': {
628 description: 'Media and entertainment specialist. Content rights, platform rules, defamation, licensing, publishing.',
629 prompt: enrichPrompt('media-specialist', mediaSpecialistPrompt),
630 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
631 model: 'sonnet' as const,
632 maxTurns: 8,
633 outputFormat: outputFormats['industry-expert'],
634 },
635
636 'energy-specialist': {
637 description: 'Energy and natural resources specialist. Energy regulation, carbon markets, renewable energy, grid infrastructure.',
638 prompt: enrichPrompt('energy-specialist', energySpecialistPrompt),
639 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
640 model: 'sonnet' as const,
641 maxTurns: 8,
642 outputFormat: outputFormats['industry-expert'],
643 },
644
645 // ── v8: Experts — Quality & Infrastructure (3 new) ────────────────────
646
647 'project-manager': {
648 description: 'Project management specialist. Timelines, dependencies, status tracking, resource allocation, workflow coordination.',
649 prompt: enrichPrompt('project-manager', projectManagerPrompt),
650 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...memoryWriteTools, ...learningReadTools],
651 model: 'sonnet' as const,
652 maxTurns: 8,
653 outputFormat: outputFormats['quality-expert'],
654 },
655
656 // ── v19: Missing agents for Full Bench workflow ────────────────────────
657
658 'innovation-partner': {
659 description: 'Legal innovation and emerging technology specialist. AI contracts, smart contracts, RegTech, novel business models, emerging regulatory frameworks.',
660 prompt: enrichPrompt('innovation-partner', innovationPartnerPrompt),
661 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
662 model: 'opus' as const,
663 maxTurns: 10,
664 outputFormat: outputFormats['specialist-lawyer'],
665 },
666
667 'international-counsel': {
668 description: 'Cross-border regulation and multi-jurisdictional compliance. Conflict of laws, treaty frameworks, international regulatory coordination.',
669 prompt: enrichPrompt('international-counsel', internationalCounselPrompt),
670 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
671 model: 'opus' as const,
672 maxTurns: 10,
673 outputFormat: outputFormats['specialist-lawyer'],
674 },
675
676 // ── v20: Previously Profile-Only Agents (7) ──────────────────────────────
677
678 'client-relations-partner': {
679 description: 'Client relationship management and business translation. Reviews deliverables for client-appropriateness, ensures communication is accessible, coordinates cross-practice teams.',
680 prompt: enrichPrompt('client-relations-partner', clientRelationsPartnerPrompt),
681 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...memoryWriteTools],
682 model: 'opus' as const,
683 maxTurns: 10,
684 outputFormat: outputFormats['managing-partner'],
685 },
686
687 'risk-partner': {
688 description: 'Enterprise risk assessment across all findings. Identifies hidden risks, systemic patterns, quantifies financial exposure, and creates risk matrices.',
689 prompt: enrichPrompt('risk-partner', riskPartnerPrompt),
690 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...memoryWriteTools, ...verificationTools],
691 model: 'opus' as const,
692 maxTurns: 10,
693 outputFormat: outputFormats['managing-partner'],
694 },
695
696 'transaction-partner': {
697 description: 'Multi-party transaction orchestrator. Analyzes deal mechanics, closing conditions, consent requirements, and regulatory approvals across complex cross-border transactions.',
698 prompt: enrichPrompt('transaction-partner', transactionPartnerPrompt),
699 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...memoryWriteTools, ...scoringTools],
700 model: 'opus' as const,
701 maxTurns: 12,
702 outputFormat: outputFormats['corporate-lawyer'],
703 },
704
705 'public-law-counsel': {
706 description: 'Government advisory and public law specialist. Legislative tracing, procurement compliance, administrative law review, and regulatory submission analysis.',
707 prompt: enrichPrompt('public-law-counsel', publicLawCounselPrompt),
708 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
709 model: 'sonnet' as const,
710 maxTurns: 10,
711 outputFormat: outputFormats['regulatory-lawyer'],
712 },
713
714 'restructuring-specialist': {
715 description: 'Corporate restructuring and insolvency specialist. Creditor waterfall analysis, restructuring plan review, workout agreement negotiation, distressed M&A.',
716 prompt: enrichPrompt('restructuring-specialist', restructuringSpecialistPrompt),
717 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...scoringTools],
718 model: 'opus' as const,
719 maxTurns: 10,
720 outputFormat: outputFormats['corporate-lawyer'],
721 },
722
723 'startup-counsel': {
724 description: 'Startup and venture capital specialist. SAFE/convertible note analysis, cap table verification, founder agreement review, formation documents.',
725 prompt: enrichPrompt('startup-counsel', startupCounselPrompt),
726 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...scoringTools],
727 model: 'sonnet' as const,
728 maxTurns: 8,
729 outputFormat: outputFormats['corporate-lawyer'],
730 },
731
732 'tech-transactions': {
733 description: 'Technology agreement specialist. SaaS/API/DPA review, open source compliance, vendor lock-in assessment, technology licensing analysis.',
734 prompt: enrichPrompt('tech-transactions', techTransactionsPrompt),
735 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools, ...scoringTools],
736 model: 'sonnet' as const,
737 maxTurns: 8,
738 outputFormat: outputFormats['corporate-lawyer'],
739 },
740
741 // ── Ethics Reviewer — Engagement-Level Ethical Review ─────────────────
742
743 'ethics-reviewer': {
744 description: 'Engagement-level ethics reviewer. Evaluates whether the engagement raises professional responsibility, proportionality, or mass-action concerns. Posts findings to the debate board. Does NOT block work — raises concerns for the team and human gates to weigh.',
745 prompt: enrichPrompt('ethics-reviewer', ethicsReviewerPrompt),
746 tools: [...readOnlyTools, ...debateTools, ...memoryReadTools],
747 model: 'sonnet' as const,
748 maxTurns: 6,
749 outputFormat: outputFormats['ethics-auditor'],
750 },
751
752};
753