CLI refresh_interval causing terminal auto-scroll; making it configurable or disabled
Cluster 48309 · hermes cli. Data as of
1 open item. Fix merged in #49056 on 19 Jun 2026. Check it covers your case.
The short answer
- Known?
- Yes. 5 related items grouped here, 1 issue already closed.
- Fix event
- A fix was merged to main in PR #49056. Check it covers your case. No release data is tracked.
- Tracker
- The maintainers' tracker marks this
partially resolved, deciding PR #49056. That is separate from the fix event. - Still open
- 1 issue and 0 PRs.
Next step: read #49056, then check whether your report is the one still open.
Read #49056Pick up a Lab taskMembers describe the CLI's periodic refresh (refresh_interval=1.0) scrolling the terminal to the bottom in non-fullscreen mode, with one report mentioning Termux/Android. The issue and the pull requests propose making the interval configurable, defaulting it to 0, or disabling it outside fullscreen mode.
Open issues1
- Issue#53636Fix: CLI auto-scrolls to bottom every second on Termux/Android (cli_refresh_interval=1.0)
Open PRs0
Fixes on record
-
#49056 fix(cli): make idle refresh_interval configurable, default 0 (no auto-scroll)
files:
cli.py,hermes_cli/config.py,scripts/release.py,tests/hermes_cli/test_config.pyShow the diff
-
cli.py@@ -13527,13 +13527,13 @@ def _get_voice_status(): style=style, full_screen=False, mouse_support=False, - # The status bar contains wall-clock read-outs (live prompt elapsed - # and idle-since-last-turn). Once a turn finishes there may be no - # further events to invalidate the app, so prompt_toolkit would keep - # rendering the first post-turn value (usually ``✓ 0s``) forever. - # A low-rate refresh keeps the clock honest without reintroducing a - # custom repaint thread or touching conversation state. - refresh_interval=1.0, + # Read from display.cli_refresh_interval (default 0 = disabled). + # When non-zero, prompt_toolkit redraws the UI on this cadence + # during idle, keeping wall-clock status-bar read-outs ticking. + # Set to 0 to suppress background redraws entirely — avoids + # fighting terminal auto-scroll in non-fullscreen mode (Xshell, + # iTerm2, Windows Terminal). See #48309. + refresh_interval=float(CLI_CONFIG.get("display", {}).get("cli_refresh_interval", 0)), # Erase the live bottom chrome (status bar, input box, separator # rules) on exit instead of freezing a final copy into scrollback. # Without this, prompt_toolkit's render_as_done teardown repaints -
hermes_cli/config.py@@ -1581,6 +1581,12 @@ def _ensure_hermes_home_managed(home: Path): # TUI busy indicator style: kaomoji (default), emoji, unicode (braille # spinner), or ascii. Live-swappable via `/indicator <style>`. "tui_status_indicator": "kaomoji", + # Seconds between prompt_toolkit redraws in the classic CLI when idle. + # 0 = disabled (no background refresh — the pre-0.15.2 behaviour). + # Positive values e.g. 1.0 keep wall-clock status-bar read-outs + # (idle-since-last-turn) ticking but may fight terminal auto-scroll in + # non-fullscreen mode on some emulators (Xshell, iTerm2, etc.). + "cli_refresh_interval": 0, "user_message_preview": { # CLI: how many submitted user-message lines to echo back in scrollback "first_lines": 2, "last_lines": 2, -
scripts/release.py@@ -1531,6 +1531,7 @@ "[redacted:email]": "erikengervall", # PR #28774 (firecrawl integration tag) "[redacted:email]": "egilewski", # PR #30432 (MEDIA path traversal fix, GHSA-jmf9-9729-7pp8) "[redacted:email]": "McClean-Edison", # PR #29817 (register_auxiliary_task plugin API) + "[email protected]": "OYLFLMH", # PR #48312 salvage (cli_refresh_interval config, #48309) "[redacted:email]": "SamuelZ12", # PR #7480 (show recap after in-session resume) "[redacted:email]": "daizhonggeng", # PR #9020 (numbered /resume selection) "[redacted:email]": "wanwan2qq", # PR #10215 (strip brackets/quotes from /resume; gateway session-ID lookup) -
tests/hermes_cli/test_config.py@@ -955,6 +955,16 @@ def test_migrate_to_v15_adds_interim_assistant_message_gate(self, tmp_path): assert raw["display"]["interim_assistant_messages"] is True +class TestCliRefreshIntervalConfig: + """Test the CLI refresh_interval config default (#48309).""" + + def test_default_config_disables_cli_refresh_interval(self): + """cli_refresh_interval defaults to 0 (disabled) to avoid + background redraws that fight terminal auto-scroll-on-output + in non-fullscreen mode (Xshell, iTerm2, Windows Terminal).""" + assert DEFAULT_CONFIG["display"]["cli_refresh_interval"] == 0 + + class TestDiscordChannelPromptsConfig: def test_default_config_includes_discord_channel_prompts(self): assert DEFAULT_CONFIG["discord"]["channel_prompts"] == {}
-
2 PRs closed without merging
From the close comments: duplicate 2
Closed issues · 1
- Closed#48309cli`: `refresh_interval=1.0` causes terminal auto-scroll-to-bottom in non-fullscreen mode
How this cluster was grouped
-
Link evidence (
partly structural links): some members are connected by structural evidence (shared changed files, or a closing/superseded reference); the rest are joined by an automated relevance judgement over their text. - Members outside that structural core may belong to a different underlying problem.
-
Pairwise link density
0.34: the share of item pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36.1.00means every pair is linked.
Pick up a Lab task
Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.
Open the LabAt a glance
- Subsystem
- hermes cli
- Merged PRs
- #49056
- Closed issues
- 1
- Attempts
- 2 PRs closed without merging
- Fix link checked
- 19 Jun 2026