diff --git a/server/agent/manager.go b/server/agent/manager.go
index 45b0965..88bfe21 100644
--- a/server/agent/manager.go
+++ b/server/agent/manager.go
@@ -3,7 +3,7 @@
 import (
 	"context"
 	"fmt"
-	"log"
+	"log/slog"
 	"os"
 	"os/exec"
 	"path/filepath"
@@ -30,16 +30,21 @@
 	subtaskService  *subtasks.SubtaskService
 	isRunning       map[string]bool
 	stopChannels    map[string]chan struct{}
+	logger          *slog.Logger
 }
 
 // NewManager creates a new agent manager
-func NewManager(cfg *config.Config, taskManager tm.TaskManager) (*Manager, error) {
+func NewManager(cfg *config.Config, taskManager tm.TaskManager, logger *slog.Logger) (*Manager, error) {
+	if logger == nil {
+		logger = slog.Default()
+	}
 	// Create auto-assigner
 	autoAssigner := assignment.NewAutoAssigner(cfg.Agents)
 
 	// Create GitHub PR provider
 	githubConfig := git.GitHubConfig{
-		Token: cfg.GitHub.Token,
+		Token:  cfg.GitHub.Token,
+		Logger: logger,
 	}
 	prProvider := git.NewGitHubPullRequestProvider(cfg.GitHub.Owner, cfg.GitHub.Repo, githubConfig)
 
@@ -57,6 +62,7 @@
 		cloneManager: cloneManager,
 		isRunning:    make(map[string]bool),
 		stopChannels: make(map[string]chan struct{}),
+		logger:       logger,
 	}
 
 	// Initialize agents
@@ -111,6 +117,7 @@
 		m.config.GitHub.Owner,
 		m.config.GitHub.Repo,
 		m.cloneManager,
+		m.logger,
 	)
 
 	return nil
@@ -177,7 +184,10 @@
 
 	go m.runAgentLoop(agent, loopInterval, stopChan)
 
-	log.Printf("Started agent %s (%s) with %s model", agentName, agent.Role, agent.Model)
+	m.logger.Info("Started agent", 
+		slog.String("name", agentName), 
+		slog.String("role", agent.Role), 
+		slog.String("model", agent.Model))
 	return nil
 }
 
@@ -191,7 +201,7 @@
 	delete(m.stopChannels, agentName)
 	m.isRunning[agentName] = false
 
-	log.Printf("Stopped agent %s", agentName)
+	m.logger.Info("Stopped agent", slog.String("name", agentName))
 	return nil
 }
 
@@ -203,11 +213,13 @@
 	for {
 		select {
 		case <-stopChan:
-			log.Printf("Agent %s stopping", agent.Name)
+			m.logger.Info("Agent stopping", slog.String("name", agent.Name))
 			return
 		case <-ticker.C:
 			if err := m.processAgentTasks(agent); err != nil {
-				log.Printf("Error processing tasks for agent %s: %v", agent.Name, err)
+				m.logger.Error("Error processing tasks for agent", 
+					slog.String("agent", agent.Name), 
+					slog.String("error", err.Error()))
 			}
 		}
 	}
@@ -225,16 +237,22 @@
 		return fmt.Errorf("failed to get tasks for agent %s: %w", agent.Name, err)
 	}
 
-	log.Printf("Processing %d tasks for agent %s", len(tasks), agent.Name)
+	m.logger.Info("Processing tasks for agent", 
+		slog.Int("task_count", len(tasks)), 
+		slog.String("agent", agent.Name))
 
 	for _, task := range tasks {
 		if task.Status == tm.StatusToDo || task.Status == tm.StatusPending {
 			if err := m.processTask(agent, task); err != nil {
-				log.Printf("Error processing task %s: %v", task.ID, err)
+				m.logger.Error("Error processing task", 
+					slog.String("task_id", task.ID), 
+					slog.String("error", err.Error()))
 				// Mark task as failed
 				task.Status = tm.StatusFailed
 				if err := m.taskManager.UpdateTask(task); err != nil {
-					log.Printf("Error updating failed task %s: %v", task.ID, err)
+					m.logger.Error("Error updating failed task", 
+						slog.String("task_id", task.ID), 
+						slog.String("error", err.Error()))
 				}
 				agent.Stats.TasksFailed++
 			} else {
@@ -256,7 +274,10 @@
 	ctx := context.Background()
 	startTime := time.Now()
 
-	log.Printf("Agent %s processing task %s: %s", agent.Name, task.ID, task.Title)
+	m.logger.Info("Agent processing task", 
+		slog.String("agent", agent.Name), 
+		slog.String("task_id", task.ID), 
+		slog.String("title", task.Title))
 
 	// Mark task as in progress
 	task.Status = tm.StatusInProgress
@@ -267,9 +288,11 @@
 
 	// Check if this task should generate subtasks (with LLM decision)
 	if m.shouldGenerateSubtasks(task) {
-		log.Printf("LLM determined task %s should generate subtasks", task.ID)
+		m.logger.Info("LLM determined task should generate subtasks", slog.String("task_id", task.ID))
 		if err := m.generateSubtasksForTask(ctx, task); err != nil {
-			log.Printf("Warning: Failed to generate subtasks for task %s: %v", task.ID, err)
+			m.logger.Warn("Failed to generate subtasks for task", 
+				slog.String("task_id", task.ID), 
+				slog.String("error", err.Error()))
 			// Continue with normal processing if subtask generation fails
 		} else {
 			// Task has been converted to subtask management, mark as completed
@@ -283,7 +306,9 @@
 				return fmt.Errorf("failed to update task with subtasks: %w", err)
 			}
 
-			log.Printf("Task %s converted to subtasks by agent %s using LLM analysis", task.ID, agent.Name)
+			m.logger.Info("Task converted to subtasks by agent using LLM analysis", 
+				slog.String("task_id", task.ID), 
+				slog.String("agent", agent.Name))
 			return nil
 		}
 	}
@@ -326,7 +351,11 @@
 		agent.Stats.AvgTime = (agent.Stats.AvgTime + duration.Milliseconds()) / 2
 	}
 
-	log.Printf("Task %s completed by agent %s in %v. PR: %s", task.ID, agent.Name, duration, prURL)
+	m.logger.Info("Task completed by agent", 
+		slog.String("task_id", task.ID), 
+		slog.String("agent", agent.Name), 
+		slog.Duration("duration", duration), 
+		slog.String("pr_url", prURL))
 	return nil
 }
 
@@ -415,11 +444,15 @@
 		return fmt.Errorf("failed to get agent clone: %w", err)
 	}
 
-	log.Printf("Agent %s working in clone: %s", agent.Name, clonePath)
+	m.logger.Info("Agent working in clone", 
+		slog.String("agent", agent.Name), 
+		slog.String("clone_path", clonePath))
 
 	// Refresh the clone with latest changes
 	if err := m.cloneManager.RefreshAgentClone(agent.Name); err != nil {
-		log.Printf("Warning: Failed to refresh clone for agent %s: %v", agent.Name, err)
+		m.logger.Warn("Failed to refresh clone for agent", 
+			slog.String("agent", agent.Name), 
+			slog.String("error", err.Error()))
 	}
 
 	// All Git operations use the agent's clone directory
@@ -490,7 +523,9 @@
 		return fmt.Errorf("failed to push branch: %w", err)
 	}
 
-	log.Printf("Agent %s successfully pushed branch %s", agent.Name, branchName)
+	m.logger.Info("Agent successfully pushed branch", 
+		slog.String("agent", agent.Name), 
+		slog.String("branch", branchName))
 	return nil
 }
 
@@ -583,7 +618,10 @@
 	}
 
 	explanation := m.autoAssigner.GetRecommendationExplanation(task, agentName)
-	log.Printf("Auto-assigned task %s to %s: %s", taskID, agentName, explanation)
+	m.logger.Info("Auto-assigned task to agent", 
+		slog.String("task_id", taskID), 
+		slog.String("agent", agentName), 
+		slog.String("explanation", explanation))
 
 	return nil
 }
@@ -631,7 +669,9 @@
 	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)
+		m.logger.Warn("Failed to get LLM subtask decision for task", 
+			slog.String("task_id", task.ID), 
+			slog.String("error", err.Error()))
 		// Fallback to simple heuristics
 		return task.Priority == tm.PriorityHigh || len(task.Description) > 200
 	}
@@ -639,11 +679,14 @@
 	// 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)
+		m.logger.Warn("Failed to update task evaluation status", slog.String("error", err.Error()))
 	}
 
-	log.Printf("LLM subtask decision for task %s: needs_subtasks=%v, complexity=%d, reasoning=%s", 
-		task.ID, decision.NeedsSubtasks, decision.ComplexityScore, decision.Reasoning)
+	m.logger.Info("LLM subtask decision for task", 
+		slog.String("task_id", task.ID), 
+		slog.Bool("needs_subtasks", decision.NeedsSubtasks), 
+		slog.Int("complexity_score", decision.ComplexityScore), 
+		slog.String("reasoning", decision.Reasoning))
 
 	return decision.NeedsSubtasks
 }
@@ -670,13 +713,20 @@
 	task.SubtasksPRURL = prURL
 	task.SubtasksGenerated = true
 
-	log.Printf("Generated subtask PR for task %s: %s", task.ID, prURL)
-	log.Printf("Proposed %d subtasks and %d new agents for task %s", len(analysis.Subtasks), len(analysis.AgentCreations), task.ID)
+	m.logger.Info("Generated subtask PR for task", 
+		slog.String("task_id", task.ID), 
+		slog.String("pr_url", prURL))
+	m.logger.Info("Proposed subtasks and new agents for task", 
+		slog.String("task_id", task.ID), 
+		slog.Int("subtask_count", len(analysis.Subtasks)), 
+		slog.Int("new_agent_count", len(analysis.AgentCreations)))
 	
 	// 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)
+			m.logger.Info("Proposed new agent", 
+				slog.String("role", agent.Role), 
+				slog.Any("skills", agent.Skills))
 		}
 	}
 
@@ -700,19 +750,21 @@
 	// Close all LLM providers
 	for _, agent := range m.agents {
 		if err := agent.Provider.Close(); err != nil {
-			log.Printf("Error closing provider for agent %s: %v", agent.Name, err)
+			m.logger.Error("Error closing provider for agent", 
+				slog.String("agent", agent.Name), 
+				slog.String("error", err.Error()))
 		}
 	}
 
 	// Cleanup all agent Git clones
 	if err := m.cloneManager.CleanupAllClones(); err != nil {
-		log.Printf("Error cleaning up agent clones: %v", err)
+		m.logger.Error("Error cleaning up agent clones", slog.String("error", err.Error()))
 	}
 
 	// Cleanup subtask service
 	if m.subtaskService != nil {
 		if err := m.subtaskService.Close(); err != nil {
-			log.Printf("Error closing subtask service: %v", err)
+			m.logger.Error("Error closing subtask service", slog.String("error", err.Error()))
 		}
 	}
 
diff --git a/server/cmd/commands/root.go b/server/cmd/commands/root.go
index 63e0d8f..ade7c53 100644
--- a/server/cmd/commands/root.go
+++ b/server/cmd/commands/root.go
@@ -79,7 +79,7 @@
 	taskManager = git_tm.NewGitTaskManagerWithLogger(gitInterface, "../", logger)
 
 	// Initialize agent manager
-	agentManager, err = agent.NewManager(cfg, taskManager)
+	agentManager, err = agent.NewManager(cfg, taskManager, logger)
 	if err != nil {
 		return fmt.Errorf("failed to initialize agent manager: %w", err)
 	}
diff --git a/server/git/github.go b/server/git/github.go
index 63424f1..6555b69 100644
--- a/server/git/github.go
+++ b/server/git/github.go
@@ -5,6 +5,7 @@
 	"context"
 	"encoding/json"
 	"fmt"
+	"log/slog"
 	"net/http"
 	"time"
 )
@@ -14,6 +15,7 @@
 	Token      string
 	BaseURL    string // Default: https://api.github.com
 	HTTPClient *http.Client
+	Logger     *slog.Logger
 }
 
 // GitHubPullRequestProvider implements PullRequestProvider for GitHub
@@ -21,6 +23,7 @@
 	config GitHubConfig
 	owner  string
 	repo   string
+	logger *slog.Logger
 }
 
 // NewGitHubPullRequestProvider creates a new GitHub pull request provider
@@ -31,11 +34,15 @@
 	if config.HTTPClient == nil {
 		config.HTTPClient = &http.Client{Timeout: 30 * time.Second}
 	}
+	if config.Logger == nil {
+		config.Logger = slog.Default()
+	}
 
 	return &GitHubPullRequestProvider{
 		config: config,
 		owner:  owner,
 		repo:   repo,
+		logger: config.Logger,
 	}
 }
 
@@ -123,11 +130,15 @@
 		return nil, fmt.Errorf("failed to marshal request body: %w", err)
 	}
 
-	// Debug logging for request data
-	fmt.Printf("DEBUG: Creating PR with data: %s\n", string(jsonBody))
+	// Log PR creation with structured data
+	g.logger.Info("Creating GitHub PR",
+		slog.String("url", fmt.Sprintf("%s/repos/%s/%s/pulls", g.config.BaseURL, g.owner, g.repo)),
+		slog.String("title", options.Title),
+		slog.String("head_branch", options.HeadBranch),
+		slog.String("base_branch", options.BaseBranch),
+		slog.Any("labels", options.Labels))
 
 	url := fmt.Sprintf("%s/repos/%s/%s/pulls", g.config.BaseURL, g.owner, g.repo)
-	fmt.Printf("DEBUG: POST URL: %s\n", url)
 	
 	req, err := http.NewRequestWithContext(ctx, "POST", url, bytes.NewBuffer(jsonBody))
 	if err != nil {
diff --git a/server/server/server.go b/server/server/server.go
index 8b5fae7..f03327a 100644
--- a/server/server/server.go
+++ b/server/server/server.go
@@ -52,7 +52,7 @@
 
 	// Create agent manager with config
 	var err error
-	s.manager, err = agent.NewManager(s.config, taskManager)
+	s.manager, err = agent.NewManager(s.config, taskManager, s.logger)
 	if err != nil {
 		return fmt.Errorf("failed to create agent manager: %w", err)
 	}
diff --git a/server/staff b/server/staff
new file mode 100755
index 0000000..701a6e8
--- /dev/null
+++ b/server/staff
Binary files differ
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",
