Skip to content

Reasoning/thinking display garbles streamed text with duplicated overlapping chunks #3755

Description

@corinex-spencer

Describe the bug

When the live reasoning ("thinking") display is enabled (showReasoning: true), the
streamed reasoning text renders with heavily duplicated, overlapping fragments. Word
and phrase boundaries are re-emitted, e.g. "from" renders as "fromply from", "number"
as "numbnumber", and whole phrases like "device under test" print three times in a row.

The bug is isolated to the reasoning stream only — the final answer / normal assistant
output renders correctly. It looks like the reasoning renderer appends streamed token
deltas without de-duplicating overlapping chunk boundaries (the final-answer path does
not exhibit this).

Affected version

GitHub Copilot CLI 1.0.61.

Steps to reproduce the behavior

  1. Ensure showReasoning is enabled (default; ctrl+t / settings.json "showReasoning": true).
  2. Start the CLI and submit a prompt that triggers a long reasoning pass
    (e.g. model claude-opus-4.8 with effortLevel: max).
  3. Watch the live reasoning/thinking text as it streams in.
  4. Observe duplicated, overlapping fragments in the reasoning block.

Expected behavior

The reasoning/thinking text should stream cleanly, with each token delta appended once
and no duplicated/overlapping characters — i.e. it should render like the final answer
does.

Additional context

Isolation already performed:

  • Reasoning display ONLY; final-answer rendering is unaffected.
  • Resizing the terminal does NOT fix it -> rules out terminal-width / redraw-drift.
  • Not a version issue: 1.0.61 is the latest published build.
  • Workaround that fully avoids it: disable reasoning (ctrl+t, or
    /settings set showReasoning false).

Environment:

  • Terminal: Alacritty (Wayland, WAYLAND_DISPLAY=wayland-0)
  • TERM=xterm-256color, COLORTERM=truecolor, LANG=en_US.UTF-8
  • No multiplexer (no tmux/screen)
  • OS: Linux
  • CLI: v1.0.61
  • Model: claude-opus-4.8, effortLevel: max, contextTier: long_context

Sample of garbled output:
"the echo reply fromply from the laptop baback to the device under tesder test...
the ID field 0xAE51 matches... the device under test had a valid checksum — the
device under test... numbnumber 11264..."

Activity

  1. added
    area:terminal-renderingDisplay and rendering: flickering, scrolling, line wrapping, output formatting
    and removed on Jun 10, 2026
  2. majaeger commented on Jun 10, 2026

    @majaeger

    I've seen this a lot the last few days as well

  3. fargiolas commented on Jun 11, 2026

    @fargiolas

    Seeing this too, especially in BYOK mode.

    Seems it happens only while replies are streaming, once the full text is received it gets re-rendered without interleaved words.

  4. MPalacioLFN commented on Jun 11, 2026

    @MPalacioLFN

    Also seeing the same issue with Claude Opus 4.8 on the most recent release

  5. cbe-orisha commented on Jun 12, 2026

    @cbe-orisha

    Seeing this happening with all models, mainly using Claude Sonnet 4.6, but happens constantly during the thinking process, once finished, it re-renders as expected.

  6. TobiasW-T commented on Jun 12, 2026

    @TobiasW-T

    Seems to be a duplicate of #3749 .

  7. copilot-cli-bot commented on Oct 11, 2026

    @copilot-cli-bot

    This appears to be resolved as of GitHub Copilot CLI v1.0.95. Please update to that release or a newer stable version. We're closing this as completed. If it still happens, please comment with your version and reproduction steps.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:terminal-renderingDisplay and rendering: flickering, scrolling, line wrapping, output formatting

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions