Process Single task at a time

Change-Id: I2099c144e19a3e60dd5a194c56449652fb68e58d
diff --git a/server/agent/agent.go b/server/agent/agent.go
index f189794..a64ca1d 100644
--- a/server/agent/agent.go
+++ b/server/agent/agent.go
@@ -123,11 +123,14 @@
 
 	for _, task := range tasks {
 		if task.Status == tm.StatusToDo {
-			if err := a.processTask(task); err != nil {
-				a.logger.Error("Error processing task",
-					slog.String("task_id", task.ID),
-					slog.String("error", err.Error()))
+			err2 := a.processTask(task)
+			if err2 == nil {
+				return nil
 			}
+			a.logger.Error("Error processing task",
+				slog.String("task_id", task.ID),
+				slog.String("error", err2.Error()))
+
 		}
 	}
 
@@ -147,6 +150,15 @@
 	// Mark task as in progress
 	task.Status = tm.StatusInProgress
 	a.CurrentTask = &task.ID
+	defer func() {
+		if r := recover(); r != nil {
+			a.logger.Error("Task processing panicked, clearing agent state",
+				slog.String("task_id", task.ID),
+				slog.String("agent", a.Name))
+			a.CurrentTask = nil
+			panic(r)
+		}
+	}()
 
 	// Check if this task should generate subtasks (with LLM decision)
 	if a.thinker.ShouldGenerateSubtasks(task) {
@@ -157,8 +169,9 @@
 				slog.String("agent", a.Name))
 			return nil
 		}
-		a.logger.Error("Error processing subtask",
+		a.logger.Error("Subtask processing failed, cleared agent state",
 			slog.String("task_id", task.ID),
+			slog.String("agent", a.Name),
 			slog.String("error", err.Error()))
 	}
 
diff --git a/server/agent/manager.go b/server/agent/manager.go
index 016f5ac..3cc578e 100644
--- a/server/agent/manager.go
+++ b/server/agent/manager.go
@@ -163,10 +163,9 @@
 		return fmt.Errorf("agent %s not found for task %s", task.Assignee, taskID)
 	}
 
-	// Reset the agent's current task and running state
+	// Reset the agent's current task only - keep agent running
 	agent.CurrentTask = nil
-	agent.IsRunning = false
-	m.isRunning[agent.Name] = false
+	// Note: Do NOT set agent.IsRunning = false - agent should continue processing new tasks
 
 	m.logger.Info("Completed task for agent",
 		slog.String("task_id", taskID),