Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions codex-rs/core/config.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -954,6 +954,9 @@
"local_thread_store_shared_compression": {
"type": "boolean"
},
"login_shell_package_path": {
"type": "boolean"
},
"mcp_2026_07_28": {
"type": "boolean"
},
Expand Down Expand Up @@ -6978,6 +6981,9 @@
"local_thread_store_shared_compression": {
"type": "boolean"
},
"login_shell_package_path": {
"type": "boolean"
},
"mcp_2026_07_28": {
"type": "boolean"
},
Expand Down
12 changes: 12 additions & 0 deletions codex-rs/features/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,8 @@ pub enum Feature {
UseLegacyLandlock,
/// Experimental shell snapshotting.
ShellSnapshot,
/// Restore bundled tools to PATH after Codex's login shell starts.
LoginShellPackagePath,
/// Expose the selected PowerShell execution host's bounded major/minor version.
PowerShellShellVersion,
/// Keep policy-filtered shell snapshots entirely in executor memory.
Expand Down Expand Up @@ -1018,6 +1020,16 @@ pub const FEATURES: &[FeatureSpec] = &[
stage: Stage::Stable,
default_enabled: true,
},
FeatureSpec {
id: Feature::LoginShellPackagePath,
key: "login_shell_package_path",
stage: Stage::Experimental {
name: "Bundled tools in login shells",
menu_description: "Keep bundled tools such as ripgrep available when login shell startup resets PATH.",
announcement: "",
},
default_enabled: false,
},
FeatureSpec {
id: Feature::PowerShellShellVersion,
key: "powershell_shell_version",
Expand Down
41 changes: 23 additions & 18 deletions codex-rs/tui/src/bottom_pane/experimental_features_view_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,25 +47,30 @@ fn experimental_features_keep_following_choice_at_wrap_boundary() {
insta::assert_snapshot!(snapshots.join("\n\n"));
}

/// Experimental settings show each feature's label, description, and default state.
#[test]
fn experimental_features_analytics_plan_history() {
let feature = Feature::AnalyticsPlanHistory;
let stage = feature.stage();
let (app_tx, _app_rx) = tokio::sync::mpsc::unbounded_channel();
let view = ExperimentalFeaturesView::new(
vec![ExperimentalFeatureItem {
key: feature.key().to_string(),
name: stage.experimental_menu_name().unwrap().to_string(),
description: stage.experimental_menu_description().unwrap().to_string(),
enabled: feature.default_enabled(),
writable: true,
}],
ThreadId::new(),
/*catalog_rx*/ None,
AppEventSender::new(app_tx),
crate::keymap::RuntimeKeymap::defaults().list,
);
snapshot_view("experimental_features_analytics_plan_history", &view);
fn experimental_features_display_metadata() {
for feature in [
Feature::AnalyticsPlanHistory,
Feature::LoginShellPackagePath,
] {
let stage = feature.stage();
let (app_tx, _app_rx) = tokio::sync::mpsc::unbounded_channel();
let view = ExperimentalFeaturesView::new(
vec![ExperimentalFeatureItem {
key: feature.key().to_string(),
name: stage.experimental_menu_name().unwrap().to_string(),
description: stage.experimental_menu_description().unwrap().to_string(),
enabled: feature.default_enabled(),
writable: true,
}],
ThreadId::new(),
/*catalog_rx*/ None,
AppEventSender::new(app_tx),
crate::keymap::RuntimeKeymap::defaults().list,
);
snapshot_view(&format!("experimental_features_{}", feature.key()), &view);
}
}

fn server_feature(name: &str) -> ExperimentalFeature {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
source: tui/src/bottom_pane/experimental_features_view_tests.rs
expression: buffer_text(&buffer)
---

Experimental features
Checked features are configured on. Some experimental features take effect
only in new tasks or after restarting the Codex server.


› [ ] Bundled tools in login shells Keep bundled tools such as ripgrep
available when login shell startup resets
PATH.


space toggle · enter save · esc save/close
Loading