[BUG] /workflows detail dialog overflows terminal height in default renderer — top border and header pushed off-screen
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
The /workflows detail dialog renders taller than the terminal in the default (inline) renderer. The frame bottom-anchors, so the dialog's top border and its 3-row header (rule line, workflow name, subtext/stats) are pushed above the top of the screen and are never visible. With only one spawned agent, the dialog interior is stretched with blank rows (flexGrow spacers up to the forced minHeight), so the screen shows one agent row at the very top edge, a huge mostly-empty bordered box, and then the keybar/prompt/status line. The overflow amount is constant, so a taller terminal does not help.
Root cause (from inspecting the bundled JS of the 2.1.233 release binary): the workflow detail dialog (debug name workflow-detail-dialog) sizes itself with
minHeight: max(12, min(availableRows - 1, rows - 6))
maxHeight: max(11, availableRows - 1)
where the sizing hook returns availableRows = the full terminal row count in the default renderer (it only returns pane-measured rows when inside the fullscreen renderer's scrollbox context, or rows/2 in fullscreen-without-pane). The hard-coded 6-row reserve is smaller than the chrome actually rendered below the dialog: blank + input line + blank + status line + permission-mode hint + blank + persistent workflow-status row + blank ≈ 8–10 rows. The workflow-status row is present exactly when a workflow is running — i.e. precisely when /workflows is used to inspect a live run — so the dialog reliably overflows by ~3–4 rows.
What Should Happen?
The dialog fits within the terminal height with its top border and header visible — as it already does in fullscreen mode, where availableRows comes from the pane context that excludes the footer chrome. Ideally the height budget would be derived from the real footer height rather than a hard-coded 6-row reserve (and/or the forced minHeight relaxed so a 1-agent view doesn't render as a screen-tall empty box).
Error Messages/Logs
No error output (visual bug). Sanitized rendition of what the screen looks like:
<top of terminal - dialog top border + header are cut off above this line>
| | * read:agent-1 <model> - 193k tok 15m19s
| |
| (left pane | (~50 blank rows inside the box)
| empty) |
+----------------------------------------------------------------------+
^v select - x stop workflow - p pause - esc back - s save
> (input box)
(model/context status line)
(permission-mode hint line)
o my-workflow workflow description... 0/4 agents done - 15m - 710k tokens
Steps to Reproduce
- Use the default (inline) renderer: no
"tui": "fullscreen"in settings.json,CLAUDE_CODE_NO_FLICKERunset. (Observed under plain tmux over SSH, but the math is renderer-level, not tmux-specific.) - Have at least one extra persistent row below the prompt — e.g. the permission-mode hint ("bypass permissions on (shift+tab to cycle)").
- Start a long-running multi-agent workflow so the persistent workflow status row ("... N/M agents done · ... tokens") is shown below the prompt.
- While it is running, run /workflows and open the running workflow's detail view.
- Observe: the dialog's top border and header (workflow name/stats) are cut off above the top of the terminal; the box interior is mostly blank when few agents have spawned; only the bottom border, keybar, prompt and status rows are laid out correctly.
The overflow is deterministic: dialog minHeight (terminalRows − 6) + ~9 rows of footer chrome > terminalRows, at any terminal size.
Claude Model
_No response_
Is this a regression?
No, this never worked
Last Working Version
_No response_
Claude Code Version
2.1.233 (Claude Code)
Platform
AWS Bedrock
Operating System
Other Linux
Terminal/Shell
iTerm2
Additional Information
- Workaround confirmed: /tui fullscreen (or
"tui": "fullscreen"in settings.json, or CLAUDE_CODE_NO_FLICKER=1). In fullscreen mode the dialog reads pane-measured rows from the scrollbox context and fits correctly. - Checked the 2.1.234 changelog: no related fix mentioned. 2.1.233 is the newest version available through our managed package channel.
- Screenshot not attached because it contains non-public content; the ASCII rendition above is faithful to it.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗