diff --git a/cmd/go2ts/go2ts.go b/cmd/go2ts/go2ts.go
index 0a175a9..65fc9ab 100644
--- a/cmd/go2ts/go2ts.go
+++ b/cmd/go2ts/go2ts.go
@@ -56,6 +56,8 @@
 		loop.ToolCall{},
 		llm.Usage{},
 		server.State{},
+		loop.MultipleChoiceOption{},
+		loop.MultipleChoiceParams{},
 	)
 
 	generator.GenerateNominalTypes = true
diff --git a/loop/agent.go b/loop/agent.go
index 960bf5a..3da8e94 100644
--- a/loop/agent.go
+++ b/loop/agent.go
@@ -828,7 +828,7 @@
 	convo.Tools = []*llm.Tool{
 		bashTool, claudetool.Keyword,
 		claudetool.Think, a.titleTool(), makeDoneTool(a.codereview, a.config.GitUsername, a.config.GitEmail),
-		a.codereview.Tool(),
+		a.codereview.Tool(), a.multipleChoiceTool(),
 	}
 	if a.config.UseAnthropicEdit {
 		convo.Tools = append(convo.Tools, claudetool.AnthropicEditTool)
@@ -839,6 +839,61 @@
 	return convo
 }
 
+func (a *Agent) multipleChoiceTool() *llm.Tool {
+	ret := &llm.Tool{
+		Name:        "multiplechoice",
+		Description: "Present the user with an quick way to answer to your question using one of a short list of possible answers you would expect from the user.",
+		InputSchema: json.RawMessage(`{
+  "type": "object",
+  "description": "The question and a list of answers you would expect the user to choose from.",
+  "properties": {
+    "question": {
+      "type": "string",
+      "description": "The text of the multiple-choice question you would like the user, e.g. 'What kinds of test cases would you like me to add?'"
+    },
+    "responseOptions": {
+      "type": "array",
+      "description": "The set of possible answers to let the user quickly choose from, e.g. ['Basic unit test coverage', 'Error return values', 'Malformed input'].",
+      "items": {
+        "type": "object",
+        "properties": {
+          "caption": {
+            "type": "string",
+            "description": "The caption, e.g. 'Basic coverage', 'Error return values', or 'Malformed input' for the response button. Do NOT include options for responses that would end the conversation like 'Ok', 'No thank you', 'This looks good'"
+          },
+          "responseText": {
+            "type": "string",
+            "description": "The full text of the response, e.g. 'Add unit tests for basic test coverage', 'Add unit tests for error return values', or 'Add unit tests for malformed input'"
+          }
+        },
+        "required": ["caption", "responseText"]
+      }
+    }
+  },
+  "required": ["question", "responseOptions"]
+}`),
+		Run: func(ctx context.Context, input json.RawMessage) (string, error) {
+			// The Run logic for "multiplchoice" tool is a no-op on the server.
+			// The UI will present a list of options for the user to select from,
+			// and that's it as far as "executing" the tool_use goes.
+			// When the user *does* select one of the presented options, that
+			// responseText gets sent as a chat message on behalf of the user.
+			return "end your turn and wait for the user to respond", nil
+		},
+	}
+	return ret
+}
+
+type MultipleChoiceOption struct {
+	Caption      string `json:"caption"`
+	ResponseText string `json:"responseText"`
+}
+
+type MultipleChoiceParams struct {
+	Question        string                 `json:"question"`
+	ResponseOptions []MultipleChoiceOption `json:"responseOptions"`
+}
+
 // branchExists reports whether branchName exists, either locally or in well-known remotes.
 func branchExists(dir, branchName string) bool {
 	refs := []string{
@@ -921,6 +976,11 @@
 	a.inbox <- msg
 }
 
+func (a *Agent) ToolResultMessage(ctx context.Context, toolCallID, msg string) {
+	a.pushToOutbox(ctx, AgentMessage{Type: UserMessageType, Content: msg, ToolCallId: toolCallID})
+	a.inbox <- msg
+}
+
 func (a *Agent) CancelToolUse(toolUseID string, cause error) error {
 	return a.convo.CancelToolUse(toolUseID, cause)
 }
diff --git a/loop/testdata/agent_loop.httprr b/loop/testdata/agent_loop.httprr
index 0e3743c..3633389 100644
--- a/loop/testdata/agent_loop.httprr
+++ b/loop/testdata/agent_loop.httprr
@@ -1,9 +1,9 @@
 httprr trace v1
-9296 1708
+10862 1840
 POST https://api.anthropic.com/v1/messages HTTP/1.1
 Host: api.anthropic.com
 User-Agent: Go-http-client/1.1
-Content-Length: 9099
+Content-Length: 10664
 Anthropic-Version: 2023-06-01
 Content-Type: application/json
 
@@ -187,6 +187,45 @@
    }
   },
   {
+   "name": "multiplechoice",
+   "description": "Present the user with an quick way to answer to your question using one of a short list of possible answers you would expect from the user.",
+   "input_schema": {
+    "type": "object",
+    "description": "The question and a list of answers you would expect the user to choose from.",
+    "properties": {
+     "question": {
+      "type": "string",
+      "description": "The text of the multiple-choice question you would like the user, e.g. 'What kinds of test cases would you like me to add?'"
+     },
+     "responseOptions": {
+      "type": "array",
+      "description": "The set of possible answers to let the user quickly choose from, e.g. ['Basic unit test coverage', 'Error return values', 'Malformed input'].",
+      "items": {
+       "type": "object",
+       "properties": {
+        "caption": {
+         "type": "string",
+         "description": "The caption, e.g. 'Basic coverage', 'Error return values', or 'Malformed input' for the response button. Do NOT include options for responses that would end the conversation like 'Ok', 'No thank you', 'This looks good'"
+        },
+        "responseText": {
+         "type": "string",
+         "description": "The full text of the response, e.g. 'Add unit tests for basic test coverage', 'Add unit tests for error return values', or 'Add unit tests for malformed input'"
+        }
+       },
+       "required": [
+        "caption",
+        "responseText"
+       ]
+      }
+     }
+    },
+    "required": [
+     "question",
+     "responseOptions"
+    ]
+   }
+  },
+  {
    "name": "patch",
    "description": "File modification tool for precise text edits.\n\nOperations:\n- replace: Substitute text with new content\n- append_eof: Append new text at the end of the file\n- prepend_bof: Insert new text at the beginning of the file\n- overwrite: Replace the entire file with new content (automatically creates the file)\n\nUsage notes:\n- All inputs are interpreted literally (no automatic newline or whitespace handling)\n- For replace operations, oldText must appear EXACTLY ONCE in the file",
    "input_schema": {
@@ -247,24 +286,25 @@
 }HTTP/2.0 200 OK
 Anthropic-Organization-Id: 3c473a21-7208-450a-a9f8-80aebda45c1b
 Anthropic-Ratelimit-Input-Tokens-Limit: 200000
-Anthropic-Ratelimit-Input-Tokens-Remaining: 200000
-Anthropic-Ratelimit-Input-Tokens-Reset: 2025-04-30T17:29:47Z
+Anthropic-Ratelimit-Input-Tokens-Remaining: 199000
+Anthropic-Ratelimit-Input-Tokens-Reset: 2025-05-02T22:11:22Z
 Anthropic-Ratelimit-Output-Tokens-Limit: 80000
 Anthropic-Ratelimit-Output-Tokens-Remaining: 80000
-Anthropic-Ratelimit-Output-Tokens-Reset: 2025-04-30T17:29:49Z
+Anthropic-Ratelimit-Output-Tokens-Reset: 2025-05-02T22:11:25Z
 Anthropic-Ratelimit-Requests-Limit: 4000
 Anthropic-Ratelimit-Requests-Remaining: 3999
-Anthropic-Ratelimit-Requests-Reset: 2025-04-30T17:29:47Z
+Anthropic-Ratelimit-Requests-Reset: 2025-05-02T22:11:21Z
 Anthropic-Ratelimit-Tokens-Limit: 280000
-Anthropic-Ratelimit-Tokens-Remaining: 280000
-Anthropic-Ratelimit-Tokens-Reset: 2025-04-30T17:29:47Z
+Anthropic-Ratelimit-Tokens-Remaining: 279000
+Anthropic-Ratelimit-Tokens-Reset: 2025-05-02T22:11:22Z
 Cf-Cache-Status: DYNAMIC
-Cf-Ray: 9388c364d81aed3b-SJC
+Cf-Ray: 939ada9dcb8e2289-SJC
 Content-Type: application/json
-Date: Wed, 30 Apr 2025 17:29:49 GMT
-Request-Id: req_011CNfK7wMYMH3rv3YTfoRHn
+Date: Fri, 02 May 2025 22:11:25 GMT
+Request-Id: req_011CNjUDARocGVEoaiP81APq
 Server: cloudflare
+Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
 Via: 1.1 google
 X-Robots-Tag: none
 
-{"id":"msg_01L6bfTxo2BbKxnFVT9ZdooZ","type":"message","role":"assistant","model":"claude-3-7-sonnet-20250219","content":[{"type":"text","text":"I can access the following tools:\n\n1. `bash` - Run shell commands\n2. `keyword_search` - Search for files containing specific terms\n3. `think` - Record my thoughts and planning\n4. `title` - Set conversation title and create a git branch\n5. `done` - Mark the task as complete with a checklist\n6. `codereview` - Run automated code review\n7. `patch` - Make precise text edits to files\n\nThese tools allow me to explore code, execute commands, make edits, and document my work."}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":4,"cache_creation_input_tokens":2257,"cache_read_input_tokens":0,"output_tokens":126}}
\ No newline at end of file
+{"id":"msg_01Nrq3RXxm1QyGT215WMZGxQ","type":"message","role":"assistant","model":"claude-3-7-sonnet-20250219","content":[{"type":"text","text":"I have access to the following tools:\n\n1. bash - Executes shell commands\n2. keyword_search - Searches for files with specific terms\n3. think - For recording thoughts and plans\n4. title - Sets conversation title and creates a git branch\n5. done - Marks completion of user's goal\n6. codereview - Runs automated code review\n7. multiplechoice - Presents multiple-choice questions\n8. patch - Makes precise text edits to files\n\nThese tools help me assist you with coding tasks, particularly in Go development. How can I help you today?"}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":4,"cache_creation_input_tokens":2602,"cache_read_input_tokens":0,"output_tokens":131}}
\ No newline at end of file
diff --git a/termui/termui.go b/termui/termui.go
index d0bd130..ba08c05 100644
--- a/termui/termui.go
+++ b/termui/termui.go
@@ -46,6 +46,11 @@
  ✏️  {{.input.file_path -}}
 {{else if eq .msg.ToolName "codereview" -}}
  🐛  Running automated code review, may be slow
+{{else if eq .msg.ToolName "multiplechoice" -}}
+ 📝 {{.input.question}}
+{{ range .input.responseOptions -}}
+  - {{ .caption}}: {{.responseText}}
+{{end -}}
 {{else -}}
  🛠️  {{ .msg.ToolName}}: {{.msg.ToolInput -}}
 {{end -}}
diff --git a/webui/src/types.ts b/webui/src/types.ts
index e7d9386..9bc1e6d 100644
--- a/webui/src/types.ts
+++ b/webui/src/types.ts
@@ -85,6 +85,16 @@
 	inside_working_dir?: string;
 }
 
+export interface MultipleChoiceOption {
+	caption: string;
+	responseText: string;
+}
+
+export interface MultipleChoiceParams {
+	question: string;
+	responseOptions: MultipleChoiceOption[] | null;
+}
+
 export type CodingAgentMessageType = 'user' | 'agent' | 'error' | 'budget' | 'tool' | 'commit' | 'auto';
 
 export type Duration = number;
diff --git a/webui/src/web-components/sketch-app-shell.ts b/webui/src/web-components/sketch-app-shell.ts
index b73c83a..c2d5e6a 100644
--- a/webui/src/web-components/sketch-app-shell.ts
+++ b/webui/src/web-components/sketch-app-shell.ts
@@ -16,6 +16,7 @@
 import "./sketch-restart-modal";
 
 import { createRef, ref } from "lit/directives/ref.js";
+import { SketchChatInput } from "./sketch-chat-input";
 
 type ViewMode = "chat" | "diff" | "charts" | "terminal";
 
@@ -389,7 +390,8 @@
     // Binding methods to this
     this._handleViewModeSelect = this._handleViewModeSelect.bind(this);
     this._handleShowCommitDiff = this._handleShowCommitDiff.bind(this);
-    this._handlePopState = this._handlePopState.bind(this);
+    this._handleMutlipleChoiceSelected =
+      this._handleMutlipleChoiceSelected.bind(this);
     this._handleStopClick = this._handleStopClick.bind(this);
     this._handleNotificationsToggle =
       this._handleNotificationsToggle.bind(this);
@@ -427,6 +429,10 @@
     // Add window focus/blur listeners for controlling notifications
     window.addEventListener("focus", this._handleWindowFocus);
     window.addEventListener("blur", this._handleWindowBlur);
+    window.addEventListener(
+      "multiple-choice-selected",
+      this._handleMutlipleChoiceSelected,
+    );
 
     // register event listeners
     this.dataManager.addEventListener(
@@ -460,6 +466,10 @@
     window.removeEventListener("show-commit-diff", this._handleShowCommitDiff);
     window.removeEventListener("focus", this._handleWindowFocus);
     window.removeEventListener("blur", this._handleWindowBlur);
+    window.removeEventListener(
+      "multiple-choice-selected",
+      this._handleMutlipleChoiceSelected,
+    );
 
     // unregister data manager event listeners
     this.dataManager.removeEventListener(
@@ -528,6 +538,10 @@
     }
   }
 
+  private _handleMultipleChoice(event: CustomEvent) {
+    window.console.log("_handleMultipleChoice", event);
+    this._sendChat;
+  }
   /**
    * Listen for commit diff event
    * @param commitHash The commit hash to show diff for
@@ -878,8 +892,20 @@
     this.restartModalOpen = false;
   }
 
+  async _handleMutlipleChoiceSelected(e: CustomEvent) {
+    const chatInput = this.shadowRoot?.querySelector(
+      "sketch-chat-input",
+    ) as SketchChatInput;
+    if (chatInput) {
+      chatInput.content = e.detail.responseText;
+      chatInput.focus();
+    }
+  }
+
   async _sendChat(e: CustomEvent) {
     console.log("app shell: _sendChat", e);
+    e.preventDefault();
+    e.stopPropagation();
     const message = e.detail.message?.trim();
     if (message == "") {
       return;
diff --git a/webui/src/web-components/sketch-tool-calls.ts b/webui/src/web-components/sketch-tool-calls.ts
index 3f036c2..4f49df9 100644
--- a/webui/src/web-components/sketch-tool-calls.ts
+++ b/webui/src/web-components/sketch-tool-calls.ts
@@ -83,6 +83,11 @@
           .open=${open}
           .toolCall=${toolCall}
         ></sketch-tool-card-done>`;
+      case "multiplechoice":
+        return html`<sketch-tool-card-multiple-choice
+          .open=${open}
+          .toolCall=${toolCall}
+        ></sketch-tool-card-multiple-choice>`;
       case "patch":
         return html`<sketch-tool-card-patch
           .open=${open}
diff --git a/webui/src/web-components/sketch-tool-card.ts b/webui/src/web-components/sketch-tool-card.ts
index fc5d0b8..80dd2e9 100644
--- a/webui/src/web-components/sketch-tool-card.ts
+++ b/webui/src/web-components/sketch-tool-card.ts
@@ -1,7 +1,7 @@
 import { css, html, LitElement } from "lit";
 import { unsafeHTML } from "lit/directives/unsafe-html.js";
 import { customElement, property } from "lit/decorators.js";
-import { ToolCall } from "../types";
+import { ToolCall, MultipleChoiceOption, MultipleChoiceParams } from "../types";
 import { marked, MarkedOptions } from "marked";
 
 function renderMarkdown(markdownContent: string): string {
@@ -606,7 +606,7 @@
   open: boolean;
 
   @property()
-  selectedOption: string | number | null = null;
+  selectedOption: MultipleChoiceOption = null;
 
   static styles = css`
     .options-container {
@@ -666,6 +666,7 @@
 
     .summary-text {
       font-style: italic;
+      padding: 0.5em;
     }
 
     .summary-text strong {
@@ -710,14 +711,13 @@
         ).selected;
       } catch (e) {
         console.error("Error parsing result:", e);
-        this.selectedOption = this.toolCall.result_message.tool_result;
       }
     } else {
       this.selectedOption = null;
     }
   }
 
-  handleOptionClick(choice) {
+  async handleOptionClick(choice) {
     // If this option is already selected, unselect it (toggle behavior)
     if (this.selectedOption === choice) {
       this.selectedOption = null;
@@ -727,8 +727,11 @@
     }
 
     // Dispatch a custom event that can be listened to by parent components
-    const event = new CustomEvent("option-selected", {
-      detail: { selected: this.selectedOption },
+    const event = new CustomEvent("multiple-choice-selected", {
+      detail: {
+        responseText: this.selectedOption.responseText,
+        toolCall: this.toolCall,
+      },
       bubbles: true,
       composed: true,
     });
@@ -740,8 +743,10 @@
     let choices = [];
     let question = "";
     try {
-      const inputData = JSON.parse(this.toolCall?.input || "{}");
-      choices = inputData.choices || [];
+      const inputData = JSON.parse(
+        this.toolCall?.input || "{}",
+      ) as MultipleChoiceParams;
+      choices = inputData.responseOptions || [];
       question = inputData.question || "Please select an option:";
     } catch (e) {
       console.error("Error parsing multiple-choice input:", e);
@@ -751,29 +756,24 @@
     const summaryContent =
       this.selectedOption !== null
         ? html`<span class="summary-text"
-            >${question}: <strong>${this.selectedOption}</strong></span
+            >${question}: <strong>${this.selectedOption.caption}</strong></span
           >`
         : html`<span class="summary-text">${question}</span>`;
 
-    return html` <sketch-tool-card
-      .open=${this.open}
-      .toolCall=${this.toolCall}
-    >
-      <span slot="summary">${summaryContent}</span>
-      <div slot="input">
-        <p>${question}</p>
+    return html`
+      <div class="multiple-choice-card">
+        ${summaryContent}
         <div class="options-container">
-          ${choices.map((choice, index) => {
+          ${choices.map((choice) => {
             const isSelected =
-              this.selectedOption !== null &&
-              (this.selectedOption === choice || this.selectedOption === index);
+              this.selectedOption !== null && this.selectedOption === choice;
             return html`
               <div
                 class="option ${isSelected ? "selected" : ""}"
                 @click=${() => this.handleOptionClick(choice)}
+                title="${choice.responseText}"
               >
-                <span class="option-index">${index + 1}</span>
-                <span class="option-label">${choice}</span>
+                <span class="option-label">${choice.caption}</span>
                 ${isSelected
                   ? html`<span class="option-checkmark">✓</span>`
                   : ""}
@@ -782,12 +782,7 @@
           })}
         </div>
       </div>
-      <div slot="result">
-        ${this.toolCall?.result_message && this.selectedOption
-          ? html`<p>Selected: <strong>${this.selectedOption}</strong></p>`
-          : ""}
-      </div>
-    </sketch-tool-card>`;
+    `;
   }
 }
 
