diff --git a/dockerimg/createdockerfile.go b/dockerimg/createdockerfile.go
index 53b9d82..9c145c1 100644
--- a/dockerimg/createdockerfile.go
+++ b/dockerimg/createdockerfile.go
@@ -266,7 +266,7 @@
 	if res.StopReason != llm.StopReasonToolUse {
 		return "", fmt.Errorf("expected stop reason %q, got %q", llm.StopReasonToolUse, res.StopReason)
 	}
-	_, err = convo.ToolResultContents(context.TODO(), res)
+	_, _, err = convo.ToolResultContents(context.TODO(), res)
 	if err != nil {
 		return "", err
 	}
diff --git a/llm/conversation/convo.go b/llm/conversation/convo.go
index ba6d2d9..4740f22 100644
--- a/llm/conversation/convo.go
+++ b/llm/conversation/convo.go
@@ -402,17 +402,24 @@
 
 // ToolResultContents runs all tool uses requested by the response and returns their results.
 // Cancelling ctx will cancel any running tool calls.
-func (c *Convo) ToolResultContents(ctx context.Context, resp *llm.Response) ([]llm.Content, error) {
+// The boolean return value indicates whether any of the executed tools should end the turn.
+func (c *Convo) ToolResultContents(ctx context.Context, resp *llm.Response) ([]llm.Content, bool, error) {
 	if resp.StopReason != llm.StopReasonToolUse {
-		return nil, nil
+		return nil, false, nil
 	}
 	// Extract all tool calls from the response, call the tools, and gather the results.
 	var wg sync.WaitGroup
 	toolResultC := make(chan llm.Content, len(resp.Content))
+
+	endsTurn := false
 	for _, part := range resp.Content {
 		if part.Type != llm.ContentTypeToolUse {
 			continue
 		}
+		tool, err := c.findTool(part.ToolName)
+		if err == nil && tool.EndsTurn {
+			endsTurn = true
+		}
 		c.incrementToolUse(part.ToolName)
 		startTime := time.Now()
 
@@ -492,9 +499,9 @@
 		toolResults = append(toolResults, toolResult)
 	}
 	if ctx.Err() != nil {
-		return nil, ctx.Err()
+		return nil, false, ctx.Err()
 	}
-	return toolResults, nil
+	return toolResults, endsTurn, nil
 }
 
 func (c *Convo) incrementToolUse(name string) {
diff --git a/loop/agent.go b/loop/agent.go
index 05179eb..be5c8a2 100644
--- a/loop/agent.go
+++ b/loop/agent.go
@@ -286,7 +286,7 @@
 	SendMessage(message llm.Message) (*llm.Response, error)
 	SendUserTextMessage(s string, otherContents ...llm.Content) (*llm.Response, error)
 	GetID() string
-	ToolResultContents(ctx context.Context, resp *llm.Response) ([]llm.Content, error)
+	ToolResultContents(ctx context.Context, resp *llm.Response) ([]llm.Content, bool, error)
 	ToolResultCancelContents(resp *llm.Response) ([]llm.Content, error)
 	CancelToolUse(toolUseID string, cause error) error
 	SubConvoWithHistory() *conversation.Convo
@@ -1339,6 +1339,7 @@
 func (a *Agent) handleToolExecution(ctx context.Context, resp *llm.Response) (bool, *llm.Response) {
 	var results []llm.Content
 	cancelled := false
+	toolEndsTurn := false
 
 	// Transition to checking for cancellation state
 	a.stateMachine.Transition(ctx, StateCheckingForCancellation, "Checking if user requested cancellation")
@@ -1365,7 +1366,7 @@
 
 		// Execute the tools
 		var err error
-		results, err = a.convo.ToolResultContents(ctx, resp)
+		results, toolEndsTurn, err = a.convo.ToolResultContents(ctx, resp)
 		if ctx.Err() != nil { // e.g. the user canceled the operation
 			cancelled = true
 			a.stateMachine.Transition(ctx, StateCancelled, "Operation cancelled during tool execution")
@@ -1387,7 +1388,8 @@
 	}
 
 	// Continue the conversation with tool results and any user messages
-	return a.continueTurnWithToolResults(ctx, results, autoqualityMessages, cancelled)
+	shouldContinue, resp := a.continueTurnWithToolResults(ctx, results, autoqualityMessages, cancelled)
+	return shouldContinue && !toolEndsTurn, resp
 }
 
 // processGitChanges checks for new git commits and runs autoformatters if needed
diff --git a/loop/agent_test.go b/loop/agent_test.go
index ce44352..31e9664 100644
--- a/loop/agent_test.go
+++ b/loop/agent_test.go
@@ -256,7 +256,7 @@
 type MockConvoInterface struct {
 	sendMessageFunc              func(message llm.Message) (*llm.Response, error)
 	sendUserTextMessageFunc      func(s string, otherContents ...llm.Content) (*llm.Response, error)
-	toolResultContentsFunc       func(ctx context.Context, resp *llm.Response) ([]llm.Content, error)
+	toolResultContentsFunc       func(ctx context.Context, resp *llm.Response) ([]llm.Content, bool, error)
 	toolResultCancelContentsFunc func(resp *llm.Response) ([]llm.Content, error)
 	cancelToolUseFunc            func(toolUseID string, cause error) error
 	cumulativeUsageFunc          func() conversation.CumulativeUsage
@@ -280,11 +280,11 @@
 	return nil, nil
 }
 
-func (m *MockConvoInterface) ToolResultContents(ctx context.Context, resp *llm.Response) ([]llm.Content, error) {
+func (m *MockConvoInterface) ToolResultContents(ctx context.Context, resp *llm.Response) ([]llm.Content, bool, error) {
 	if m.toolResultContentsFunc != nil {
 		return m.toolResultContentsFunc(ctx, resp)
 	}
-	return nil, nil
+	return nil, false, nil
 }
 
 func (m *MockConvoInterface) ToolResultCancelContents(resp *llm.Response) ([]llm.Content, error) {
@@ -469,7 +469,7 @@
 // mockConvoInterface is a mock implementation of ConvoInterface for testing
 type mockConvoInterface struct {
 	SendMessageFunc        func(message llm.Message) (*llm.Response, error)
-	ToolResultContentsFunc func(ctx context.Context, resp *llm.Response) ([]llm.Content, error)
+	ToolResultContentsFunc func(ctx context.Context, resp *llm.Response) ([]llm.Content, bool, error)
 }
 
 func (c *mockConvoInterface) GetID() string {
@@ -501,11 +501,11 @@
 	return m.SendMessage(llm.UserStringMessage(s))
 }
 
-func (m *mockConvoInterface) ToolResultContents(ctx context.Context, resp *llm.Response) ([]llm.Content, error) {
+func (m *mockConvoInterface) ToolResultContents(ctx context.Context, resp *llm.Response) ([]llm.Content, bool, error) {
 	if m.ToolResultContentsFunc != nil {
 		return m.ToolResultContentsFunc(ctx, resp)
 	}
-	return []llm.Content{}, nil
+	return []llm.Content{}, false, nil
 }
 
 func (m *mockConvoInterface) ToolResultCancelContents(resp *llm.Response) ([]llm.Content, error) {
@@ -640,8 +640,8 @@
 	}
 
 	// Tool result content handler
-	mockConvo.ToolResultContentsFunc = func(ctx context.Context, resp *llm.Response) ([]llm.Content, error) {
-		return []llm.Content{llm.StringContent("Tool executed successfully")}, nil
+	mockConvo.ToolResultContentsFunc = func(ctx context.Context, resp *llm.Response) ([]llm.Content, bool, error) {
+		return []llm.Content{llm.StringContent("Tool executed successfully")}, false, nil
 	}
 
 	// Track state transitions
diff --git a/loop/agent_user_cancel_test.go b/loop/agent_user_cancel_test.go
index ed7df1b..32e6241 100644
--- a/loop/agent_user_cancel_test.go
+++ b/loop/agent_user_cancel_test.go
@@ -104,7 +104,7 @@
 
 		// Set up the mock response for tool results
 		mockConvo.ExpectCall("SendMessage", userMsg).Return(userMsgResponse, nil)
-		mockConvo.ExpectCall("ToolResultContents", userMsgResponse).Return(toolUseContents, nil)
+		mockConvo.ExpectCall("ToolResultContents", userMsgResponse).Return(toolUseContents, false, nil)
 		mockConvo.ExpectCall("SendMessage", toolUseResultsMsg).Return(toolUseResponse, nil)
 
 		ctx, cancel := context.WithCancel(context.Background())
@@ -458,7 +458,7 @@
 	defer cancel()
 
 	// Setting up the mock response for tool results
-	mockConvo.ExpectCall("ToolResultContents", initialResponse).Return(toolUseContents, nil)
+	mockConvo.ExpectCall("ToolResultContents", initialResponse).Return(toolUseContents, false, nil)
 	mockConvo.ExpectCall("SendMessage", nil).Return(toolUseResponse, nil)
 	// mockConvo, as a mock, isn't able to run the loop in conversation.Convo that makes this agent.OnToolResult callback.
 	// So we "mock" it out here by calling it explicitly, in order to make sure it calls .pushToOutbox with this message.
diff --git a/loop/mocks.go b/loop/mocks.go
index 014cd46..016c021 100644
--- a/loop/mocks.go
+++ b/loop/mocks.go
@@ -149,7 +149,7 @@
 	return exp.result[0].(*llm.Response), retErr
 }
 
-func (m *MockConvo) ToolResultContents(ctx context.Context, resp *llm.Response) ([]llm.Content, error) {
+func (m *MockConvo) ToolResultContents(ctx context.Context, resp *llm.Response) ([]llm.Content, bool, error) {
 	m.recordCall("ToolResultContents", resp)
 	exp, ok := m.findMatchingExpectation("ToolResultContents", resp)
 	if !ok {
@@ -163,7 +163,7 @@
 		retErr = err
 	}
 
-	return exp.result[0].([]llm.Content), retErr
+	return exp.result[0].([]llm.Content), false, retErr
 }
 
 func (m *MockConvo) ToolResultCancelContents(resp *llm.Response) ([]llm.Content, error) {
