Skip to content

Agent chat: header tools float in a subtle glass capsule once text scrolls under them - #34325

Closed
teamleaderleo wants to merge 7 commits into
feat-cmux-nextfrom
leo/header-tools-glass
Closed

teamleaderleo wants to merge 7 commits into
feat-cmux-nextfrom
leo/header-tools-glass

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 3, 2026 •

Copy link
Copy Markdown
Collaborator

Leo, 2026-11-03:

also, darn, i guess i realize why there was previously some sort of weird rectangle background behind buttons before. but surely we can do a nice and unobtrusive apple glass type thing that's super subtle until there's text or something beneath right ... if u just look at how chatgpt ios does things...

In a one-tab pane (#33142) the transcript runs up under the tab row, so text scrolled right under the header tools and collided with them. Now the tools sit in one glass capsule, as ChatGPT iOS floats its buttons:

Gallery agent-pane.header:

  • glass-pill-rest and glass-pill-over-text: chosen.
  • glass-none-over-text: before.
  • glass-faint-rest and glass-faint-over-text: always faint. Rejected: it puts a shape back behind the tools at rest.
  • glass-circles-rest and glass-circles-over-text: a disc per button. Rejected: four touching discs on a 26px pitch, the ⋮ becomes an oval, and it is busier than ChatGPT's one pill.

Design references: cmux/live/panels-subagent-glass-buttons-no-close, cmux/live/transcript-subagent-pill-no-close-button (the ChatGPT iOS reference), cmux/live/toolbar-session-info-button-background-2, cmux/live/toolbar-session-info-button-background (the plates Leo disliked).

Design spec: design/chat-header.md (leo-workspace).

Tests: webviews/test/chat-header-glass.test.ts (Chromium and WebKit) checks:

  • no capsule at rest;
  • the capsule is round and frosted over text, and lifts the pixels under the tools;
  • no tool moves;
  • two tabs never get it.

Captures: webviews/scripts/agent-pane/capture-header-glass.mjs.

Agent session: agent session

🤖 Generated with Claude Code


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


Summary by cubic

Makes the agent chat header tools float in a single frosted-glass capsule when transcript text scrolls under them, so rows no longer collide with the buttons in a one-tab pane.

The capsule stays invisible at rest (tools remain plain glyphs), fades in via the motion scale's micro token once text passes beneath, and sits on a ::before behind the buttons so nothing moves. It's pure CSS built on the transcript's existing data-fade-top — no JS or scroll work. Reduce Transparency turns the capsule opaque without blur; Reduce Motion skips the fade. Multi-tab panes keep the plain row. Gallery agent-pane.header covers the chosen pill over text plus always-faint and per-button circles alternatives; tests verify the capsule appears only over scrolled text and that the pill is a backing surface, not a control, on the no-capsules allowlist.

Written for commit f63c77a. Summary will update on new commits.

View guided diff Turn on auto-fix

…ls under them (one-tab pane)

Leo, 2026-11-03: "surely we can do a nice and unobtrusive apple glass type thing that's super subtle until there's text or something beneath right ... if u just look at how chatgpt ios does things".

One capsule behind the tools, invisible at rest, faded in from the scroller's existing data-fade-top: the shared glass tint, popover frost and rim. Pure CSS, no new scroll work, no layout change. Gallery agent-pane.header/glass-* (pill chosen; circles and always-faint alternatives). Test: test/chat-header-glass.test.ts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

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

Review f63c77a: 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=pr34325 -f ref=leo/header-tools-glass -f platform=macos -f backend_mode=local

Gallery before/after for f63c77a: 16 states rendered, 14 images differ, 1299 more touched states not rendered. Images are in the run's artifact, not on this public PR; the independent review of this head reads them on its own, so the PR needs no hand-made screenshots of these states.

gh run download 41754870936 -R manaflow-ai/cmux -n gallery-advisory-34325-f63c77a8576049fb65c6b922aa9eddedd7fde2b5 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.header/glass-pill-rest Apple System Colors Light new 0% own header.gallery.ts
agent-pane.header/glass-pill-rest Apple System Colors new 0% own header.gallery.ts
agent-pane.header/glass-pill-over-text Apple System Colors Light new 0% own header.gallery.ts
agent-pane.header/glass-pill-over-text Apple System Colors new 0% own header.gallery.ts
agent-pane.header/glass-none-over-text Apple System Colors Light new 0% own header.gallery.ts
agent-pane.header/glass-none-over-text Apple System Colors new 0% own header.gallery.ts
agent-pane.header/glass-faint-rest Apple System Colors Light new 0% own header.gallery.ts
agent-pane.header/glass-faint-rest Apple System Colors new 0% own header.gallery.ts
agent-pane.header/glass-faint-over-text Apple System Colors Light new 0% own header.gallery.ts
agent-pane.header/glass-faint-over-text Apple System Colors new 0% own header.gallery.ts
agent-pane.header/glass-circles-rest Apple System Colors Light new 0% own header.gallery.ts
agent-pane.header/glass-circles-rest Apple System Colors new 0% own header.gallery.ts
agent-pane.header/glass-circles-over-text Apple System Colors Light new 0% own header.gallery.ts
agent-pane.header/glass-circles-over-text Apple System Colors new 0% own header.gallery.ts
agent-pane.header/standalone-compact Apple System Colors Light unchanged 0% own header.gallery.ts
agent-pane.header/standalone-compact Apple System Colors unchanged 0% own header.gallery.ts
agent-pane.header-action-stability/idle Apple System Colors Light unchanged 0% own header.css
agent-pane.header-action-stability/idle Apple System Colors unchanged 0% own header.css
agent-pane.header-action-stability/busy Apple System Colors Light unchanged 0% own header.css
agent-pane.header-action-stability/busy Apple System Colors unchanged 0% own header.css
agent-pane.header-tools/native-row-off Apple System Colors Light unchanged 0% own header.css
agent-pane.header-tools/native-row-off Apple System Colors unchanged 0% own header.css
agent-pane.header-tools/native-row-tools Apple System Colors Light unchanged 0% own header.css
agent-pane.header-tools/native-row-tools Apple System Colors unchanged 0% own header.css
agent-pane.header-tools/unified-compact Apple System Colors Light unchanged 0% own header.css
agent-pane.header-tools/unified-compact Apple System Colors unchanged 0% own header.css
agent-pane.header-tools/unified-roomy Apple System Colors Light unchanged 0% own header.css
agent-pane.header-tools/unified-roomy Apple System Colors unchanged 0% own header.css
agent-pane.header-tools/unified-tight Apple System Colors Light unchanged 0% own header.css
agent-pane.header-tools/unified-tight Apple System Colors unchanged 0% own header.css
agent-pane.header-tools/more-even-box Apple System Colors Light unchanged 0% own header.css
agent-pane.header-tools/more-even-box Apple System Colors unchanged 0% own header.css

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

Pending: CI is running on f63c77a857; the result below was for 78ed9407d4 and no longer applies.

Last result: Unclear: web / react-apps-check failed: no known signature; failed step: Check webview test shards.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); it is rewritten when this head's CI completes.

web and size checks: green

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 3, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6.1-sol xhigh, router-review): BLOCK at 68599ee

BLOCK at 68599ee

Visual verdict: no images; Leo tries the build

  1. [P1] [blocking] webviews/test/chat-header-glass.test.ts:95 — The two-tab fixture removes data-solo-tab, so the capsule rules no longer match. Its nonexistent ::before has content: none but computed opacity "1", making this assertion fail in both browser engines. Assert that content is "none" instead; the test already captures it.

Follow-ups:

  1. [P2] [follow-up] webviews/src/agent-session/acpmux/header/header.css:189 — Provide rest and over-text captures in light and dark themes; this head has no images for visual review.

Review: the two-tab fixture drops data-solo-tab, so the pseudo-element does not exist and its computed opacity is 1; assert content none.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
@blacksmith-sh

blacksmith-sh Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Found 53 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmpjkskx4wp/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpy5uv21dz/summary-fail.json (live):/summary-fail.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
main.DeveloperIdAppTests.test_download_prints_the_active_profile_only/
test_download_prints_the_active_profile_only
View Logs
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs
stubs: /System/Library/Frameworks/Security.framework/Versions/A/Security has no stub/
Security has no stub
View Logs
stubs: CoreFoundation.tbd: install-name /System/Library/Frameworks/
CoreFoundation.framework/Versions/A/CoreFoundation, missing 1: ['_CFRetain']/
CoreFoundation, missing 1: ['_CFRetain']
View Logs

...and 43 more test failures. View all on Blacksmith: run 41744562261, run 41744562094

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

@teamleaderleo teamleaderleo left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review (codex gpt-6.1-sol xhigh, next-review, since=20261103T233735Z): BLOCK at 02083b9

BLOCK at 02083b9
Visual verdict: no images; Leo tries the build

  1. [P1] [blocking] webviews/src/agent-session/acpmux/header/header.css:189 and header.gallery.ts:67: The new raw z-index:-1 values and gallery backdrop filters produce three layer-check violations. The checker passes before this diff and exits 1 at head. Existing webviews/test/check-layers.test.ts:88 asserts exit 0, so tests fail despite the branch’s advisory style checks. Use var(--layer-backdrop) in both files and add reduced-transparency handling for the gallery circles.

  2. [P2] [follow-up] webviews/scripts/agent-pane/capture-header-glass.mjs:1: Publish usable light/dark captures at rest and over text; none were available for visual review.

teamleaderleo and others added 2 commits November 3, 2026 16:08
…layer token

check:design-tokens and check:layers: -4px block and inline insets, var(--cmux-motion-micro) with var(--cmux-ease-out), z-index var(--layer-backdrop); the gallery's circles variant keeps a Reduce Transparency fallback.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 78ed940

Reviewer: codex gpt-6.1-sol xhigh, fast tier.

SHIP at 78ed940

Visual verdict: SHIP — reviewed all supplied images; the capsule fits ChatGPT/Claude’s restrained floating controls. Existing before/after pairs are unchanged.

No actionable correctness findings. Script syntax, layer, and motion checks passed; browser tests could not run because Bun is unavailable.

Follow-ups: none

cmux-bot[bot]
cmux-bot Bot previously approved these changes Nov 4, 2026

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves 78ed940: an independent review passed this exact head (router-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

@cmux-bot
cmux-bot Bot temporarily deployed to ci-routing-agent November 4, 2026 01:23 Inactive
…psules allowlist)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
@cmux-bot
cmux-bot Bot dismissed their stale review November 4, 2026 01:29

A newer verdict blocks 47668e5 (no independent SHIP at the head).

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Closing without merging. The surface this styled is gone from the base. #34327 shows a pane's tab strip at every tab count, so the transcript always starts below the tab row. #34392 then removed the lone-tab solo row (data-solo-tab, the scroller pulled up under the row), and that is where text ran under the header tools in the reported screenshot. On the base nothing scrolls beneath the tools now, so there's no "text beneath" case for the capsule. Putting it on the always-shown row would draw a shape behind the tools with nothing under it, which goes against both the ask ("super subtle until there's text or something beneath") and the header's no-fill-at-rest rule.

The branch leo/header-tools-glass keeps the work (CSS, gallery variants agent-pane.header/glass-*, test/chat-header-glass.test.ts, the capture script) in case controls float over the transcript again. It had an exact-head SHIP at 78ed940.

This branch was previously deployed

1 inactive deployment
ci-routing-agent — f63c77a8 Deployed Nov 4, 2026 by teamleaderleo via cmux-tui tree preflight #108592
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant