Add a dedicated codex agents dashboard command (#39114)

## What changed

- Add `codex agents` to open the shared agents overview without creating a new session.
- Start the local background app server automatically on Unix, or connect to a server supplied with `--remote`.
- Reject invocation-specific session overrides that cannot apply to shared sessions.
- When the overview is opened from an embedded session, offer to start the background server without moving or interrupting the current session.

## Testing

- Cover command-line parsing and rejection of incompatible overrides.
- Snapshot the embedded-session background-server prompt.

GitOrigin-RevId: 60845dfebc48d820dc4ff090626d30452127f062
This commit is contained in:
Eric Traut authored and copyberry committed 2026-08-18 00:31:51 +00:00
1 parent 13dfaab446
commit fd5018e044
14 files changed
+343 -30

No files matched your search

+21 -1
View File
@@ -191,7 +191,9 @@ impl App {
}
}
}
SessionSelection::Exit | SessionSelection::StartFresh => {
SessionSelection::Exit
| SessionSelection::StartFresh
| SessionSelection::AgentsOverview => {
self.refresh_in_memory_config_from_disk_best_effort(
"closing the session picker",
)
@@ -2326,6 +2328,9 @@ impl App {
.select_agents_overview_thread(tui, app_server, thread_id)
.await?
{
AppRunControl::Continue if self.primary_thread_id.is_none() => {
self.open_agents_overview(app_server);
}
AppRunControl::Continue => {}
AppRunControl::Exit(reason) => return Ok(AppRunControl::Exit(reason)),
}
@@ -2348,6 +2353,21 @@ impl App {
self.stop_agents_overview_thread(app_server, thread_id)
.await;
}
#[cfg(unix)]
AppEvent::StartAgentsDaemon => {
self.start_agents_daemon();
}
#[cfg(unix)]
AppEvent::AgentsDaemonStarted { result } => match result {
Ok(()) => self.chat_widget.add_info_message(
"Background server started. Run `codex agents` in another terminal; this session remains unchanged."
.to_string(),
/*hint*/ None,
),
Err(error) => self
.chat_widget
.add_error_message(format!("Failed to start the background server: {error}")),
},
AppEvent::OpenAgentPicker => {
self.open_agent_picker(app_server).await;
}