- 
                Notifications
    You must be signed in to change notification settings 
- Fork 9k
Description
Problem
Currently, enabling experimental features in the Gemini CLI requires editing the settings file and toggling each feature individually. This can be tedious for developers and dogfooders who wish to try out all the latest features and provide feedback.
Furthermore, there is no consistent way to mark a feature as "experimental" while keeping it in its logical category (e.g., "tools"). This makes discovery and management of experimental features more challenging.
Proposed Solution
- 
Introduce an isExperimentalflag: Add a new boolean property,isExperimental, to theSettingDefinitioninterface. This will allow features to be marked as experimental while remaining in their logical category.
- 
Audit and standardize experimental flags: All settings for experimental features should be reviewed and updated to include isExperimental: true.
- 
Implement a master experimentModeswitch: A new top-level setting,experimentMode, should be added. This will be an enum with the following values:- 'none'(Default): Each experimental feature is controlled by its individual setting.
- 'all': All features marked with- isExperimental: trueare enabled.
 
Benefits
- Improved Developer Experience: Provides a convenient, single-point configuration to opt-in to all experimental features.
- Streamlined Testing: Makes it significantly easier for testers and early adopters to evaluate new features without manual configuration overhead.
- Enhanced Feedback Loop: Encourages broader adoption and testing of experimental features, leading to more robust feedback and faster iteration.
- Improved Code Maintainability: Creates a scalable and maintainable system for managing experimental features.
- Better UI Organization: Allows experimental features to be displayed in their relevant categories in the settings UI, with a clear indication that they are experimental.
Considerations
- Schema:
- Add isExperimental?: boolean;to theSettingDefinitioninterface.
- Add the experimentModesetting to the schema as an enum with values'none'and'all'.
 
- Add 
- Audit: Review all settings in packages/cli/src/config/settingsSchema.tsand applyisExperimental: trueto all experimental features.
- Configuration: Modify the configuration loading logic in packages/core/src/config/config.tsto check ifsettings.experimentMode === 'all'. If it is, the logic should iterate through the settings schema and override the value of any setting whereisExperimental === truetotrue.
- UI: The settings UI could be updated to visually indicate when a feature is experimental, for example, by checking the isExperimentalflag and appending "[Experimental]" to the setting's label.
- Precedence: The experimentMode: 'all'setting should take precedence over individual experimental feature settings. IfexperimentModeis'all', individualfalsesettings for experimental features should be ignored. IfexperimentModeis'none'or not set, individual settings should be respected.
Future Work: Granular Stability Levels
Once the initial system is in place, it could be extended to provide even more granular control over feature stability. This would involve:
- 
Introducing experimentalMaturity: A new property,experimentalMaturity, could be added to experimental features, with values like:- 'bleeding-edge': For highly experimental features.
- 'stable': For features that are considered stable previews.
 
- 
Expanding experimentMode: TheexperimentModesetting could be expanded with a'stable'option, which would only enable features marked withexperimentalMaturity: 'stable'.
This would create a clear path for features to graduate from "bleeding-edge" to "stable" and eventually to being on by default, allowing users to choose their desired level of exposure to new functionality.