codex-rs/features/src/lib.rs (162 lines):
	- line 447: features.enable(Feature::WebSearchRequest);
	- line 449: features.disable(Feature::WebSearchRequest);
	- line 451: features.record_legacy_usage("web_search_request", Feature::WebSearchRequest);
	- line 476: self.enabled(Feature::Apps) && has_chatgpt_auth
	- line 480: self.enabled(Feature::Apps)
	- line 481: && self.enabled(Feature::Plugins)
	- line 482: && (self.enabled(Feature::ToolSuggest) || self.enabled(Feature::RecommendedPlugins))
	- line 486: self.enabled(Feature::UseLegacyLandlock)
	- line 553: Feature::WebSearchRequest,
	- line 559: Feature::WebSearchCached,
	- line 598: Feature::UseLegacyLandlock,
	- line 603: if k == "imagegenext" && m.contains_key(Feature::ImageGeneration.key()) {
	- line 604: self.record_legacy_usage(k, Feature::ImageGeneration);
	- line 609: if matches!(feat, Feature::TuiAppServer) {
	- line 657: if self.enabled(Feature::CodeModeOnly) && !self.enabled(Feature::CodeMode) {
	- line 658: self.enable(Feature::CodeMode);
	- line 666: Feature::WebSearchRequest | Feature::WebSearchCached => {
	- line 681: Feature::UseLegacyLandlock => {
	- line 786: entries.insert(Feature::CodeMode.key().to_string(), enabled);
	- line 789: entries.insert(Feature::CodeModeHost.key().to_string(), enabled);
	- line 796: entries.insert(Feature::NonPrefixedMcpToolNames.key().to_string(), enabled);
	- line 799: entries.insert(Feature::GuardianV2.key().to_string(), enabled);
	- line 802: entries.insert(Feature::MultiAgentV2.key().to_string(), enabled);
	- line 805: entries.insert(Feature::TokenBudget.key().to_string(), enabled);
	- line 808: entries.insert(Feature::RolloutBudget.key().to_string(), enabled);
	- line 815: entries.insert(Feature::CurrentTimeReminder.key().to_string(), enabled);
	- line 818: entries.insert(Feature::NetworkProxy.key().to_string(), enabled);
	- line 821: entries.insert(Feature::SleepTool.key().to_string(), enabled);
	- line 871: id: Feature::TranscriptV2,
	- line 878: id: Feature::GhostCommit,
	- line 884: id: Feature::ShellTool,
	- line 890: id: Feature::ViewImage,
	- line 896: id: Feature::SleepTool,
	- line 902: id: Feature::SecretAuthStorage,
	- line 908: id: Feature::UnifiedExec,
	- line 914: id: Feature::ShellZshFork,
	- line 920: id: Feature::UnifiedExecZshFork,
	- line 926: id: Feature::ShellSnapshot,
	- line 932: id: Feature::PowerShellShellVersion,
	- line 938: id: Feature::ShellSnapshotV2,
	- line 944: id: Feature::DeferredExecutor,
	- line 950: id: Feature::CwdRelativeTurnDiffs,
	- line 956: id: Feature::JsRepl,
	- line 962: id: Feature::ContentItemKinds,
	- line 968: id: Feature::ExecutedToolCallMetadata,
	- line 974: id: Feature::CodeMode,
	- line 980: id: Feature::CodeModeBufferedExec,
	- line 986: id: Feature::CodeModeHost,
	- line 992: id: Feature::CodeModePrewarm,
	- line 998: id: Feature::CodeModeInterrupt,
	- line 1004: id: Feature::CodeModeOnly,
	- line 1010: id: Feature::JsReplToolsOnly,
	- line 1016: id: Feature::TerminalResizeReflow,
	- line 1022: id: Feature::WebSearchRequest,
	- line 1028: id: Feature::WebSearchCached,
	- line 1034: id: Feature::StandaloneWebSearch,
	- line 1040: id: Feature::SearchTool,
	- line 1046: id: Feature::CodexGitCommit,
	- line 1052: id: Feature::RuntimeMetrics,
	- line 1058: id: Feature::Sqlite,
	- line 1064: id: Feature::MemoryTool,
	- line 1070: id: Feature::ExternalAgentMemoryImport,
	- line 1076: id: Feature::LocalThreadStoreCompression,
	- line 1082: id: Feature::LocalThreadStoreSharedCompression,
	- line 1088: id: Feature::BackgroundPaginatedRolloutMigration,
	- line 1094: id: Feature::Chronicle,
	- line 1100: id: Feature::ApplyPatchFreeform,
	- line 1106: id: Feature::ApplyPatchStreamingEvents,
	- line 1112: id: Feature::ApplyPatchPreserveLineEndings,
	- line 1118: id: Feature::ExecPermissionApprovals,
	- line 1124: id: Feature::WriteStdinApproval,
	- line 1130: id: Feature::CodexHooks,
	- line 1136: id: Feature::RequestPermissionsTool,
	- line 1142: id: Feature::UseLinuxSandboxBwrap,
	- line 1148: id: Feature::UseLegacyLandlock,
	- line 1154: id: Feature::RequestRule,
	- line 1160: id: Feature::WindowsSandbox,
	- line 1166: id: Feature::WindowsSandboxElevated,
	- line 1172: id: Feature::RemoteModels,
	- line 1178: id: Feature::EnableRequestCompression,
	- line 1184: id: Feature::UnboundedConnectionRetries,
	- line 1190: id: Feature::NetworkProxy,
	- line 1200: id: Feature::RespectSystemProxy,
	- line 1206: id: Feature::Collab,
	- line 1212: id: Feature::MultiAgentV2,
	- line 1218: id: Feature::MultiAgentMode,
	- line 1224: id: Feature::SpawnCsv,
	- line 1230: id: Feature::Apps,
	- line 1236: id: Feature::Psp,
	- line 1242: id: Feature::EnableMcpApps,
	- line 1248: id: Feature::Mcp20260728,
	- line 1254: id: Feature::AppsMcpPathOverride,
	- line 1260: id: Feature::ToolSearch,
	- line 1266: id: Feature::ToolSearchAlwaysDeferMcpTools,
	- line 1272: id: Feature::DeferredToolWorldState,
	- line 1278: id: Feature::NonPrefixedMcpToolNames,
	- line 1284: id: Feature::UnavailableDummyTools,
	- line 1290: id: Feature::ToolSuggest,
	- line 1296: id: Feature::RecommendedPlugins,
	- line 1302: id: Feature::Plugins,
	- line 1308: id: Feature::ExecutorCapabilityDiscovery,
	- line 1314: id: Feature::SkipHostSkillDiscovery,
	- line 1320: id: Feature::PluginHooks,
	- line 1326: id: Feature::InAppBrowser,
	- line 1332: id: Feature::InAppChat,
	- line 1338: id: Feature::InAppDictation,
	- line 1344: id: Feature::InAppLocalAutomation,
	- line 1350: id: Feature::InAppUpdates,
	- line 1356: id: Feature::BrowserUse,
	- line 1362: id: Feature::BrowserUseFullCdpAccess,
	- line 1368: id: Feature::BrowserUseExternal,
	- line 1374: id: Feature::ComputerUse,
	- line 1380: id: Feature::RemotePlugin,
	- line 1386: id: Feature::PluginSharing,
	- line 1392: id: Feature::ExternalMigration,
	- line 1398: id: Feature::ImageGeneration,
	- line 1404: id: Feature::OmitAppServerNotificationMedia,
	- line 1410: id: Feature::ImageResizeNotice,
	- line 1416: id: Feature::UnifiedImageBudget,
	- line 1422: id: Feature::ResizeAllImages,
	- line 1428: id: Feature::ItemIds,
	- line 1434: id: Feature::ConcurrentReasoningSummaries,
	- line 1440: id: Feature::SkillMcpDependencyInstall,
	- line 1446: id: Feature::SkillSearch,
	- line 1452: id: Feature::SkillEnvVarDependencyPrompt,
	- line 1458: id: Feature::MentionsV2,
	- line 1464: id: Feature::Steer,
	- line 1470: id: Feature::DefaultModeRequestUserInput,
	- line 1476: id: Feature::SendAsyncMessage,
	- line 1482: id: Feature::TerminalVisualizationInstructions,
	- line 1488: id: Feature::GuardianApproval,
	- line 1494: id: Feature::GuardianReuseParentCompaction,
	- line 1500: id: Feature::GuardianEnhancedNodeReplTranscripts,
	- line 1506: id: Feature::GuardianNodeReplTranscriptImages,
	- line 1512: id: Feature::GuardianV2,
	- line 1518: id: Feature::GuardianExt,
	- line 1524: id: Feature::Goals,
	- line 1530: id: Feature::TokenBudget,
	- line 1536: id: Feature::RolloutBudget,
	- line 1542: id: Feature::CurrentTimeReminder,
	- line 1548: id: Feature::CollaborationModes,
	- line 1554: id: Feature::ToolCallMcpElicitation,
	- line 1560: id: Feature::AuthElicitation,
	- line 1566: id: Feature::BedrockSetupWizard,
	- line 1572: id: Feature::Personality,
	- line 1578: id: Feature::Artifact,
	- line 1584: id: Feature::FastMode,
	- line 1590: id: Feature::StepModelSwitching,
	- line 1596: id: Feature::RealtimeConversation,
	- line 1602: id: Feature::RemoteControl,
	- line 1608: id: Feature::ImageDetailOriginal,
	- line 1614: id: Feature::TuiAppServer,
	- line 1620: id: Feature::PreventIdleSleep,
	- line 1638: id: Feature::WorkspaceOwnerUsageNudge,
	- line 1644: id: Feature::ResponsesWebsockets,
	- line 1650: id: Feature::ResponsesWebsocketsV2,
	- line 1656: id: Feature::RemoteCompactionV2,
	- line 1662: id: Feature::CompactionImageBudget,
	- line 1668: id: Feature::RetainClientDeveloperMessages,
	- line 1674: id: Feature::UseAgentIdentity,
	- line 1680: id: Feature::WorkspaceDependencies,
	- line 1712: if !features.enabled(spec.id) {


codex-rs/features/src/tests.rs (33 lines):
	- line 22: assert_eq!(features.enabled(Feature::TranscriptV2), enabled);
	- line 66: assert!(!features.enabled(Feature::ExecutorCapabilityDiscovery));
	- line 73: assert!(features.enabled(Feature::ExecutorCapabilityDiscovery));
	- line 79: assert!(!features.enabled(Feature::CwdRelativeTurnDiffs));
	- line 86: assert!(features.enabled(Feature::CwdRelativeTurnDiffs));
	- line 93: assert!(!features.enabled(Feature::CwdRelativeTurnDiffs));
	- line 134: features.enable(Feature::CodeModeOnly);
	- line 137: assert_eq!(features.enabled(Feature::CodeModeOnly), true);
	- line 138: assert_eq!(features.enabled(Feature::CodeMode), true);
	- line 345: assert_eq!(features.enabled(Feature::TerminalResizeReflow), true);
	- line 352: Some(Feature::ImageGeneration)
	- line 362: assert!(!features.enabled(Feature::ImageGeneration));
	- line 365: features.disable(Feature::ImageGeneration);
	- line 367: assert!(features.enabled(Feature::ImageGeneration));
	- line 379: assert_eq!(features.enabled(Feature::ImageGeneration), canonical);
	- line 394: assert_eq!(usages[0].feature, Feature::UseLegacyLandlock);
	- line 413: assert_eq!(features.enabled(Feature::RemoteControl), false);
	- line 418: assert_eq!(feature_for_key("chronicle"), Some(Feature::Chronicle));
	- line 419: assert_eq!(feature_for_key("telepathy"), Some(Feature::Chronicle));
	- line 424: assert_eq!(feature_for_key("multi_agent"), Some(Feature::Collab));
	- line 425: assert_eq!(feature_for_key("collab"), Some(Feature::Collab));
	- line 430: assert_eq!(feature_for_key("hooks"), Some(Feature::CodexHooks));
	- line 431: assert_eq!(feature_for_key("codex_hooks"), Some(Feature::CodexHooks));
	- line 439: features.enable(Feature::Apps);
	- line 474: assert_eq!(features.enabled(Feature::Plugins), true);
	- line 475: assert_eq!(features.enabled(Feature::CodeModeOnly), true);
	- line 476: assert_eq!(features.enabled(Feature::CodeMode), true);
	- line 477: assert_eq!(features.enabled(Feature::ApplyPatchFreeform), false);
	- line 478: assert_eq!(features.enabled(Feature::WebSearchRequest), false);
	- line 531: assert_eq!(features.enabled(Feature::ItemIds), true);
	- line 741: features.enable(Feature::ApplyPatchStreamingEvents);
	- line 770: features.enable(Feature::MultiAgentV2);
	- line 771: features.enable(Feature::CodeMode);


codex-rs/core/src/config/mod.rs (28 lines):
	- line 1530: if self.features.enabled(Feature::MultiAgentV2) {
	- line 1541: if self.features.enabled(Feature::Collab) {
	- line 1610: personality_enabled: self.features.enabled(Feature::Personality),
	- line 1629: if self.features.enabled(Feature::Psp) {
	- line 1641: self.features.enabled(Feature::Plugins),
	- line 1642: self.features.enabled(Feature::RemotePlugin),
	- line 1745: .enabled(Feature::SkillMcpDependencyInstall),
	- line 1754: apps_enabled: self.features.enabled(Feature::Apps),
	- line 1758: .enabled(Feature::NonPrefixedMcpToolNames)
	- line 1767: client_elicitation_capability: if self.features.enabled(Feature::AuthElicitation) {
	- line 1785: !self.features.enabled(Feature::NonPrefixedMcpToolNames)
	- line 1790: if self.features.enabled(Feature::Mcp20260728) {
	- line 2613: if features.enabled(Feature::WebSearchCached) {
	- line 2616: if features.enabled(Feature::WebSearchRequest) {
	- line 2647: fn resolve_orchestrator_feature_enabled(
	- line 2761: if !features.enabled(Feature::TokenBudget) {
	- line 2801: if !features.enabled(Feature::RolloutBudget) {
	- line 2870: if !features.enabled(Feature::CurrentTimeReminder) {
	- line 2963: Ok(features.get().enabled(Feature::RespectSystemProxy))
	- line 3166: resolve_orchestrator_feature_enabled(orchestrator.and_then(|value| value.skills.as_ref()));
	- line 3168: resolve_orchestrator_feature_enabled(orchestrator.and_then(|value| value.mcp.as_ref()));
	- line 3300: let non_prefixed_mcp_tool_servers = if features.enabled(Feature::NonPrefixedMcpToolNames) {
	- line 3311: let respect_system_proxy = features.enabled(Feature::RespectSystemProxy);
	- line 3312: let enable_network_proxy = features.enabled(Feature::NetworkProxy);
	- line 3858: .enabled(Feature::FastMode)
	- line 3918: .enabled(Feature::Personality)
	- line 4031: if features.enabled(Feature::MemoryTool) && memories_config.use_memories {
	- line 4498: if self.features.enabled(Feature::NetworkProxy)


codex-rs/ext/guardian-v2/src/sync_reviewer/reviewer_config.rs (22 lines):
	- line 245: if config.features.enabled(feature) {
	- line 256: .enable(Feature::RetainClientDeveloperMessages)
	- line 295: Feature::Apps,
	- line 296: Feature::CodexHooks,
	- line 297: Feature::Collab,
	- line 298: Feature::CurrentTimeReminder,
	- line 299: Feature::EnableMcpApps,
	- line 300: Feature::Goals,
	- line 301: Feature::GuardianApproval,
	- line 302: Feature::GuardianExt,
	- line 303: Feature::GuardianV2,
	- line 304: Feature::MemoryTool,
	- line 305: Feature::MultiAgentV2,
	- line 306: Feature::Personality,
	- line 307: Feature::Plugins,
	- line 308: Feature::RecommendedPlugins,
	- line 309: Feature::RolloutBudget,
	- line 310: Feature::StandaloneWebSearch,
	- line 311: Feature::TokenBudget,
	- line 312: Feature::ToolSuggest,
	- line 313: Feature::WebSearchCached,
	- line 314: Feature::WebSearchRequest,


codex-rs/tui/src/app/config_persistence.rs (21 lines):
	- line 404: Feature::WindowsSandbox | Feature::WindowsSandboxElevated
	- line 430: let effective_enabled = feature_config.features.enabled(feature);
	- line 431: if feature == Feature::GuardianApproval {
	- line 456: if feature == Feature::GuardianApproval && effective_enabled {
	- line 497: config_edits.push(crate::config_update::build_feature_enabled_edit(
	- line 553: let memory_tool_was_enabled = self.config.features.enabled(Feature::MemoryTool);
	- line 557: *feature == Feature::MemoryTool && *enabled && !memory_tool_was_enabled
	- line 561: .set_feature_enabled(feature, effective_enabled);
	- line 903: let enabled = feature_enabled_from_effective_config(effective_config, *feature);
	- line 912: self.chat_widget.set_feature_enabled(*feature, enabled);
	- line 917: .any(|(feature, _)| *feature == Feature::GuardianApproval)
	- line 918: && !self.config.features.enabled(Feature::GuardianApproval)
	- line 954: .any(|(feature, _)| *feature == Feature::GuardianApproval)
	- line 955: || !self.config.features.enabled(Feature::GuardianApproval)
	- line 1101: fn feature_enabled_from_effective_config(
	- line 1283: .set_feature_enabled(Feature::CollaborationModes, /*enabled*/ true);
	- line 1327: .set_feature_enabled(Feature::CollaborationModes, /*enabled*/ true);
	- line 1352: .set_feature_enabled(Feature::CollaborationModes, /*enabled*/ true);
	- line 1640: &[(Feature::GuardianApproval, /*enabled*/ true)],
	- line 1643: assert!(!app.config.features.enabled(Feature::GuardianApproval));
	- line 1648: .enabled(Feature::GuardianApproval)


codex-rs/tui/src/app/tests.rs (19 lines):
	- line 2623: let _ = app.config.features.disable(Feature::Collab);
	- line 2631: Ok(AppEvent::UpdateFeatureFlags { updates }) if updates == vec![(Feature::Collab, true)]
	- line 2864: app.update_feature_flags(&mut app_server, vec![(Feature::GuardianApproval, true)])
	- line 2867: assert!(app.config.features.enabled(Feature::GuardianApproval));
	- line 2872: .enabled(Feature::GuardianApproval)
	- line 2973: .set_enabled(Feature::GuardianApproval, /*enabled*/ true)?;
	- line 2975: .set_feature_enabled(Feature::GuardianApproval, /*enabled*/ true);
	- line 2994: app.update_feature_flags(&mut app_server, vec![(Feature::GuardianApproval, false)])
	- line 2997: assert!(!app.config.features.enabled(Feature::GuardianApproval));
	- line 3002: .enabled(Feature::GuardianApproval)
	- line 3072: app.update_feature_flags(&mut app_server, vec![(Feature::GuardianApproval, true)])
	- line 3075: assert!(app.config.features.enabled(Feature::GuardianApproval));
	- line 3138: .set_enabled(Feature::GuardianApproval, /*enabled*/ true)?;
	- line 3140: .set_feature_enabled(Feature::GuardianApproval, /*enabled*/ true);
	- line 3146: app.update_feature_flags(&mut app_server, vec![(Feature::GuardianApproval, false)])
	- line 3149: assert!(!app.config.features.enabled(Feature::GuardianApproval));
	- line 8144: .set_feature_enabled(Feature::CollaborationModes, /*enabled*/ true);
	- line 8218: let _ = app.config.features.disable(Feature::GuardianApproval);
	- line 8220: .set_feature_enabled(Feature::GuardianApproval, /*enabled*/ false);


codex-rs/core/src/tools/spec_plan.rs (18 lines):
	- line 646: features.enabled(Feature::ToolSuggest)
	- line 647: && features.enabled(Feature::Apps)
	- line 648: && features.enabled(Feature::Plugins)
	- line 715: .enabled(Feature::ImageGeneration)
	- line 1005: if turn_context.config.features.enabled(Feature::ShellTool)
	- line 1006: && turn_context.config.features.enabled(Feature::UnifiedExec)
	- line 1023: if turn_context.config.features.enabled(Feature::ViewImage) {
	- line 1053: .enabled(Feature::StandaloneWebSearch))
	- line 1091: || !features.enabled(Feature::ShellTool)
	- line 1098: let exec_permission_approvals_enabled = features.enabled(Feature::ExecPermissionApprovals);
	- line 1110: if features.enabled(Feature::UnifiedExec) {
	- line 1152: if features.enabled(Feature::DeferredExecutor) {
	- line 1192: if environment_mode.has_environment() && features.enabled(Feature::RequestPermissionsTool) {
	- line 1196: if features.enabled(Feature::TokenBudget) {
	- line 1201: let current_time_reminder_enabled = features.enabled(Feature::CurrentTimeReminder);
	- line 1210: if features.enabled(Feature::SleepTool)
	- line 1259: if environment_mode.has_environment() && features.enabled(Feature::ViewImage) {
	- line 1405: .enabled(Feature::DeferredToolWorldState)


codex-rs/tui/src/chatwidget/settings.rs (15 lines):
	- line 70: pub(crate) fn set_feature_enabled(&mut self, feature: Feature, enabled: bool) -> bool {
	- line 78: let enabled = self.config.features.enabled(feature);
	- line 79: if feature == Feature::FastMode {
	- line 83: if feature == Feature::Personality {
	- line 86: if feature == Feature::Plugins {
	- line 90: if feature == Feature::Goals {
	- line 100: if feature == Feature::MentionsV2 {
	- line 103: if feature == Feature::PreventIdleSleep {
	- line 109: Feature::WindowsSandbox | Feature::WindowsSandboxElevated
	- line 290: .set_personality_command_enabled(self.config.features.enabled(Feature::Personality));
	- line 295: .set_plugins_command_enabled(self.config.features.enabled(Feature::Plugins));
	- line 300: .set_goal_command_enabled(self.config.features.enabled(Feature::Goals));
	- line 305: .set_mentions_v2_enabled(self.config.features.enabled(Feature::MentionsV2));
	- line 603: if !self.config.features.enabled(Feature::Goals) {
	- line 617: if !self.config.features.enabled(Feature::Goals) {


codex-rs/core/src/session/session.rs (15 lines):
	- line 343: .enabled(Feature::GuardianApproval),
	- line 566: if config.features.enabled(Feature::SkipHostSkillDiscovery)
	- line 788: && config.features.enabled(Feature::TokenBudget);
	- line 1149: let use_zsh_fork_shell = config.features.enabled(Feature::ShellZshFork);
	- line 1176: let use_executor_shell_snapshots = config.features.enabled(Feature::ShellSnapshotV2)
	- line 1177: && config.features.enabled(Feature::ShellTool)
	- line 1178: && config.features.enabled(Feature::UnifiedExec)
	- line 1188: let shell_snapshot = if config.features.enabled(Feature::ShellSnapshot)
	- line 1206: config.features.enabled(Feature::DeferredExecutor),
	- line 1384: .enabled(Feature::ExecutedToolCallMetadata)
	- line 1437: if config.features.enabled(Feature::UseAgentIdentity) {
	- line 1447: config.features.enabled(Feature::ContentItemKinds),
	- line 1448: config.features.enabled(Feature::EnableRequestCompression),
	- line 1449: config.features.enabled(Feature::RuntimeMetrics),
	- line 1453: .enabled(Feature::ConcurrentReasoningSummaries),


codex-rs/core/src/session/mod.rs (13 lines):
	- line 710: let fast_mode_enabled = config.features.enabled(Feature::FastMode);
	- line 1066: || spec.id == Feature::RemoteCompactionV2;
	- line 1067: if advertise_in_model_client_header && config.features.enabled(spec.id) {
	- line 1853: Feature::SecretAuthStorage,
	- line 1854: next_config.features.enabled(Feature::SecretAuthStorage),
	- line 1901: Feature::SecretAuthStorage,
	- line 1902: next_config.features.enabled(Feature::SecretAuthStorage),
	- line 3160: .enabled(Feature::ImageResizeNotice)
	- line 3427: self.features.enabled(Feature::FastMode),
	- line 3711: self.features.enabled(feature)
	- line 3885: if turn_context.config.features.enabled(Feature::TokenBudget)
	- line 4084: if self.enabled(Feature::RetainClientDeveloperMessages) {
	- line 4540: feature_enabled: config.features.enabled(Feature::CodexHooks),


codex-rs/core/src/guardian/review_session.rs (13 lines):
	- line 227: .enabled(Feature::GuardianReuseParentCompaction)
	- line 429: .enabled(Feature::GuardianReuseParentCompaction)
	- line 519: .enabled(Feature::GuardianReuseParentCompaction)
	- line 955: if params.spawn_config.features.enabled(Feature::TokenBudget)
	- line 1561: Feature::Collab,
	- line 1562: Feature::MultiAgentV2,
	- line 1563: Feature::GuardianV2,
	- line 1564: Feature::CodexHooks,
	- line 1565: Feature::Apps,
	- line 1566: Feature::Plugins,
	- line 1567: Feature::WebSearchRequest,
	- line 1568: Feature::WebSearchCached,
	- line 1576: if guardian_config.features.enabled(feature) {


codex-rs/app-server/src/request_processors/plugins.rs (12 lines):
	- line 220: if config.features.enabled(Feature::RemotePlugin) {
	- line 224: if config.features.enabled(Feature::PluginSharing) {
	- line 676: if include_vertical && !config.features.enabled(Feature::RemotePlugin) {
	- line 716: if include_shared_with_me && config.features.enabled(Feature::PluginSharing) {
	- line 1151: if !config.features.enabled(Feature::Plugins) {
	- line 1204: if !config.features.enabled(Feature::Plugins) {
	- line 1240: if !config.features.enabled(Feature::PluginSharing) {
	- line 1303: if !config.features.enabled(Feature::PluginSharing) {
	- line 1379: if !config.features.enabled(Feature::PluginSharing) {
	- line 1441: if !config.features.enabled(Feature::Plugins) {
	- line 1555: if !config.features.enabled(Feature::Plugins) {
	- line 2138: if !config.features.enabled(Feature::Plugins) {


codex-rs/config/src/schema.rs (12 lines):
	- line 50: if feature.id == codex_features::Feature::Artifact {
	- line 53: if feature.id == codex_features::Feature::CodeMode {
	- line 62: if feature.id == codex_features::Feature::CodeModeHost {
	- line 71: if feature.id == codex_features::Feature::NonPrefixedMcpToolNames {
	- line 80: if feature.id == codex_features::Feature::GuardianV2 {
	- line 89: if feature.id == codex_features::Feature::MultiAgentV2 {
	- line 98: if feature.id == codex_features::Feature::TokenBudget {
	- line 107: if feature.id == codex_features::Feature::RolloutBudget {
	- line 116: if feature.id == codex_features::Feature::CurrentTimeReminder {
	- line 125: if feature.id == codex_features::Feature::SleepTool {
	- line 134: if feature.id == codex_features::Feature::AppsMcpPathOverride {
	- line 141: if feature.id == codex_features::Feature::NetworkProxy {


codex-rs/features/src/legacy.rs (11 lines):
	- line 14: feature: Feature::Apps,
	- line 18: feature: Feature::WindowsSandbox,
	- line 22: feature: Feature::UnifiedExec,
	- line 26: feature: Feature::ExecPermissionApprovals,
	- line 30: feature: Feature::WebSearchRequest,
	- line 34: feature: Feature::ImageGeneration,
	- line 38: feature: Feature::Collab,
	- line 42: feature: Feature::MemoryTool,
	- line 46: feature: Feature::Chronicle,
	- line 50: feature: Feature::CodexHooks,
	- line 77: Feature::UnifiedExec,


codex-rs/core/src/agent/role.rs (9 lines):
	- line 95: feature @ (Feature::ShellTool
	- line 96: | Feature::Apps
	- line 97: | Feature::Personality
	- line 98: | Feature::Plugins
	- line 99: | Feature::MemoryTool
	- line 100: | Feature::RequestPermissionsTool),
	- line 207: .enabled(Feature::FastMode)
	- line 226: || config.features.enabled(Feature::Personality)
	- line 227: != next_config.features.enabled(Feature::Personality);


codex-rs/core/src/guardian/tests.rs (9 lines):
	- line 2049: .enable(Feature::MemoryTool)
	- line 2353: .enable(Feature::GuardianReuseParentCompaction)
	- line 3726: .enable(Feature::Apps)
	- line 3730: .enable(Feature::Plugins)
	- line 3734: .enable(Feature::GuardianV2)
	- line 3750: assert!(!guardian_config.features.enabled(Feature::Apps));
	- line 3751: assert!(!guardian_config.features.enabled(Feature::Plugins));
	- line 3752: assert!(!guardian_config.features.enabled(Feature::GuardianV2));
	- line 3781: assert!(guardian_config.features.enabled(Feature::Collab));


codex-rs/core/src/session/step_activation.rs (7 lines):
	- line 137: if admitted_config.features.enabled(Feature::GuardianV2)
	- line 138: && admitted_config.features.enabled(Feature::GuardianApproval)
	- line 228: if !self.features.enabled(Feature::StepModelSwitching) {
	- line 340: guardian_approval_enabled: self.features.enabled(Feature::GuardianApproval),
	- line 352: self.features.enabled(Feature::Personality),
	- line 353: self.features.enabled(Feature::FastMode),
	- line 374: guardian_approval_enabled: self.features.enabled(Feature::GuardianApproval),


codex-rs/core/src/session/world_state.rs (6 lines):
	- line 96: if self.features.enabled(Feature::Personality) {
	- line 119: let token_budget_enabled = turn_context.config.features.enabled(Feature::TokenBudget)
	- line 186: .enabled(Feature::ExecPermissionApprovals),
	- line 190: .enabled(Feature::RequestPermissionsTool),
	- line 252: .enabled(Feature::DeferredExecutor),
	- line 278: .enabled(Feature::DeferredToolWorldState)


codex-rs/core/src/config/managed_features.rs (6 lines):
	- line 157: if !pinned_features.contains_key(&Feature::UnifiedExec) {
	- line 158: candidate.enable(Feature::UnifiedExec);
	- line 178: if normalized_features.enabled(*feature) != *enabled {
	- line 184: normalized_features.enabled(*feature)
	- line 220: pinned_features.insert(Feature::GuardianApproval, enabled);
	- line 273: Feature::UnifiedExec,


codex-rs/core/src/tasks/mod.rs (6 lines):
	- line 138: feature_enabled: bool,
	- line 142: let read_allowed = feature_enabled && config_enabled;
	- line 148: ("feature_enabled", bool_tag(feature_enabled)),
	- line 658: if self.enabled(Feature::MemoryTool) {
	- line 780: turn_context.config.features.enabled(Feature::MemoryTool),
	- line 923: .enabled(Feature::CodeModeInterrupt)


codex-rs/app-server/src/request_processors/account_processor.rs (6 lines):
	- line 1339: Self::workspace_messages_response(messages, /*feature_enabled*/ true)
	- line 1346: /*feature_enabled*/ false,
	- line 1380: feature_enabled: bool,
	- line 1383: feature_enabled,
	- line 1542: /*feature_enabled*/ true,
	- line 1549: feature_enabled: true,


codex-rs/tui/src/chatwidget/slash_dispatch.rs (5 lines):
	- line 309: if !self.config.features.enabled(Feature::Goals) {
	- line 836: if !self.config.features.enabled(Feature::Goals) {
	- line 1110: plugins_command_enabled: self.config.features.enabled(Feature::Plugins),
	- line 1112: goal_command_enabled: self.config.features.enabled(Feature::Goals),
	- line 1114: personality_command_enabled: self.config.features.enabled(Feature::Personality),


codex-rs/memories/write/src/phase2.rs (5 lines):
	- line 332: let _ = agent_config.features.disable(Feature::Collab);
	- line 333: let _ = agent_config.features.disable(Feature::MemoryTool);
	- line 334: let _ = agent_config.features.disable(Feature::Apps);
	- line 335: let _ = agent_config.features.disable(Feature::Plugins);
	- line 338: .disable(Feature::SkillMcpDependencyInstall);


codex-rs/app-server/src/request_processors/thread_goal_processor.rs (5 lines):
	- line 80: if !self.config.features.enabled(Feature::Goals) {
	- line 90: let emit_thread_goal_update = self.config.features.enabled(Feature::Goals);
	- line 128: if !self.config.features.enabled(Feature::Goals) {
	- line 228: if !self.config.features.enabled(Feature::Goals) {
	- line 250: if !self.config.features.enabled(Feature::Goals) {


codex-rs/core/src/session/turn.rs (5 lines):
	- line 234: .enabled(Feature::CwdRelativeTurnDiffs)
	- line 1210: if turn_context.config.features.enabled(Feature::TokenBudget) {
	- line 1227: .enabled(Feature::RemoteCompactionV2) =>
	- line 2225: features = sess.features.enabled_features(),
	- line 2236: .enabled(Feature::ConcurrentReasoningSummaries)


codex-rs/tui/src/chatwidget.rs (5 lines):
	- line 1065: updates: vec![(Feature::Collab, true)],
	- line 1092: if !self.config.features.enabled(Feature::MemoryTool) {
	- line 1115: updates: vec![(Feature::MemoryTool, true)],
	- line 1473: if !self.config.features.enabled(Feature::Plugins) {
	- line 1854: if !self.config.features.enabled(Feature::Plugins) {


codex-rs/tools/src/tool_config.rs (5 lines):
	- line 22: || (features.enabled(Feature::DefaultModeRequestUserInput)
	- line 48: && features.enabled(Feature::ShellTool)
	- line 49: && features.enabled(Feature::UnifiedExec)
	- line 50: && features.enabled(Feature::ShellZshFork)
	- line 51: && features.enabled(Feature::UnifiedExecZshFork)


codex-rs/core/src/session/review.rs (5 lines):
	- line 33: let _ = review_features.disable(Feature::WebSearchRequest);
	- line 34: let _ = review_features.disable(Feature::WebSearchCached);
	- line 35: let _ = review_features.disable(Feature::Goals);
	- line 108: review_features.enabled(Feature::FastMode),
	- line 148: use_model_token_budget_defaults: per_turn_config.features.enabled(Feature::TokenBudget)


codex-rs/core/src/session/turn_context.rs (5 lines):
	- line 506: config.features.enabled(Feature::FastMode),
	- line 743: per_turn_config.features.enabled(Feature::TokenBudget)
	- line 939: self.features.enabled(Feature::Personality),
	- line 967: .enabled(Feature::SkipHostSkillDiscovery)
	- line 991: self.features.enabled(Feature::FastMode),


codex-rs/app-server/src/request_processors/catalog_processor.rs (4 lines):
	- line 368: enabled: config.features.enabled(spec.id),
	- line 608: let hooks_enabled = config.features.enabled(Feature::CodexHooks);
	- line 609: let plugin_hooks = if hooks_enabled && config.features.enabled(Feature::Plugins) {
	- line 620: feature_enabled: hooks_enabled,


codex-rs/cli/src/main.rs (4 lines):
	- line 1791: let enabled = config.features.enabled(def.id);
	- line 2118: .set_feature_enabled(feature, /*enabled*/ true)
	- line 2130: .set_feature_enabled(feature, /*enabled*/ false)
	- line 2276: .enabled(codex_features::Feature::SkillSearch),


codex-rs/core/src/windows_sandbox.rs (4 lines):
	- line 34: if features.enabled(Feature::WindowsSandboxElevated) {
	- line 37: if features.enabled(Feature::WindowsSandbox) {
	- line 70: .get(Feature::WindowsSandboxElevated.key())
	- line 77: .get(Feature::WindowsSandbox.key())


codex-rs/core/src/thread_manager.rs (4 lines):
	- line 387: .enabled(Feature::LocalThreadStoreCompression);
	- line 390: .enabled(Feature::LocalThreadStoreSharedCompression)
	- line 398: .enabled(Feature::BackgroundPaginatedRolloutMigration);
	- line 477: if config.features.enabled(Feature::CodeModeHost)


codex-rs/core/src/session/time_reminder.rs (3 lines):
	- line 29: if config.features.enable(Feature::CurrentTimeReminder).is_ok()
	- line 30: && config.features.enabled(Feature::CurrentTimeReminder)
	- line 105: .enabled(Feature::CurrentTimeReminder)


codex-rs/core/src/session/token_budget.rs (3 lines):
	- line 95: if config.features.enable(Feature::TokenBudget).is_err() {
	- line 99: if !config.features.enabled(Feature::TokenBudget) {
	- line 116: if !turn_context.config.features.enabled(Feature::TokenBudget) {


codex-rs/app-server/src/request_processors/plugins/search.rs (3 lines):
	- line 48: if !config.features.enabled(Feature::Plugins) {
	- line 51: let plugin_sharing_enabled = config.features.enabled(Feature::PluginSharing);
	- line 55: let remote_plugin_enabled = config.features.enabled(Feature::RemotePlugin);


codex-rs/memories/write/src/runtime.rs (3 lines):
	- line 260: config.features.enabled(Feature::ContentItemKinds),
	- line 261: config.features.enabled(Feature::EnableRequestCompression),
	- line 262: config.features.enabled(Feature::RuntimeMetrics),


codex-rs/cli/src/doctor.rs (3 lines):
	- line 1215: .filter(|spec| features.enabled(spec.id))
	- line 1220: .filter(|spec| features.enabled(spec.id) != spec.default_enabled)
	- line 1221: .map(|spec| format!("{}={}", spec.key, features.enabled(spec.id)))


codex-rs/tui/src/app/background_requests.rs (3 lines):
	- line 287: let plugin_sharing_enabled = self.config.features.enabled(Feature::PluginSharing);
	- line 288: let remote_plugin_enabled = self.config.features.enabled(Feature::RemotePlugin);
	- line 580: if !self.config.features.enabled(Feature::Plugins) {


codex-rs/ext/guardian-v2/src/async_scorer/extension.rs (3 lines):
	- line 138: if !input.config.features.enabled(Feature::GuardianV2)
	- line 139: || !input.config.features.enabled(Feature::GuardianApproval)
	- line 171: agent_identity_policy: if input.config.features.enabled(Feature::UseAgentIdentity) {


codex-rs/app-server/src/request_processors/config_processor.rs (3 lines):
	- line 121: json!(config.features.enabled(feature)),
	- line 297: let feature = Feature::BackgroundPaginatedRolloutMigration;
	- line 316: if should_start_background_rollout_migration && config.features.enabled(feature) {


codex-rs/app-server/src/bespoke_event_handling.rs (3 lines):
	- line 1078: if conversation.enabled(Feature::OmitAppServerNotificationMedia) {
	- line 1106: if conversation.enabled(Feature::OmitAppServerNotificationMedia) {
	- line 1147: if conversation.enabled(Feature::OmitAppServerNotificationMedia) {


codex-rs/core/src/context/node_repl_review_evidence.rs (3 lines):
	- line 36: || features.enabled(Feature::GuardianEnhancedNodeReplTranscripts)
	- line 37: && features.enabled(Feature::GuardianNodeReplTranscriptImages)
	- line 40: } else if features.enabled(Feature::GuardianEnhancedNodeReplTranscripts) {


codex-rs/hooks/src/registry.rs (3 lines):
	- line 44: pub feature_enabled: bool,
	- line 124: config.feature_enabled,
	- line 292: if !config.feature_enabled {


codex-rs/tui/src/service_tier_resolution.rs (2 lines):
	- line 18: if !config.features.enabled(Feature::FastMode) {
	- line 43: if !config.features.enabled(Feature::FastMode) {


codex-rs/tui/src/app_server_session/rollout_history.rs (2 lines):
	- line 28: .enabled(Feature::BackgroundPaginatedRolloutMigration);
	- line 84: .enabled(Feature::BackgroundPaginatedRolloutMigration)


codex-rs/tui/src/app/event_dispatch.rs (2 lines):
	- line 1166: && self.config.features.enabled(Feature::MentionsV2)
	- line 2208: if !self.config.features.enabled(Feature::Plugins) {


codex-rs/core/src/tools/handlers/apply_patch.rs (2 lines):
	- line 65: .enabled(Feature::ApplyPatchPreserveLineEndings)
	- line 103: .enabled(Feature::ApplyPatchStreamingEvents)


codex-rs/tui/src/windows_sandbox.rs (2 lines):
	- line 45: None if config.features.enabled(Feature::WindowsSandboxElevated) => {
	- line 48: None if config.features.enabled(Feature::WindowsSandbox) => {


codex-rs/tui/src/chatwidget/permission_popups.rs (2 lines):
	- line 27: let guardian_approval_enabled = self.config.features.enabled(Feature::GuardianApproval);
	- line 45: next_features.set_enabled(Feature::GuardianApproval, enabled);


codex-rs/core/src/config/auth_keyring.rs (2 lines):
	- line 16: self.features.enabled(Feature::SecretAuthStorage),
	- line 106: managed_features.enabled(Feature::SecretAuthStorage),


codex-rs/tui/src/chatwidget/permissions_menu.rs (2 lines):
	- line 18: let reviewer = if config.features.enabled(Feature::GuardianApproval)
	- line 97: if self.config.features.enabled(Feature::GuardianApproval) {


codex-rs/core/src/mcp_tool_call.rs (2 lines):
	- line 706: .enabled(Feature::AuthElicitation)
	- line 1506: .enabled(Feature::ToolCallMcpElicitation);


codex-rs/core/src/connectors.rs (2 lines):
	- line 141: if !config.features.enabled(Feature::Apps) {
	- line 426: if !config.features.enabled(Feature::Apps) {


codex-rs/core/src/compact_remote_v2.rs (2 lines):
	- line 315: sess.enabled(Feature::RetainClientDeveloperMessages),
	- line 316: if sess.enabled(Feature::CompactionImageBudget) {


codex-rs/tui/src/chatwidget/plugins.rs (2 lines):
	- line 65: if !self.config.features.enabled(Feature::Plugins) {
	- line 219: !self.config.features.enabled(Feature::RemotePlugin);


codex-rs/core/src/session/mcp.rs (2 lines):
	- line 412: .enabled(Feature::ExecutorCapabilityDiscovery)
	- line 783: .enabled(Feature::GuardianApproval)


codex-rs/core/src/tasks/compact.rs (2 lines):
	- line 36: if ctx.config.features.enabled(Feature::TokenBudget) {
	- line 43: if ctx.config.features.enabled(Feature::RemoteCompactionV2) =>


codex-rs/core/src/guardian/review.rs (2 lines):
	- line 343: || turn.config.features.enabled(Feature::GuardianV2))
	- line 913: .enable(Feature::RetainClientDeveloperMessages)


codex-rs/ext/guardian-v2/src/sync_reviewer/mod.rs (2 lines):
	- line 114: .enabled(Feature::GuardianEnhancedNodeReplTranscripts);
	- line 119: .enabled(Feature::GuardianNodeReplTranscriptImages)


codex-rs/core/src/tools/handlers/unified_exec/exec_command.rs (2 lines):
	- line 302: session.features().enabled(Feature::ExecPermissionApprovals);
	- line 315: || (session.features().enabled(Feature::RequestPermissionsTool)


codex-rs/core/src/tasks/review.rs (2 lines):
	- line 115: let _ = sub_agent_config.features.disable(Feature::Collab);
	- line 116: let _ = sub_agent_config.features.disable(Feature::MultiAgentV2);


codex-rs/tui/src/app_server_session.rs (2 lines):
	- line 3239: .enable(Feature::FastMode)
	- line 3570: .enable(Feature::TerminalVisualizationInstructions);


codex-rs/core/src/tools/mod.rs (2 lines):
	- line 70: if turn_context.config.features.enabled(Feature::CodeModeOnly) {
	- line 72: } else if turn_context.config.features.enabled(Feature::CodeMode) {


codex-rs/app-server/src/extensions.rs (2 lines):
	- line 89: enabled: config.features.enabled(codex_features::Feature::Goals),
	- line 131: .enabled(codex_features::Feature::SkillSearch),


codex-rs/core/src/unified_exec/shell_snapshot.rs (1 line):
	- line 16: if !context.session.features().enabled(Feature::ShellSnapshotV2)


codex-rs/core/src/mcp.rs (1 line):
	- line 207: } if !config.features.enabled(Feature::Plugins) => {


codex-rs/tui/src/workspace_messages.rs (1 line):
	- line 16: if !response.feature_enabled {


codex-rs/tui/src/chatwidget/constructor.rs (1 line):
	- line 38: let prevent_idle_sleep = config.features.enabled(Feature::PreventIdleSleep);


codex-rs/app-server-protocol/src/protocol/v2/account.rs (1 line):
	- line 442: pub feature_enabled: bool,


codex-rs/core/src/mcp_skill_dependencies.rs (1 line):
	- line 57: .enabled(codex_features::Feature::SkillMcpDependencyInstall)


codex-rs/core/src/context/world_state/environment.rs (1 line):
	- line 48: .enabled(Feature::PowerShellShellVersion)


codex-rs/tui/src/chatwidget/permission_shortcuts.rs (1 line):
	- line 43: || !self.config.features.enabled(Feature::GuardianApproval))


codex-rs/ext/memories/src/extension.rs (1 line):
	- line 44: enabled: config.features.enabled(Feature::MemoryTool) && config.memories.use_memories,


codex-rs/core/src/exec_env.rs (1 line):
	- line 72: if features.enabled(Feature::ApplyPatchPreserveLineEndings) {


codex-rs/core/src/session/inject.rs (1 line):
	- line 111: let metadata = (self.enabled(Feature::RetainClientDeveloperMessages)


codex-rs/tui/src/chatwidget/connectors.rs (1 line):
	- line 145: self.config.features.enabled(Feature::Apps) && self.has_chatgpt_account


codex-rs/app-server/src/request_processors/turn_processor.rs (1 line):
	- line 1185: if !thread.enabled(Feature::RealtimeConversation) {


codex-rs/app-server/src/request_processors/thread_processor.rs (1 line):
	- line 4914: let goals_enabled = config.features.enabled(Feature::Goals);


codex-rs/ext/mcp/src/executor_plugin.rs (1 line):
	- line 219: let mut servers = if config.features.enabled(Feature::Plugins) {


codex-rs/tui/src/chatwidget/settings_popups.rs (1 line):
	- line 99: enabled: self.config.features.enabled(spec.id),


codex-rs/core/src/tools/handlers/request_user_input.rs (1 line):
	- line 136: if !user_input.is_empty() && turn.config.features.enabled(Feature::GuardianApproval) {


codex-rs/tui/src/chatwidget/service_tiers.rs (1 line):
	- line 44: self.config.features.enabled(Feature::FastMode)


codex-rs/core/src/config/edit.rs (1 line):
	- line 883: pub fn set_feature_enabled(mut self, key: &str, enabled: bool) -> Self {


codex-rs/mcp-server/src/message_processor.rs (1 line):
	- line 96: .enabled(codex_features::Feature::SkillSearch),


codex-rs/memories/write/src/start.rs (1 line):
	- line 34: || !config.features.enabled(Feature::MemoryTool)


codex-rs/core/src/session_startup_prewarm.rs (1 line):
	- line 187: if self.features().enabled(Feature::CodeModePrewarm)


codex-rs/tui/src/app/session_lifecycle.rs (1 line):
	- line 139: if !self.config.features.enabled(Feature::Collab) && !has_non_primary_agent_thread {


codex-rs/ext/mcp/src/lib.rs (1 line):
	- line 26: if !config.features.enabled(codex_features::Feature::Apps) {


codex-rs/core/src/otel_init.rs (1 line):
	- line 81: let runtime_metrics = config.features.enabled(Feature::RuntimeMetrics);


codex-rs/core/src/tools/code_mode/delegate.rs (1 line):
	- line 111: .enabled(codex_features::Feature::ExecutedToolCallMetadata);


codex-rs/tui/src/lib.rs (1 line):
	- line 1952: && config.features.enabled(Feature::BedrockSetupWizard)


codex-rs/tui/src/chatwidget/input_submission.rs (1 line):
	- line 362: .filter(|_| self.config.features.enabled(Feature::Personality))


codex-rs/app-server/src/effective_plugin_change.rs (1 line):
	- line 123: feature_enabled: true,


codex-rs/app-server/src/request_processors/apps_processor.rs (1 line):
	- line 70: .set_enabled(Feature::Apps, thread.enabled(Feature::Apps));


codex-rs/app-server/src/external_agent_migration/processor.rs (1 line):
	- line 373: config.features.enabled(Feature::ExternalAgentMemoryImport)


codex-rs/core/src/session/code_mode_warning.rs (1 line):
	- line 10: features.enabled(Feature::CodeMode) || features.enabled(Feature::CodeModeOnly);


codex-rs/core/src/unified_exec/stdin_approval.rs (1 line):
	- line 190: .enabled(Feature::WriteStdinApproval)


codex-rs/tui/src/terminal_visualization_instructions.rs (1 line):
	- line 16: .enabled(Feature::TerminalVisualizationInstructions)


codex-rs/tui/src/config_update.rs (1 line):
	- line 128: pub(crate) fn build_feature_enabled_edit(feature_key: &str, enabled: bool) -> ConfigEdit {


codex-rs/core/src/image_preparation.rs (1 line):
	- line 53: features.enabled(Feature::UnifiedImageBudget)


codex-rs/core/src/tools/parallel.rs (1 line):
	- line 106: .enabled(codex_features::Feature::ExecutedToolCallMetadata)


codex-rs/app-server/src/lib.rs (1 line):
	- line 557: if !config.features.enabled(Feature::CodeModeHost) {


codex-rs/core/src/responses_retry.rs (1 line):
	- line 61: .enabled(Feature::UnboundedConnectionRetries)
