diff --git a/server/subtasks/service.go b/server/subtasks/service.go
index d704a33..d921006 100644
--- a/server/subtasks/service.go
+++ b/server/subtasks/service.go
@@ -14,18 +14,20 @@
 	"github.com/iomodo/staff/git"
 	"github.com/iomodo/staff/llm"
 	"github.com/iomodo/staff/tm"
+	"golang.org/x/text/cases"
+	"golang.org/x/text/language"
 )
 
 // SubtaskService handles subtask generation and management
 type SubtaskService struct {
-	llmProvider    llm.LLMProvider
-	taskManager    tm.TaskManager
-	agentRoles     []string // Available agent roles for assignment
-	prProvider     git.PullRequestProvider // GitHub PR provider
-	githubOwner    string
-	githubRepo     string
-	cloneManager   *git.CloneManager
-	logger         *slog.Logger
+	llmProvider  llm.LLMProvider
+	taskManager  tm.TaskManager
+	agentRoles   []string                // Available agent roles for assignment
+	prProvider   git.PullRequestProvider // GitHub PR provider
+	githubOwner  string
+	githubRepo   string
+	cloneManager *git.CloneManager
+	logger       *slog.Logger
 }
 
 // NewSubtaskService creates a new subtask service
@@ -48,7 +50,7 @@
 // ShouldGenerateSubtasks asks LLM whether a task needs subtasks based on existing agents
 func (s *SubtaskService) ShouldGenerateSubtasks(ctx context.Context, task *tm.Task) (*tm.SubtaskDecision, error) {
 	prompt := s.buildSubtaskDecisionPrompt(task)
-	
+
 	req := llm.ChatCompletionRequest{
 		Model: "gpt-4",
 		Messages: []llm.Message{
@@ -86,7 +88,7 @@
 // AnalyzeTaskForSubtasks uses LLM to analyze a task and propose subtasks
 func (s *SubtaskService) AnalyzeTaskForSubtasks(ctx context.Context, task *tm.Task) (*tm.SubtaskAnalysis, error) {
 	prompt := s.buildSubtaskAnalysisPrompt(task)
-	
+
 	req := llm.ChatCompletionRequest{
 		Model: "gpt-4",
 		Messages: []llm.Message{
@@ -124,7 +126,7 @@
 // getSubtaskDecisionSystemPrompt returns the system prompt for subtask decision
 func (s *SubtaskService) getSubtaskDecisionSystemPrompt() string {
 	availableRoles := strings.Join(s.agentRoles, ", ")
-	
+
 	return fmt.Sprintf(`You are an expert project manager and task analyst. Your job is to determine whether a task needs to be broken down into subtasks.
 
 Currently available team roles and their capabilities: %s
@@ -154,7 +156,7 @@
 // getSubtaskAnalysisSystemPrompt returns the system prompt for subtask analysis
 func (s *SubtaskService) getSubtaskAnalysisSystemPrompt() string {
 	availableRoles := strings.Join(s.agentRoles, ", ")
-	
+
 	return fmt.Sprintf(`You are an expert project manager and technical architect. Your job is to analyze complex tasks and break them down into well-defined subtasks that can be assigned to specialized team members.
 
 Currently available team roles: %s
@@ -218,10 +220,10 @@
 - Is the scope too large for one person?
 - Are there logical components that could be parallelized?
 
-Provide your decision in the JSON format specified in the system prompt.`, 
-		task.Title, 
-		task.Description, 
-		task.Priority, 
+Provide your decision in the JSON format specified in the system prompt.`,
+		task.Title,
+		task.Description,
+		task.Priority,
 		task.Status)
 }
 
@@ -244,10 +246,10 @@
 - Risk factors and potential blockers
 - Estimated effort for each component
 
-Provide the analysis in the JSON format specified in the system prompt.`, 
-		task.Title, 
-		task.Description, 
-		task.Priority, 
+Provide the analysis in the JSON format specified in the system prompt.`,
+		task.Title,
+		task.Description,
+		task.Priority,
 		task.Status)
 }
 
@@ -256,18 +258,18 @@
 	// Try to extract JSON from the response
 	jsonStart := strings.Index(response, "{")
 	jsonEnd := strings.LastIndex(response, "}")
-	
+
 	if jsonStart == -1 || jsonEnd == -1 {
 		return nil, fmt.Errorf("no JSON found in LLM response")
 	}
-	
+
 	jsonStr := response[jsonStart : jsonEnd+1]
-	
+
 	var decision tm.SubtaskDecision
 	if err := json.Unmarshal([]byte(jsonStr), &decision); err != nil {
 		return nil, fmt.Errorf("failed to unmarshal JSON: %w", err)
 	}
-	
+
 	return &decision, nil
 }
 
@@ -276,16 +278,16 @@
 	// Try to extract JSON from the response (LLM might wrap it in markdown)
 	jsonStart := strings.Index(response, "{")
 	jsonEnd := strings.LastIndex(response, "}")
-	
+
 	if jsonStart == -1 || jsonEnd == -1 {
 		return nil, fmt.Errorf("no JSON found in LLM response")
 	}
-	
+
 	jsonStr := response[jsonStart : jsonEnd+1]
-	
+
 	var rawAnalysis struct {
-		AnalysisSummary     string `json:"analysis_summary"`
-		Subtasks            []struct {
+		AnalysisSummary string `json:"analysis_summary"`
+		Subtasks        []struct {
 			Title          string   `json:"title"`
 			Description    string   `json:"description"`
 			Priority       string   `json:"priority"`
@@ -295,15 +297,15 @@
 			RequiredSkills []string `json:"required_skills"`
 		} `json:"subtasks"`
 		AgentCreations      []tm.AgentCreationProposal `json:"agent_creations"`
-		RecommendedApproach   string `json:"recommended_approach"`
-		EstimatedTotalHours   int    `json:"estimated_total_hours"`
-		RiskAssessment        string `json:"risk_assessment"`
+		RecommendedApproach string                     `json:"recommended_approach"`
+		EstimatedTotalHours int                        `json:"estimated_total_hours"`
+		RiskAssessment      string                     `json:"risk_assessment"`
 	}
-	
+
 	if err := json.Unmarshal([]byte(jsonStr), &rawAnalysis); err != nil {
 		return nil, fmt.Errorf("failed to unmarshal JSON: %w", err)
 	}
-	
+
 	// Convert to our types
 	analysis := &tm.SubtaskAnalysis{
 		ParentTaskID:        parentTaskID,
@@ -313,7 +315,7 @@
 		EstimatedTotalHours: rawAnalysis.EstimatedTotalHours,
 		RiskAssessment:      rawAnalysis.RiskAssessment,
 	}
-	
+
 	// Convert subtasks
 	for _, st := range rawAnalysis.Subtasks {
 		priority := tm.PriorityMedium // default
@@ -323,7 +325,7 @@
 		case "low":
 			priority = tm.PriorityLow
 		}
-		
+
 		subtask := tm.SubtaskProposal{
 			Title:          st.Title,
 			Description:    st.Description,
@@ -333,15 +335,15 @@
 			Dependencies:   st.Dependencies,
 			RequiredSkills: st.RequiredSkills,
 		}
-		
+
 		analysis.Subtasks = append(analysis.Subtasks, subtask)
 	}
-	
+
 	// Validate agent assignments and handle new agent creation
 	if err := s.validateAndHandleAgentAssignments(analysis); err != nil {
 		s.logger.Warn("Warning during agent assignment handling", slog.String("error", err.Error()))
 	}
-	
+
 	return analysis, nil
 }
 
@@ -352,25 +354,25 @@
 	for _, role := range s.agentRoles {
 		availableRoles[role] = true
 	}
-	
+
 	// Add proposed new agent roles
 	for _, agentCreation := range analysis.AgentCreations {
 		availableRoles[agentCreation.Role] = true
-		
+
 		// Create a subtask for agent creation
 		agentCreationSubtask := tm.SubtaskProposal{
-			Title:          fmt.Sprintf("Create %s Agent", strings.Title(agentCreation.Role)),
+			Title:          fmt.Sprintf("Create %s Agent", cases.Title(language.English).String(agentCreation.Role)),
 			Description:    fmt.Sprintf("Create and configure a new %s agent with skills: %s. %s", agentCreation.Role, strings.Join(agentCreation.Skills, ", "), agentCreation.Justification),
 			Priority:       tm.PriorityHigh, // Agent creation is high priority
-			AssignedTo:     "ceo", // CEO creates new agents
-			EstimatedHours: 4,     // Estimated time to set up new agent
-			Dependencies:   []string{}, // No dependencies for agent creation
+			AssignedTo:     "ceo",           // CEO creates new agents
+			EstimatedHours: 4,               // Estimated time to set up new agent
+			Dependencies:   []string{},      // No dependencies for agent creation
 			RequiredSkills: []string{"agent_configuration", "system_design"},
 		}
-		
+
 		// Insert at the beginning so agent creation happens first
 		analysis.Subtasks = append([]tm.SubtaskProposal{agentCreationSubtask}, analysis.Subtasks...)
-		
+
 		// Update dependencies to account for the new subtask at index 0
 		for i := 1; i < len(analysis.Subtasks); i++ {
 			for j, dep := range analysis.Subtasks[i].Dependencies {
@@ -381,23 +383,23 @@
 			}
 		}
 	}
-	
+
 	// Now validate all assignments against available roles
 	defaultRole := "ceo" // fallback role
 	if len(s.agentRoles) > 0 {
 		defaultRole = s.agentRoles[0]
 	}
-	
+
 	for i := range analysis.Subtasks {
 		if !availableRoles[analysis.Subtasks[i].AssignedTo] {
-			s.logger.Warn("Unknown agent role for subtask, using default", 
+			s.logger.Warn("Unknown agent role for subtask, using default",
 				slog.String("unknown_role", analysis.Subtasks[i].AssignedTo),
 				slog.String("subtask_title", analysis.Subtasks[i].Title),
 				slog.String("assigned_role", defaultRole))
 			analysis.Subtasks[i].AssignedTo = defaultRole
 		}
 	}
-	
+
 	return nil
 }
 
@@ -438,7 +440,7 @@
 	// Generate PR content
 	prContent := s.generateSubtaskPRContent(analysis)
 	title := fmt.Sprintf("Subtask Proposal: %s", analysis.ParentTaskID)
-	
+
 	// Validate PR content
 	if title == "" {
 		return "", fmt.Errorf("PR title cannot be empty")
@@ -515,7 +517,7 @@
 // generateSubtaskFile creates the content for an individual subtask file
 func (s *SubtaskService) generateSubtaskFile(subtask tm.SubtaskProposal, taskID, parentTaskID string) string {
 	var content strings.Builder
-	
+
 	// Generate YAML frontmatter
 	content.WriteString("---\n")
 	content.WriteString(fmt.Sprintf("id: %s\n", taskID))
@@ -524,7 +526,7 @@
 	content.WriteString(fmt.Sprintf("assignee: %s\n", subtask.AssignedTo))
 	content.WriteString(fmt.Sprintf("owner_id: %s\n", subtask.AssignedTo))
 	content.WriteString(fmt.Sprintf("owner_name: %s\n", subtask.AssignedTo))
-	content.WriteString(fmt.Sprintf("status: todo\n"))
+	content.WriteString("status: todo\n")
 	content.WriteString(fmt.Sprintf("priority: %s\n", strings.ToLower(string(subtask.Priority))))
 	content.WriteString(fmt.Sprintf("parent_task_id: %s\n", parentTaskID))
 	content.WriteString(fmt.Sprintf("estimated_hours: %d\n", subtask.EstimatedHours))
@@ -532,7 +534,7 @@
 	content.WriteString(fmt.Sprintf("updated_at: %s\n", time.Now().Format(time.RFC3339)))
 	content.WriteString("completed_at: null\n")
 	content.WriteString("archived_at: null\n")
-	
+
 	// Add dependencies if any
 	if len(subtask.Dependencies) > 0 {
 		content.WriteString("dependencies:\n")
@@ -544,7 +546,7 @@
 			}
 		}
 	}
-	
+
 	// Add required skills if any
 	if len(subtask.RequiredSkills) > 0 {
 		content.WriteString("required_skills:\n")
@@ -552,18 +554,18 @@
 			content.WriteString(fmt.Sprintf("  - %s\n", skill))
 		}
 	}
-	
+
 	content.WriteString("---\n\n")
-	
+
 	// Add markdown content
 	content.WriteString("# Task Description\n\n")
 	content.WriteString(fmt.Sprintf("%s\n\n", subtask.Description))
-	
+
 	if subtask.EstimatedHours > 0 {
 		content.WriteString("## Estimated Effort\n\n")
 		content.WriteString(fmt.Sprintf("**Estimated Hours:** %d\n\n", subtask.EstimatedHours))
 	}
-	
+
 	if len(subtask.RequiredSkills) > 0 {
 		content.WriteString("## Required Skills\n\n")
 		for _, skill := range subtask.RequiredSkills {
@@ -571,7 +573,7 @@
 		}
 		content.WriteString("\n")
 	}
-	
+
 	if len(subtask.Dependencies) > 0 {
 		content.WriteString("## Dependencies\n\n")
 		content.WriteString("This task depends on the completion of:\n\n")
@@ -583,11 +585,11 @@
 		}
 		content.WriteString("\n")
 	}
-	
+
 	content.WriteString("## Notes\n\n")
 	content.WriteString(fmt.Sprintf("This subtask was generated from parent task: %s\n", parentTaskID))
 	content.WriteString("Generated by Staff AI Agent System\n\n")
-	
+
 	return content.String()
 }
 
@@ -600,11 +602,11 @@
 	}
 
 	taskContent := string(content)
-	
+
 	// Find the YAML frontmatter boundaries
 	lines := strings.Split(taskContent, "\n")
 	var frontmatterStart, frontmatterEnd int = -1, -1
-	
+
 	for i, line := range lines {
 		if line == "---" {
 			if frontmatterStart == -1 {
@@ -615,18 +617,18 @@
 			}
 		}
 	}
-	
+
 	if frontmatterStart == -1 || frontmatterEnd == -1 {
 		return fmt.Errorf("invalid task file format: missing YAML frontmatter")
 	}
-	
+
 	// Update the frontmatter
 	now := time.Now().Format(time.RFC3339)
 	var updatedLines []string
-	
+
 	// Add lines before frontmatter
 	updatedLines = append(updatedLines, lines[:frontmatterStart+1]...)
-	
+
 	// Process frontmatter lines
 	for i := frontmatterStart + 1; i < frontmatterEnd; i++ {
 		line := lines[i]
@@ -640,10 +642,10 @@
 			updatedLines = append(updatedLines, line)
 		}
 	}
-	
+
 	// Add closing frontmatter and rest of content
 	updatedLines = append(updatedLines, lines[frontmatterEnd:]...)
-	
+
 	// Add subtask information to the task description
 	if frontmatterEnd+1 < len(lines) {
 		// Add subtask information
@@ -654,16 +656,16 @@
 		}
 		subtaskInfo += fmt.Sprintf("\n**Total Estimated Hours:** %d\n", analysis.EstimatedTotalHours)
 		subtaskInfo += fmt.Sprintf("**Completed:** %s - Task broken down into actionable subtasks\n", now)
-		
+
 		// Insert subtask info before any existing body content
-		updatedContent := strings.Join(updatedLines[:len(updatedLines)], "\n") + subtaskInfo
-		
+		updatedContent := strings.Join(updatedLines[:], "\n") + subtaskInfo
+
 		// Write the updated content back to the file
 		if err := os.WriteFile(taskFilePath, []byte(updatedContent), 0644); err != nil {
 			return fmt.Errorf("failed to write updated parent task file: %w", err)
 		}
 	}
-	
+
 	s.logger.Info("Updated parent task to completed status", slog.String("task_id", analysis.ParentTaskID))
 	return nil
 }
@@ -671,14 +673,14 @@
 // generateSubtaskPRContent creates markdown content for the subtask proposal PR
 func (s *SubtaskService) generateSubtaskPRContent(analysis *tm.SubtaskAnalysis) string {
 	var content strings.Builder
-	
+
 	content.WriteString(fmt.Sprintf("# Subtasks Created for Task %s\n\n", analysis.ParentTaskID))
 	content.WriteString(fmt.Sprintf("This PR creates **%d individual task files** in `/operations/tasks/` ready for agent assignment.\n\n", len(analysis.Subtasks)))
 	content.WriteString(fmt.Sprintf("✅ **Parent task `%s` has been marked as completed** - the complex task has been successfully broken down into actionable subtasks.\n\n", analysis.ParentTaskID))
 	content.WriteString(fmt.Sprintf("## Analysis Summary\n%s\n\n", analysis.AnalysisSummary))
 	content.WriteString(fmt.Sprintf("## Recommended Approach\n%s\n\n", analysis.RecommendedApproach))
 	content.WriteString(fmt.Sprintf("**Estimated Total Hours:** %d\n\n", analysis.EstimatedTotalHours))
-	
+
 	// List the created task files
 	content.WriteString("## Created Task Files\n\n")
 	for i, subtask := range analysis.Subtasks {
@@ -690,34 +692,34 @@
 		content.WriteString(fmt.Sprintf("- **Estimated Hours:** %d\n", subtask.EstimatedHours))
 		content.WriteString(fmt.Sprintf("- **Description:** %s\n\n", subtask.Description))
 	}
-	
+
 	if analysis.RiskAssessment != "" {
 		content.WriteString(fmt.Sprintf("## Risk Assessment\n%s\n\n", analysis.RiskAssessment))
 	}
-	
+
 	content.WriteString("## Proposed Subtasks\n\n")
-	
+
 	for i, subtask := range analysis.Subtasks {
 		content.WriteString(fmt.Sprintf("### %d. %s\n", i+1, subtask.Title))
 		content.WriteString(fmt.Sprintf("- **Assigned to:** %s\n", subtask.AssignedTo))
 		content.WriteString(fmt.Sprintf("- **Priority:** %s\n", subtask.Priority))
 		content.WriteString(fmt.Sprintf("- **Estimated Hours:** %d\n", subtask.EstimatedHours))
-		
+
 		if len(subtask.Dependencies) > 0 {
 			deps := strings.Join(subtask.Dependencies, ", ")
 			content.WriteString(fmt.Sprintf("- **Dependencies:** %s\n", deps))
 		}
-		
+
 		content.WriteString(fmt.Sprintf("- **Description:** %s\n\n", subtask.Description))
 	}
-	
+
 	content.WriteString("---\n")
 	content.WriteString("*Generated by Staff AI Agent System*\n\n")
 	content.WriteString("**Instructions:**\n")
 	content.WriteString("- Review the proposed subtasks\n")
 	content.WriteString("- Approve or request changes\n")
 	content.WriteString("- When merged, the subtasks will be automatically created and assigned\n")
-	
+
 	return content.String()
 }
 
@@ -781,7 +783,7 @@
 	if err := s.updateParentTaskAsCompleted(parentTaskFile, analysis); err != nil {
 		return fmt.Errorf("failed to update parent task: %w", err)
 	}
-	
+
 	// Track parent task file for staging
 	parentRelativeFile := filepath.Join("operations", "tasks", fmt.Sprintf("%s.md", analysis.ParentTaskID))
 	stagedFiles = append(stagedFiles, parentRelativeFile)
@@ -812,15 +814,15 @@
 	}
 
 	// Commit changes
-	commitMsg := fmt.Sprintf("Create %d subtasks for task %s and mark parent as completed\n\nGenerated by Staff AI Agent System\n\nFiles modified:\n- %s.md (marked as completed)\n\nCreated individual task files:\n", 
+	commitMsg := fmt.Sprintf("Create %d subtasks for task %s and mark parent as completed\n\nGenerated by Staff AI Agent System\n\nFiles modified:\n- %s.md (marked as completed)\n\nCreated individual task files:\n",
 		len(analysis.Subtasks), analysis.ParentTaskID, analysis.ParentTaskID)
-	
+
 	// Add list of created files to commit message
 	for i := range analysis.Subtasks {
 		taskID := fmt.Sprintf("%s-subtask-%d", analysis.ParentTaskID, i+1)
 		commitMsg += fmt.Sprintf("- %s.md\n", taskID)
 	}
-	
+
 	if len(analysis.AgentCreations) > 0 {
 		commitMsg += fmt.Sprintf("\nProposed %d new agents for specialized skills", len(analysis.AgentCreations))
 	}
@@ -839,11 +841,10 @@
 	return nil
 }
 
-
 // Close cleans up the service
 func (s *SubtaskService) Close() error {
 	if s.llmProvider != nil {
 		return s.llmProvider.Close()
 	}
 	return nil
-}
\ No newline at end of file
+}
