OSC 8 hyperlinks in custom statusline work in IDE terminals but not in real terminal emulators (Konsole)
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?
Custom statusline commands that output OSC 8 hyperlinks render correctly in IDE integrated terminals (VS Code, Cursor, etc.) but not in real terminal emulators like Konsole.
This is a follow-up to #21586, which was fixed in or before v2.1.42 for VSCode IDE terminals. The fix does not extend to standalone terminal emulators — the same statusline script that produces a clickable link in VS Code produces plain text in Konsole. Konsole has had buggy OSC behaviour in older versions, but this reproduction uses Konsole 24.12.3 (KDE Plasma 6 / Ubuntu 25.04), which has full OSC 8 support.
In v2.0.76, the OSC 8 link works correctly in both IDE terminals and Konsole. The regression was introduced somewhere between v2.0.76 and the current version.
What Should Happen?
The statusline text containing OSC 8 hyperlink sequences should render as underlined, clickable text in any terminal that supports OSC 8 — not just IDE integrated terminals. Konsole has full OSC 8 support and renders OSC 8 links correctly in all other contexts.
Error Messages/Logs
No error messages. The text simply renders as plain text instead of a hyperlink in Konsole, while the identical output renders correctly in VS Code's integrated terminal.
Steps to Reproduce
A full Dockerized reproduction environment is available: https://github.com/Nubebuster/statusline-regression which automates all the steps below that don't require user interaction.
Quick reproduction
- Create a minimal statusline script (
statusline.sh):
#!/bin/bash
printf '\e]8;;toclipboard://test-uuid\e\\uuid\e]8;;\e\\'
- Configure Claude Code to use it (
~/.claude/settings.json):
{
"statusLine": {
"type": "command",
"command": "/path/to/statusline.sh",
"padding": 0
}
}
- Run
claudein a VS Code integrated terminal → the "uuid" text in the statusline is underlined and clickable. ✅
- Run
claudein Konsole (or another real terminal emulator with OSC 8 support) → the "uuid" text is plain, not clickable. ❌
- Repeat step 4 with Claude Code v2.0.76 → the link works correctly in Konsole. ✅
Dockerized reproduction
git clone https://github.com/Nubebuster/statusline-regression.git
cd statusline-regression
chmod +x run.sh
./run.sh # select version to test
This opens a KDE Plasma desktop (via x11docker) with both VS Code and Konsole. Full instructions appear in the terminal. Compare behavior between v2.0.76 and latest.
Claude Model
N/A
Is this a regression?
Yes, this worked in a previous version
Last Working Version
2.1.2
Claude Code Version
2.1.44
Update, still present in: 2.1.79
Platform
Anthropic API
Operating System
Ubuntu/Debian Linux
Terminal/Shell
Konsole (KDE)
Additional Information
Relationship to #21586
Issue #21586 reported that OSC 8 links in custom statuslines stopped working entirely in v2.1.3. That issue was closed after a fix in v2.1.42 restored functionality in IDE terminals. However, the fix appears to only work for terminals where the IDE handles escape sequence rendering (VS Code, Cursor, etc.). Real terminal emulators that implement OSC 8 natively (Konsole, iTerm2, etc.) are still affected.
Why this matters
IDE terminals are not the only environment where Claude Code is used. Konsole, iTerm2, Alacritty, and other terminal emulators all support OSC 8 and are common development environments. Claude Code itself uses OSC 8 for file path links, so terminal support is already assumed.
Technical context
The OSC 8 hyperlink format is a standard terminal escape sequence:
\e]8;;URL\e\\VISIBLE_TEXT\e]8;;\e\\
The statusline script output is byte-identical across versions — the regression is in how Claude Code passes the escape sequence through to the terminal, not in the script itself.
This issue has 14 comments on GitHub. Read the full discussion on GitHub ↗