OSC 8 hyperlinks in custom statusline work in IDE terminals but not in real terminal emulators (Konsole)

Resolved 💬 14 comments Opened Feb 17, 2026 by NubeBuster Closed Jun 27, 2026

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

  1. Create a minimal statusline script (statusline.sh):
#!/bin/bash
printf '\e]8;;toclipboard://test-uuid\e\\uuid\e]8;;\e\\'
  1. Configure Claude Code to use it (~/.claude/settings.json):
{
  "statusLine": {
    "type": "command",
    "command": "/path/to/statusline.sh",
    "padding": 0
  }
}
  1. Run claude in a VS Code integrated terminal → the "uuid" text in the statusline is underlined and clickable. ✅
  1. Run claude in Konsole (or another real terminal emulator with OSC 8 support) → the "uuid" text is plain, not clickable. ❌
  1. 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.

View original on GitHub ↗

This issue has 14 comments on GitHub. Read the full discussion on GitHub ↗