{"repo":"NousResearch/hermes-agent","public_id":"4398","display_label":"CLI layout: blank space and input anchoring issues","summary":"These issues and fixes relate to unwanted blank space appearing between responses and the input area in the CLI, and efforts to control vertical padding and terminal anchoring behavior.","subsystem":"hermes_cli","counts":{"members":4,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":2,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":4412},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"stale","last_verified_at":"2026-04-01T08:41:09+00:00","is_stale":true},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.3933333333333333},"fix_edges":[{"issue_number":4421,"pr_number":4412,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":4398,"title":"[Bug] v0.6.0 CLI displays large blank space between response and input area","url":null,"state":"closed"},{"kind":"issue","number":4421,"title":"fix(cli): post-response padding newlines push content off-screen","url":null,"state":"closed"},{"kind":"pr","number":4412,"title":"fix(cli): pin entire TUI to bottom of terminal on startup","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["cli.py"],"fix_hunks":[{"file":"cli.py","hunks":["@@ -6343,6 +6343,17 @@ def _build_tui_layout_children(\n \n     def run(self):\n         \"\"\"Run the interactive CLI loop with persistent input at bottom.\"\"\"\n+        # Push the entire TUI to the bottom of the terminal so the banner,\n+        # responses, and prompt all appear pinned to the bottom — empty\n+        # space stays above, not below.  This prints enough blank lines to\n+        # scroll the cursor to the last row before any content is rendered.\n+        try:\n+            _term_lines = shutil.get_terminal_size().lines\n+            if _term_lines > 2:\n+                print(\"\\n\" * (_term_lines - 1), end=\"\", flush=True)\n+        except Exception:\n+            pass\n+\n         self.show_banner()\n \n         # One-line Honcho session indicator (TTY-only, not captured by agent).","@@ -7569,18 +7580,6 @@ def _expand_ref(m):\n                         self._agent_running = False\n                         self._spinner_text = \"\"\n \n-                        # Push the input prompt toward the bottom of the\n-                        # terminal so it doesn't sit mid-screen after short\n-                        # responses.  patch_stdout renders these newlines\n-                        # above the input area, creating visual separation\n-                        # and anchoring the prompt near the bottom.\n-                        try:\n-                            _pad = shutil.get_terminal_size().lines // 2\n-                            if _pad > 2:\n-                                _cprint(\"\\n\" * _pad)\n-                        except Exception:\n-                            pass\n-\n                         app.invalidate()  # Refresh status line\n \n                         # Continuous voice: auto-restart recording after agent responds.\n"]}]},{"kind":"pr","number":4436,"title":"fix(cli): only pad short responses to avoid pushing content off-screen","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#4421","number":4421},{"kind":"pr","value":"#4412","number":4412},{"kind":"pr","value":"#4359","number":4359},{"kind":"pr","value":"#4421","number":4421}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false}],"trust":{"default_tier":"verified","includes_suggested":false}}