Intermittent: a task that was running Claude Code (or another agent) drops back to a plain shell. Not sure yet whether it's Claude-specific.
Tab-title hint from the screenshot: the active tab shows the worktree path (~/.a/w/a/fresh-slammer-echoes-wt) rather than "Claude Code" or "Terminal". That's consistent with the running program being a plain shell whose PROMPT_COMMAND emits \e]0;<cwd>\a (OSC 0/2), which flows into apply_terminal_title_update on the tab (desktop/src/app.rs:~372-376). TerminalLaunchConfig::default_title (core/src/agents.rs:199) would return "Claude Code" for a provider-backed tab or "Terminal" for a plain one — neither of those is what's rendered, so the OSC-title path is what's setting it, and the underlying process is a shell.
Which means tab.launch_config.provider ended up None for a tab that started as a provider tab. Places worth auditing that mutate tab.launch_config:
- desktop/src/app.rs:4204 / :4210 / :4347 — Launched replies (main + warm).
- desktop/src/app.rs:3923 —
maybe_retry_claude_restore clears only session, should not strip provider, but worth confirming nothing downstream does.
- desktop/src/app.rs:4504 / :4572 — warm-terminal attach / session discovery paths.
- desktop/src/app.rs:8716 —
with_session backfill.
- The prewarmed-terminal
attach_prewarmed_launch_to_tab path: if a provider=None prewarm is attached to a slot intended for an agent tab, the provider flips off.
Repro TBD — appears to be rare. Adding instrumentation (log a warning any time a tab's provider transitions from Some → None) would help catch the regression point.
Intermittent: a task that was running Claude Code (or another agent) drops back to a plain shell. Not sure yet whether it's Claude-specific.
Tab-title hint from the screenshot: the active tab shows the worktree path (
~/.a/w/a/fresh-slammer-echoes-wt) rather than "Claude Code" or "Terminal". That's consistent with the running program being a plain shell whosePROMPT_COMMANDemits\e]0;<cwd>\a(OSC 0/2), which flows intoapply_terminal_title_updateon the tab (desktop/src/app.rs:~372-376).TerminalLaunchConfig::default_title(core/src/agents.rs:199) would return "Claude Code" for a provider-backed tab or "Terminal" for a plain one — neither of those is what's rendered, so the OSC-title path is what's setting it, and the underlying process is a shell.Which means
tab.launch_config.providerended up None for a tab that started as a provider tab. Places worth auditing that mutatetab.launch_config:maybe_retry_claude_restoreclears onlysession, should not stripprovider, but worth confirming nothing downstream does.with_sessionbackfill.attach_prewarmed_launch_to_tabpath: if a provider=None prewarm is attached to a slot intended for an agent tab, the provider flips off.Repro TBD — appears to be rare. Adding instrumentation (log a warning any time a tab's provider transitions from Some → None) would help catch the regression point.