feat(agent-pane): the running turn's line names the call in flight, with a working mark
Summary
While a turn runs, the agent pane's status line only ever reads "Working for 2m 26s" or a shimmering "Thinking". Claude desktop's line starts with a small animated mark and says what's happening now (row 2 of #21604, refs transcript-task-list-in-progress.png and session-running-with-side-panels.png in cmux-design-references).
Now:
- The line starts with a working mark: three accent dots that pulse in turn on a slow 2s cycle. They hold still under Reduce Motion. Per the motion spec in #21604, this is the pane's one running motion, so the "Thinking" shimmer is gone and the label stays still in the muted color.
- While a tool call runs, the line names that call beside the turn's time, for example "bun test src/net 2m 21s". It is the newest running call in the live turn's latest row, named by the tool row's own label (
toolLabel), so a call whose title is raw JSON input reads "Read src/app.ts" (inFlightTitleinturns.ts). - Between calls the line reads "Working for ā¦" as before. "Thinking" gets the same mark.
The title is stored on the status row as a separate doing field, not text, so range copy and Find don't change. The line stays where it is (over the turn's work), with the same 27px height. Claude also shows a turn token count. That's left out because acpmux only reports context usage, not per-turn tokens.
#20833 has a similar activity line behind the agent.sessionStatus Debug toggle. This PR changes the existing line for everyone and adds no new row.
Testing
bun test test/transcript-working-line.test.tsx, which shapes a live turn withturnViewand rendersWorkingForandThinking:bun teston gallery-coverage, transcript-live-runs, transcript-worked-fold and transcript-range-content passes. transcript-long-chat-updates times out at the default 5s on this host, on base as well, with load average ~475. With--timeout 30000it passes (3/3).vp checkpasses (format, lint, types);bun run typecheckpasses again on 12c02b5.acpmux-protocol:checkcouldn't run in my sparse checkout because the IR file is missing. The protocol is untouched.- No app build. Screenshots come from the gallery stage
agent-pane.transcriptin headless Chromium. - Localization: no new strings. The line shows the call's own title, and the time uses
formatDuration.
Changelog
Changed: While an agent works, its status line shows an animated mark and names the command or tool it's running
Proof
Gallery agent-pane.transcript, dark. These are from 3010452. The Thinking frame still shows the shimmer, which is now removed, and the dots are mid-cycle. I couldn't retake them because the gallery dev server wouldn't warm at load ~350.
| Before | After |
|---|---|
![]() | ![]() |
![]() | ![]() |
Checklist
- Behavior changes have added or updated tests, or Testing says why not
- UI, settings, menu, schema, help-text or user-facing docs change: localization audited, and the result is stated above
- Reviewed with a subagent before merge (cmux-review), and all bot and human review comments resolved
š¤ Generated with Claude Code
Need help on this PR? Tag @codesmith-bot with what you need.



