diff --git a/apps/code/src/renderer/features/sessions/service/service.ts b/apps/code/src/renderer/features/sessions/service/service.ts
index 5303baaec..5962c8d38 100644
--- a/apps/code/src/renderer/features/sessions/service/service.ts
+++ b/apps/code/src/renderer/features/sessions/service/service.ts
@@ -660,8 +660,15 @@ export class SessionService {
sessionStoreSetters.setSession(session);
try {
- const { customInstructions: previewCustomInstructions } =
- useSettingsStore.getState();
+ const {
+ customInstructions: previewCustomInstructions,
+ defaultInitialTaskMode,
+ lastUsedInitialTaskMode,
+ } = useSettingsStore.getState();
+ const initialMode =
+ defaultInitialTaskMode === "last_used"
+ ? lastUsedInitialTaskMode
+ : "plan";
const result = await trpcClient.agent.start.mutate({
taskId: PREVIEW_TASK_ID,
taskRunId,
@@ -670,7 +677,7 @@ export class SessionService {
apiHost: auth.apiHost,
projectId: auth.projectId,
adapter: params.adapter,
- permissionMode: "plan",
+ permissionMode: initialMode,
customInstructions: previewCustomInstructions || undefined,
});
diff --git a/apps/code/src/renderer/features/settings/components/sections/GeneralSettings.tsx b/apps/code/src/renderer/features/settings/components/sections/GeneralSettings.tsx
index 572b019dc..f08d9ec2c 100644
--- a/apps/code/src/renderer/features/settings/components/sections/GeneralSettings.tsx
+++ b/apps/code/src/renderer/features/settings/components/sections/GeneralSettings.tsx
@@ -3,6 +3,7 @@ import { SettingRow } from "@features/settings/components/SettingRow";
import {
type AutoConvertLongText,
type CompletionSound,
+ type DefaultInitialTaskMode,
type DiffOpenMode,
type SendMessagesWith,
useSettingsStore,
@@ -101,6 +102,7 @@ export function GeneralSettings() {
completionSound,
completionVolume,
autoConvertLongText,
+ defaultInitialTaskMode,
diffOpenMode,
sendMessagesWith,
hedgehogMode,
@@ -110,6 +112,7 @@ export function GeneralSettings() {
setCompletionSound,
setCompletionVolume,
setAutoConvertLongText,
+ setDefaultInitialTaskMode,
setDiffOpenMode,
setSendMessagesWith,
setHedgehogMode,
@@ -315,6 +318,18 @@ export function GeneralSettings() {
[diffOpenMode, setDiffOpenMode],
);
+ const handleDefaultInitialTaskModeChange = useCallback(
+ (value: DefaultInitialTaskMode) => {
+ track(ANALYTICS_EVENTS.SETTING_CHANGED, {
+ setting_name: "default_initial_task_mode",
+ new_value: value,
+ old_value: defaultInitialTaskMode,
+ });
+ setDefaultInitialTaskMode(value);
+ },
+ [defaultInitialTaskMode, setDefaultInitialTaskMode],
+ );
+
const handleSendMessagesWithChange = useCallback(
(value: SendMessagesWith) => {
track(ANALYTICS_EVENTS.SETTING_CHANGED, {
@@ -522,6 +537,25 @@ export function GeneralSettings() {
Input
+
+
+ handleDefaultInitialTaskModeChange(value as DefaultInitialTaskMode)
+ }
+ size="1"
+ >
+
+
+ Plan
+ Last used
+
+
+
+
void;
setDebugLogsCloudRuns: (enabled: boolean) => void;
setCustomInstructions: (instructions: string) => void;
+ setDefaultInitialTaskMode: (mode: DefaultInitialTaskMode) => void;
+ setLastUsedInitialTaskMode: (mode: ExecutionMode) => void;
setDiffOpenMode: (mode: DiffOpenMode) => void;
setHedgehogMode: (enabled: boolean) => void;
setMcpAppsDisabledServers: (servers: string[]) => void;
@@ -95,6 +101,8 @@ export const useSettingsStore = create()(
preventSleepWhileRunning: false,
debugLogsCloudRuns: false,
customInstructions: "",
+ defaultInitialTaskMode: "plan",
+ lastUsedInitialTaskMode: "plan",
diffOpenMode: "auto",
hedgehogMode: false,
mcpAppsDisabledServers: [],
@@ -163,6 +171,10 @@ export const useSettingsStore = create()(
setDebugLogsCloudRuns: (enabled) => set({ debugLogsCloudRuns: enabled }),
setCustomInstructions: (instructions) =>
set({ customInstructions: instructions }),
+ setDefaultInitialTaskMode: (mode) =>
+ set({ defaultInitialTaskMode: mode }),
+ setLastUsedInitialTaskMode: (mode) =>
+ set({ lastUsedInitialTaskMode: mode }),
setDiffOpenMode: (mode) => set({ diffOpenMode: mode }),
setHedgehogMode: (enabled) => set({ hedgehogMode: enabled }),
setMcpAppsDisabledServers: (servers) =>
@@ -191,6 +203,8 @@ export const useSettingsStore = create()(
preventSleepWhileRunning: state.preventSleepWhileRunning,
debugLogsCloudRuns: state.debugLogsCloudRuns,
customInstructions: state.customInstructions,
+ defaultInitialTaskMode: state.defaultInitialTaskMode,
+ lastUsedInitialTaskMode: state.lastUsedInitialTaskMode,
diffOpenMode: state.diffOpenMode,
hedgehogMode: state.hedgehogMode,
hints: state.hints,
diff --git a/apps/code/src/renderer/features/task-detail/components/TaskInput.tsx b/apps/code/src/renderer/features/task-detail/components/TaskInput.tsx
index 87353c4ff..fa443d497 100644
--- a/apps/code/src/renderer/features/task-detail/components/TaskInput.tsx
+++ b/apps/code/src/renderer/features/task-detail/components/TaskInput.tsx
@@ -47,6 +47,8 @@ export function TaskInput() {
allowBypassPermissions,
setLastUsedEnvironment,
getLastUsedEnvironment,
+ defaultInitialTaskMode,
+ lastUsedInitialTaskMode,
} = useSettingsStore();
const editorRef = useRef(null);
@@ -137,9 +139,11 @@ export function TaskInput() {
// Get current values from preview session config options for task creation.
// Defaults ensure values are always passed even before the preview session loads.
const currentModel = modelOption?.currentValue;
+ const modeFallback =
+ defaultInitialTaskMode === "last_used" ? lastUsedInitialTaskMode : "plan";
const currentExecutionMode =
getCurrentModeFromConfigOptions(modeOption ? [modeOption] : undefined) ??
- "plan";
+ modeFallback;
const currentReasoningLevel = thoughtOption?.currentValue;
const branchForTaskCreation =
diff --git a/apps/code/src/renderer/features/task-detail/hooks/useTaskCreation.ts b/apps/code/src/renderer/features/task-detail/hooks/useTaskCreation.ts
index 887612e98..bd214838a 100644
--- a/apps/code/src/renderer/features/task-detail/hooks/useTaskCreation.ts
+++ b/apps/code/src/renderer/features/task-detail/hooks/useTaskCreation.ts
@@ -4,6 +4,7 @@ import {
contentToXml,
extractFilePaths,
} from "@features/message-editor/utils/content";
+import { useSettingsStore } from "@features/settings/stores/settingsStore";
import { useCreateTask } from "@features/tasks/hooks/useTasks";
import { useConnectivity } from "@hooks/useConnectivity";
import type { WorkspaceMode } from "@main/services/workspace/schemas";
@@ -135,6 +136,10 @@ export function useTaskCreation({
environmentId,
});
+ if (executionMode) {
+ useSettingsStore.getState().setLastUsedInitialTaskMode(executionMode);
+ }
+
const taskService = get(RENDERER_TOKENS.TaskService);
const result = await taskService.createTask(input, (output) => {
invalidateTasks(output.task);