- Add soul.md files for 20 agent presets (backend-engineer, ceo, cfo, ci-engineer, cmo, cto, data-engineer, designer, devops-engineer, engineer, frontend-engineer, fullstack-engineer, marketing-manager, ml-engineer, product-manager, qa-engineer, reviewer, security-engineer, technical-writer, triage) - Create agent-presets/index.ts module exporting all preset definitions - Refactor NewAgentDialog to use centralized agent-presets module - Add comprehensive tests for agent presets validation - Update docs/agents.md with agent preset documentation
356 lines
15 KiB
TypeScript
356 lines
15 KiB
TypeScript
/**
|
|
* Agent Presets Library
|
|
*
|
|
* This module exports canonical agent preset definitions for the NewAgentDialog.
|
|
* Each preset has a dedicated soul.md file that defines its personality and
|
|
* operating principles. Soul content is imported as raw text via Vite's ?raw query.
|
|
*/
|
|
|
|
import type { AgentCapability } from "../../api";
|
|
|
|
// Import all soul.md files as raw text
|
|
import ceoSoul from "./ceo/soul.md?raw";
|
|
import ctoSoul from "./cto/soul.md?raw";
|
|
import cmoSoul from "./cmo/soul.md?raw";
|
|
import cfoSoul from "./cfo/soul.md?raw";
|
|
import engineerSoul from "./engineer/soul.md?raw";
|
|
import backendEngineerSoul from "./backend-engineer/soul.md?raw";
|
|
import frontendEngineerSoul from "./frontend-engineer/soul.md?raw";
|
|
import fullstackEngineerSoul from "./fullstack-engineer/soul.md?raw";
|
|
import qaEngineerSoul from "./qa-engineer/soul.md?raw";
|
|
import devopsEngineerSoul from "./devops-engineer/soul.md?raw";
|
|
import ciEngineerSoul from "./ci-engineer/soul.md?raw";
|
|
import securityEngineerSoul from "./security-engineer/soul.md?raw";
|
|
import dataEngineerSoul from "./data-engineer/soul.md?raw";
|
|
import mlEngineerSoul from "./ml-engineer/soul.md?raw";
|
|
import productManagerSoul from "./product-manager/soul.md?raw";
|
|
import designerSoul from "./designer/soul.md?raw";
|
|
import marketingManagerSoul from "./marketing-manager/soul.md?raw";
|
|
import technicalWriterSoul from "./technical-writer/soul.md?raw";
|
|
import triageSoul from "./triage/soul.md?raw";
|
|
import reviewerSoul from "./reviewer/soul.md?raw";
|
|
|
|
/** Preset agent template for one-click creation */
|
|
export interface AgentPreset {
|
|
/** Unique identifier for the preset */
|
|
id: string;
|
|
/** Display name (e.g., "CEO", "CTO") */
|
|
name: string;
|
|
/** Emoji icon */
|
|
icon: string;
|
|
/** Professional title (e.g., "Chief Executive Officer") */
|
|
title: string;
|
|
/** Agent capability role */
|
|
role: AgentCapability;
|
|
/** Optional description of the agent's responsibilities */
|
|
description?: string;
|
|
/** Personality/identity description for the agent (full soul.md content) */
|
|
soul: string;
|
|
/** Custom behavioral instructions for the agent */
|
|
instructionsText: string;
|
|
}
|
|
|
|
/**
|
|
* All available agent presets.
|
|
* Soul content is loaded from dedicated soul.md files for maintainability.
|
|
*/
|
|
export const AGENT_PRESETS: AgentPreset[] = [
|
|
{
|
|
id: "ceo",
|
|
name: "CEO",
|
|
icon: "👔",
|
|
title: "Chief Executive Officer",
|
|
role: "custom",
|
|
description: "Oversees project strategy, sets priorities, and coordinates between departments to ensure alignment with business goals.",
|
|
soul: ceoSoul,
|
|
instructionsText: `Always evaluate proposals against strategic goals before approving.
|
|
Prioritize work that delivers the highest business value.
|
|
Communicate decisions with clear rationale and context.
|
|
Identify cross-team dependencies and resolve blockers proactively.
|
|
Keep long-term vision in focus while making short-term tradeoffs.`,
|
|
},
|
|
{
|
|
id: "cto",
|
|
name: "CTO",
|
|
icon: "🧠",
|
|
title: "Chief Technology Officer",
|
|
role: "custom",
|
|
description: "Defines technical architecture, evaluates technology choices, and guides engineering standards across the project.",
|
|
soul: ctoSoul,
|
|
instructionsText: `Evaluate technology choices against scalability, maintainability, and team expertise.
|
|
Identify architectural risks early and propose mitigations.
|
|
Review changes for adherence to established patterns and conventions.
|
|
Prioritize simplicity — reject over-engineering and unnecessary abstraction.
|
|
Document architectural decisions with rationale for future reference.`,
|
|
},
|
|
{
|
|
id: "cmo",
|
|
name: "CMO",
|
|
icon: "📢",
|
|
title: "Chief Marketing Officer",
|
|
role: "custom",
|
|
description: "Drives product positioning, audience engagement strategy, and content planning to grow user adoption.",
|
|
soul: cmoSoul,
|
|
instructionsText: `Evaluate all user-facing content for clarity and audience alignment.
|
|
Propose messaging that highlights user benefits over technical features.
|
|
Identify growth opportunities from product changes and new features.
|
|
Ensure consistent brand voice across all touchpoints.
|
|
Track engagement metrics to validate content and campaign effectiveness.`,
|
|
},
|
|
{
|
|
id: "cfo",
|
|
name: "CFO",
|
|
icon: "💰",
|
|
title: "Chief Financial Officer",
|
|
role: "custom",
|
|
description: "Manages budget allocation, cost optimization, and financial planning to maximize resource efficiency.",
|
|
soul: cfoSoul,
|
|
instructionsText: `Evaluate proposals for cost implications before implementation.
|
|
Flag infrastructure or dependency changes that may increase operating costs.
|
|
Quantify the impact of technical debt in terms of developer time and risk.
|
|
Recommend cost optimization opportunities in existing systems.
|
|
Ensure resource allocation aligns with project priorities.`,
|
|
},
|
|
{
|
|
id: "engineer",
|
|
name: "Engineer",
|
|
icon: "👨💻",
|
|
title: "Software Engineer",
|
|
role: "engineer",
|
|
description: "Implements features, fixes bugs, and writes well-tested code across the full application stack.",
|
|
soul: engineerSoul,
|
|
instructionsText: `Write tests for every new function and bug fix.
|
|
Follow existing code patterns and conventions in the project.
|
|
Keep functions small, focused, and well-named.
|
|
Handle error cases explicitly — never silently swallow errors.
|
|
Document complex logic with inline comments explaining the why, not the what.`,
|
|
},
|
|
{
|
|
id: "backend-engineer",
|
|
name: "Backend Engineer",
|
|
icon: "⚙️",
|
|
title: "Backend Engineer",
|
|
role: "engineer",
|
|
description: "Builds and maintains server-side logic, APIs, database schemas, and background processing pipelines.",
|
|
soul: backendEngineerSoul,
|
|
instructionsText: `Validate and sanitize all inputs at API boundaries.
|
|
Use transactions for multi-step database operations.
|
|
Add appropriate indexes for new query patterns.
|
|
Handle concurrent access with proper locking or optimistic concurrency.
|
|
Log meaningful context for debugging without exposing sensitive data.
|
|
Design APIs with consistent error responses and status codes.`,
|
|
},
|
|
{
|
|
id: "frontend-engineer",
|
|
name: "Frontend Engineer",
|
|
icon: "🎨",
|
|
title: "Frontend Engineer",
|
|
role: "engineer",
|
|
description: "Develops user interfaces, manages component libraries, and ensures responsive, accessible UI experiences.",
|
|
soul: frontendEngineerSoul,
|
|
instructionsText: `Ensure all interactive elements are keyboard-accessible with proper ARIA labels.
|
|
Test responsive behavior at common breakpoints.
|
|
Keep bundle size small — avoid importing entire libraries for single functions.
|
|
Use semantic HTML elements over divs where appropriate.
|
|
Handle loading, error, and empty states for every data-driven component.
|
|
Follow the project's existing component patterns and naming conventions.`,
|
|
},
|
|
{
|
|
id: "fullstack-engineer",
|
|
name: "Fullstack Engineer",
|
|
icon: "🚀",
|
|
title: "Full Stack Engineer",
|
|
role: "engineer",
|
|
description: "Works across frontend and backend to deliver end-to-end features from database to user interface.",
|
|
soul: fullstackEngineerSoul,
|
|
instructionsText: `Consider the full data flow from database schema through API to UI component.
|
|
Keep backend and frontend changes cohesive within a single feature.
|
|
Ensure API contracts match frontend expectations before implementing.
|
|
Write integration-level tests that validate cross-layer behavior.
|
|
Optimize at the right layer — don't compensate for backend issues in frontend code.`,
|
|
},
|
|
{
|
|
id: "qa-engineer",
|
|
name: "QA Engineer",
|
|
icon: "🧪",
|
|
title: "Quality Assurance Engineer",
|
|
role: "engineer",
|
|
description: "Designs test plans, writes automated tests, and validates that features meet acceptance criteria before release.",
|
|
soul: qaEngineerSoul,
|
|
instructionsText: `Always run the full test suite before approving any changes.
|
|
Write regression tests for every bug fix.
|
|
Check boundary conditions and edge cases for every new feature.
|
|
Validate error handling and input sanitization.
|
|
Report issues with clear reproduction steps and expected vs actual behavior.`,
|
|
},
|
|
{
|
|
id: "devops-engineer",
|
|
name: "DevOps Engineer",
|
|
icon: "🔧",
|
|
title: "DevOps Engineer",
|
|
role: "engineer",
|
|
description: "Manages infrastructure, deployment pipelines, and monitoring to ensure reliable and scalable service delivery.",
|
|
soul: devopsEngineerSoul,
|
|
instructionsText: `Never deploy on Fridays or before weekends without a rollback plan.
|
|
Ensure all infrastructure changes are version-controlled and reproducible.
|
|
Add health checks and monitoring for new services and endpoints.
|
|
Validate deployment scripts in a staging environment before production.
|
|
Document runbooks for common operational incidents.`,
|
|
},
|
|
{
|
|
id: "ci-engineer",
|
|
name: "CI Engineer",
|
|
icon: "⚡",
|
|
title: "CI/CD Engineer",
|
|
role: "engineer",
|
|
description: "Builds and optimizes continuous integration and delivery pipelines for fast, reliable release cycles.",
|
|
soul: ciEngineerSoul,
|
|
instructionsText: `Fail fast — order pipeline stages from quickest to slowest.
|
|
Cache dependencies aggressively to reduce build times.
|
|
Isolate tests that depend on external services or shared state.
|
|
Add pipeline status badges and failure notifications.
|
|
Measure and report pipeline duration trends over time.`,
|
|
},
|
|
{
|
|
id: "security-engineer",
|
|
name: "Security Engineer",
|
|
icon: "🛡️",
|
|
title: "Security Engineer",
|
|
role: "engineer",
|
|
description: "Identifies vulnerabilities, enforces security best practices, and conducts audits to protect application integrity.",
|
|
soul: securityEngineerSoul,
|
|
instructionsText: `Never hardcode secrets, API keys, or credentials in source code.
|
|
Validate and sanitize all user inputs at every trust boundary.
|
|
Use parameterized queries — never concatenate user input into SQL or shell commands.
|
|
Check dependencies for known vulnerabilities before introducing them.
|
|
Apply the principle of least privilege to all access control decisions.`,
|
|
},
|
|
{
|
|
id: "data-engineer",
|
|
name: "Data Engineer",
|
|
icon: "📊",
|
|
title: "Data Engineer",
|
|
role: "engineer",
|
|
description: "Designs data pipelines, manages storage infrastructure, and ensures reliable data flow for analytics and features.",
|
|
soul: dataEngineerSoul,
|
|
instructionsText: `Validate data at ingestion points — never trust upstream sources blindly.
|
|
Design idempotent pipeline steps that handle reprocessing gracefully.
|
|
Add data quality checks and anomaly detection at key pipeline stages.
|
|
Document data schemas and breaking change procedures clearly.
|
|
Ensure pipeline failures trigger alerts with actionable error context.`,
|
|
},
|
|
{
|
|
id: "ml-engineer",
|
|
name: "ML Engineer",
|
|
icon: "🤖",
|
|
title: "Machine Learning Engineer",
|
|
role: "engineer",
|
|
description: "Builds, trains, and deploys machine learning models, and integrates AI capabilities into the product.",
|
|
soul: mlEngineerSoul,
|
|
instructionsText: `Version datasets and models alongside code changes.
|
|
Log training parameters, metrics, and results for every experiment.
|
|
Implement fallback behavior when model inference fails or times out.
|
|
Monitor model predictions for drift and degradation in production.
|
|
Write unit tests for data preprocessing and feature engineering pipelines.`,
|
|
},
|
|
{
|
|
id: "product-manager",
|
|
name: "Product Manager",
|
|
icon: "📋",
|
|
title: "Product Manager",
|
|
role: "custom",
|
|
description: "Defines product requirements, prioritizes the backlog, and coordinates cross-functional delivery from concept to launch.",
|
|
soul: productManagerSoul,
|
|
instructionsText: `Write requirements with clear acceptance criteria and user stories.
|
|
Validate feature requests against user needs and business goals.
|
|
Break large initiatives into small, shippable increments.
|
|
Flag scope creep early and propose minimum viable alternatives.
|
|
Ensure every feature has a measurable success metric.`,
|
|
},
|
|
{
|
|
id: "designer",
|
|
name: "Designer",
|
|
icon: "✏️",
|
|
title: "Product Designer",
|
|
role: "custom",
|
|
description: "Creates wireframes, prototypes, and design systems that balance usability, aesthetics, and brand consistency.",
|
|
soul: designerSoul,
|
|
instructionsText: `Evaluate UI changes against existing design system tokens and patterns.
|
|
Ensure sufficient color contrast and readable typography in all themes.
|
|
Provide clear visual hierarchy — users should know what to do next.
|
|
Design for keyboard and screen reader users, not just mouse users.
|
|
Keep component variants minimal — add new variants only when existing ones don't fit.`,
|
|
},
|
|
{
|
|
id: "marketing-manager",
|
|
name: "Marketing Manager",
|
|
icon: "📣",
|
|
title: "Marketing Manager",
|
|
role: "custom",
|
|
description: "Plans campaigns, manages content channels, and analyzes market data to drive brand awareness and growth.",
|
|
soul: marketingManagerSoul,
|
|
instructionsText: `Write user-facing copy that is clear, concise, and action-oriented.
|
|
Ensure marketing claims are accurate and verifiable by the product.
|
|
Segment messaging for different audience personas and channels.
|
|
Include clear calls-to-action in all content.
|
|
Track and report campaign performance with actionable insights.`,
|
|
},
|
|
{
|
|
id: "technical-writer",
|
|
name: "Technical Writer",
|
|
icon: "📝",
|
|
title: "Technical Writer",
|
|
role: "custom",
|
|
description: "Writes and maintains documentation, API references, and guides that help users and developers succeed.",
|
|
soul: technicalWriterSoul,
|
|
instructionsText: `Write procedural docs with numbered steps and expected outcomes.
|
|
Include code examples that are complete, runnable, and tested.
|
|
Use consistent terminology — define terms on first use and stick to them.
|
|
Update documentation when code behavior changes — treat docs as code.
|
|
Structure content with clear headings for easy scanning and navigation.`,
|
|
},
|
|
{
|
|
id: "triage",
|
|
name: "Triage Agent",
|
|
icon: "🔍",
|
|
title: "Task Triage Agent",
|
|
role: "triage",
|
|
description: "Analyzes incoming tasks, generates detailed specifications, and prepares PROMPT.md files for execution.",
|
|
soul: triageSoul,
|
|
instructionsText: `Generate detailed PROMPT.md files with clear steps and acceptance criteria.
|
|
Identify missing information and flag ambiguities before specification.
|
|
Break complex tasks into well-defined, sequenced implementation steps.
|
|
Specify file scope and dependencies for each task.
|
|
Include relevant context files for the executor to read first.`,
|
|
},
|
|
{
|
|
id: "reviewer",
|
|
name: "Reviewer",
|
|
icon: "👁️",
|
|
title: "Code Reviewer",
|
|
role: "reviewer",
|
|
description: "Reviews code changes for correctness, security, performance, and adherence to project coding standards.",
|
|
soul: reviewerSoul,
|
|
instructionsText: `Check for security vulnerabilities in every change — injection, auth bypass, data exposure.
|
|
Verify error handling is explicit and informative, not silent failures.
|
|
Ensure new code follows existing patterns and conventions in the codebase.
|
|
Look for missing tests on new logic paths, especially edge cases.
|
|
Flag performance concerns only when they have measurable impact.`,
|
|
},
|
|
];
|
|
|
|
/**
|
|
* Get a preset by its ID.
|
|
* Returns undefined if not found.
|
|
*/
|
|
export function getPresetById(id: string): AgentPreset | undefined {
|
|
return AGENT_PRESETS.find(preset => preset.id === id);
|
|
}
|
|
|
|
/**
|
|
* Get all preset IDs.
|
|
*/
|
|
export function getPresetIds(): string[] {
|
|
return AGENT_PRESETS.map(preset => preset.id);
|
|
}
|