SERVICES DOCUMENTATION
TECHNICAL BULLETIN NO. 004
WORKFLOW AI ASSISTANT - DECISION SUPPORT SURVIVAL SYSTEM
task-o-matic-workflow-ai-assistant-v2All PersonnelMANDATORY COMPLIANCE: Yes
⚠️ CRITICAL SURVIVAL NOTICE
Citizen, WorkflowAIAssistant is your tactical advisor in the post-deadline wasteland. Without AI-powered decision support, your project choices will be as random as radiation storms. This service provides intelligent recommendations for project configuration, PRD improvement, and task management strategies.
SYSTEM ARCHITECTURE OVERVIEW
The WorkflowAIAssistant serves as specialized AI consultant that provides contextual decision support for workflow operations. It leverages multiple AI models to offer recommendations, improvements, and strategic guidance throughout the project lifecycle.
Core Dependencies:
- AI Operations: Vercel AI SDK integration for model communication
- Prompt Builder: Template-based prompt generation system
- Prompt Registry: Centralized prompt template management
- AI Config Builder: Flexible AI configuration management
Assistant Capabilities:
- Project Configuration: AI-recommended technology stacks based on project description
- PRD Creation: Generate complete PRDs from natural language descriptions
- PRD Refinement: Improve existing PRDs based on user feedback and requirements
- Task Prioritization: Intelligent task ordering and strategic recommendations
- Task Splitting: Custom splitting instructions generation for complex tasks
Prompt Templates Used:
project-init-suggestion: Stack recommendation and configuration guidanceprd-improvement: PRD enhancement and refinementtask-prioritization: Task ordering and strategic planningtask-splitting-assistance: Task breakdown methodology
COMPLETE API DOCUMENTATION
#### assistInitConfig
Generate AI-recommended project configuration including technology stack, AI model selection, and project settings based on a natural language description.
async assistInitConfig(input: {
userDescription: string;
aiOptions?: AIOptions;
streamingOptions?: StreamingOptions;
}): Promise<{
projectName: string;
aiProvider: string;
aiModel: string;
frontend?: string;
backend?: string;
database?: string;
auth?: boolean;
reasoning: string;
}>Parameters:
input.userDescription(string, required): Natural language project description
- Should include project purpose, requirements, and constraints
- Can mention specific technologies if desired
- More detailed descriptions yield better recommendations
input.aiOptions(AIOptions, optional): AI configuration override
- aiProvider (string, optional): Override default AI provider
- aiModel (string, optional): Override default AI model
- aiKey (string, optional): Custom API key for this operation
- aiProviderUrl (string, optional): Custom provider endpoint
input.streamingOptions(StreamingOptions, optional): Real-time response streaming
- onChunk (function, optional): Callback for response chunks
- onFinish (function, optional): Callback when complete
- onError (function, optional): Error handling callback
Returns: Configuration recommendation object containing:
projectName(string): Suggested project nameaiProvider(string): Recommended AI provideraiModel(string): Recommended AI modelfrontend(string, optional): Recommended frontend frameworkbackend(string, optional): Recommended backend frameworkdatabase(string, optional): Recommended database systemauth(boolean, optional): Whether to include authenticationreasoning(string): AI's reasoning for recommendations
Error Conditions:
TaskOMaticErrorwith codeCONFIGURATION_ERROR: Prompt building failures
- Occurs when project-init-suggestion template is not found
- Check prompt registry for available templates
TaskOMaticErrorwith codeAI_OPERATION_FAILED: JSON parsing failures
- AI response did not contain valid JSON
- Try with different model or clearer description
- Returns sensible defaults on AI operation failure:
- projectName: "my-project"
- aiProvider: "openrouter"
- aiModel: "anthropic/claude-3.5-sonnet"
- frontend: "next"
- backend: "hono"
- database: "sqlite"
- auth: true
- reasoning: "Using modern, well-supported defaults"
Technical Details:
- Uses
project-init-suggestionprompt template (user and system variants) - AI response must contain JSON with recommended configuration
- Falls back to modern default stack if AI response unparseable
- Does not throw on AI failure, returns defaults instead
Example: Basic Configuration Assistance
const recommendation = await workflowAIAssistant.assistInitConfig({
userDescription: "A real-time collaboration platform for remote development teams with video calls, code sharing, and project management features. Need to handle high concurrency and support multiple file formats.",
aiOptions: {
aiProvider: "anthropic",
aiModel: "claude-3-5-sonnet"
},
streamingOptions: {
onChunk: (chunk) => process.stdout.write(chunk),
onFinish: () => console.log("\nRecommendation complete!")
}
});
console.log("Recommended stack:");
console.log(`- Project: ${recommendation.projectName}`);
console.log(`- AI Provider: ${recommendation.aiProvider}`);
console.log(`- AI Model: ${recommendation.aiModel}`);
console.log(`- Frontend: ${recommendation.frontend}`);
console.log(`- Backend: ${recommendation.backend}`);
console.log(`- Database: ${recommendation.database}`);
console.log(`- Auth: ${recommendation.auth}`);
console.log(`\nReasoning: ${recommendation.reasoning}`);Example: Minimal Configuration Request
const recommendation = await workflowAIAssistant.assistInitConfig({
userDescription: "Simple blog API with user authentication and CRUD operations"
});
console.log(`AI recommends: ${recommendation.frontend || 'no frontend'} + ${recommendation.backend || 'no backend'}`);
console.log(`Using ${recommendation.aiProvider}/${recommendation.aiModel} for AI operations`);Example: Custom AI Configuration
const recommendation = await workflowAIAssistant.assistInitConfig({
userDescription: "Enterprise-grade analytics dashboard with real-time data visualization and predictive analytics",
aiOptions: {
aiProvider: "openai",
aiModel: "gpt-4o",
aiKey: process.env.OPENAI_API_KEY
}
});
console.log("Using GPT-4o for enterprise recommendations");
console.log(`Recommended database: ${recommendation.database}`);#### assistPRDCreation
Generate a complete Product Requirements Document (PRD) from a natural language project description using AI.
async assistPRDCreation(input: {
userDescription: string;
aiOptions?: AIOptions;
streamingOptions?: StreamingOptions;
}): Promise<string>Parameters:
input.userDescription(string, required): Project description for PRD generation
- Should include goals, features, target users, and constraints
- More detailed descriptions produce more comprehensive PRDs
- Can include technical requirements or constraints
input.aiOptions(AIOptions, optional): AI configuration override
- Same structure as other methods
input.streamingOptions(StreamingOptions, optional): Real-time streaming
- Same structure as other methods
Returns: Generated PRD content as string
- Complete markdown-formatted PRD
- Includes sections: Overview, Features, Technical Requirements, etc.
- Ready to save to file or use in workflow
Error Conditions:
TaskOMaticErrorwith various codes: AI operation failures
- Network errors during API communication
- Invalid AI configuration
- API key issues
- Returns empty string if generation fails completely
- Check for empty return value before using result
Technical Details:
- Uses
getAIOperations().generatePRD()method directly - Does not use prompt templates
- Leverages AI service's built-in PRD generation logic
- Supports streaming for large PRDs
Example: PRD Generation Assistance
const prdContent = await workflowAIAssistant.assistPRDCreation({
userDescription: "Mobile fitness tracking app with social features, workout plans, progress tracking, nutrition logging, and integration with wearable devices. Target audience includes fitness enthusiasts and casual users.",
aiOptions: {
aiProvider: "anthropic",
aiModel: "claude-3-5-sonnet"
},
streamingOptions: {
onChunk: (chunk) => process.stdout.write(chunk),
onFinish: () => console.log("\nPRD generation complete!")
}
});
console.log(`Generated PRD with ${prdContent.length} characters`);
if (prdContent.length > 0) {
await fs.writeFile("./generated-prd.md", prdContent);
console.log("PRD saved to generated-prd.md");
} else {
console.error("PRD generation failed - empty result");
}Example: Quick PRD Generation
const simplePRD = await workflowAIAssistant.assistPRDCreation({
userDescription: "Todo list application with categories, due dates, priorities, and reminders"
});
if (simplePRD) {
console.log("Quick PRD generated:", simplePRD.substring(0, 100) + "...");
console.log(`Total length: ${simplePRD.length} characters`);
} else {
console.error("Failed to generate PRD");
}#### assistPRDRefinement
Improve an existing PRD based on user feedback, adding missing details, clarifying ambiguities, and enhancing quality.
async assistPRDRefinement(input: {
currentPRD: string;
userFeedback: string;
aiOptions?: AIOptions;
streamingOptions?: StreamingOptions;
}): Promise<string>Parameters:
input.currentPRD(string, required): Current PRD content to refine
- Full markdown-formatted PRD content
- Should include all existing sections
- AI will analyze and improve based on this
input.userFeedback(string, required): User feedback for improvements
- Specific areas to improve
- Missing sections or details to add
- Quality concerns or gaps
- Can be multiple requests separated by newlines
input.aiOptions(AIOptions, optional): AI configuration overrideinput.streamingOptions(StreamingOptions, optional): Real-time streaming
Returns: Refined PRD content as string
- Improved and expanded PRD
- Maintains existing structure while adding enhancements
- Incorporates all feedback points
Error Conditions:
TaskOMaticErrorwith codeCONFIGURATION_ERROR: Prompt building failures
- prd-improvement template not found in registry
TaskOMaticErrorwith various codes: AI operation failures
- Network errors or API issues
- Invalid configuration
- Returns original PRD if refinement fails
- Always check if result differs from input
Technical Details:
- Uses
prd-improvementprompt template (user and system variants) - Template variables:
CURRENT_PRD,USER_FEEDBACK - AI analyzes existing PRD and applies improvements
- Falls back to original PRD on error
Example: PRD Refinement Assistance
const refinedPRD = await workflowAIAssistant.assistPRDRefinement({
currentPRD: existingPRDContent,
userFeedback: `Add more technical specifications including:
1. API endpoints and data models
2. Security requirements and authentication flow
3. Performance benchmarks and scalability targets
4. Deployment architecture and infrastructure requirements`,
aiOptions: {
aiProvider: "anthropic",
aiModel: "claude-3-5-sonnet"
},
streamingOptions: {
onChunk: (chunk) => process.stdout.write(chunk),
onFinish: () => console.log("\nRefinement complete!")
}
});
if (refinedPRD !== existingPRDContent) {
console.log(`Refined PRD length: ${refinedPRD.length} characters`);
console.log(`Improvement: ${refinedPRD.length - existingPRDContent.length} characters added`);
await fs.writeFile("./refined-prd.md", refinedPRD);
} else {
console.warn("PRD was not refined (may indicate error)");
}Example: Targeted Refinement
const specificRefinement = await workflowAIAssistant.assistPRDRefinement({
currentPRD: basicPRD,
userFeedback: "Focus on mobile responsiveness, offline capabilities using PWA, and accessibility features following WCAG 2.1 AA guidelines"
});
console.log("PRD refined for mobile-first approach");
console.log(`New length: ${specificRefinement.length} characters`);Example: Multiple Iteration Refinement
let currentPRD = await fs.readFile("./draft-prd.md", "utf-8");
const improvements = [
"Add security requirements section",
"Include performance metrics and SLA targets",
"Add testing and QA requirements",
"Include deployment and monitoring specifications"
];
for (const improvement of improvements) {
console.log(`\nApplying: ${improvement}`);
currentPRD = await workflowAIAssistant.assistPRDRefinement({
currentPRD: currentPRD,
userFeedback: improvement,
aiOptions: { aiProvider: "anthropic", aiModel: "claude-3-5-sonnet" },
streamingOptions: {
onChunk: (chunk) => process.stdout.write('.')
}
});
console.log(" Done");
}
await fs.writeFile("./final-prd.md", currentPRD);
console.log("\nFinal PRD ready!");#### assistTaskPrioritization
Analyze and prioritize tasks based on user guidance, providing strategic ordering and recommendations for execution.
async assistTaskPrioritization(input: {
tasks: Array<{ id: string; title: string; description?: string }>;
userGuidance: string;
aiOptions?: AIOptions;
streamingOptions?: StreamingOptions;
}): Promise<{
prioritizedTasks: Array<{
id: string;
priority: number;
reasoning: string;
}>;
recommendations: string;
}>Parameters:
input.tasks(array, required): Array of tasks to prioritize
- id (string, required): Task identifier
- title (string, required): Task title/name
- description (string, optional): Task description for context
input.userGuidance(string, required): User's prioritization criteria
- Strategic goals (e.g., "user impact first", "dependencies first")
- Risk considerations
- Resource constraints
- Timeline requirements
input.aiOptions(AIOptions, optional): AI configuration overrideinput.streamingOptions(StreamingOptions, optional): Real-time streaming
Returns: Prioritization result containing:
prioritizedTasks(array): Tasks with priority assignments
- id (string): Task ID from input
- priority (number): Priority ranking (1 = highest priority)
- reasoning (string): AI's reasoning for this priority assignment
recommendations(string): Overall prioritization recommendations
- Strategic guidance
- Risk warnings
- Execution suggestions
Error Conditions:
TaskOMaticErrorwith codeCONFIGURATION_ERROR: Prompt building failures
- task-prioritization template not found
TaskOMaticErrorwith codeAI_OPERATION_FAILED: JSON parsing failures
- AI response did not contain valid JSON
- Falls back to original order if AI response parsing fails
- All tasks get priorities in order (1, 2, 3, ...)
- reasoning: "Default ordering"
- recommendations: "Review and adjust priorities as needed"
Technical Details:
- Uses
task-prioritizationprompt template (user and system variants) - Template variables:
TASKS_DESCRIPTION,USER_GUIDANCE - Creates numbered list of tasks for AI to analyze
- Returns prioritized list with reasoning
Example: Task Prioritization Assistance
const tasks = [
{ id: "1", title: "Implement user authentication", description: "OAuth2 integration with JWT tokens and refresh logic" },
{ id: "2", title: "Design database schema", description: "User data, posts, relationships, and indexing strategy" },
{ id: "3", title: "Create responsive UI", description: "Mobile-first design with CSS Grid and responsive images" },
{ id: "4", title: "Setup CI/CD pipeline", description: "GitHub Actions with automated testing, linting, and deployment" },
{ id: "5", title: "Implement search functionality", description: "Full-text search with Elasticsearch integration" }
];
const prioritization = await workflowAIAssistant.assistTaskPrioritization({
tasks: tasks,
userGuidance: "Prioritize based on dependencies and user-facing impact. Authentication should be first, then core functionality. Infrastructure can be parallelized. Consider technical complexity and risk.",
aiOptions: {
aiProvider: "anthropic",
aiModel: "claude-3-5-sonnet"
},
streamingOptions: {
onChunk: (chunk) => process.stdout.write(chunk)
}
});
console.log("Prioritized tasks:");
prioritization.prioritizedTasks
.sort((a, b) => a.priority - b.priority)
.forEach(task => {
const taskDetails = tasks.find(t => t.id === task.id);
console.log(`${task.priority}. [${task.id}] ${taskDetails?.title}`);
console.log(` Reasoning: ${task.reasoning}`);
});
console.log(`\nStrategic Recommendations:\n${prioritization.recommendations}`);Example: Effort-Based Prioritization
const effortPrioritization = await workflowAIAssistant.assistTaskPrioritization({
tasks: developmentTasks,
userGuidance: "Prioritize high-effort, high-impact tasks first. Consider dependencies and technical risk. Frontend and backend should progress in parallel where possible."
});
// Sort by priority for execution order
const sortedTasks = effortPrioritization.prioritizedTasks
.sort((a, b) => a.priority - b.priority)
.map(pt => developmentTasks.find(t => t.id === pt.id));
console.log("Execution order:", sortedTasks.map(t => t?.title).join(" -> "));
// Apply priorities to actual tasks
for (const prioritized of effortPrioritization.prioritizedTasks) {
await taskService.updateTask(prioritized.id, {
metadata: { priority: prioritized.priority }
});
}Example: Risk-Based Prioritization
const riskPrioritization = await workflowAIAssistant.assistTaskPrioritization({
tasks: criticalPathTasks,
userGuidance: "Prioritize by risk - address the riskiest technical challenges first. Consider areas where we have the least experience or most uncertainty. These tasks should get our best developers."
});
console.log("Risk-based execution plan:");
riskPrioritization.prioritizedTasks
.sort((a, b) => a.priority - b.priority)
.slice(0, 5)
.forEach(pt => {
const task = criticalPathTasks.find(t => t.id === pt.id);
console.log(`${pt.priority}. ${task?.title} - HIGH RISK: ${pt.reasoning}`);
});#### assistTaskSplitting
Generate custom instructions for splitting a complex task into smaller, manageable subtasks based on user guidance.
async assistTaskSplitting(input: {
taskTitle: string;
taskContent?: string;
userGuidance: string;
aiOptions?: AIOptions;
streamingOptions?: StreamingOptions;
}): Promise<string>Parameters:
input.taskTitle(string, required): Title of task to split
- Should clearly indicate what the task accomplishes
input.taskContent(string, optional): Task description/content
- Provides additional context for better splitting
- If not provided, AI splits based on title only
input.userGuidance(string, required): User's splitting instructions
- Splitting criteria (by feature, by layer, by component, etc.)
- Size constraints for subtasks
- Specific areas to focus on
- Dependencies or constraints
input.aiOptions(AIOptions, optional): AI configuration overrideinput.streamingOptions(StreamingOptions, optional): Real-time streaming
Returns: Generated splitting instructions as string
- Detailed breakdown approach
- Specific subtask suggestions
- Dependencies and ordering
- Ready to use with
taskService.splitTask
Error Conditions:
TaskOMaticErrorwith codeCONFIGURATION_ERROR: Prompt building failures
- task-splitting-assistance template not found
TaskOMaticErrorwith various codes: AI operation failures
- Network errors or API issues
- Returns empty string if generation fails
- Check return value before using
Technical Details:
- Uses
task-splitting-assistanceprompt template (user and system variants) - Template variables:
TASK_TITLE,TASK_CONTENT,USER_GUIDANCE TASK_CONTENTis set to "Description: {content}" if provided, else ""- Returns natural language instructions for splitting
Example: Task Splitting Assistance
const splittingInstructions = await workflowAIAssistant.assistTaskSplitting({
taskTitle: "Implement e-commerce platform",
taskContent: "Build a full-stack e-commerce solution with payment processing via Stripe, inventory management with Redis cache, user accounts with JWT authentication, product catalog with search, order management, and admin dashboard.",
userGuidance: "Split into frontend, backend, and database components. Include testing and deployment tasks. Focus on API development first, then frontend integration. Each subtask should be completable in 1-2 days.",
aiOptions: {
aiProvider: "anthropic",
aiModel: "claude-3-5-sonnet"
},
streamingOptions: {
onChunk: (chunk) => process.stdout.write(chunk),
onFinish: () => console.log("\nSplitting instructions generated!")
}
});
console.log("AI-generated splitting instructions:");
console.log(splittingInstructions);
// Use instructions with taskService.splitTask
if (splittingInstructions) {
const splitResult = await taskService.splitTask(
"task-id",
undefined,
splittingInstructions
);
console.log(`Split into ${splitResult.subtasks.length} subtasks`);
}Example: Feature-Based Splitting
const featureSplitting = await workflowAIAssistant.assistTaskSplitting({
taskTitle: "Add social features",
userGuidance: "Split into user profiles, social connections (follow/friend), activity feeds, notifications, and messaging. Include both frontend and backend tasks for each feature. Database schema changes should be separate."
});
console.log("Feature-based splitting instructions:");
console.log(featureSplitting);
console.log(`Instructions length: ${featureSplitting.length} characters`);Example: Technical Component Splitting
const technicalSplitting = await workflowAIAssistant.assistTaskSplitting({
taskTitle: "Build authentication system",
taskContent: "Implement secure user authentication supporting email/password, OAuth (Google, GitHub), and magic links. Include password reset, email verification, and session management.",
userGuidance: "Split by technical components: UI/UX pages, API endpoints, database models and migrations, security middleware, email service integration, and unit tests. Each component should be independently testable."
});
console.log("Technical component splitting instructions ready");
console.log(technicalSplitting);INTEGRATION PROTOCOLS
Prompt Building Integration:
The assistant uses PromptBuilder for consistent prompt generation. All assistant methods follow this pattern:
// Example prompt template usage
const promptResult = PromptBuilder.buildPrompt({
name: "project-init-suggestion",
type: "user",
variables: {
USER_DESCRIPTION: input.userDescription
}
});
if (!promptResult.success) {
throw createStandardError(
TaskOMaticErrorCodes.CONFIGURATION_ERROR,
`Failed to build prompt: ${promptResult.error}`
);
}
const systemPromptResult = PromptBuilder.buildPrompt({
name: "project-init-suggestion",
type: "system",
variables: {}
});Available Prompt Templates:
// From PromptRegistry
const templates = [
"project-init-suggestion", // Stack recommendations
"project-init-suggestion-system",
"prd-improvement", // PRD refinement
"prd-improvement-system",
"task-prioritization", // Task ordering
"task-prioritization-system",
"task-splitting-assistance", // Task breakdown
"task-splitting-assistance-system"
];AI Configuration Integration:
All methods support flexible AI configuration through AIOptions:
interface AIOptions {
aiProvider?: string; // Provider selection (anthropic, openai, openrouter, etc.)
aiModel?: string; // Model selection
aiKey?: string; // API key override
aiProviderUrl?: string; // Custom endpoint URL
}Streaming Integration:
Real-time feedback through standardized streaming options:
interface StreamingOptions {
onChunk?: (chunk: string) => void; // Real-time response chunks
onFinish?: (result: any) => void; // Completion callback
onError?: (error: Error) => void; // Error handling callback
}Error Handling Strategy:
All methods follow consistent error handling patterns:
- Prompt Building Errors: Throw
TaskOMaticErrorwithCONFIGURATION_ERROR
- Template not found in registry
- Required variables missing
- Template compilation errors
- AI Operation Errors: Handle gracefully with fallbacks
- Network errors: retry or return defaults
- JSON parsing errors: return sensible defaults
- API errors: return original input or empty result
- User Errors: Provide helpful error messages with suggestions
- Invalid input: describe what's expected
- Configuration issues: suggest fixes
- Model selection: recommend alternatives
Response Parsing:
AI responses are parsed with robust error handling:
// JSON parsing with fallback
try {
const jsonMatch = result.match(/\{[\s\S]*\}/);
if (!jsonMatch) {
throw createStandardError(
TaskOMaticErrorCodes.AI_OPERATION_FAILED,
"No JSON found in AI response",
{
context: "The AI did not return a valid JSON object.",
suggestions: [
"Try a different model or provider.",
"Check the prompt for clarity.",
"Simplify the request."
]
}
);
}
return JSON.parse(jsonMatch[0]);
} catch (error) {
// Return sensible defaults
return defaultConfiguration;
}SURVIVAL SCENARIOS
Scenario 1: Complete Project Setup Assistance
// Step 1: Get AI recommendations for project setup
const configRecommendation = await workflowAIAssistant.assistInitConfig({
userDescription: "AI-powered code review platform for development teams with real-time collaboration, automated analysis, and team management features. Needs to support Git integration, code diff visualization, and commenting system.",
aiOptions: { aiProvider: "anthropic", aiModel: "claude-3-5-sonnet" },
streamingOptions: {
onChunk: (chunk) => process.stdout.write('.'),
onFinish: () => console.log("\n✓ Config recommendations received")
}
});
console.log("\nAI Recommended Stack:");
console.log(`- Project: ${configRecommendation.projectName}`);
console.log(`- Frontend: ${configRecommendation.frontend}`);
console.log(`- Backend: ${configRecommendation.backend}`);
console.log(`- Database: ${configRecommendation.database}`);
console.log(`- AI: ${configRecommendation.aiProvider}/${configRecommendation.aiModel}`);
// Step 2: Generate initial PRD
console.log("\nGenerating PRD...");
const prdContent = await workflowAIAssistant.assistPRDCreation({
userDescription: "AI-powered code review platform with real-time collaboration, automated analysis, and team management features",
aiOptions: { aiProvider: "anthropic", aiModel: "claude-3-5-sonnet" },
streamingOptions: {
onChunk: (chunk) => process.stdout.write('.'),
onFinish: () => console.log("\n✓ PRD generated")
}
});
// Step 3: Refine PRD based on feedback
console.log("\nRefining PRD with technical details...");
const refinedPRD = await workflowAIAssistant.assistPRDRefinement({
currentPRD: prdContent,
userFeedback: "Add more technical details about code analysis algorithms, integration with Git providers (GitHub, GitLab, Bitbucket), performance requirements for large repositories (>100k files), and security considerations for accessing private repositories.",
aiOptions: { aiProvider: "anthropic", aiModel: "claude-3-5-sonnet" },
streamingOptions: {
onChunk: (chunk) => process.stdout.write('.'),
onFinish: () => console.log("\n✓ PRD refined")
}
});
console.log(`\nComplete project setup assistance completed`);
console.log(`Final PRD length: ${refinedPRD.length} characters`);Scenario 2: Task Management Strategy
// Get all todo tasks
const tasks = await taskService.listTasks({ status: "todo" });
const taskDetails = tasks.map(task => ({
id: task.id,
title: task.title,
description: task.description
}));
// Get prioritized task order
console.log("Analyzing task priorities...");
const prioritization = await workflowAIAssistant.assistTaskPrioritization({
tasks: taskDetails,
userGuidance: "Prioritize based on user impact, dependencies, and effort. Critical path tasks first. Consider technical risk and team expertise. Balance quick wins with important foundation work.",
aiOptions: { aiProvider: "anthropic", aiModel: "claude-3-5-sonnet" },
streamingOptions: {
onChunk: (chunk) => process.stdout.write('.'),
onFinish: () => console.log("\n✓ Prioritization complete")
}
});
console.log("\n=== EXECUTION PLAN ===");
console.log(prioritization.recommendations);
console.log("\nTask Order:");
// Sort tasks by priority and create execution plan
const executionPlan = prioritization.prioritizedTasks
.sort((a, b) => a.priority - b.priority);
for (const prioritizedTask of executionPlan) {
const task = tasks.find(t => t.id === prioritizedTask.id);
if (task) {
console.log(`\n${prioritizedTask.priority}. ${task.title}`);
console.log(` Reason: ${prioritizedTask.reasoning}`);
// Get splitting instructions for complex tasks
if (task.estimatedEffort === "large") {
console.log(" Generating subtask breakdown...");
const splittingInstructions = await workflowAIAssistant.assistTaskSplitting({
taskTitle: task.title,
taskContent: task.description,
userGuidance: "Split into 2-4 subtasks, each completable in 1-2 days. Include testing and documentation.",
aiOptions: { aiProvider: "anthropic", aiModel: "claude-3-5-sonnet" }
});
// Apply splitting
await taskService.splitTask(task.id, undefined, splittingInstructions);
console.log(` ✓ Split into subtasks`);
}
// Update task with priority
await taskService.updateTask(task.id, {
metadata: { priority: prioritizedTask.priority }
});
}
}
console.log("\n✓ Task execution plan ready");Scenario 3: Iterative PRD Improvement
let currentPRD = await fs.readFile("./draft-prd.md", "utf-8");
const feedbackRounds = [
"Add security requirements section including authentication, authorization, and data protection",
"Include performance benchmarks: page load <2s, API response <200ms, support 10k concurrent users",
"Detail user experience and accessibility requirements following WCAG 2.1 AA",
"Add integration requirements with existing systems (CRM, analytics, payment gateway)",
"Include testing strategy covering unit, integration, E2E, and performance testing"
];
console.log(`Starting with PRD of ${currentPRD.length} characters`);
console.log(`Applying ${feedbackRounds.length} rounds of improvements...\n`);
for (let i = 0; i < feedbackRounds.length; i++) {
console.log(`Round ${i + 1}/${feedbackRounds.length}: ${feedbackRounds[i]}`);
currentPRD = await workflowAIAssistant.assistPRDRefinement({
currentPRD: currentPRD,
userFeedback: feedbackRounds[i],
aiOptions: { aiProvider: "anthropic", aiModel: "claude-3-5-sonnet" },
streamingOptions: {
onChunk: (chunk) => process.stdout.write('.'),
onFinish: () => console.log(` Done (${currentPRD.length} chars)`)
}
});
// Save intermediate version
await fs.writeFile(`./prd-refined-v${i + 1}.md`, currentPRD);
}
console.log(`\n✓ Final refined PRD ready: ${currentPRD.length} characters`);
console.log(`Final PRD saved to prd-refined-v${feedbackRounds.length}.md`);TECHNICAL SPECIFICATIONS
Prompt Template System:
The assistant uses structured prompt templates for consistency:
// Template structure from PromptRegistry
{
name: "project-init-suggestion",
description: "Suggest project initialization configuration",
type: "user",
requiredVariables: ["USER_DESCRIPTION"],
optionalVariables: [],
promptText: PROJECT_INIT_SUGGESTION_PROMPT
}Available templates:
project-init-suggestion: For stack recommendationsprd-improvement: For PRD refinementtask-prioritization: For task orderingtask-splitting-assistance: For task breakdown
Each template has both user and system variants.
AI Response Parsing:
All AI responses are parsed with robust error handling:
// JSON extraction with regex
const jsonMatch = result.match(/\{[\s\S]*\}/);
if (!jsonMatch) {
throw createStandardError(
TaskOMaticErrorCodes.AI_OPERATION_FAILED,
"No JSON found in AI response"
);
}
return JSON.parse(jsonMatch[0]);Fallback Strategies:
When AI operations fail, the assistant provides sensible defaults:
| Method | Fallback Behavior |
|--------|------------------|
| assistInitConfig | Modern default stack (Next.js + Hono + SQLite) |
| assistPRDCreation | Returns empty string |
| assistPRDRefinement | Returns original PRD |
| assistTaskPrioritization | Returns tasks in original order |
| assistTaskSplitting | Returns empty string |
Error Recovery:
- Multiple parsing attempts for malformed AI responses
- Graceful degradation of functionality
- Detailed error logging for debugging
- User-friendly error messages with actionable suggestions
Performance Considerations:
- Streaming responses for real-time feedback on long operations
- Efficient prompt building with template caching
- Minimal memory footprint for large PRDs
- Single concurrent operation per instance (not thread-safe)
Integration Points:
// WorkflowService integration
import { workflowAIAssistant } from '@task-o-matic/core';
// TaskService integration
import { taskService } from '@task-o-matic/core';
// PRDService integration
import { prdService } from '@task-o-matic/core';
// Combined workflow
const config = await workflowAIAssistant.assistInitConfig({...});
const prd = await workflowAIAssistant.assistPRDCreation({...});
const tasks = await prdService.parsePRD(prd, {...});
const prioritized = await workflowAIAssistant.assistTaskPrioritization({
tasks: tasks.map(t => ({ id: t.id, title: t.title })),
userGuidance: "Critical path first"
});Remember: Citizen, WorkflowAIAssistant is your strategic advisor in the wasteland of project decisions. Use its recommendations to navigate the complex terrain of technology choices, but always apply your own judgment. The AI provides guidance based on patterns and best practices, but you make the final decisions based on your specific context, constraints, and requirements. Trust but verify, adapt but don't blindly follow. Your survival depends on good decisions augmented by AI wisdom.