fix(cli): improve terminal output formatting and visual clarity#8025
fix(cli): improve terminal output formatting and visual clarity#8025michaelneale merged 5 commits intomainfrom
Conversation
- Tool responses render as dim indented plain text instead of through bat markdown, making tool output visually distinct from assistant prose - Tool output truncated to 20 lines by default (respects /toggle) - Added separator line before tool call headers for clear boundaries - Added breathing room: blank line after tool output, blank line between user input and assistant response - Disabled screen-clearing ANSI escape codes in task execution display that were obliterating terminal content - Shell output and task execution notifications render dim+indented instead of raw unstyled text Signed-off-by: Michael Neale <michael.neale@gmail.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f7f6b96355
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
- Remove CLEAR_SCREEN/MOVE_TO_PROGRESS_LINE/CLEAR_TO_EOL/CLEAR_BELOW constants entirely instead of blanking them to empty strings - Remove unused theme parameter from render_tool_response - Fix test that referenced removed MOVE_TO_PROGRESS_LINE constant Signed-off-by: Michael Neale <michael.neale@gmail.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 578f90250a
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bf8b619c0d
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| let max_lines = if get_show_full_tool_output() { | ||
| usize::MAX | ||
| } else { | ||
| 20 |
There was a problem hiding this comment.
Don't truncate tool output in headless TTY sessions
This truncates long tool responses whenever stdout is a terminal, but CliSession::process_message()/headless() still render through render_message_streaming() with interactive = false. As a result, a normal goose run '…' launched from a terminal now drops everything past 20 lines even though there is no input loop where the user could recover the hidden lines, so long shell/read outputs and stack traces become irretrievable in common non-interactive runs.
Useful? React with 👍 / 👎.
| style(format!( | ||
| "... ({} lines hidden, /toggle to show all)", | ||
| lines.len() - head - tail |
There was a problem hiding this comment.
Show the real command for expanding truncated tool output
The truncation banner tells users to run /toggle, but the command parser and help text only expose /r (crates/goose-cli/src/session/input.rs:311 and :414). In interactive sessions the advertised escape hatch for hidden lines will therefore be rejected, so users who hit truncation are pointed at a command that does not exist.
Useful? React with 👍 / 👎.
| if !INITIAL_SHOWN.swap(true, Ordering::SeqCst) { | ||
| display.push_str(CLEAR_SCREEN); | ||
| display.push_str("🎯 Task Execution Dashboard\n"); | ||
| display.push_str("═══════════════════════════\n\n"); |
There was a problem hiding this comment.
Reset the task dashboard header for later executions
The header is now emitted only while INITIAL_SHOWN is false, but after removing the cursor-reposition refresh path nothing preserves that header across separate task executions. Because TasksComplete never clears the flag, the second subrecipe/subagent execution in the same CLI session appends a new block that starts at 📊 Progress with no 🎯 Task Execution Dashboard label, which makes later task runs hard to identify.
Useful? React with 👍 / 👎.
…k#8025) Signed-off-by: Michael Neale <michael.neale@gmail.com>
…k#8025) Signed-off-by: Michael Neale <michael.neale@gmail.com>
…k#8025) Signed-off-by: Michael Neale <michael.neale@gmail.com> Signed-off-by: esnyder <elijah.snyder1@gmail.com>
…k#8025) Signed-off-by: Michael Neale <michael.neale@gmail.com> Signed-off-by: esnyder <elijah.snyder1@gmail.com>
Summary
Minimal fixes to make the legacy CLI output less chaotic. Biggest improvement for smallest change.
Changes (3 files, ~40 lines)
Tool responses: dim plain text instead of bat-markdown (biggest impact)
/togglefor full output)Visual boundaries
────────) before each tool call headerStop terminal obliteration
\x1b[2J,\x1b[H, etc.) that were wiping terminal content mid-streamStyled notifications
print!/println!Before
Tool output rendered through bat as markdown (same styling as assistant text), no visual separation between tool activity and assistant prose, task execution dashboard clearing the screen, raw notifications dumped between streaming chunks.
After
Clear visual hierarchy: bright text = goose talking, dim indented text = tool activity, separator lines = boundaries between blocks.