diff --git a/server/agent/manager.go b/server/agent/manager.go
index 3d8277f..ab625bf 100644
--- a/server/agent/manager.go
+++ b/server/agent/manager.go
@@ -261,16 +261,16 @@
 		return fmt.Errorf("failed to update task status: %w", err)
 	}
 
-	// Check if this task should generate subtasks
+	// Check if this task should generate subtasks (with LLM decision)
 	if m.shouldGenerateSubtasks(task) {
-		log.Printf("Analyzing task %s for subtask generation", task.ID)
+		log.Printf("LLM determined task %s should generate subtasks", task.ID)
 		if err := m.generateSubtasksForTask(ctx, task); err != nil {
 			log.Printf("Warning: Failed to generate subtasks for task %s: %v", task.ID, err)
 			// Continue with normal processing if subtask generation fails
 		} else {
 			// Task has been converted to subtask management, mark as completed
 			task.Status = tm.StatusCompleted
-			task.Solution = "Task broken down into subtasks. See subtasks PR for details."
+			task.Solution = "Task analyzed by LLM and broken down into subtasks with potential new agent creation. See subtasks PR for details."
 			completedAt := time.Now()
 			task.CompletedAt = &completedAt
 			agent.CurrentTask = nil
@@ -279,7 +279,7 @@
 				return fmt.Errorf("failed to update task with subtasks: %w", err)
 			}
 
-			log.Printf("Task %s converted to subtasks by agent %s", task.ID, agent.Name)
+			log.Printf("Task %s converted to subtasks by agent %s using LLM analysis", task.ID, agent.Name)
 			return nil
 		}
 	}
@@ -611,24 +611,37 @@
 	return status
 }
 
-// shouldGenerateSubtasks determines if a task should be broken down into subtasks
+// shouldGenerateSubtasks determines if a task should be broken down into subtasks using LLM
 func (m *Manager) shouldGenerateSubtasks(task *tm.Task) bool {
 	// Don't generate subtasks for subtasks
 	if task.ParentTaskID != "" {
 		return false
 	}
 
-	// Don't generate if already generated
-	if task.SubtasksGenerated {
+	// Don't generate if already evaluated
+	if task.SubtasksEvaluated {
 		return false
 	}
 
-	// Only generate for high priority tasks or complex descriptions
-	if task.Priority == tm.PriorityHigh || len(task.Description) > 200 {
-		return true
+	// Ask LLM to decide
+	ctx := context.Background()
+	decision, err := m.subtaskService.ShouldGenerateSubtasks(ctx, task)
+	if err != nil {
+		log.Printf("Warning: Failed to get LLM subtask decision for task %s: %v", task.ID, err)
+		// Fallback to simple heuristics
+		return task.Priority == tm.PriorityHigh || len(task.Description) > 200
 	}
 
-	return false
+	// Update task to mark as evaluated
+	task.SubtasksEvaluated = true
+	if err := m.taskManager.UpdateTask(task); err != nil {
+		log.Printf("Warning: Failed to update task evaluation status: %v", err)
+	}
+
+	log.Printf("LLM subtask decision for task %s: needs_subtasks=%v, complexity=%d, reasoning=%s", 
+		task.ID, decision.NeedsSubtasks, decision.ComplexityScore, decision.Reasoning)
+
+	return decision.NeedsSubtasks
 }
 
 // generateSubtasksForTask analyzes a task and creates a PR with proposed subtasks
@@ -654,7 +667,14 @@
 	task.SubtasksGenerated = true
 
 	log.Printf("Generated subtask PR for task %s: %s", task.ID, prURL)
-	log.Printf("Proposed %d subtasks for task %s", len(analysis.Subtasks), task.ID)
+	log.Printf("Proposed %d subtasks and %d new agents for task %s", len(analysis.Subtasks), len(analysis.AgentCreations), task.ID)
+	
+	// Log proposed new agents if any
+	if len(analysis.AgentCreations) > 0 {
+		for _, agent := range analysis.AgentCreations {
+			log.Printf("Proposed new agent: %s with skills: %v", agent.Role, agent.Skills)
+		}
+	}
 
 	return nil
 }
