Repository navigation
cmux NEXT Home: a Chief's avatar shows thinking, tool running, waiting on you and done - #34416
Conversation
…g on you and done Relayed by Chief (Leo, 2026-11-03): "Replace the Chief avatar's bounce with per-state animations like the Codex status dot: thinking, tool running, waiting on you, done." #30534 added the bounce; #33395 replaced it with Ring/Glow/Tilt looks for idle, working, waiting (unread) and failed. This splits working into thinking (the arc) and tool running (a slowly turning ring of dots, from the run's activity line), makes waiting mean an open question or approval (a still orange ring), and turns an unread reply into done (a green check badge on the lower trailing edge, the Chief card's done mark). Only a running turn loops; done and waiting are still. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-7285061ffdc2a24af93a
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-7285061ffdc2a24af93a
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
web and size checks: green Shipped in:
|
|
Found 7 test failures on Blacksmith runners: Failures
|
|
Review (codex, router-review): SHIP at af35af1 Reviewer: codex gpt-6.1-sol xhigh, fast tier. Follow-ups: 2. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward. SHIP at af35af1 Visual verdict: no images; Leo tries the build
Follow-ups:
|
Bugbot needs on-demand usage enabledBugbot 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. |
A newer verdict blocks d3fda74 (no independent SHIP at the head).
teamleaderleo
left a comment
There was a problem hiding this comment.
Review (codex gpt-6.1-sol xhigh): SHIP at d3fda74
Review (codex gpt-6.1-sol xhigh, router-review job c967bb451eb0cd7c167519b9b75a70bf): SHIP at d3fda74
Visual verdict: no images; Leo tries the build
Follow-ups:
- [P2] [follow-up] HomeStore.swift:387: thinking still depends only on typing frames; after a reconnect clears them, a live tool → model change can show idle/done while the turn continues. Filed: #34467.
- [P2] [follow-up] ChiefAvatarMotionGalleryTests.swift:106: attach the generated gallery for this head.
(The router's own post hit the spent GitHub quota; this carries its verdict at the same head.)
|
Fresh-home launch after merge: tip vs base before #34416
The tip fails the same way as base: the known false failure from the "Bring your history" sheet covering Home, which #34475 fixes. This PR adds no new failure and no crash, so it stays in (no revert). The Chief area's fresh-home check now has its record here. The PR landed before it ran, because this lane's VM can't reach the fleet. Also on the merged head's PR swift test (run 41753793398): the run was cut short. Agent session: agent session |
|
Swift logic follow-up (tip watcher swift-logic row, STATUS 13027 "SWIFT LOGIC CULPRITS"; lead order). This PR raised
plans/cmux-next/layer-ownership.md says Rust owns every state, list and rule and Swift is the platform shell. Please move the new logic of this PR in a follow-up: to Rust (the crate that owns the area; the owner lists in STATUS 12147-12165 name the target per area), or at least out of the app into its package. If a declaration above is platform code (AppKit, Core Animation, OS calls, strings, tokens, DEBUG tooling), reply here and the table gets a PLATFORM row with your reason instead. The swift-logic row is a report, not a gate: nothing blocks on this comment. |
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Leo, 2026-11-03, relayed by Chief: "Chief avatar dot states. Replace the Chief avatar's bounce with per-state animations like the Codex status dot: thinking, tool running, waiting on you, done."
Who built the bounce
git log -Son the avatar loop: the bounce (Float, a bob of the whole avatar, faster while working) came in with #30534 (2026-11-01, one of our own lanes, from Leo's "i also want them animated like how chatgpt animates their dots"). #33395 (2026-11-03, our lane) already removed it after Leo's "don't bounce the circle", replacing it with Ring/Glow/Tilt looks for four states: idle, working, waiting (an unread reply) and failed. #33534 then stopped every idle loop. So no bounce is left on base. What was still missing is the four states Leo named: thinking and tool running were one "working" state, and "waiting" meant an unread reply rather than the Chief waiting on you.What changes
A Chief's avatar in the Home list and the pinned grid now shows six states. The avatar itself never moves off its place.
run.activityis Thinking or Writing the reply)Only thinking and tool running loop. Waiting, done, failed and idle run nothing once their cue has played, so there is no CPU or wakeup at idle.
Cues (each at most 240 ms): a turn ending (thinking or tool → anything) pops the avatar 4%; a failure shakes it; waiting with no turn seen fades its ring in; done with no turn seen grows its badge in. Thinking ↔ tool is the same turn, so it plays no cue.
The references come from cmux-design-references:
cmux/live/chief-pill-proportionsandcmux/live/status-icon-edge(the Chief card's done mark, a small green check disc at the leading edge),cmux/live/status-attention-ring(the attention ring for waiting),codex-mobile/live/agents-sheet-active-completed(a running spinner for active work, plain "Done" for completed) andsuperset/web/agent-status-transition(running → green completion dot).Data
HomeLiveActivity.isTool(CmuxHomeCore): a line not amongmodelLines(Thinking, Writing the reply, Working, the lines optchat-chief'srun.rssets for the model) names a tool call.HomeTurnProgress.notStepsnow reads the same set instead of its own copy.HomeStore.toolRuns: the conversations whose running run is in a tool.publishLiveupdates it and rebuilds the rows only when a run moves between the model and a tool, never per token (O(1) per token: one Set lookup).InboxRow.isRunningToolandInboxRow.waitsOnPerson(me:)(a pendingquestionpart or an undecidedapprovalpart on the newest message from someone else) feedHomeSidebarItem.chiefIsInTool/chiefWaitsOnYou, andHomeSidebarView.avatarStatemaps them in this order: failed, tool, thinking, waiting, done, idle.Versions (gallery)
ChiefAvatarMotionGalleryTestsdraws every style in all six states, plus two cues (tool → done, idle → failed), eight frames each, toPackages/Shared/CmuxMessagesLab/.build/chief-avatar-motion-gallery.png:I picked Ring. Each of the four named states reads differently at row size: an arc vs dots for the two running states (shape, not just speed), a coloured ring for waiting, and a mark rather than a ring for done. That way done never reads as "still running". Debug Settings > Home > Chief avatar motion still switches styles.
What it does not touch
Spinnerand the sidebar/tab working dot are unchanged. This is the Chief's own avatar in Home's list only.CmuxNextChiefPetWiring,Floating/ChiefPet) is unchanged.CmuxNextApp/Chief/,CmuxNextHomeEngine/HomeChiefSettings*,optchat-chief, ...). They live in MessagesLab's sidebar, CmuxHomeCore's store and CmuxNextHome's sidebar model and view. cc @lawrencecchen, the most frequent recent author of these paths, for awareness.Stop conditions and cleanup
These are unchanged from #33395, and the new looks follow them. Every loop and cue is removed under Reduce Motion, calm mode, speed off and Home's motion switch (
avatarLoopGate), when the window is not key or is hidden or minimized, when a row goes back to the pool (SidebarAvatarMotion.stopalso removes the badge layer), and with style Still. Under Reduce Motion the tool dots and the thinking arc stand still, so the state still reads. No timer or display link is added: each look is Core Animation on the avatar layer and at most three named sublayers (ring, glint, badge).Performance
Set.containsinpublishLive. Rows rebuild only on a model ↔ tool change of a run.Tests
ChiefAvatarMotionTests(MessagesLab), extended: tool shows dots that turn slower than the arc, with no cue between thinking and tool; waiting is a still orange ring; done is a small green badge with no ring and no loop; done with no turn seen grows its badge in; only thinking and tool loop in any style; no style moves the avatar.ChiefAvatarStateTests(CmuxHomeCore, new): a run's activity movestoolRunsin and out; the model lines are not tools; a pending question or an undecided approval waits on the person, while an answered or decided one, a plain reply, or my own message does not.Observed / Not run
python3 scripts/cmux-next/prepush-gate.py: no new violations. Fleet compile and the MessagesLab / CmuxHomeCore suites: results in a comment below.Spec:
design/motion-and-polish.md(240 ms cue cap, every loop stops). Prior art: #30534 (the bounce), #33395 and #33534 (the looks this extends), #32861 (lucasr1b, open, Still by default; untouched here).No capture: the looks are in the gallery sheet; Leo tries the build.
Changelog
Changed: A Chief's avatar in Home shows whether the Chief is thinking, running a tool, waiting on you or done, each with its own look.
Agent session: agent session
🤖 Generated with Claude Code
Open in [code]smith · Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Home’s Chief avatar now distinguishes model thinking, tool use, questions awaiting a response, and unread completed replies.
Written for commit d3fda74. Summary will update on new commits.