diff --git a/server/subtasks/service.go b/server/subtasks/service.go
index c1a1bc9..d704a33 100644
--- a/server/subtasks/service.go
+++ b/server/subtasks/service.go
@@ -4,7 +4,7 @@
 	"context"
 	"encoding/json"
 	"fmt"
-	"log"
+	"log/slog"
 	"os"
 	"os/exec"
 	"path/filepath"
@@ -25,10 +25,14 @@
 	githubOwner    string
 	githubRepo     string
 	cloneManager   *git.CloneManager
+	logger         *slog.Logger
 }
 
 // NewSubtaskService creates a new subtask service
-func NewSubtaskService(provider llm.LLMProvider, taskManager tm.TaskManager, agentRoles []string, prProvider git.PullRequestProvider, githubOwner, githubRepo string, cloneManager *git.CloneManager) *SubtaskService {
+func NewSubtaskService(provider llm.LLMProvider, taskManager tm.TaskManager, agentRoles []string, prProvider git.PullRequestProvider, githubOwner, githubRepo string, cloneManager *git.CloneManager, logger *slog.Logger) *SubtaskService {
+	if logger == nil {
+		logger = slog.Default()
+	}
 	return &SubtaskService{
 		llmProvider:  provider,
 		taskManager:  taskManager,
@@ -37,6 +41,7 @@
 		githubOwner:  githubOwner,
 		githubRepo:   githubRepo,
 		cloneManager: cloneManager,
+		logger:       logger,
 	}
 }
 
@@ -334,7 +339,7 @@
 	
 	// Validate agent assignments and handle new agent creation
 	if err := s.validateAndHandleAgentAssignments(analysis); err != nil {
-		log.Printf("Warning during agent assignment handling: %v", err)
+		s.logger.Warn("Warning during agent assignment handling", slog.String("error", err.Error()))
 	}
 	
 	return analysis, nil
@@ -385,8 +390,10 @@
 	
 	for i := range analysis.Subtasks {
 		if !availableRoles[analysis.Subtasks[i].AssignedTo] {
-			log.Printf("Warning: Unknown agent role '%s' for subtask '%s', assigning to %s", 
-				analysis.Subtasks[i].AssignedTo, analysis.Subtasks[i].Title, defaultRole)
+			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
 		}
 	}
@@ -421,7 +428,7 @@
 
 	// Generate branch name for subtask proposal
 	branchName := fmt.Sprintf("subtasks/%s-proposal", analysis.ParentTaskID)
-	log.Printf("Creating subtask PR with branch: %s", branchName)
+	s.logger.Info("Creating subtask PR", slog.String("branch", branchName))
 
 	// Create Git branch and commit subtask proposal
 	if err := s.createSubtaskBranch(ctx, analysis, branchName); err != nil {
@@ -442,7 +449,7 @@
 
 	// Determine base branch (try main first, fallback to master)
 	baseBranch := s.determineBaseBranch(ctx)
-	log.Printf("Using base branch: %s", baseBranch)
+	s.logger.Info("Using base branch", slog.String("base_branch", baseBranch))
 
 	// Create the pull request
 	options := git.PullRequestOptions{
@@ -454,7 +461,10 @@
 		Draft:       false,
 	}
 
-	log.Printf("Creating PR with options: title=%s, head=%s, base=%s", options.Title, options.HeadBranch, options.BaseBranch)
+	s.logger.Info("Creating PR with options",
+		slog.String("title", options.Title),
+		slog.String("head_branch", options.HeadBranch),
+		slog.String("base_branch", options.BaseBranch))
 
 	pr, err := s.prProvider.CreatePullRequest(ctx, options)
 	if err != nil {
@@ -462,7 +472,7 @@
 	}
 
 	prURL := fmt.Sprintf("https://github.com/%s/%s/pull/%d", s.githubOwner, s.githubRepo, pr.Number)
-	log.Printf("Generated subtask proposal PR: %s", prURL)
+	s.logger.Info("Generated subtask proposal PR", slog.String("pr_url", prURL))
 
 	return prURL, nil
 }
@@ -476,7 +486,7 @@
 	// Get clone path to check branches
 	clonePath, err := s.cloneManager.GetAgentClonePath("subtask-service")
 	if err != nil {
-		log.Printf("Warning: failed to get clone path for base branch detection: %v", err)
+		s.logger.Warn("Failed to get clone path for base branch detection", slog.String("error", err.Error()))
 		return "main"
 	}
 
@@ -498,7 +508,7 @@
 	}
 
 	// Default to main if neither can be detected
-	log.Printf("Warning: Could not determine base branch, defaulting to 'main'")
+	s.logger.Warn("Could not determine base branch, defaulting to 'main'")
 	return "main"
 }
 
@@ -654,7 +664,7 @@
 		}
 	}
 	
-	log.Printf("Updated parent task %s to completed status", analysis.ParentTaskID)
+	s.logger.Info("Updated parent task to completed status", slog.String("task_id", analysis.ParentTaskID))
 	return nil
 }
 
@@ -741,7 +751,7 @@
 	// Pull latest changes
 	cmd = gitCmd("pull", "origin")
 	if err := cmd.Run(); err != nil {
-		log.Printf("Warning: failed to pull latest changes: %v", err)
+		s.logger.Warn("Failed to pull latest changes", slog.String("error", err.Error()))
 	}
 
 	// Delete branch if it exists (cleanup from previous attempts)
@@ -775,7 +785,7 @@
 	// Track parent task file for staging
 	parentRelativeFile := filepath.Join("operations", "tasks", fmt.Sprintf("%s.md", analysis.ParentTaskID))
 	stagedFiles = append(stagedFiles, parentRelativeFile)
-	log.Printf("Updated parent task file: %s", parentRelativeFile)
+	s.logger.Info("Updated parent task file", slog.String("file", parentRelativeFile))
 
 	// Create a file for each subtask
 	for i, subtask := range analysis.Subtasks {
@@ -790,7 +800,7 @@
 		// Track file for staging
 		relativeFile := filepath.Join("operations", "tasks", fmt.Sprintf("%s.md", taskID))
 		stagedFiles = append(stagedFiles, relativeFile)
-		log.Printf("Created subtask file: %s", relativeFile)
+		s.logger.Info("Created subtask file", slog.String("file", relativeFile))
 	}
 
 	// Stage all subtask files
@@ -825,7 +835,7 @@
 		return fmt.Errorf("failed to push branch: %w", err)
 	}
 
-	log.Printf("Created subtask proposal branch: %s", branchName)
+	s.logger.Info("Created subtask proposal branch", slog.String("branch", branchName))
 	return nil
 }
 
diff --git a/server/subtasks/service_test.go b/server/subtasks/service_test.go
index 0a8e473..08dd72a 100644
--- a/server/subtasks/service_test.go
+++ b/server/subtasks/service_test.go
@@ -81,7 +81,7 @@
 	mockProvider := NewMockLLMProvider([]string{})
 	agentRoles := []string{"backend", "frontend", "qa"}
 	
-	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil, nil)
 	
 	if service == nil {
 		t.Fatal("NewSubtaskService returned nil")
@@ -107,7 +107,7 @@
 
 	mockProvider := NewMockLLMProvider([]string{decisionResponse})
 	agentRoles := []string{"backend", "frontend", "qa"}
-	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil, nil)
 	
 	// Test the parseSubtaskDecision method directly since ShouldGenerateSubtasks is used by manager
 	decision, err := service.parseSubtaskDecision(decisionResponse)
@@ -166,7 +166,7 @@
 
 	mockProvider := NewMockLLMProvider([]string{jsonResponse})
 	agentRoles := []string{"backend", "frontend", "qa", "ceo"} // Include CEO for agent creation
-	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil, nil)
 	
 	task := &tm.Task{
 		ID:          "test-task-123",
@@ -267,7 +267,7 @@
 	
 	mockProvider := NewMockLLMProvider([]string{invalidResponse})
 	agentRoles := []string{"backend", "frontend"}
-	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil, nil)
 	
 	task := &tm.Task{
 		ID:    "test-task-123",
@@ -303,7 +303,7 @@
 
 	mockProvider := NewMockLLMProvider([]string{jsonResponse})
 	agentRoles := []string{"backend", "frontend"}
-	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil, nil)
 	
 	task := &tm.Task{
 		ID:    "test-task-123",
@@ -323,7 +323,7 @@
 
 func TestGenerateSubtaskPR(t *testing.T) {
 	mockProvider := NewMockLLMProvider([]string{})
-	service := NewSubtaskService(mockProvider, nil, []string{"backend"}, nil, "example", "repo", nil)
+	service := NewSubtaskService(mockProvider, nil, []string{"backend"}, nil, "example", "repo", nil, nil)
 	
 	analysis := &tm.SubtaskAnalysis{
 		ParentTaskID:        "task-123",
@@ -357,7 +357,7 @@
 func TestBuildSubtaskAnalysisPrompt(t *testing.T) {
 	mockProvider := NewMockLLMProvider([]string{})
 	agentRoles := []string{"backend", "frontend", "qa"}
-	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil, nil)
 	
 	task := &tm.Task{
 		Title:       "Build authentication system",
@@ -388,7 +388,7 @@
 func TestGetSubtaskAnalysisSystemPrompt(t *testing.T) {
 	mockProvider := NewMockLLMProvider([]string{})
 	agentRoles := []string{"backend", "frontend", "qa", "devops"}
-	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil, nil)
 	
 	systemPrompt := service.getSubtaskAnalysisSystemPrompt()
 	
@@ -412,7 +412,7 @@
 func TestIsValidAgentRole(t *testing.T) {
 	mockProvider := NewMockLLMProvider([]string{})
 	agentRoles := []string{"backend", "frontend", "qa"}
-	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil, nil)
 	
 	if !service.isValidAgentRole("backend") {
 		t.Error("'backend' should be a valid agent role")
@@ -433,7 +433,7 @@
 
 func TestParseSubtaskAnalysis_Priority(t *testing.T) {
 	mockProvider := NewMockLLMProvider([]string{})
-	service := NewSubtaskService(mockProvider, nil, []string{"backend"}, nil, "example", "repo", nil)
+	service := NewSubtaskService(mockProvider, nil, []string{"backend"}, nil, "example", "repo", nil, nil)
 	
 	tests := []struct {
 		input    string
@@ -485,7 +485,7 @@
 
 func TestGenerateSubtaskFile(t *testing.T) {
 	mockProvider := NewMockLLMProvider([]string{})
-	service := NewSubtaskService(mockProvider, nil, []string{"backend"}, nil, "example", "repo", nil)
+	service := NewSubtaskService(mockProvider, nil, []string{"backend"}, nil, "example", "repo", nil, nil)
 	
 	subtask := tm.SubtaskProposal{
 		Title:          "Implement API endpoints",
@@ -552,7 +552,7 @@
 
 func TestUpdateParentTaskAsCompleted(t *testing.T) {
 	mockProvider := NewMockLLMProvider([]string{})
-	service := NewSubtaskService(mockProvider, nil, []string{"backend"}, nil, "example", "repo", nil)
+	service := NewSubtaskService(mockProvider, nil, []string{"backend"}, nil, "example", "repo", nil, nil)
 	
 	// Create a temporary task file for testing
 	taskContent := `---
@@ -639,7 +639,7 @@
 
 func TestClose(t *testing.T) {
 	mockProvider := NewMockLLMProvider([]string{})
-	service := NewSubtaskService(mockProvider, nil, []string{"backend"}, nil, "example", "repo", nil)
+	service := NewSubtaskService(mockProvider, nil, []string{"backend"}, nil, "example", "repo", nil, nil)
 	
 	err := service.Close()
 	if err != nil {
@@ -666,7 +666,7 @@
 }`
 
 	mockProvider := NewMockLLMProvider([]string{jsonResponse})
-	service := NewSubtaskService(mockProvider, nil, []string{"backend", "frontend"}, nil, "example", "repo", nil)
+	service := NewSubtaskService(mockProvider, nil, []string{"backend", "frontend"}, nil, "example", "repo", nil, nil)
 	
 	task := &tm.Task{
 		ID:          "benchmark-task",
