Browse Source

feat follow up suggest (#1783)

* feat follow up suggest

* Cleanup

---------

Co-authored-by: Matt Rubens <[email protected]>
Sam Hoang Van 9 months ago
parent
commit
f1efeca554

+ 27 - 3
package-lock.json

@@ -31,6 +31,7 @@
 				"diff": "^5.2.0",
 				"diff": "^5.2.0",
 				"diff-match-patch": "^1.0.5",
 				"diff-match-patch": "^1.0.5",
 				"fast-deep-equal": "^3.1.3",
 				"fast-deep-equal": "^3.1.3",
+				"fast-xml-parser": "^4.5.1",
 				"fastest-levenshtein": "^1.0.16",
 				"fastest-levenshtein": "^1.0.16",
 				"fzf": "^0.5.2",
 				"fzf": "^0.5.2",
 				"get-folder-size": "^5.0.0",
 				"get-folder-size": "^5.0.0",
@@ -1458,6 +1459,28 @@
 				"node": ">=16.0.0"
 				"node": ">=16.0.0"
 			}
 			}
 		},
 		},
+		"node_modules/@aws-sdk/core/node_modules/fast-xml-parser": {
+			"version": "4.4.1",
+			"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz",
+			"integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/NaturalIntelligence"
+				},
+				{
+					"type": "paypal",
+					"url": "https://paypal.me/naturalintelligence"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"strnum": "^1.0.5"
+			},
+			"bin": {
+				"fxparser": "src/cli/cli.js"
+			}
+		},
 		"node_modules/@aws-sdk/core/node_modules/tslib": {
 		"node_modules/@aws-sdk/core/node_modules/tslib": {
 			"version": "2.8.1",
 			"version": "2.8.1",
 			"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
 			"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
@@ -8957,9 +8980,9 @@
 			"dev": true
 			"dev": true
 		},
 		},
 		"node_modules/fast-xml-parser": {
 		"node_modules/fast-xml-parser": {
-			"version": "4.4.1",
-			"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz",
-			"integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==",
+			"version": "4.5.1",
+			"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.1.tgz",
+			"integrity": "sha512-y655CeyUQ+jj7KBbYMc4FG01V8ZQqjN+gDYGJ50RtfsUB8iG9AmwmwoAgeKLJdmueKKMrH1RJ7yXHTSoczdv5w==",
 			"funding": [
 			"funding": [
 				{
 				{
 					"type": "github",
 					"type": "github",
@@ -8970,6 +8993,7 @@
 					"url": "https://paypal.me/naturalintelligence"
 					"url": "https://paypal.me/naturalintelligence"
 				}
 				}
 			],
 			],
+			"license": "MIT",
 			"dependencies": {
 			"dependencies": {
 				"strnum": "^1.0.5"
 				"strnum": "^1.0.5"
 			},
 			},

+ 1 - 0
package.json

@@ -362,6 +362,7 @@
 		"diff": "^5.2.0",
 		"diff": "^5.2.0",
 		"diff-match-patch": "^1.0.5",
 		"diff-match-patch": "^1.0.5",
 		"fast-deep-equal": "^3.1.3",
 		"fast-deep-equal": "^3.1.3",
+		"fast-xml-parser": "^4.5.1",
 		"fastest-levenshtein": "^1.0.16",
 		"fastest-levenshtein": "^1.0.16",
 		"fzf": "^0.5.2",
 		"fzf": "^0.5.2",
 		"get-folder-size": "^5.0.0",
 		"get-folder-size": "^5.0.0",

+ 47 - 3
src/core/Cline.ts

@@ -79,6 +79,7 @@ import { DiffStrategy, getDiffStrategy } from "./diff/DiffStrategy"
 import { insertGroups } from "./diff/insert-groups"
 import { insertGroups } from "./diff/insert-groups"
 import { telemetryService } from "../services/telemetry/TelemetryService"
 import { telemetryService } from "../services/telemetry/TelemetryService"
 import { validateToolUse, isToolAllowedForMode, ToolName } from "./mode-validator"
 import { validateToolUse, isToolAllowedForMode, ToolName } from "./mode-validator"
+import { parseXml } from "../utils/xml"
 import { readLines } from "../integrations/misc/read-lines"
 import { readLines } from "../integrations/misc/read-lines"
 import { getWorkspacePath } from "../utils/path"
 import { getWorkspacePath } from "../utils/path"
 
 
@@ -2324,8 +2325,6 @@ export class Cline extends EventEmitter<ClineEvents> {
 								let sourceCodeDef = ""
 								let sourceCodeDef = ""
 
 
 								if (isRangeRead) {
 								if (isRangeRead) {
-									// Read specific lines (startLine is guaranteed to be defined if isRangeRead is true)
-									console.log("Reading specific lines", startLine, endLine, startLineStr, endLineStr)
 									if (startLine === undefined) {
 									if (startLine === undefined) {
 										content = addLineNumbers(await readLines(absolutePath, endLine, startLine))
 										content = addLineNumbers(await readLines(absolutePath, endLine, startLine))
 									} else {
 									} else {
@@ -2868,6 +2867,7 @@ export class Cline extends EventEmitter<ClineEvents> {
 					}
 					}
 					case "ask_followup_question": {
 					case "ask_followup_question": {
 						const question: string | undefined = block.params.question
 						const question: string | undefined = block.params.question
+						const follow_up: string | undefined = block.params.follow_up
 						try {
 						try {
 							if (block.partial) {
 							if (block.partial) {
 								await this.ask("followup", removeClosingTag("question", question), block.partial).catch(
 								await this.ask("followup", removeClosingTag("question", question), block.partial).catch(
@@ -2882,8 +2882,52 @@ export class Cline extends EventEmitter<ClineEvents> {
 									)
 									)
 									break
 									break
 								}
 								}
+
+								if (!follow_up) {
+									this.consecutiveMistakeCount++
+									pushToolResult(
+										await this.sayAndCreateMissingParamError("ask_followup_question", "follow_up"),
+									)
+									break
+								}
+
+								let normalizedSuggest = null
+
+								type Suggest = {
+									answer: string
+								}
+
+								let parsedSuggest: {
+									suggest: Suggest[] | Suggest
+								}
+
+								try {
+									parsedSuggest = parseXml(follow_up, ["suggest"]) as {
+										suggest: Suggest[] | Suggest
+									}
+								} catch (error) {
+									this.consecutiveMistakeCount++
+									await this.say("error", `Failed to parse operations: ${error.message}`)
+									pushToolResult(formatResponse.toolError("Invalid operations xml format"))
+									break
+								}
+
 								this.consecutiveMistakeCount = 0
 								this.consecutiveMistakeCount = 0
-								const { text, images } = await this.ask("followup", question, false)
+
+								normalizedSuggest = Array.isArray(parsedSuggest?.suggest)
+									? parsedSuggest.suggest
+									: [parsedSuggest?.suggest].filter((sug): sug is Suggest => sug !== undefined)
+
+								const follow_up_json = {
+									question,
+									suggest: normalizedSuggest,
+								}
+
+								const { text, images } = await this.ask(
+									"followup",
+									JSON.stringify(follow_up_json),
+									false,
+								)
 								await this.say("user_feedback", text ?? "", images)
 								await this.say("user_feedback", text ?? "", images)
 								pushToolResult(formatResponse.toolResult(`<answer>\n${text}\n</answer>`, images))
 								pushToolResult(formatResponse.toolResult(`<answer>\n${text}\n</answer>`, images))
 								break
 								break

+ 2 - 1
src/core/assistant-message/index.ts

@@ -57,6 +57,7 @@ export const toolParamNames = [
 	"mode",
 	"mode",
 	"message",
 	"message",
 	"cwd",
 	"cwd",
+	"follow_up",
 ] as const
 ] as const
 
 
 export type ToolParamName = (typeof toolParamNames)[number]
 export type ToolParamName = (typeof toolParamNames)[number]
@@ -122,7 +123,7 @@ export interface AccessMcpResourceToolUse extends ToolUse {
 
 
 export interface AskFollowupQuestionToolUse extends ToolUse {
 export interface AskFollowupQuestionToolUse extends ToolUse {
 	name: "ask_followup_question"
 	name: "ask_followup_question"
-	params: Partial<Pick<Record<ToolParamName, string>, "question">>
+	params: Partial<Pick<Record<ToolParamName, string>, "question" | "follow_up">>
 }
 }
 
 
 export interface AttemptCompletionToolUse extends ToolUse {
 export interface AttemptCompletionToolUse extends ToolUse {

+ 225 - 15
src/core/prompts/__tests__/__snapshots__/system.test.ts.snap

@@ -185,14 +185,28 @@ Example: Requesting to execute ls in a specific directory if directed
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 ## attempt_completion
 ## attempt_completion
@@ -311,7 +325,7 @@ RULES
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
@@ -633,14 +647,28 @@ Example: Requesting to execute ls in a specific directory if directed
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 ## attempt_completion
 ## attempt_completion
@@ -763,7 +791,7 @@ RULES
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
@@ -1050,14 +1078,28 @@ Example: Requesting to execute ls in a specific directory if directed
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 ## attempt_completion
 ## attempt_completion
@@ -1179,7 +1221,7 @@ RULES
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
@@ -1416,14 +1458,28 @@ Example: Requesting to execute ls in a specific directory if directed
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 ## attempt_completion
 ## attempt_completion
@@ -1542,7 +1598,7 @@ RULES
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
@@ -1779,14 +1835,28 @@ Example: Requesting to execute ls in a specific directory if directed
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 ## attempt_completion
 ## attempt_completion
@@ -1905,7 +1975,7 @@ RULES
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
@@ -2142,14 +2212,28 @@ Example: Requesting to execute ls in a specific directory if directed
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 ## attempt_completion
 ## attempt_completion
@@ -2268,7 +2352,7 @@ RULES
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
@@ -2551,14 +2635,28 @@ Example: Requesting to execute ls in a specific directory if directed
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 ## attempt_completion
 ## attempt_completion
@@ -2679,7 +2777,7 @@ RULES
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
@@ -2966,14 +3064,28 @@ Example: Requesting to access an MCP resource
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 ## attempt_completion
 ## attempt_completion
@@ -3497,7 +3609,7 @@ RULES
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
@@ -3780,14 +3892,28 @@ Example: Requesting to execute ls in a specific directory if directed
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 ## attempt_completion
 ## attempt_completion
@@ -3908,7 +4034,7 @@ RULES
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
@@ -4206,14 +4332,28 @@ Example: Requesting to execute ls in a specific directory if directed
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 ## attempt_completion
 ## attempt_completion
@@ -4334,7 +4474,7 @@ RULES
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
@@ -4571,14 +4711,28 @@ Example: Requesting to execute ls in a specific directory if directed
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 ## attempt_completion
 ## attempt_completion
@@ -4697,7 +4851,7 @@ RULES
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
@@ -5110,14 +5264,28 @@ Example: Requesting to access an MCP resource
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 ## attempt_completion
 ## attempt_completion
@@ -5249,7 +5417,7 @@ RULES
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
@@ -5564,14 +5732,28 @@ Example: Replace all occurrences of "old" with "new" using regex
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 ## attempt_completion
 ## attempt_completion
@@ -5690,7 +5872,7 @@ RULES
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
@@ -5881,14 +6063,28 @@ Example: Requesting to list all top level source code definitions in the current
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 ## attempt_completion
 ## attempt_completion
@@ -6007,7 +6203,7 @@ RULES
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
@@ -6411,14 +6607,28 @@ Example: Requesting to access an MCP resource
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 ## attempt_completion
 ## attempt_completion
@@ -6942,7 +7152,7 @@ RULES
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.

+ 1 - 1
src/core/prompts/sections/rules.ts

@@ -74,7 +74,7 @@ ${getEditingInstructions(diffStrategy, experiments)}
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
   * For example, in architect mode trying to edit app.js would be rejected because architect mode can only edit files matching "\\.md$"
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - When making changes to code, always consider the context in which the code is being used. Ensure that your changes are compatible with the existing codebase and that they follow the project's coding standards and best practices.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
 - Do not ask for more information than necessary. Use the tools provided to accomplish the user's request efficiently and effectively. When you've completed your task, you must use the attempt_completion tool to present the result to the user. The user may provide feedback, which you can use to make improvements and try again.
-- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
+- You are only allowed to ask the user questions using the ask_followup_question tool. Use this tool only when you need additional details to complete a task, and be sure to use a clear and concise question that will help you move forward with the task. When you ask a question, provide the user with 2-4 suggested answers based on your question so they don't need to do so much typing. The suggestions should be specific, actionable, and directly related to the completed task. They should be ordered by priority or logical sequence. However if you can use the available tools to avoid having to ask the user questions, you should do so. For example, if the user mentions a file that may be in an outside directory like the Desktop, you should use the list_files tool to list the files in the Desktop and check if the file they are talking about is there, rather than asking the user to provide the file path themselves.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - When executing commands, if you don't see the expected output, assume the terminal executed the command successfully and proceed with the task. The user's terminal may be unable to stream the output back properly. If you absolutely need to see the actual terminal output, use the ask_followup_question tool to request the user to copy and paste it back to you.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - The user may provide a file's contents directly in their message, in which case you shouldn't use the read_file tool to get the file contents again since you already have it.
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.${
 - Your goal is to try to accomplish the user's task, NOT engage in a back and forth conversation.${

+ 14 - 0
src/core/prompts/tools/ask-followup-question.ts

@@ -3,13 +3,27 @@ export function getAskFollowupQuestionDescription(): string {
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Description: Ask the user a question to gather additional information needed to complete the task. This tool should be used when you encounter ambiguities, need clarification, or require more details to proceed effectively. It allows for interactive problem-solving by enabling direct communication with the user. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.
 Parameters:
 Parameters:
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
 - question: (required) The question to ask the user. This should be a clear, specific question that addresses the information you need.
+- follow_up: (required) A list of 2-4 suggested answers that logically follow from the question, ordered by priority or logical sequence. Each suggestion must:
+  1. Be provided in its own <suggest> tag
+  2. Be specific, actionable, and directly related to the completed task
+  3. Be a complete answer to the question - the user should not need to provide additional information or fill in any missing details
 Usage:
 Usage:
 <ask_followup_question>
 <ask_followup_question>
 <question>Your question here</question>
 <question>Your question here</question>
+<follow_up>
+<suggest>
+Your suggested answer here
+</suggest>
+</follow_up>
 </ask_followup_question>
 </ask_followup_question>
 
 
 Example: Requesting to ask the user for the path to the frontend-config.json file
 Example: Requesting to ask the user for the path to the frontend-config.json file
 <ask_followup_question>
 <ask_followup_question>
 <question>What is the path to the frontend-config.json file?</question>
 <question>What is the path to the frontend-config.json file?</question>
+<follow_up>
+<suggest>./src/frontend-config.json</suggest>
+<suggest>./config/frontend-config.json</suggest>
+<suggest>./frontend-config.json</suggest>
+</follow_up>
 </ask_followup_question>`
 </ask_followup_question>`
 }
 }

+ 30 - 0
src/utils/xml.ts

@@ -0,0 +1,30 @@
+import { XMLParser } from "fast-xml-parser"
+
+/**
+ * Parses an XML string into a JavaScript object
+ * @param xmlString The XML string to parse
+ * @returns Parsed JavaScript object representation of the XML
+ * @throws Error if the XML is invalid or parsing fails
+ */
+export function parseXml(xmlString: string, stopNodes?: string[]): unknown {
+	const _stopNodes = stopNodes ?? []
+	try {
+		const parser = new XMLParser({
+			// Preserve attribute types (don't convert numbers/booleans)
+			ignoreAttributes: false,
+			attributeNamePrefix: "@_",
+			// Parse numbers and booleans in text nodes
+			parseAttributeValue: true,
+			parseTagValue: true,
+			// Trim whitespace from text nodes
+			trimValues: true,
+			stopNodes: _stopNodes,
+		})
+
+		return parser.parse(xmlString)
+	} catch (error) {
+		// Enhance error message for better debugging
+		const errorMessage = error instanceof Error ? error.message : "Unknown error"
+		throw new Error(`Failed to parse XML: ${errorMessage}`)
+	}
+}

+ 17 - 2
webview-ui/src/components/chat/ChatRow.tsx

@@ -23,6 +23,7 @@ import McpResourceRow from "../mcp/McpResourceRow"
 import McpToolRow from "../mcp/McpToolRow"
 import McpToolRow from "../mcp/McpToolRow"
 import { highlightMentions } from "./TaskHeader"
 import { highlightMentions } from "./TaskHeader"
 import { CheckpointSaved } from "./checkpoints/CheckpointSaved"
 import { CheckpointSaved } from "./checkpoints/CheckpointSaved"
+import FollowUpSuggest from "./FollowUpSuggest"
 
 
 interface ChatRowProps {
 interface ChatRowProps {
 	message: ClineMessage
 	message: ClineMessage
@@ -32,6 +33,7 @@ interface ChatRowProps {
 	isStreaming: boolean
 	isStreaming: boolean
 	onToggleExpand: () => void
 	onToggleExpand: () => void
 	onHeightChange: (isTaller: boolean) => void
 	onHeightChange: (isTaller: boolean) => void
+	onSuggestionClick?: (answer: string) => void
 }
 }
 
 
 interface ChatRowContentProps extends Omit<ChatRowProps, "onHeightChange"> {}
 interface ChatRowContentProps extends Omit<ChatRowProps, "onHeightChange"> {}
@@ -78,6 +80,7 @@ export const ChatRowContent = ({
 	isLast,
 	isLast,
 	isStreaming,
 	isStreaming,
 	onToggleExpand,
 	onToggleExpand,
+	onSuggestionClick,
 }: ChatRowContentProps) => {
 }: ChatRowContentProps) => {
 	const { t } = useTranslation()
 	const { t } = useTranslation()
 	const { mcpServers, alwaysAllowMcp, currentCheckpoint } = useExtensionState()
 	const { mcpServers, alwaysAllowMcp, currentCheckpoint } = useExtensionState()
@@ -248,6 +251,13 @@ export const ChatRowContent = ({
 		return null
 		return null
 	}, [message.ask, message.say, message.text])
 	}, [message.ask, message.say, message.text])
 
 
+	const followUpData = useMemo(() => {
+		if (message.type === "ask" && message.ask === "followup" && message.partial === false) {
+			return JSON.parse(message.text || "{}")
+		}
+		return null
+	}, [message.type, message.ask, message.partial, message.text])
+
 	if (tool) {
 	if (tool) {
 		const toolIcon = (name: string) => (
 		const toolIcon = (name: string) => (
 			<span
 			<span
@@ -995,9 +1005,14 @@ export const ChatRowContent = ({
 									{title}
 									{title}
 								</div>
 								</div>
 							)}
 							)}
-							<div style={{ paddingTop: 10 }}>
-								<Markdown markdown={message.text} />
+							<div style={{ paddingTop: 10, paddingBottom: 15 }}>
+								<Markdown markdown={followUpData?.question} />
 							</div>
 							</div>
+							<FollowUpSuggest
+								suggestions={followUpData?.suggest}
+								onSuggestionClick={onSuggestionClick}
+								ts={message?.ts}
+							/>
 						</>
 						</>
 					)
 					)
 				default:
 				default:

+ 4 - 0
webview-ui/src/components/chat/ChatView.tsx

@@ -1013,6 +1013,9 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 					isLast={index === groupedMessages.length - 1}
 					isLast={index === groupedMessages.length - 1}
 					onHeightChange={handleRowHeightChange}
 					onHeightChange={handleRowHeightChange}
 					isStreaming={isStreaming}
 					isStreaming={isStreaming}
+					onSuggestionClick={(answer: string) => {
+						handleSendMessage(answer, [])
+					}}
 				/>
 				/>
 			)
 			)
 		},
 		},
@@ -1023,6 +1026,7 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 			handleRowHeightChange,
 			handleRowHeightChange,
 			isStreaming,
 			isStreaming,
 			toggleRowExpansion,
 			toggleRowExpansion,
+			handleSendMessage,
 		],
 		],
 	)
 	)
 
 

+ 45 - 0
webview-ui/src/components/chat/FollowUpSuggest.tsx

@@ -0,0 +1,45 @@
+import { useCallback } from "react"
+import { cn } from "../../lib/utils"
+import { Button } from "../ui/button"
+
+interface FollowUpSuggestProps {
+	suggestions?: string[]
+	onSuggestionClick?: (answer: string) => void
+	ts: number
+}
+
+const FollowUpSuggest = ({ suggestions = [], onSuggestionClick, ts = 1 }: FollowUpSuggestProps) => {
+	const handleSuggestionClick = useCallback(
+		(suggestion: string) => {
+			onSuggestionClick?.(suggestion)
+		},
+		[onSuggestionClick],
+	)
+
+	// Don't render if there are no suggestions or no click handler
+	if (!suggestions?.length || !onSuggestionClick) {
+		return null
+	}
+
+	return (
+		<div className="h-full">
+			<div className="h-full scrollbar-thin scrollbar-thumb-vscode-scrollbarSlider-background scrollbar-track-transparent">
+				<div className={cn("flex gap-2.5 pb-2 flex-col h-full")}>
+					{suggestions.map((suggestion) => (
+						<div key={`${suggestion}-${ts}`} className="w-full">
+							<Button
+								variant="outline"
+								className="w-full text-left whitespace-normal break-words h-auto min-h-[28px] py-2 justify-start"
+								onClick={() => handleSuggestionClick(suggestion)}
+								aria-label={suggestion}>
+								<span className="text-left">{suggestion}</span>
+							</Button>
+						</div>
+					))}
+				</div>
+			</div>
+		</div>
+	)
+}
+
+export default FollowUpSuggest