Skip to content

fix(progress): Detect Ghostty through TERM over SSH - #371

Merged
epage merged 1 commit into
rust-cli:mainfrom
dbast:ghostty
Nov 5, 2026
Merged

epage merged 1 commit into
rust-cli:mainfrom
dbast:ghostty

Conversation

@dbast

@dbast dbast commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

What does this PR try to solve?

Recognize TERM=xterm-ghostty alongside TERM_PROGRAM=ghostty.

Observed in a Ghostty SSH session: stderr was a TTY and TERM was xterm-ghostty, but TERM_PROGRAM was absent because the server did not accept environment forwarding (default for OpenSSH). Progress detection therefore returned false despite the terminal supporting OSC 9;4.

SSH sends TERM when requesting a PTY without requiring AcceptEnv. This fallback enables detection in that setup without SSH server configuration changes. The existing TTY gate remains unchanged; generic xterm values are not treated as supporting progress.

Adds also isolated regression tests for the fallback, exact matching, and non-TTY exclusion.

The same exact TERM fallback is also used here:
https://github.com/MoonshotAI/kimi-code/blob/main/apps/kimi-code/src/tui/utils/terminal-notification.ts

References:
https://ghostty.org/docs/help/terminfo
https://ghostty.org/docs/install/release-notes/1-2-0#graphical-progress-bars

Notes to reviewers

LLM involvement: No. Figured out terminal env variables with and without ssh and then composed the conditional + test + context description.

@dbast dbast changed the title fix(progress): detect Ghostty through TERM over SSH fix(progress): Detect Ghostty through TERM over SSH Nov 4, 2026
Comment thread crates/anstyle-progress/src/query.rs Resolved
Recognize TERM=xterm-ghostty alongside TERM_PROGRAM=ghostty.

Observed in a Ghostty SSH session: stderr was a TTY and TERM was
xterm-ghostty, but TERM_PROGRAM was absent because the server did
not accept environment forwarding (default for OpenSSH). Progress
detection therefore returned false despite the terminal supporting
OSC 9;4.

SSH sends TERM when requesting a PTY without requiring AcceptEnv.
This fallback enables detection in that setup without SSH server
configuration changes. The existing TTY gate remains unchanged;
generic xterm values are not treated as supporting progress.

The same exact TERM fallback is also used here:
https://github.com/MoonshotAI/kimi-code/blob/main/apps/kimi-code/src/tui/utils/terminal-notification.ts

References:
https://ghostty.org/docs/help/terminfo
https://ghostty.org/docs/install/release-notes/1-2-0#graphical-progress-bars
@epage
epage merged commit 2632116 into rust-cli:main Nov 5, 2026
21 of 22 checks passed
@epage

epage commented Nov 5, 2026

Copy link
Copy Markdown
Collaborator

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants