Skip to content

Agent chat: no blinking dots before Thinking or Working for; the Steering caption's words are gone - #23034

Merged
teamleaderleo merged 2 commits into
feat-cmux-nextfrom
chat-remove-steering-caption-ascii
Oct 21, 2026
Merged

teamleaderleo merged 2 commits into
feat-cmux-nextfrom
chat-remove-steering-caption-ascii

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Leo asked for two chat-transcript removals ("wtf have we removed this yet").

1. The blinking dots before "Thinking" / "Working for". Leo called these "the blinking ascii": the three accent dots (WorkingMark) that pulsed on a 2 s cycle at the start of the running turn's line (r2/206.png: "••• Thinking"). The line now starts with its words, and the ticking time shows the turn is alive. The activity line under a todo list (Debug agent.sessionStatus) loses the same dots. WorkingMark.tsx and its CSS are deleted.

2. "Steering · The agent reads it when its current step ends". The caption itself stopped drawing in #22616. Its two strings (steer.waiting, steer.waitingDetail) were still in the catalog, unused, so this PR deletes them and no row can draw them again. A waiting steer shows only the quiet clock and Send now. The "Steered · the agent read it" word-mark is replaced by a ✓ read receipt in #22773 (message-actions lane). This PR doesn't touch SteerMark, so the two PRs don't conflict.

Not changed: the jump-to-latest button's dots. They belong to a different control and are not on the transcript line.

Proof

  • webviews/test/transcript-working-line.test.tsx: Thinking, Working for, the call in flight and the activity line each start with their words. The stylesheet has no working-mark or activity-dot rules.
  • webviews/test/steer-no-caption.test.tsx: a waiting steer reads only "Send now", and the caption's words are gone from the catalog.
  • webviews/test/static-status-loops.test.ts: the fixture drops the two removed loops.
  • Gallery: agent-pane.transcript variants thinking and working-tokens play a check that the line has no mark before its words and no looping animation.

Changelog

  • Removed: the blinking dots before "Thinking" and "Working for" in agent chat, and the leftover "Steering" caption strings.

Observed / Not run

  • Independent review subagent: pass (no correctness findings; nits on stale comments and an over-broad test check, fixed in 578c29c).
  • scripts/web-lint.sh: clean on the changed files (the one formatting red is base's test/tool-label-several-files.test.ts, from Agent chat: an edit of several files reads "Edit 2 files", not its first file; adopted tool-calls test follows #22658 #23011). prepush-gate.py: no new violations.
  • Not run locally: bun tests and gallery plays (no tests on this Mac); CI's react-apps-check and the gallery run cover them.
  • cmux-next guards / defaults-snapshot is red on base (stale settings exports for agents.trust.*, sidebar.sessionTree, NotificationModes/Preferences), not from this PR.

Agent session: cosmic-gray

🤖 Generated with Claude Code


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


Summary by cubic

Removes the pulsing dots before “Thinking,” “Working for,” and the activity line, so each status starts with its words. Waiting steers no longer show the “Steering” caption; they show only the quiet clock and “Send now.”

  • Deletes the unused caption strings from the localization catalog.
  • Adds tests and gallery checks for the dot-free status lines and waiting steer.

Written for commit 4d641dc. Summary will update on new commits.

View guided diff Turn on auto-fix

…ring caption's words are gone

Leo, 2026-10-20 ("wtf have we removed this yet"): the three accent dots that pulsed before
"Thinking", "Working for 42s" and the call in flight (WorkingMark) were "the blinking ascii".
The running line now starts with its words; its ticking time says the turn is alive. The
activity line under a todo list (agent.sessionStatus) drops the same dots.

The "Steering · The agent reads it when its current step ends" caption stopped drawing in
#22616; its two strings (steer.waiting, steer.waitingDetail) were left in the catalog unused
and are removed so nothing can draw them again.

Tests: transcript-working-line asserts each running line starts with its words and the
stylesheet has no working or activity dot rules; steer-no-caption asserts a waiting steer
shows only Send now and the caption's words are gone. Gallery: the thinking and
working-tokens variants play a check that the line holds still.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15cfb-0392-7f93-b611-98366b6dc130&host=cosmic-gray
@teamleaderleo teamleaderleo added the risk:low Risk tier (docs/ci/risk-tiers.md) label Oct 21, 2026
@teamleaderleo

teamleaderleo commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator Author

Owned by projects-c6 on cosmic-gray · session

@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 578c29c: 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=pr23034 -f ref=chat-remove-steering-caption-ascii -f platform=macos -f backend_mode=local

Probably yours: agent-pane-mermaid.test.tsx fails here but not on main's latest full suite. Seen on other PRs too (likely flaky): agent-pane-no-capsules.test.ts, composer-history.test.ts, composer-mention.test.ts and 20 more.

CI failed on 578c29cbc0 (run 39553495850 attempt 1): 4 code, 1 unknown.

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

Failures:

  • seen on other PRs agent-pane-no-capsules.test.ts agent pane page > rounds its controls as small-radius rects, not capsules: failed (job)
  • seen on other PRs composer-history.test.ts ↑ and ↓ in an empty prompt step through the chat's earlier prompts: 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)
  • seen on other PRs agent-pane-stream-jitter.test.ts webkit: scrolling up while a reply streams is never pulled back: failed (job)
  • ... 14 more in the job logs
Matched log lines
web / react-apps-check (1): (fail) agent pane page > rounds its controls as small-radius rects, not capsules [12.85ms]
web / react-apps-check (3): (fail) @ then letters lists the chat's matching files and Return writes the path [2002.71ms]
web / react-apps-check (4): (fail) queued and steering prompts > the queue takes its own place in the stack: nothing is cut off or drawn over [1331.67ms]
web / react-apps-check (2): (fail) the strip or queue and the card meet square in one rim, and the queue keeps room above [6083.35ms]

Not re-run automatically: web / react-apps-check (1), web / react-apps-check (3), web / react-apps-check (4), web / react-apps-check (2), 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 72c9e93; does not block
red: web / react-apps-check; base red: the same failure on the base 72c9e93; does not block
red: web / react-apps-check (1); NEW: - [] + [ + "press ArrowUp: layout shift 0.0002 (limit 0)", + "press ArrowDown: layout shift 0.0002 (limit 0)", + "type "draft": layout shift 0.0002 (limit 0)", (+1 more) is not red on the base 72c9e93; do not merge until green; see lane-rules
red: web / react-apps-check (2); NEW: Expected: "rgb(156, 162, 189)" Received: "rgb(125, 129, 153)" at <anonymous> (/home/runner/_work/cmux/cmux/webviews/test/quiet-access-chip.test.ts:103:29) (+5 more) is not red on the base 72c9e93; do not merge until green; see lane-rules
red: web / react-apps-check (3); NEW: - [] + [ + "type "mail me@rea": layout shift 0.0002 (limit 0)", + ] - Expected - 1 + Received + 3 at <anonymous> (/home/runner/_work/cmux/cmux/webviews/test/com (+5 more) is not red on the base 72c9e93; do not merge until green; see lane-rules
red: web / react-apps-check (4); NEW: Expected: "Do anything" Received: "Type / for commands" at <anonymous> (/home/runner/_work/cmux/cmux/webviews/test/composer-suggested-prompt.test.tsx:206:19) (+7 more) is not red on the base 72c9e93; do not merge until green; see lane-rules

CI fast guards failed on 578c29cbc0 (https://github.com/manaflow-ai/cmux/actions/runs/39553495850). 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 578c29cbc0 (run): no media. The tour did not run: only webview code changed (12 path(s)), which the gallery advisory run checks in Linux Chromium on the pull request (its artifact holds any captures); add the media-tour-mac label to tour it on a Mac.

…ne check reads the first child

Review follow-up: stale comments named the working dots and activity dots, and
stillMarkup rejected any aria-hidden, which the line's count separators carry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15cfb-0392-7f93-b611-98366b6dc130&host=cosmic-gray
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next guards / defaults-snapshot is red on 24 of 24 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

Copy link
Copy Markdown
Collaborator Author

Bead cx-vld05 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
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-mermaid.test.tsx/agent-pane-mermaid.test.tsx View Logs
test/agent-pane-mermaid.test.tsx/agent-pane-mermaid.test.tsx View Logs
test/agent-pane-no-capsules.test.ts/agent-pane-no-capsules.test View Logs
test/agent-pane-no-capsules.test.ts/agent-pane-no-capsules.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-stream-jitter.test.ts/agent-pane-stream-jitter.test View Logs
test/agent-pane-stream-jitter.test.ts/agent-pane-stream-jitter.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
teamleaderleo merged commit 03960f5 into feat-cmux-next Oct 21, 2026
@teamleaderleo
teamleaderleo deleted the chat-remove-steering-caption-ascii branch October 21, 2026 06:29
teamleaderleo added a commit that referenced this pull request Oct 21, 2026
@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
…himmering live line at the bottom, short labels, check and time on hover (#23081)

* test(agent-pane): the running turn's line names the call in flight

Red on feat-cmux-next: the line only ever reads Working for or Thinking,
and carries no mark.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(agent-pane): the running turn's line names the call in flight

As in Claude desktop, the running turn's status line starts with a small
animated mark (three accent dots that pulse in turn, still under Reduce
Motion), and while a tool call runs it names that call beside the turn's
time: "bun test src/net 26s". Between calls it reads Working for as
before, and Thinking carries the same mark. The title rides on the status
row as doing, so range copy and Find are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Test that the working line never shows a call's raw JSON input

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Test that Thinking has no shimmer and the working dots cycle at 2s

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(agent-pane): the working line names a call by its label; one slow working mark

The line now uses the tool row's own label, so a call whose title is its
raw JSON input reads as "Read src/app.ts", not the JSON. The working
dots cycle at 2s and are the pane's only running motion: the Thinking
shimmer is gone. Margins are logical.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT: test that Static stops the running line's working dots

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT: the running line's dots hold still under Static; tests read the call in flight

The working mark joins the loops Static status indicators stop. The peer-chat and
working-counts tests now read the line as it is drawn while a call runs: the call's
title, then its time.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT: tidy the working mark's comment

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at 5758e49

- vp fmt webviews/src/agent-session/acpmux/replyHref.ts
- vp fmt webviews/src/pages/markdown/README.md
- vp fmt webviews/src/pages/markdown/links.ts
- vp fmt webviews/test/markdown-cmux-app-links.test.ts

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39212391647

* cmux NEXT: test that a running turn's line is its last row and keeps ticking

Red on its own: liveLineBelow.ts and the bottom line do not exist yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT: a running turn's line is its last row, and its clock never stops

The live status line now sits under the turn's latest row, as Claude
desktop draws it, from send to the turn's end: the working mark, what the
agent is doing now (Thinking, the call in flight, else Working for) and the
turn's time. It no longer stops its clock whenever text is the latest row,
and a turn that has only streamed text keeps its line. The first Thinking
line shows the time since the prompt.

Debug Settings agentPane.debug.liveLineBelow (on) puts the line back over
the turn's work.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT: the running line stays last under held prompts and shell rows

Review follow-ups: a steer waiting for the agent and a shell command run
mid-turn draw above the line; a thought coming in labels itself, so the line
reads Working for rather than a second Thinking; the forget-rows pass keeps
its fast path while the line stays last; the new-chat play checks the prompt
keeps its place and the line sits under the reply.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT: agents pill test reads the transcript row, not the running line

The running line names the call in flight too, and it is now the turn's last
row: the test waits for the first match and measures the pill against the
last row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT: the live line tunable imports CmuxNextPages for PageTunables

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at c5b471a

- Packages/macOS/CmuxNext/ci-target-graph.json

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39381094998

* agent chat live line: comments no longer name the working mark #23034 removed

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d18-a2fb-7ac0-84d5-432ffea53b8b&host=cosmic-gray

* cmux NEXT agent turn, Codex-style: Thinking shimmers, finished runs fold, check and time on hover

As the ChatGPT/Codex app draws a turn (Lawrence + Leo):
- "Thinking" has no mark before it; the word itself shimmers, a band of the
  theme accent crossing it on the shared clock, still under Reduce Motion
  and the static status look. The start status line does not shimmer.
- Each finished run of tool calls folds into one summary line between the
  paragraphs ("Read files, ran commands"; a run that is one group, "Ran 3
  commands", closed), the latest run too as its calls finish, in a running
  turn and in an opened "Worked for" alike. The call in flight and a thought
  still coming leave the run for the turn's live line, so rows never pile up.
  The Debug toggle agentPane.debug.codexToolRuns is now on by default (off
  lists every call as before); the run in flight no longer shrinks to its
  newest call.
- A finished call's check and run time show only on hover or focus; a
  failure keeps its red mark. Lone tool rows get the same check and time.
- A command reads as what it does (Claude Code's Bash description) with the
  raw line in its Shell block, and a shell call with no command yet reads
  "Ran a command" / "Running a command", never "Bash".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d1f-ca00-7e31-b882-4d3c03033ee2&host=cosmic-gray

* cmux NEXT agent turn: one live line at the bottom, short labels, short notes fold into their runs

Carries #22363 (steer-default-2: the running turn's line as its last row,
Debug toggle agentPane.debug.liveLineBelow) and builds the Codex look on it
(Leo 2026-10-20, turn-toolcalls-now.png):
- With Codex-style runs on (the default), "Working for" stays over the work
  and ONE live line sits at the bottom, replaced in place by each step:
  "Thinking" (shimmer), then "Running <short label> 13s" while a call runs,
  timed from the call's start, then "Thinking" again. It keeps the Thinking
  line's id from send to the end and waits, its height kept, while text
  streams. Off, #22363's line is unchanged.
- A command reads as its description, else its meaningful command: the
  setup in front of it (export PATH=…, B=~/x;, cd dir &&, VAR=x before the
  command) is dropped. The raw line stays in its Shell block.
- Two runs with only a short interim note between them are one run, the
  note folded in among its calls as a quiet line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d1f-ca00-7e31-b882-4d3c03033ee2&host=cosmic-gray

* Find reaches every row a merged run absorbed; quoted ; stays in the command

Review of #23081: a run merged across a short note kept only the first run's id, so Find (and a
shell's count) pointing at the note or the second run found no drawn row. The merged row lists
the ids it absorbed (joined), and isFindRow / isRevealRow match them. Also: shortCommand splits
only outside quotes; a description or shortened command label is skipped by Find's highlight,
which counts the whole line; an open Worked for's folded runs move their version.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d1f-ca00-7e31-b882-4d3c03033ee2&host=cosmic-gray

* Format App.tsx after the base merge

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d1f-ca00-7e31-b882-4d3c03033ee2&host=cosmic-gray

* Codex turn: running calls the runs fold are named; todo lists keep the activity line

Review of #23081 at 8b18119:
- With the Codex-style runs on, the working line always names the call in flight: the runs
  draw no call in flight, so #23090's own-row rule (one running call reads once) does not apply.
  A lone call in flight on the #22363 bottom line without the runs is named on its row (#23090).
- With a todo list (agent.sessionStatus) the activity line under it is again the live line.
- A command with no line yet reads its title ("Run make"); peer-chat waits for it on the live line.
- A short command line marks the commands after it ("make …").

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d1f-ca00-7e31-b882-4d3c03033ee2&host=cosmic-gray

* Codex live line: ⌃B to run in background on a running command; tests read the turn's time

The running command's own row is not drawn while it runs (codexRuns), so the live line carries
its ⌃B hint. peer-chat reads the turn's time from Working for (#23164), the call's name from
the live line; activity-line's toggle-off check names the Working for line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d1f-ca00-7e31-b882-4d3c03033ee2&host=cosmic-gray

* Codex turn: browser tests read the live line and open folded runs; the live line's row is the footer's height

The Codex-style turn (codexToolRuns, liveLineBelow, on by default) draws no row for the call in
flight or a streaming thought, and folds finished runs. The browser tests that read the old
layout now read the new one:
- step-rows opens the "Ran commands" run before measuring its steps and the thought.
- chat-column's streaming thought reads the live line's "Thinking"; the live thought viewport
  tests push codexToolRuns off with the theme, since only that layout streams a thought row.
- ctrl-b reads the ⌃B hint and "Running cargo test --workspace" on the live line.
- question-records reads the read on the live line, then its own row once done, both under the
  record.
- agents-pill waits for the live line's "Read app.ts"; bottom-stack waits for the "Ran commands"
  run that folds "Three PRs open." in; adopted-tool-calls reads the edit row's label, not its
  hover-only time; background-tasks (#23101) opens "Ran 2 commands".
- activity-line's toggle-off check names the Working for line.

Product: the live line's row kept the transcript row's 34px floor, 2px taller than the footer
that replaces it and than its estimate, so a turn's end moved the reply down 2px (stream-jitter,
webkit). The row drops the floor.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d1f-ca00-7e31-b882-4d3c03033ee2&host=cosmic-gray

* Agent pane: a row keeps the height it settles at, not its fold's last frame

A fold's last animated frame draws its row a fraction of a pixel short of the
height it settles at (145.72px, then 146px). The drawn-height check ignored a
change under half a pixel, so the row kept the frame's height and every row
below it sat that fraction over the row above (the step-rows rhythm test's -1px
gap). Heights now compare exactly; an unchanged height still renders nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d1f-ca00-7e31-b882-4d3c03033ee2&host=cosmic-gray

* Agent pane: a short command label never drops a setup step that pipes, backgrounds or sources

A setup step with a pipe, a & or a process substitution (`cd /tmp & curl … | sh`)
runs code, and so does `source` or `.`; the short label left them out. They now
stay, as a substitution already did: nothing the call ran is hidden (#20456).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d1f-ca00-7e31-b882-4d3c03033ee2&host=cosmic-gray

---------

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

Labels

risk:low Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant