From 1fc5e84d461ff7c3cfcc0ed134df0939665fc937 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Wed, 10 Jun 2026 22:41:18 +0300 Subject: [PATCH] fix: stop marking codex background terminals as working --- docs/next/CHANGELOG.md | 1 + src/detect/manifest/tests.rs | 13 ++++++------- src/detect/manifests/codex.toml | 15 +-------------- website/agent-detection/codex.toml | 15 +-------------- 4 files changed, 9 insertions(+), 35 deletions(-) diff --git a/docs/next/CHANGELOG.md b/docs/next/CHANGELOG.md index 3eb383fa..8df18e15 100644 --- a/docs/next/CHANGELOG.md +++ b/docs/next/CHANGELOG.md @@ -4,6 +4,7 @@ ### Fixed - Agent state detection for non-authoritative agents now comes from screen manifests instead of PTY-first semantic arbitration, so terminal output activity no longer publishes `working`, vetoes visible blockers, or decides idle fallback. +- Codex background terminal status text no longer overrides Codex's foreground idle OSC status, so long-running helpers such as dev servers do not keep the pane marked working. - Removed the remaining PTY input-taint debounce from agent detection, so user input, pane resizes, and redraw nudges no longer delay screen/OSC manifest state updates. - Numeric keypad keys that send VT100 application-keypad escape sequences now enter their digits and operators instead of being dropped. (#493) - Codex panes now stay marked working when the live status header uses reasoning-summary text such as `Investigating code output` instead of the literal `Working` label. (#501) diff --git a/src/detect/manifest/tests.rs b/src/detect/manifest/tests.rs index 0f425384..fd2ef15b 100644 --- a/src/detect/manifest/tests.rs +++ b/src/detect/manifest/tests.rs @@ -648,18 +648,17 @@ fn codex_osc_title_plain_is_idle() { } #[test] -fn codex_background_terminal_screen_beats_osc_idle() { - // Codex doesn't set is_task_running() for background terminals, so title is - // plain (idle). The screen rule background_terminal_working at priority 800 - // beats osc_title_idle at priority 100. +fn codex_background_terminal_screen_does_not_override_osc_idle() { + // Background terminal tasks can be long-lived helpers such as dev servers. + // They should not make Codex look busy once the foreground turn is idle. let screen = "background terminal running · /ps to view · /stop to close\n"; let result = osc_explain(Agent::Codex, screen, "llm-proxy", ""); - assert_eq!(result.state, AgentState::Working); + assert_eq!(result.state, AgentState::Idle); assert_eq!( result.matched_rule.as_ref().map(|r| r.id.as_str()), - Some("background_terminal_working") + Some("osc_title_idle") ); - assert!(result.visible_working); + assert!(result.visible_idle); } #[test] diff --git a/src/detect/manifests/codex.toml b/src/detect/manifests/codex.toml index 8cd42fa3..fe5eea7c 100644 --- a/src/detect/manifests/codex.toml +++ b/src/detect/manifests/codex.toml @@ -1,5 +1,5 @@ id = "codex" -version = "2026.06.10.2" +version = "2026.06.10.3" min_engine_version = 2 updated_at = "2026-06-10T00:00:00Z" @@ -44,19 +44,6 @@ any = [ { contains = ["allow command?"] }, ] -[[rules]] -id = "background_terminal_working" -state = "working" -priority = 800 -region = "bottom_non_empty_lines(6)" -visible_working = true -any = [ - { contains = ["background terminal running"] }, - { contains = ["Waiting for background terminal"] }, - { contains = ["/ps to view"] }, - { contains = ["/stop to close"] }, -] - [[rules]] id = "weak_blocker" state = "blocked" diff --git a/website/agent-detection/codex.toml b/website/agent-detection/codex.toml index 8cd42fa3..fe5eea7c 100644 --- a/website/agent-detection/codex.toml +++ b/website/agent-detection/codex.toml @@ -1,5 +1,5 @@ id = "codex" -version = "2026.06.10.2" +version = "2026.06.10.3" min_engine_version = 2 updated_at = "2026-06-10T00:00:00Z" @@ -44,19 +44,6 @@ any = [ { contains = ["allow command?"] }, ] -[[rules]] -id = "background_terminal_working" -state = "working" -priority = 800 -region = "bottom_non_empty_lines(6)" -visible_working = true -any = [ - { contains = ["background terminal running"] }, - { contains = ["Waiting for background terminal"] }, - { contains = ["/ps to view"] }, - { contains = ["/stop to close"] }, -] - [[rules]] id = "weak_blocker" state = "blocked"