Replies: 4 comments
|
I'd love this feature as well. I use WezTerm with Copy Mode, but it treats every repaint of the terminal (spinner animation ~8Hz) as a new state, so selecting text is difficult when multiple agents are running. a |
|
I updated to the latest preview and noticed the working-agent spinner is gone entirely. It looks like commit 81f355f replaced it with a static indicator. @ogulcancelik I think the spinner should remain the default, with The CPU issue was valid, but PR #1868 had already changed the animation path to update only the sidebar or mobile header instead of redrawing every pane. I couldn't find measurements in the later removal commit showing that the optimized spinner was still causing a significant problem. The spinner also makes multiple agents easier to scan. With the new static marks, blocked, working, and unseen-idle agents all use the same filled-dot shape and rely mostly on color. That concern is also covered in discussion #824. Could the spinner be restored as the default, with a |
|
Hi there, just want to second this feature request, a I run several agents at once and read one response while the others keep working in the background. Every spinner in the sidebar animates at the same time, and my eye gets pulled to that movement instead of the text I'm trying to read. I simply can't concentrate when the spinners are going. Without a way to turn the animation off, I can't switch to herdr as my daily driver. Happy for this to be a (the tool you're building here is fantastic tho) |
|
spinner will be gone in next update as it created perf problems and even if it was possible to fix, i decided using spaces' approach on full dots instead of spinners was better. you can test it in preview channel now. |
Uh oh!
There was an error while loading. Please reload this page.
Problem
While any agent is working in any workspace, the client animates the sidebar spinner continuously: the animation timer ticks every 16 ms and the spinner glyph advances every 8 ticks, so a diff frame is written to the host pty roughly every 128 ms — sustained for the entire duration of agent work sessions (which for long agent runs is effectively always).
That constant output stream has two costs:
Host terminal cursor blink is permanently suppressed. Terminals commonly reset their cursor-blink phase on pty output. Ghostty resets the phase on every output burst (throttled to once per 500 ms) and restarts a 600 ms blink interval — so any sustained output cadence under ~600 ms pins the cursor solid. With herdr's ~128 ms spinner cadence, the cursor in the focused pane never blinks while any agent is working anywhere, regardless of terminal configuration. I've reported the host-side semantics to Ghostty as Cursor blink is suppressed indefinitely by continuous child output — blink phase resets on all pty output, not just keyboard input ghostty-org/ghostty#13286, but a herdr-side control is valuable independently — other terminals have similar output-driven behaviors, and users shouldn't need a terminal-core change to get a blinking cursor back.
Continuous render-pipeline churn for a decorative element — the 16 ms tick loop plus ~8 fps frame emission runs the full render/diff/write path. Related ground already covered in [idea] Reduce the CPU load when agent is running #399 (CPU load while agents run) and herdr client keeps paying active-pane render cost when the host app is OS-hidden #1043 (render cost while host-hidden).
Source (v0.7.3):
ANIMATION_INTERVAL = 16ms: https://github.com/ogulcancelik/herdr/blob/v0.7.3/src/app/mod.rs#L32Proposal
[ui] reduce_motion = true(defaultfalse): working agents get a static indicator — a fixed glyph styled distinctly per state, repainted only on status transitions rather than on a timer. With it enabled, an otherwise-idle herdr screen emits no periodic output: host cursor blink works again, and idle render cost while agents work drops to near zero.Optionally, a finer knob alongside it:
[ui] spinner_interval_ms(default 128) for users who want a slower spinner instead of a frozen one. Honest caveat for that variant: output gaps must exceed the host's blink interval (~600 ms in Ghostty) before blink meaningfully returns, soreduce_motionis the clean fix; the interval knob is mostly a power/churn dial.reduce_motionalso aligns with OS-level accessibility conventions (macOS "Reduce Motion"), which some users expect terminal UIs to respect.Environment
herdr 0.7.3 (brew), Ghostty 1.3.1, macOS. Happy to test builds.
All reactions