diff --git a/loop/server/loophttp.go b/loop/server/loophttp.go
index 784d20b..0819459 100644
--- a/loop/server/loophttp.go
+++ b/loop/server/loophttp.go
@@ -95,7 +95,6 @@
 	OutsideWorkingDir    string                        `json:"outside_working_dir,omitempty"`
 	InsideWorkingDir     string                        `json:"inside_working_dir,omitempty"`
 	TodoContent          string                        `json:"todo_content,omitempty"` // Contains todo list JSON data
-	End                  *loop.EndFeedback             `json:"end,omitempty"`          // End session feedback
 }
 
 type InitRequest struct {
@@ -734,16 +733,6 @@
 			endReason = requestBody.Reason
 		}
 
-		// Store end feedback if provided
-		if requestBody.Happy != nil {
-			feedback := &loop.EndFeedback{
-				Happy:   *requestBody.Happy,
-				Comment: requestBody.Comment,
-			}
-			s.agent.SetEndFeedback(feedback)
-			slog.Info("End session feedback received", "happy", feedback.Happy, "comment", feedback.Comment)
-		}
-
 		// Send success response before exiting
 		w.Header().Set("Content-Type", "application/json")
 		json.NewEncoder(w).Encode(map[string]string{"status": "ending", "reason": endReason})
@@ -1222,12 +1211,6 @@
 			// Get updated state
 			state = s.getState()
 
-			// Check if end feedback is present and this client was waiting for it
-			if waitForEnd && state.End != nil {
-				s.endWaitGroup.Done()
-				waitForEnd = false // Mark that we've handled the end condition
-			}
-
 			// Send updated state after the state transition
 			fmt.Fprintf(w, "event: state\n")
 			fmt.Fprintf(w, "data: ")
@@ -1255,12 +1238,6 @@
 			// Get updated state
 			state = s.getState()
 
-			// Check if end feedback is present and this client was waiting for it
-			if waitForEnd && state.End != nil {
-				s.endWaitGroup.Done()
-				waitForEnd = false // Mark that we've handled the end condition
-			}
-
 			// Send updated state after the message
 			fmt.Fprintf(w, "event: state\n")
 			fmt.Fprintf(w, "data: ")
@@ -1307,7 +1284,6 @@
 		FirstMessageIndex:    s.agent.FirstMessageIndex(),
 		AgentState:           s.agent.CurrentStateName(),
 		TodoContent:          s.agent.CurrentTodoContent(),
-		End:                  s.agent.GetEndFeedback(),
 	}
 }
 
diff --git a/loop/server/loophttp_test.go b/loop/server/loophttp_test.go
index a6dab62..8575253 100644
--- a/loop/server/loophttp_test.go
+++ b/loop/server/loophttp_test.go
@@ -30,7 +30,6 @@
 	branchName               string
 	workingDir               string
 	sessionID                string
-	endFeedback              *loop.EndFeedback
 }
 
 func (m *mockAgent) NewIterator(ctx context.Context, nextMessageIdx int) loop.MessageIterator {
@@ -248,69 +247,8 @@
 func (m *mockAgent) IsInContainer() bool                        { return false }
 func (m *mockAgent) FirstMessageIndex() int                     { return 0 }
 func (m *mockAgent) DetectGitChanges(ctx context.Context) error { return nil }
-func (m *mockAgent) GetEndFeedback() *loop.EndFeedback          { return m.endFeedback }
-func (m *mockAgent) SetEndFeedback(feedback *loop.EndFeedback)  { m.endFeedback = feedback }
-func (m *mockAgent) GetPortMonitor() *loop.PortMonitor          { return loop.NewPortMonitor() }
 
-// TestEndFeedback tests the end session feedback functionality
-func TestEndFeedback(t *testing.T) {
-	// Test basic EndFeedback struct functionality
-	feedback := &loop.EndFeedback{
-		Happy:   true,
-		Comment: "Great experience!",
-	}
-
-	if feedback.Happy != true {
-		t.Errorf("Expected Happy to be true, got %v", feedback.Happy)
-	}
-	if feedback.Comment != "Great experience!" {
-		t.Errorf("Expected Comment to be 'Great experience!', got %s", feedback.Comment)
-	}
-
-	// Test mock agent methods
-	mockAgent := &mockAgent{
-		sessionID:    "test-session",
-		workingDir:   "/test",
-		messageCount: 0,
-	}
-
-	// Test initial state (no feedback)
-	if mockAgent.GetEndFeedback() != nil {
-		t.Error("Expected initial feedback to be nil")
-	}
-
-	// Test setting feedback
-	mockAgent.SetEndFeedback(feedback)
-	retrieved := mockAgent.GetEndFeedback()
-	if retrieved == nil {
-		t.Error("Expected feedback to be set, got nil")
-	} else {
-		if retrieved.Happy != true {
-			t.Errorf("Expected Happy to be true, got %v", retrieved.Happy)
-		}
-		if retrieved.Comment != "Great experience!" {
-			t.Errorf("Expected Comment to be 'Great experience!', got %s", retrieved.Comment)
-		}
-	}
-
-	// Test setting different feedback
-	negativeFeedback := &loop.EndFeedback{
-		Happy:   false,
-		Comment: "Could be better",
-	}
-	mockAgent.SetEndFeedback(negativeFeedback)
-	retrieved = mockAgent.GetEndFeedback()
-	if retrieved == nil {
-		t.Error("Expected feedback to be set, got nil")
-	} else {
-		if retrieved.Happy != false {
-			t.Errorf("Expected Happy to be false, got %v", retrieved.Happy)
-		}
-		if retrieved.Comment != "Could be better" {
-			t.Errorf("Expected Comment to be 'Could be better', got %s", retrieved.Comment)
-		}
-	}
-}
+func (m *mockAgent) GetPortMonitor() *loop.PortMonitor { return loop.NewPortMonitor() }
 
 // TestSSEStream tests the SSE stream endpoint
 func TestSSEStream(t *testing.T) {
