Skip to content

cmux NEXT: agent work breathes a calm accent dot instead of a spinner on every row - #22826

Merged
teamleaderleo merged 8 commits into
feat-cmux-nextfrom
cmux/working-look
Oct 21, 2026
Merged

teamleaderleo merged 8 commits into
feat-cmux-nextfrom
cmux/working-look

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Leo (2026-10-20), on a list of ~17 running sessions with a grey spinner on each row: "Can you think of anything better than just having these spinners? After a certain point, isn't this mildly ugly? What are the alternatives?"

Part 2 of the activity-indicators lane. Part 1, the frozen transcript spinners, was #22786 (merged).

What changes

  • Agent work defaults to a breathing dot. It's a small dot in the theme accent (Palette.accentFill: the text color, or the hue appearance.accent names; never Claude orange) that breathes once every 2.4 s. It runs on the shared clock, so a list of working rows breathes as one instead of 17 rings turning.
    • Native: every status indicator that draws work (sidebar rows and group headers, the switcher, tabs and tab badges, hover cards).
    • Agent pane: the running transcript rows (compaction, tool groups, MCP calls, message cards, command and shell rows).
  • Loading keeps its spinner (a page, a command, a harness check), so loading and agent work still read apart.
  • Reduce Motion and the static look: nothing moves. Native keeps its existing still glyphs; on web the dot holds at full strength. An occluded or off-screen row's dot also stays still and stays a dot.
  • Debug Settings → Status Indicators → "Working look" (status.working) keeps the alternatives:
    • Shimmer: a still dot, and on web pages a light band crosses the running row's words.
    • Spinner: the old turning arc.
    • Web pages get the choice as data-working-look, through both WebTheme and the agent pane theme.
  • New Motion loop breath (2.4 s, Debug-tunable, never under 1 s). Web: cmux-breathe and cmux-shimmer keyframes in desktop.css, kept in phase by ui/spinnerClock.ts.

The options (Linux gallery, agent-pane.working-look, dark)

These are the agent pane's running rows; the "Compacting the conversation…" row carries the working mark. The native sidebar, switcher and tabs draw the same plan with the native indicator layer; there's no native capture here (no Mac build on this host).

Breathing Dot (default), bright Breathing Dot, dim (1.2 s later)
breathe bright breathe dim
Shimmer (still dot; a light band crosses the words) Spinner (before)
shimmer spinner

Reduce Motion / Static: the dot holds at full strength.

static

Why Breathing Dot is the default: one small accent dot per row, breathing slowly and in step, reads as calm "still working" even across 17 rows. Shimmer moves more of the screen (every running row's words), and a spinner on each row is the noise Leo pointed at. Shimmer is a good fit for a single row (it's what "Thinking" already does), so it stays as an option.

Changelog

Changed: A working agent shows a calm breathing dot in your accent color instead of a spinner; Debug Settings keeps Shimmer and Spinner.

Tests

  • StatusWorkingLookTests (CmuxNextDesign): breathe is the default; each look's plan; a still or hidden row keeps the dot; loading and known progress keep their marks; the breath is slower than the waiting pulse.
  • test/static-status-loops.test.ts (browser): each look runs exactly its own loop on agent work, a loading spinner still turns, and Static and Reduce Motion stop all of them.
  • spinnerTurns.test.tsx: running rows mark themselves as agent work; a loading spinner never takes the dot.

Observed / Not run

  • Ran on huge-blue: bun run check (clean), and bun test on conversation, started, gallery and the spinner clock (82 pass). With CMUX_BROWSER_TESTS=1: static-status-loops, agent-pane-plan and spinner-clock (18 pass). Gallery tests: 43 pass. prepush-gate ran on push.
  • Elapsed time: hovering a sidebar row already shows how long it has been working (the hover card's activitySince). Elapsed time on a wide row is not in this PR; it needs native layout and a capture, so it comes as a follow-up.
  • Not run: the Swift build and StatusWorkingLookTests. No Mac compiles on this host, so those run on CI.

Agent session: huge-blue

🤖 Generated with Claude Code

…nning

Leo 2026-10-20, on seventeen running sessions each with a spinner: "isn't
this mildly ugly? What are the alternatives?" Agent work now draws a small
dot in the theme accent that breathes once every 2.4 s on the shared clock,
so many working rows breathe as one. It applies everywhere the status
indicator draws work (sidebar rows, switcher, tabs, hover cards) and on the
agent pane's running transcript rows (compaction, tool groups, MCP calls,
command and shell rows). Loading (a page, a command, a harness check) keeps
its spinner. Reduce Motion and the static look hold the dot still.

Debug Settings "Working look" (status.working) keeps the alternatives:
Shimmer (a still dot; on web pages a light band crosses the row's words)
and Spinner (the old turning arc). Web pages get it as data-working-look.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c2a-ee5f-7111-b18b-d14161ef8c3c&host=huge-blue
@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 36e70a3: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr22826 -f ref=cmux/working-look -f platform=macos -f backend_mode=local

Probably yours: agent-pane-trust-ask-corner.test.ts, agent-pane-trust-ask-corner.test.ts, agent-pane-stream-jitter.test.ts and 1 more fails here but not on main's latest full suite. Seen on other PRs too (likely flaky): composer-mention.test.ts, composer-mention.test.ts, composer-mention.test.ts and 19 more.

CI failed on 36e70a3e42 (run 39547338674 attempt 1): 4 code, 1 unknown.
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped.

Job Verdict Why
web / react-apps-check (4) code a web test failed
web / react-apps-check (1) code a web test failed
web / react-apps-check (2) code a web test failed
web / react-apps-check (3) code a web test failed
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Failures:

  • new in this PR agent-pane-trust-ask-corner.test.ts the trust bar's corner is the composer card's: failed (job)
  • new in this PR agent-pane-trust-ask-corner.test.ts no caption stands between the open trust question and the card: failed (job)
  • seen on other PRs composer-mention.test.ts @ then letters lists the chat's matching files and Return writes the path: failed (job)
  • seen on other PRs composer-mention.test.ts after picking a path markdown escapes, typing on leaves the picker closed: failed (job)
  • seen on other PRs composer-mention.test.ts @proje lists other chats, then folders, then the chat folder's files: failed (job)
  • seen on other PRs composer-mention.test.ts a chat named for a long prompt does not take @app from the file: failed (job)
  • seen on other PRs composer-mention.test.ts a bare @ lists the most recent other chats: failed (job)
  • seen on other PRs composer-mention.test.ts an @ inside a word opens nothing and asks the host for nothing: failed (job)
  • seen on other PRs agent-pane-queue-steer.test.ts queued and steering prompts > the queue takes its own place in the stack: nothing is cut off or draw...: failed (job)
  • new in this PR agent-pane-stream-jitter.test.ts webkit: scrolling up while a reply streams is never pulled back: failed (job)
  • ... 16 more in the job logs
Matched log lines
web / react-apps-check (4): (fail) the trust bar's corner is the composer card's [4678.74ms]
web / react-apps-check (1): (fail) queued and steering prompts > the queue takes its own place in the stack: nothing is cut off or drawn over [1298.55ms]
web / react-apps-check (2): (fail) the transcript fades under the header once scrolled, and above the composer while more lies below [4000.07ms]
web / react-apps-check (3): (fail) no description line on any Settings page is over 60 characters, in any language [14412.96ms]

Not re-run automatically: web / react-apps-check (4), web / react-apps-check (1), web / react-apps-check (2), web / react-apps-check (3), web / react-apps-check are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: web / Web status; base red: the same failure on the base 89f97db; does not block
red: web / react-apps-check; base red: the same failure on the base 89f97db; does not block
red: web / react-apps-check (1); NEW: Expected: <= 552 Received: 577 at <anonymous> (/home/runner/_work/cmux/cmux/webviews/test/agent-pane-queue-steer.test.ts:356:32) is not red on the base 89f97db; do not merge until green; see lane-rules
red: web / react-apps-check (2); base red: the same failure on the base 89f97db; does not block
red: web / react-apps-check (3); base red: the same failure on the base 89f97db; does not block
red: web / react-apps-check (4); base red: the same failure on the base 89f97db; does not block

CI fast guards failed on 36e70a3e42 (https://github.com/manaflow-ai/cmux/actions/runs/39547338674). It does not block the merge; a red guard merged into main breaks it for every open PR.
The log named no failed step; see the run.

Agents: python3 scripts/ci/guard_attribution.py fix applies the mechanical fixes locally.

Tour of 36e70a3e42 (run): no media. The tour job failed before the tour ran (build or setup); the run log has the output.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-yf9tm created for this PR by the cmux coordinator.

@blacksmith-sh

blacksmith-sh Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Found 24 test failures on Blacksmith runners:

Failures

Test View Logs
src/pages/settings/rowSummary.test.tsx/rowSummary.test.tsx View Logs
src/pages/settings/rowSummary.test.tsx/rowSummary.test.tsx View Logs
test/agent-pane-adopted-tool-calls.test.ts/agent-pane-adopted-tool-calls.test View Logs
test/agent-pane-adopted-tool-calls.test.ts/agent-pane-adopted-tool-calls.test View Logs
test/agent-pane-column-edges.test.ts/agent-pane-column-edges.test View Logs
test/agent-pane-column-edges.test.ts/agent-pane-column-edges.test View Logs
test/agent-pane-queue-steer.test.ts/agent-pane-queue-steer.test View Logs
test/agent-pane-queue-steer.test.ts/agent-pane-queue-steer.test View Logs
test/agent-pane-soft-edges.test.ts/agent-pane-soft-edges.test View Logs
test/agent-pane-soft-edges.test.ts/agent-pane-soft-edges.test View Logs

...and 14 more test failures. View all on Blacksmith

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

owner: 01a15c2a-ee5f-7111-b18b-d14161ef8c3c

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Red check classification for 07af590: all three web / react-apps-check shards fail only in composer tests: composer-mention, composer-suggested-prompt, composer-history, composer-location-strip and agent-pane-wheel-pass-through. Base feat-cmux-next fails the same shards on 1df7c70, abe5a60, 7819daf, 7c64cf3 and 9e152a9. These are base findings, not from this PR. The review's one defect, Oxfmt on WorkingLook.gallery.ts, is fixed in bf8eeed.

teamleaderleo and others added 3 commits October 21, 2026 03:14
…name has room

A working workspace row draws "4m" (whole minutes, "1h 3m") dim beside its
working dot, only while the name still fits whole; a narrow sidebar keeps
the row as it was, and a row with its own trailing text (an age, a status
line) keeps that. The text changes on the minute through a DemandTimer.
The hover card already shows the time to the second.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c2a-ee5f-7111-b18b-d14161ef8c3c&host=huge-blue
Review of the previous commit: with the default corner badge, a working
row almost always has an age ("3:14 PM") in the trailing text slot, so the
running time never showed. While the agent works, the running time now
replaces the age (a one-line status keeps its place). The minute tick arms
only while the time shows or its first minute runs, cancels on reuse, and
restarts when the start time changes. Tests give the fixture an age.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c2a-ee5f-7111-b18b-d14161ef8c3c&host=huge-blue
Re-review: a parked row returning to its own workspace keeps its content,
so configure skips and never set the cleared start again; the trailing
slot stayed empty. Reuse now only cancels the tick and lays out again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c2a-ee5f-7111-b18b-d14161ef8c3c&host=huge-blue
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

owner: 01a15c2a-ee5f-7111-b18b-d14161ef8c3c

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Reds seen on bf8eeed are base reds; this PR touches none of their files:

Since then: cc6f9d3, 0521835 and 9f8ef27 add the wide-row elapsed time. The independent review passed on 9f8ef27 after two rounds of fixes (the badge age hid it; a pooled row lost it). I'm merging once the cmux-next Swift jobs pass.

@teamleaderleo
teamleaderleo marked this pull request as ready for review October 21, 2026 03:40
@cursor

cursor Bot commented Oct 21, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

…king-look

# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorLayer.swift
…king-look

# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView.swift
@cursor

cursor Bot commented Oct 21, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next guards / defaults-snapshot is red on 23 of 23 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo
teamleaderleo merged commit 4e68eeb into feat-cmux-next Oct 21, 2026
@teamleaderleo
teamleaderleo deleted the cmux/working-look branch October 21, 2026 05:52
teamleaderleo added a commit that referenced this pull request Oct 21, 2026
WorkspaceRowElapsedTests (from #22826) crashed the test process with
signal 11 on the fleet: each test closed a window it still held while
isReleasedWhenClosed was true, so the window was released twice. The
windows now set isReleasedWhenClosed = false, as the other window tests
do, and the suite runs serialized.


Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c2a-ee5f-7111-b18b-d14161ef8c3c&host=huge-blue

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Oct 21, 2026
WorkspaceRowElapsedTests (from #22826) crashed the test process with
signal 11 on the fleet: each test closed a window it still held while
isReleasedWhenClosed was true, so the window was released twice. The
windows now set isReleasedWhenClosed = false, as the other window tests
do, and the suite runs serialized.

Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c2a-ee5f-7111-b18b-d14161ef8c3c&host=huge-blue

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

teamleaderleo added a commit that referenced this pull request Oct 21, 2026
Leo 2026-10-21: "WHO BROUGHT BACK THE DONE AND THE TIMERS". #22826
(2026-10-20) drew how long a row's agent had worked ("10m") beside its
working mark, in place of the row's age, with a minute tick per row. The
row drops the running time, its label, its tick and WorkspaceRowView+Elapsed;
a working row keeps its age as before #22826. The hover card still shows the
time to the second.

Test: SidebarRowNoDoneTests.aWorkingRowShowsNoRunningTime renders a row
whose agent has worked ten minutes and fails if any label shows a running
time. WorkspaceRowElapsedTests (the timer's own tests) goes with it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray
teamleaderleo added a commit that referenced this pull request Oct 21, 2026
…r row blinks (#23776)

Leo 2026-10-21: "WHO BROUGHT BACK BLINKING ICONS? WE SAID NO BLINKING. WE
SAID SPINNER." #22826 (2026-10-20) made the breathing accent dot the default
working look (Debug Settings status.working), so every working row's mark
faded in and out. The spinner is the default again; the breathing and still
dots stay as Debug choices.

Test: SidebarRowNoBlinkTests fails if any status mark a row can draw at the
defaults pulses, breathes or waves, or if a drawn mark's layers carry a
repeating opacity animation; running must spin.


Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Oct 21, 2026
…act checks)

Leo, on a #22826 card: no state word and no pill. The state is the pull
request glyph's colour alone, as Claude draws it (open green, merged purple,
closed red, draft grey); the word stays as the glyph's accessible name.
Open and Open in are quiet borderless buttons with a hover background, the
card is tighter (8px/10px inset, 6px rows, no divider), a web card's address
sits under its title only when it says more than the host, and "+N −M" has no
dotted underline. An open pull request's checks are a compact "✓ 90 ✗ 10"
(◷ for running ones) with base's "(N already on base)" note, the ✗ muted when
every red is also red on base; a finished pull request shows no checks line
and no conflicts. The card stays on the tooltip's glass tokens.

This also clears the agent-pane-no-capsules red: the 999px state pill is gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1602e-25ea-7611-8c79-d16df0c4058f&host=cosmic-gray
teamleaderleo added a commit that referenced this pull request Oct 22, 2026
Leo 2026-10-21: "WHO BROUGHT BACK THE DONE AND THE TIMERS". #22826
(2026-10-20) drew how long a row's agent had worked ("10m") beside its
working mark, in place of the row's age, with a minute tick per row. The
row drops the running time, its label, its tick and WorkspaceRowView+Elapsed;
a working row keeps its age as before #22826. The hover card still shows the
time to the second.

Test: SidebarRowNoDoneTests.aWorkingRowShowsNoRunningTime renders a row
whose agent has worked ten minutes and fails if any label shows a running
time. WorkspaceRowElapsedTests (the timer's own tests) goes with it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray
teamleaderleo added a commit that referenced this pull request Oct 22, 2026
Leo 2026-10-21: "WHO BROUGHT BACK THE DONE AND THE TIMERS". #22826
(2026-10-20) drew how long a row's agent had worked ("10m") beside its
working mark, in place of the row's age, with a minute tick per row. The
row drops the running time, its label, its tick and WorkspaceRowView+Elapsed;
a working row keeps its age as before #22826. The hover card still shows the
time to the second.

Test: SidebarRowNoDoneTests.aWorkingRowShowsNoRunningTime renders a row
whose agent has worked ten minutes and fails if any label shows a running
time. WorkspaceRowElapsedTests (the timer's own tests) goes with it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray
teamleaderleo added a commit that referenced this pull request Oct 22, 2026
…hover card with state pills (#23746)

* cmux NEXT agent chat: tests that a link chip never grows when its title loads (red)

[#22896](…/pull/22896) grew inline into "#22896 · cmux-next updates: …" once
the page title came in, reflowing the paragraph. These fail on the base: the
chip's text and icon must not change after metadata arrives.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1602e-25ea-7611-8c79-d16df0c4058f&host=cosmic-gray

* cmux NEXT agent chat: a link chip's text and icon are fixed when it first draws

A pull request chip no longer appends its title (cv-chip__title), and a bare
address no longer swaps to the site's title and favicon once cmux learns them.
Both now show only in the hover card, so a hover or a late lookup never widens
the chip and reflows the reply.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1602e-25ea-7611-8c79-d16df0c4058f&host=cosmic-gray

* cmux NEXT agent chat: a tighter link hover card with state pills and base-red checks

Leo: "the styling/layout/spacing could be a bit better". The card's head is
one compact row: the favicon or GitHub mark inline beside the title (a pull
request's own title, cut to two lines), then Open and Open in. A pull request
card drops the github.com address footer; a web link keeps its masked address
under the title. One 12px inset and 8px between rows. The state is a pill
tinted in its colour (open green, merged purple, closed red). Checks whose
failures all fail on the base branch read muted "N failing (base)"; some of
them read "N failing, M on base". The pr.inspect answer gains an optional
failingOnBase, which the host does not send yet. Gallery: merged-with-base-reds
and closed pull request states.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1602e-25ea-7611-8c79-d16df0c4058f&host=cosmic-gray

* cmux NEXT agent chat: a quieter pull request card (glyph colour, compact checks)

Leo, on a #22826 card: no state word and no pill. The state is the pull
request glyph's colour alone, as Claude draws it (open green, merged purple,
closed red, draft grey); the word stays as the glyph's accessible name.
Open and Open in are quiet borderless buttons with a hover background, the
card is tighter (8px/10px inset, 6px rows, no divider), a web card's address
sits under its title only when it says more than the host, and "+N −M" has no
dotted underline. An open pull request's checks are a compact "✓ 90 ✗ 10"
(◷ for running ones) with base's "(N already on base)" note, the ✗ muted when
every red is also red on base; a finished pull request shows no checks line
and no conflicts. The card stays on the tooltip's glass tokens.

This also clears the agent-pane-no-capsules red: the 999px state pill is gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1602e-25ea-7611-8c79-d16df0c4058f&host=cosmic-gray

* Hover card test checks the liquid glass the card now uses

Base #23477 moved the link card onto .ui-glass, so the card rule sets no fill;
the test now pins the ui-glass class and the glass token fallback instead of
the old tooltip background.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1602e-25ea-7611-8c79-d16df0c4058f&host=cosmic-gray

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Oct 22, 2026
Leo 2026-10-21: "WHO BROUGHT BACK THE DONE AND THE TIMERS". #22826
(2026-10-20) drew how long a row's agent had worked ("10m") beside its
working mark, in place of the row's age, with a minute tick per row. The
row drops the running time, its label, its tick and WorkspaceRowView+Elapsed;
a working row keeps its age as before #22826. The hover card still shows the
time to the second.

Test: SidebarRowNoDoneTests.aWorkingRowShowsNoRunningTime renders a row
whose agent has worked ten minutes and fails if any label shows a running
time. WorkspaceRowElapsedTests (the timer's own tests) goes with it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray
teamleaderleo added a commit that referenced this pull request Oct 22, 2026
Leo 2026-10-21: "WHO BROUGHT BACK THE DONE AND THE TIMERS". #22826
(2026-10-20) drew how long a row's agent had worked ("10m") beside its
working mark, in place of the row's age, with a minute tick per row. The
row drops the running time, its label, its tick and WorkspaceRowView+Elapsed;
a working row keeps its age as before #22826. The hover card still shows the
time to the second.

Test: SidebarRowNoDoneTests.aWorkingRowShowsNoRunningTime renders a row
whose agent has worked ten minutes and fails if any label shows a running
time. WorkspaceRowElapsedTests (the timer's own tests) goes with it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray
teamleaderleo added a commit that referenced this pull request Oct 24, 2026
…3870)

* cmux-next: delete the breathing working dot; agent work is the spinner everywhere

Follows #23776, which made the spinner the default again. #22826 had added
StatusWorkingLook.breathe (a breathing accent dot for agent work) as the
default. Leo: "who brought back the blinkers!? we had spinners properly
going", "we need to GUARANTEE the breathing dot doesn't come back".

Deleted: StatusWorkingLook.breathe, StatusIndicatorPlan.Animation.breathe and
its animation key and layer handling, MotionGate.breathAnimation,
MotionLoop.breath (tunable default and minimum period),
StatusIndicatorConfig.breathLow, the "Breathing Dot" title and its catalog
entry; on the web the cmux-breathe keyframes, --cmux-breath-period and the
breathe rules. A page with no data-working-look, or any value but shimmer
(an old "breathe" included), now draws the spinner. The Apps page's loading
skeleton keeps its pulse under its own name (cmux-skeleton-pulse).

A stored status.working = "breathe" decodes to nothing and reads as the
default, the spinner; tested, along with the payload sent to web pages.

Tests: NoBreathingDotTests (every look, every host path that draws work,
drawn into the real layer with loops running, plus a source guard over
CmuxNextDesign) and static-status-loops.test.ts (each look, no attribute,
an old breathe pushed through the theme bootstrap: no working mark loops
its opacity; a stylesheet guard).

Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(agent chat): keep working and jump indicators calm

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a16bc5-12cc-7800-88fd-75e6a391e3dd&host=big-red

* test(status): preserve explicit dot choices and guard spinner defaults

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a16bc5-12cc-7800-88fd-75e6a391e3dd&host=big-red

* fix(agent chat): use spinners unless a dot was explicitly selected

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a16bc5-12cc-7800-88fd-75e6a391e3dd&host=big-red

* fix(web): shrink token debt after removing jump pulse

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a16bc5-12cc-7800-88fd-75e6a391e3dd&host=big-red

* fix(agent-pane): construct tray after its callbacks initialize

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a16bc5-12cc-7800-88fd-75e6a391e3dd&host=big-red

* fix(ci): ignore vp warning summaries in either order

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a16bc5-12cc-7800-88fd-75e6a391e3dd&host=big-red

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant