Repository navigation
Task Manager: agent status, idle time and Close Terminal - #15298
Conversation
Coding agent rows now show the terminal's agent state (Running, Needs input, Idle, Hibernated) from the same per-panel lifecycle the sidebar and agent hibernation use, with how long a waiting agent has been in that state. Hibernated agents, which have no process to sample, are listed under their program with zero usage. Agent rows get a Close Terminal action that goes through the normal close confirmation. The command palette entry is also findable by activity, processes and top. Moves CmuxTaskManagerCodingAgentDefinition and the row view into their own files to keep TaskManagerTypes.swift and TaskManagerView.swift under the file length budget. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Review follow-ups: read the panel lifecycle through agentHibernationLifecycleState so overlay keys such as a Feed permission prompt report Needs input, reuse one ISO8601 formatter across refreshes, and drop the process-count detail on a program row that only holds hibernated agents. Adds a producer test on a real Workspace. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository: manaflow-ai/cmux/.coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Activity Monitor names a Claude Code process after its version file
("2.1.283"), so agent rows now list the PID and the OS process name
the sampler read, which maps an Activity Monitor row back to its
workspace and terminal.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Dogfood build of cmux DEV pr-15298-9645be7d.app The link opens this exact commit in the cmux dev menu bar app. The build starts on each push and the page waits until it is ready; a newer push replaces it. It signs in against production, so Cloud or backend changes still need a tagged build with a development backend. Dogfood tours of
|
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…o feat/task-manager-agent-status # Conflicts: # cmux.xcodeproj/project.pbxproj
|
Review: two review-subagent passes, correctness first, reading only (no local build on this host). Nothing blocking.
|
|
Cross-model review (Codex gpt-5.6-sol)
|
CI failure attributionCI passes on Written by |
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…o feat/task-manager-agent-status # Conflicts: # cmux.xcodeproj/project.pbxproj # dogfood/scenarios/task-manager-agents-tour.json
This comment has been minimized.
This comment has been minimized.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
…o feat/task-manager-agent-status
…ger-agent-status Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ger-agent-status Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
…o feat/task-manager-agent-status Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> # Conflicts: # cmux.xcodeproj/project.pbxproj
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The hibernated rows joined a program group by comparing the name shown, so a program whose displayed name differs from the running group's title opened a second group with no icon: a registered agent renamed in project config, or a program whose name comes from a localized key. Two hibernated panels of the same program could also each open a group. The panel payload now carries the program's stable id and the grouping matches on it, falling back to the name for payloads that carry no id. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Review subagent on the exact diff, plus what I found checking its findings. Pushed b002ab5. Review:
Fixed (b002ab5):
Left:
Still needs dogfood before merge: — Raindrop g2 🫧 |
|
The rollup is green on b002ab5 (60 checks,
Steps 13 and 17 are downstream: the tour never created the workspaces it wanted to right-click, so "no element for labelContains=Fix the login flow" is the absence of the fixture, not a missing row. The single cause is That error comes from the coordinator having no So the state is: CI green, review posted and addressed, and no usable dogfood evidence yet. It is a Task Manager feature, so it needs dogfood plus Leo's approval before merge either way. Not merging it from the train. — Raindrop g2 🫧 / Run: run_worker_20260930_3fc64ba6 |





Stacked on #15272. Review only the top commits; this PR retargets to main once #15272 lands.
Summary
The Task Manager now shows what each coding agent is doing, not only what it costs. Every agent row (the per-workspace rows from #15272) shows the terminal's agent state, Running, Needs input, Idle or Hibernated, and for the waiting states how long it's been in that state ("Idle 12m", "Needs input 1h 5m").
Workspace.agentHibernationLifecycleState(panelId:)). The sidebar status text is the fallback when a hook only wrote status.taskManagerTopPayloadreports it in a newagent_panelsarray, built on the main actor next to the window topology..equatable()rows still re-render at most once a minute.TabManager.closePanelWithConfirmation, the same path as the sidebar's close-surface action, so a running process still prompts. As with that path, closing the only surface of a workspace follows the "close workspace on last surface" preference. An agent terminal that never reported a state (hooks not installed) keeps View Workspace / View Terminal / Kill Process but gets no Close Terminal.To stay under the file length budget,
CmuxTaskManagerCodingAgentDefinitionmoves to its own file andCmuxTaskManagerRowViewtoTaskManagerRowView.swift. Both are moved unchanged, apart from the row view's new status label and Close item.Not in this PR:
Testing
cmuxTests/TaskManagerAgentStatusTests: wire and status-text mapping, whole-minute elapsed time (none while running), status and Close availability on agent rows, hibernated rows under their program, and a producer test on a realWorkspace(a Feed permission overlay key reports Needs input, manual loaders are skipped).python3 scripts/verify-local.py --affected origin/main --swift-changed origin/main: 15/15 checks passed (swift-syntax, xcstrings, localization, test wiring, project and others). File length budgets passed.dogfood/scenarios/task-manager-agents-tour.json: fakeclaudeandcodexprocesses that report their pid and lifecycle over the socket (Idle and Running). Screenshots below.scripts/localize-changes.localization_catalog.py checkreports 0 parity errors. Durations useDateComponentsFormatter(abbreviated), so they're system-localized.Changelog
Added: Task Manager shows each coding agent's state (Running, Needs input, Idle, Hibernated) and how long it has been waiting, lists hibernated agents, and can close an agent's terminal
Demo Video
Dogfood-tours: task-manager-agents-tour
SCREENSHOTS
Checklist
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.Summary by cubic
The Task Manager now reports what each coding agent is doing instead of only its cost. Agent rows show a status — Running, Needs input, Idle, or Hibernated — along with how long a waiting agent has been in that state, and offer a Close Terminal action.
pid-<n>placeholder name.Written for commit b002ab5. Summary will update on new commits.