diff --git a/codex-rs/core/src/codex.rs b/codex-rs/core/src/codex.rs
index a9d5d60f76..14905b7892 100644
--- a/codex-rs/core/src/codex.rs
+++ b/codex-rs/core/src/codex.rs
@@ -1309,6 +1309,10 @@ impl Session {
session_configuration.cwd.clone(),
&mut default_shell,
otel_manager.clone(),
+ !matches!(
+ session_configuration.session_source,
+ SessionSource::SubAgent(_)
+ ),
)
} else {
let (tx, rx) = watch::channel(None);
@@ -2020,6 +2024,7 @@ impl Session {
previous_cwd: &Path,
next_cwd: &Path,
codex_home: &Path,
+ session_source: &SessionSource,
) {
if previous_cwd == next_cwd {
return;
@@ -2036,6 +2041,7 @@ impl Session {
self.services.user_shell.as_ref().clone(),
self.services.shell_snapshot_tx.clone(),
self.services.otel_manager.clone(),
+ !matches!(session_source, SessionSource::SubAgent(_)),
);
}
@@ -2050,10 +2056,16 @@ impl Session {
let previous_cwd = state.session_configuration.cwd.clone();
let next_cwd = updated.cwd.clone();
let codex_home = updated.codex_home.clone();
+ let session_source = updated.session_source.clone();
state.session_configuration = updated;
drop(state);
- self.maybe_refresh_shell_snapshot_for_cwd(&previous_cwd, &next_cwd, &codex_home);
+ self.maybe_refresh_shell_snapshot_for_cwd(
+ &previous_cwd,
+ &next_cwd,
+ &codex_home,
+ &session_source,
+ );
Ok(())
}
@@ -2099,6 +2111,7 @@ impl Session {
&previous_cwd,
&session_configuration.cwd,
&codex_home,
+ &session_configuration.session_source,
);
Ok(self
diff --git a/codex-rs/core/src/shell_snapshot.rs b/codex-rs/core/src/shell_snapshot.rs
index 7dc122e931..dafee7c1bc 100644
--- a/codex-rs/core/src/shell_snapshot.rs
+++ b/codex-rs/core/src/shell_snapshot.rs
@@ -41,6 +41,7 @@ impl ShellSnapshot {
session_cwd: PathBuf,
shell: &mut Shell,
otel_manager: OtelManager,
+ run_cleanup: bool,
) -> watch::Sender