diff --git a/docs/cli/settings.md b/docs/cli/settings.md index 29181f928b..85471807ca 100644 --- a/docs/cli/settings.md +++ b/docs/cli/settings.md @@ -120,6 +120,7 @@ they appear in the UI. | Codebase Investigator Max Num Turns | `experimental.codebaseInvestigatorSettings.maxNumTurns` | Maximum number of turns for the Codebase Investigator agent. | `10` | | Use OSC 52 Paste | `experimental.useOSC52Paste` | Use OSC 52 sequence for pasting instead of clipboardy (useful for remote sessions). | `false` | | Enable CLI Help Agent | `experimental.cliHelpAgentSettings.enabled` | Enable the CLI Help Agent. | `true` | +| Plan | `experimental.plan` | Enable planning features (Plan Mode and tools). | `false` | ### Hooks diff --git a/docs/get-started/configuration.md b/docs/get-started/configuration.md index d845c33692..d0ae56041c 100644 --- a/docs/get-started/configuration.md +++ b/docs/get-started/configuration.md @@ -887,6 +887,11 @@ their corresponding top-level category object in your `settings.json` file. - **Default:** `true` - **Requires restart:** Yes +- **`experimental.plan`** (boolean): + - **Description:** Enable planning features (Plan Mode and tools). + - **Default:** `false` + - **Requires restart:** Yes + #### `skills` - **`skills.disabled`** (array): diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index 137e01d943..341226fed2 100755 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -706,6 +706,7 @@ export async function loadCliConfig( extensionLoader: extensionManager, enableExtensionReloading: settings.experimental?.extensionReloading, enableAgents: settings.experimental?.enableAgents, + plan: settings.experimental?.plan, skillsSupport: settings.experimental?.skills, disabledSkills: settings.skills?.disabled, experimentalJitContext: settings.experimental?.jitContext, diff --git a/packages/cli/src/config/settingsSchema.test.ts b/packages/cli/src/config/settingsSchema.test.ts index e5706e0d6f..03f7a6e313 100644 --- a/packages/cli/src/config/settingsSchema.test.ts +++ b/packages/cli/src/config/settingsSchema.test.ts @@ -357,6 +357,19 @@ describe('SettingsSchema', () => { ); }); + it('should have plan setting in schema', () => { + const setting = getSettingsSchema().experimental.properties.plan; + expect(setting).toBeDefined(); + expect(setting.type).toBe('boolean'); + expect(setting.category).toBe('Experimental'); + expect(setting.default).toBe(false); + expect(setting.requiresRestart).toBe(true); + expect(setting.showInDialog).toBe(true); + expect(setting.description).toBe( + 'Enable planning features (Plan Mode and tools).', + ); + }); + it('should have hooks.notifications setting in schema', () => { const setting = getSettingsSchema().hooks.properties.notifications; expect(setting).toBeDefined(); diff --git a/packages/cli/src/config/settingsSchema.ts b/packages/cli/src/config/settingsSchema.ts index 229eebf81d..b7d4cbb296 100644 --- a/packages/cli/src/config/settingsSchema.ts +++ b/packages/cli/src/config/settingsSchema.ts @@ -1540,6 +1540,15 @@ const SETTINGS_SCHEMA = { }, }, }, + plan: { + type: 'boolean', + label: 'Plan', + category: 'Experimental', + requiresRestart: true, + default: false, + description: 'Enable planning features (Plan Mode and tools).', + showInDialog: true, + }, }, }, diff --git a/packages/core/src/config/config.test.ts b/packages/core/src/config/config.test.ts index ab389bea01..225b687380 100644 --- a/packages/core/src/config/config.test.ts +++ b/packages/core/src/config/config.test.ts @@ -1924,6 +1924,29 @@ describe('Config Quota & Preview Model Access', () => { expect(config.getModel()).toBe(PREVIEW_GEMINI_MODEL); }); }); + + describe('isPlanEnabled', () => { + it('should return false by default', () => { + const config = new Config(baseParams); + expect(config.isPlanEnabled()).toBe(false); + }); + + it('should return true when plan is enabled', () => { + const config = new Config({ + ...baseParams, + plan: true, + }); + expect(config.isPlanEnabled()).toBe(true); + }); + + it('should return false when plan is explicitly disabled', () => { + const config = new Config({ + ...baseParams, + plan: false, + }); + expect(config.isPlanEnabled()).toBe(false); + }); + }); }); describe('Config JIT Initialization', () => { diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index 5e77a93ab8..08bd18216d 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -380,6 +380,7 @@ export interface ConfigParameters { adminSkillsEnabled?: boolean; experimentalJitContext?: boolean; disableLLMCorrection?: boolean; + plan?: boolean; onModelChange?: (model: string) => void; mcpEnabled?: boolean; extensionsEnabled?: boolean; @@ -531,6 +532,7 @@ export class Config { private readonly experimentalJitContext: boolean; private readonly disableLLMCorrection: boolean; + private readonly planEnabled: boolean; private contextManager?: ContextManager; private terminalBackground: string | undefined = undefined; private remoteAdminSettings: GeminiCodeAssistSetting | undefined; @@ -602,6 +604,7 @@ export class Config { this.enableAgents = params.enableAgents ?? false; this.agents = params.agents ?? {}; this.disableLLMCorrection = params.disableLLMCorrection ?? false; + this.planEnabled = params.plan ?? false; this.skillsSupport = params.skillsSupport ?? false; this.disabledSkills = params.disabledSkills ?? []; this.adminSkillsEnabled = params.adminSkillsEnabled ?? true; @@ -1469,6 +1472,10 @@ export class Config { return this.disableLLMCorrection; } + isPlanEnabled(): boolean { + return this.planEnabled; + } + isAgentsEnabled(): boolean { return this.enableAgents; } diff --git a/schemas/settings.schema.json b/schemas/settings.schema.json index a976c19fd6..4b99ec4632 100644 --- a/schemas/settings.schema.json +++ b/schemas/settings.schema.json @@ -1489,6 +1489,13 @@ } }, "additionalProperties": false + }, + "plan": { + "title": "Plan", + "description": "Enable planning features (Plan Mode and tools).", + "markdownDescription": "Enable planning features (Plan Mode and tools).\n\n- Category: `Experimental`\n- Requires restart: `yes`\n- Default: `false`", + "default": false, + "type": "boolean" } }, "additionalProperties": false