diff --git a/loop/agent.go b/loop/agent.go
index 438d326..5e28bfc 100644
--- a/loop/agent.go
+++ b/loop/agent.go
@@ -34,6 +34,12 @@
 	userCancelMessage = "user requested agent to stop handling responses"
 )
 
+// EndFeedback represents user feedback when ending a session
+type EndFeedback struct {
+	Happy   bool   `json:"happy"`
+	Comment string `json:"comment"`
+}
+
 type MessageIterator interface {
 	// Next blocks until the next message is available. It may
 	// return nil if the underlying iterator context is done.
@@ -128,6 +134,10 @@
 	CurrentStateName() string
 	// CurrentTodoContent returns the current todo list data as JSON, or empty string if no todos exist
 	CurrentTodoContent() string
+	// GetEndFeedback returns the end session feedback
+	GetEndFeedback() *EndFeedback
+	// SetEndFeedback sets the end session feedback
+	SetEndFeedback(feedback *EndFeedback)
 }
 
 type CodingAgentMessageType string
@@ -378,6 +388,9 @@
 
 	// Port monitoring
 	portMonitor *PortMonitor
+
+	// End session feedback
+	endFeedback *EndFeedback
 }
 
 // NewIterator implements CodingAgent.
@@ -476,6 +489,20 @@
 	return string(content)
 }
 
+// SetEndFeedback sets the end session feedback
+func (a *Agent) SetEndFeedback(feedback *EndFeedback) {
+	a.mu.Lock()
+	defer a.mu.Unlock()
+	a.endFeedback = feedback
+}
+
+// GetEndFeedback gets the end session feedback
+func (a *Agent) GetEndFeedback() *EndFeedback {
+	a.mu.Lock()
+	defer a.mu.Unlock()
+	return a.endFeedback
+}
+
 func (a *Agent) URL() string { return a.url }
 
 // Title returns the current title of the conversation.
diff --git a/loop/server/loophttp.go b/loop/server/loophttp.go
index e62947e..53776aa 100644
--- a/loop/server/loophttp.go
+++ b/loop/server/loophttp.go
@@ -95,6 +95,7 @@
 	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 {
@@ -121,6 +122,8 @@
 	terminalSessions map[string]*terminalSession
 	sshAvailable     bool
 	sshError         string
+	// WaitGroup for clients waiting for end
+	endWaitGroup sync.WaitGroup
 }
 
 func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
@@ -676,7 +679,9 @@
 
 		// Parse the request body (optional)
 		var requestBody struct {
-			Reason string `json:"reason"`
+			Reason  string `json:"reason"`
+			Happy   *bool  `json:"happy,omitempty"`
+			Comment string `json:"comment,omitempty"`
 		}
 
 		decoder := json.NewDecoder(r.Body)
@@ -691,6 +696,16 @@
 			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})
@@ -701,9 +716,29 @@
 		// Log that we're shutting down
 		slog.Info("Ending session", "reason", endReason)
 
-		// Exit the process after a short delay to allow response to be sent
+		// Wait for skaband clients that are waiting for end (with timeout)
 		go func() {
-			time.Sleep(100 * time.Millisecond)
+			startTime := time.Now()
+			// Wait up to 2 seconds for waiting clients to receive the end message
+			done := make(chan struct{})
+			go func() {
+				s.endWaitGroup.Wait()
+				close(done)
+			}()
+
+			select {
+			case <-done:
+				slog.Info("All waiting clients notified of end")
+			case <-time.After(2 * time.Second):
+				slog.Info("Timeout waiting for clients, proceeding with shutdown")
+			}
+
+			// Ensure we've been running for at least 100ms to allow response to be sent
+			elapsed := time.Since(startTime)
+			if elapsed < 100*time.Millisecond {
+				time.Sleep(100*time.Millisecond - elapsed)
+			}
+
 			os.Exit(0)
 		}()
 	})
@@ -1023,6 +1058,17 @@
 		}
 	}
 
+	// Check if this client is waiting for end
+	waitForEnd := r.URL.Query().Get("wait_for_end") == "true"
+	if waitForEnd {
+		s.endWaitGroup.Add(1)
+		defer func() {
+			if waitForEnd {
+				s.endWaitGroup.Done()
+			}
+		}()
+	}
+
 	// Ensure 'from' is valid
 	currentCount := s.agent.MessageCount()
 	if fromIndex < 0 {
@@ -1138,6 +1184,12 @@
 			// 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: ")
@@ -1165,6 +1217,12 @@
 			// 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: ")
@@ -1211,6 +1269,7 @@
 		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 cedf6aa..54cfcd3 100644
--- a/loop/server/loophttp_test.go
+++ b/loop/server/loophttp_test.go
@@ -29,6 +29,7 @@
 	branchName               string
 	workingDir               string
 	sessionID                string
+	endFeedback              *loop.EndFeedback
 }
 
 func (m *mockAgent) NewIterator(ctx context.Context, nextMessageIdx int) loop.MessageIterator {
@@ -245,7 +246,69 @@
 func (m *mockAgent) SuggestReprompt(ctx context.Context) (string, error) { return "", nil }
 func (m *mockAgent) IsInContainer() bool                                 { return false }
 func (m *mockAgent) FirstMessageIndex() int                              { return 0 }
-func (m *mockAgent) DetectGitChanges(ctx context.Context) error          { return nil } // TestSSEStream tests the SSE stream endpoint
+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 }
+
+// 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)
+		}
+	}
+} // TestSSEStream tests the SSE stream endpoint
 func TestSSEStream(t *testing.T) {
 	// Create a mock agent with initial messages
 	mockAgent := &mockAgent{
