[BUG] In-progress Call causes Screen Flickering

Open 💬 307 comments Opened Apr 12, 2025 by Cheffromspace
💡 Likely answer: A maintainer (bcherny, collaborator) responded on this thread — see the highlighted reply below.

Environment

  • Platform (select one):
  • [x] Anthropic API
  • [ ] AWS Bedrock
  • [ ] Google Vertex AI
  • [ ] Other: <!-- specify -->
  • Claude CLI version: 0.2.69 (Claude Code)
  • Operating System: Windows 11, Ubuntu 22.04
  • Terminal: Windows Terminal 1.22.10731.0

Bug Description

When Claude is processing a request ("thinking"), the status indicator causes screen flickering, which presents an accessibility issue for users sensitive to flashing lights.

Steps to Reproduce

Enter a prompt in Claude Code
Observe the interface while Claude processes the request

Expected Behavior

The status indicator (emoji icon spinner and timer) should update in-place without causing screen flickering or flashing.

Actual Behavior

The entire terminal buffer redraws with each update of the status indicator, causing the screen to flash text from earlier in the session instead of only refreshing the status line.

Additional Context

The implementation should use line-specific updates (via terminal control sequences) rather than redrawing the entire buffer for each status change.

https://github.com/user-attachments/assets/9da196e7-a1df-4fe3-bb6b-1cf7fe20add6

View original on GitHub ↗

307 Comments

bcherny collaborator · 1 year ago

Hey! What's the full commend you're running here? Seems like an inline Node script?

Cheffromspace · 1 year ago

@bcherny I don't recall to be honest. It _wasn't_ something that should have taken 2 minutes to run, though. I had seen this flickering before once or twice, but this session was particularly bad, and just kind of wonky in general, long running commands, jumping to the top, etc. I haven't seen it continuously flicker since this. If I do see it again, I will be sure to note everything and try to reproduce consistently. Maybe I just needed to turn it off and on again.

Thanks!

dcolascione · 1 year ago

@bcherny , https://github.com/bcherny/ink/pull/8 would probably fix this

Cheffromspace · 1 year ago

https://github.com/user-attachments/assets/6408cdfb-41b0-4bf3-ae04-873fd5e57bc0

A peculiar thing just happened, and I'm creating a bug report. This is a terminal interface, running in WSL in Windows Terminal. The screen started to seem to scroll looping endlessly. What all have we been doing leading up to this? Give me your Commander Data's diagnostics report.

Based on our conversation, the following events led up to the scrolling issue:

  1. We were working on fixing tests for the slashMigraine command, particularly implementing geocoding functionality and making sure the tests were properly mocking services.
  2. We made several changes:
  • Updated the slashMigraine.ts file to implement actual geocoding functionality
  • Created and modified slashMigraine.test.ts with various mock approaches
  • Added mock implementations for various services
  • Created a jest-setup-slashMigraine.js file for global mocks
  1. We were running tests using pnpm test "src/commands/slashMigraine.test.ts" which was failing due to issues with the mocks not being properly applied with ES Modules.
  2. The failing tests produced very large error output, especially from the pollution API, which may have triggered the scrolling issue.
  3. We tried multiple approaches to fix the mocking:
  • Direct mocking in the test file
  • Using jest.mock() with various configurations
  • Creating a separate setup file for mocks

The terminal scrolling problem might have occurred because:

  1. The test was producing an extremely large amount of output (the pollution API error response was being fully logged and was truncated at 28,000+ characters)
  2. This large output might have triggered a rendering issue in Windows Terminal or WSL
  3. The output could have contained special characters or ANSI escape sequences that caused problems with the terminal rendering

It appears we were in the middle of a test debugging session when the terminal display issue occurred.

Cheffromspace · 1 year ago
bcherny collaborator · 1 year ago

This should be feeling better in newer versions

Cheffromspace · 1 year ago

@bcherny Sorry...

0.2.105 (Claude Code)

Just writing a .js file. Same pattern, if I scroll up even one bit, it jumps to the top.

https://github.com/user-attachments/assets/4401f349-7e5c-451f-902b-8d0ec4e27982

bcherny collaborator · 1 year ago

@Cheffromspace

  1. Are you using verbose mode? (/config to check)
  2. Is that the Write tool that's flickering, or something else?
Cheffromspace · 1 year ago

Interesting, I just realized that I was working on implementing the same CI script here as I was in my original bug report. Probably a few minor changes from before but more or less the same script.

If it matters:

! cat ../intelligence-assist/.github/workflows/ci.yml
  ⎿  name: CI

     on:
       pull_request:
         branches: [ main, stage ]

     … +262 lines (ctrl+r to expand)


               } catch (error) {
                 console.error(`Failed to process PR data: ${error.message}`);
                 core.setFailed(`PR review webhook error: ${error.message}`);
               }

> Can we implement this here in this project? Keep everything exactly the same except the build steps

● I'll help you implement a similar CI workflow for this project. Let me check the project structure first to understand the build steps.

● Bash(cat package.json)…
  ⎿  {
       "name": "google-calendar-mcp",
       "version": "1.1.0",
       "description": "Google Calendar MCP Server",
       "type": "module",

     … +26 lines (ctrl+r to expand)

         "@vitest/coverage-v8": "^3.1.1",
         "typescript": "^5.3.3",
         "vitest": "^3.1.1"
       }
     }

● Creating the CI workflow file for GitHub Actions based on the project structure and scripts:

● List(.github)…
  ⎿  Listed 2 paths (ctrl+r to expand)

● Let me create the GitHub Actions workflow directory:

● Bash(mkdir -p /home/jonflatt/source/google-calendar-mcp/.github/workflows)…
  ⎿  (No content)

● Now, let me create the CI workflow file:

● Write(file_path: .github/workflows/ci.yml)…
  ⎿  Error: File has not been read yet. Read it first before writing to it.

● Let me create the file properly:

● Bash(mkdir -p /home/jonflatt/source/google-calendar-mcp/.github/workflows)…
  ⎿  (No content)

● Write(file_path: .github/workflows/ci.yml)…
  ⎿  Error: File has not been read yet. Read it first before writing to it.

● Let me try differently:

● Bash(mkdir -p /home/jonflatt/source/google-calendar-mcp/.github/workflows && cat > /home/jonflatt/source/google-calendar-mcp/.github/workflows/ci.yml << 'EOL'…
      name: CI

      on:
        pull_request:
          branches: [ main, stage ]
        push:
          branches: [ main ]

      jobs:
        build:
          runs-on: ubuntu-latest

          steps:
          - uses: actions/checkout@v3
            with:
              fetch-depth: 0

          - name: Set up Node.js
            uses: actions/setup-node@v3
            with:
              node-version: '18'
              cache: 'npm'

          - name: Install dependencies
            run: npm ci

          - name: Security audit
            run: npm audit --audit-level=high

          - name: Type checking
            run: npm run typecheck

          - name: Build project
            run: npm run build

          - name: Run tests
            run: npm run test
      EOL)
  ⎿  (No content)

● Now let's create a PR webhook utility file similar to the example:

● Write(file_path: .github/pr-webhook-utils.cjs)…
  ⎿ Wrote 129 lines to .github/pr-webhook-utils.cjs
     /**
      * Utilities for PR webhook data handling and sanitization
      */
     /**
      * Sanitizes text content to remove truly sensitive information
      * @param {string} text - Text content to sanitize
      * @returns {string} Sanitized text
      */
     function sanitizeText(text) {
     … +119 lines (ctrl+r to expand)

● Now, let's update the workflow file to include the PR review job:

> Can you tell me exactly what we've been doing, and speculate what may be contributing to a screen flickering issue?
  ⎿  API Error: 400 {"type":"error","error":{"type":"invalid_request_error","message":"messages.18: `tool_use` ids were found without `tool_result` blocks immediately after: toolu_01LzPn1xbeXY1895Yv7s1aBc. Each `tool_use` block must have a
     corresponding `tool_result` block in the next message."}}

> Can you tell me exactly what we've been doing, and speculate what may be contributing to a screen flickering issue?
  ⎿  API Error: 400 {"type":"error","error":{"type":"invalid_request_error","message":"messages.18: `tool_use` ids were found without `tool_result` blocks immediately after: toolu_01LzPn1xbeXY1895Yv7s1aBc. Each `tool_use` block must have a
     corresponding `tool_result` block in the next message."}}

> Can you tell me exactly what we've been doing, and speculate what may be contributing to a screen flickering issue?
  ⎿  API Error: 400 {"type":"error","error":{"type":"invalid_request_error","message":"messages.128: `tool_use` ids were found without `tool_result` blocks immediately after: toolu_01LzPn1xbeXY1895Yv7s1aBc. Each `tool_use` block must have a
     corresponding `tool_result` block in the next message."}}

● Bash(cat > /home/jonflatt/source/google-calendar-mcp/.github/workflows/ci.yml << 'EOL'                                             …
      name: CI

      on:
        pull_request:
          branches: [ main, stage ]
        push:
          branches: [ main ]

      jobs:
        build:
          runs-on: ubuntu-latest

          steps:
          - uses: actions/checkout@v3
            with:
              fetch-depth: 0

          - name: Set up Node.js
            uses: actions/setup-node@v3
            with:
              node-version: '18'
              cache: 'npm'

          - name: Install dependencies
            run: npm ci

          - name: Security audit
            run: npm audit --audit-level=high

          - name: Type checking
            run: npm run typecheck

          - name: Build project
            run: npm run build

          - name: Run tests
            run: npm run test

        pr-review:
          runs-on: ubuntu-latest
          needs: build
          if: github.event_name == 'pull_request'
          permissions:
            contents: read
            pull-requests: read

          steps:
          - uses: actions/checkout@v4
            with:
              fetch-depth: 0

          - name: Send PR data to webhook for code review
            uses: actions/github-script@v6
            with:
              github-token: ${{ secrets.GITHUB_TOKEN }}
              script: |
                console.log('Processing PR #' + context.issue.number + ' in ' + context.repo.owner + '/' + context.repo.repo);

                try {
                  // Get PR details
                  const pr = await github.rest.pulls.get({
                    owner: context.repo.owner,
                    repo: context.repo.repo,
                    pull_number: context.issue.number
                  });

                  // Get PR files
                  const files = await github.rest.pulls.listFiles({
                    owner: context.repo.owner,
                    repo: context.repo.repo,
                    pull_number: context.issue.number
                  });
                  console.log('Files changed:', files.data.length);

                  // Setup webhook URL
                  const webhookUrl = '${{ secrets.WEBHOOK_URL }}';

                  // Validate webhook URL
                  if (!webhookUrl || !webhookUrl.trim()) {
                    throw new Error('WEBHOOK_URL secret is not configured');
                  }

                  const url = new URL(webhookUrl);
                  // Ensure HTTPS is used for security
                  if (url.protocol !== 'https:') {
                    throw new Error('WEBHOOK_URL must use HTTPS protocol for security');
                  }

                  // Get PR comments
                  const comments = await github.rest.issues.listComments({
                    owner: context.repo.owner,
                    repo: context.repo.repo,
                    issue_number: context.issue.number
                  });

                  // Get PR review comments
                  const reviewComments = await github.rest.pulls.listReviewComments({
                    owner: context.repo.owner,
                    repo: context.repo.repo,
                    pull_number: context.issue.number
                  });

                  // Import PR webhook utilities
                  const fs = require('fs');
                  const path = require('path');

                  // Define the path to the utils file
                  const utilsPath = path.join(process.env.GITHUB_WORKSPACE, '.github', 'pr-webhook-utils.cjs');
                  console.log(`Loading PR webhook utilities from: ${utilsPath}`);

                  // Load the utilities from the external file
                  const prDataUtils = require(utilsPath);

                  // Build PR data payload
                  const prData = {
                    id: pr.data.id,
                    number: pr.data.number,
                    title: prDataUtils.sanitizeText(pr.data.title),
                    body: prDataUtils.sanitizeText(pr.data.body),
                    state: pr.data.state,
                    created_at: pr.data.created_at,
                    updated_at: pr.data.updated_at,
                    repository: {
                      name: context.repo.repo,
                      owner: context.repo.owner
                    },
                    head: {
                      ref: pr.data.head.ref,
                      sha: pr.data.head.sha
                    },
                    base: {
                      ref: pr.data.base.ref,
                      sha: pr.data.base.sha
                    },
                    user: {
                      login: pr.data.user.login,
                      id: pr.data.user.id
                    },
                    // Filter sensitive files and limit payload size
                    changed_files: files.data
                      .filter(file => prDataUtils.shouldIncludeFile(file.filename))
                      .slice(0, 100) // Limit to 100 files max
                      .map(file => ({
                        filename: file.filename,
                        status: file.status,
                        additions: file.additions,
                        deletions: file.deletions,
                        changes: file.changes,
                        patch: prDataUtils.limitPatch(file.patch)
                      })),
                    // Sanitize comments
                    comments: comments.data
                      .slice(0, 100) // Limit to 100 comments max
                      .map(comment => ({
                        id: comment.id,
                        body: prDataUtils.sanitizeText(comment.body),
                        user: comment.user.login,
                        created_at: comment.created_at
                      })),
                    // Sanitize review comments
                    review_comments: reviewComments.data
                      .slice(0, 100) // Limit to 100 review comments max
                      .map(comment => ({
                        id: comment.id,
                        body: prDataUtils.sanitizeText(comment.body),
                        user: comment.user.login,
                        path: comment.path,
                        position: comment.position,
                        created_at: comment.created_at
                      }))
                  };

                  console.log('Sending PR data to webhook...');

                  // Calculate payload size for logging
                  const payloadSize = JSON.stringify(prData).length;
                  console.log(`Payload size: ${(payloadSize / 1024).toFixed(2)} KB`);

                  // Fail if payload is too large (>5MB)
                  const maxPayloadSize = 5 * 1024 * 1024;
                  if (payloadSize > maxPayloadSize) {
                    throw new Error(`Payload size (${payloadSize} bytes) exceeds maximum allowed size (${maxPayloadSize} bytes)`);
                  }

                  // Use https request
                  const https = require('https');

                  // Properly stringify and send the data using safe stringify utility
                  const stringifyResult = prDataUtils.safeStringify(prData);

                  if (!stringifyResult.success) {
                    console.error(`JSON stringify error: ${stringifyResult.error}`);

                    // Use the simplified data creator utility
                    const simplifiedData = prDataUtils.createSimplifiedPrData(pr, context);

                    // Try to stringify the simplified data
                    const simplifiedResult = prDataUtils.safeStringify(simplifiedData);

                    if (!simplifiedResult.success) {
                      // Last resort - send minimal JSON
                      console.error(`Even simplified data failed: ${simplifiedResult.error}`);
                      stringifyResult.data = JSON.stringify({ error: "Failed to process PR data", pr_number: context.issue.number });
                    } else {
                      console.log('Using simplified PR data instead');
                      stringifyResult.data = simplifiedResult.data;
                    }
                  } else {
                    console.log('JSON data prepared successfully');
                  }

                  // Log payload size instead of full content for security
                  console.log(`Payload prepared successfully: ${(stringifyResult.data.length / 1024).toFixed(2)} KB`);

                  const options = {
                    hostname: url.hostname,
                    port: url.port || 443,
                    path: url.pathname,
                    method: 'POST',
                    headers: {
                      'Content-Type': 'application/json',
                      'Content-Length': Buffer.byteLength(stringifyResult.data),
                      'CF-Access-Client-Id': '${{ secrets.CF_ACCESS_CLIENT_ID }}',
                      'CF-Access-Client-Secret': '${{ secrets.CF_ACCESS_CLIENT_SECRET }}'
                    },
                    timeout: 10000 // 10 second timeout
                  };

                  // Make the request
                  const req = https.request(options, (res) => {
                    let data = '';
                    res.on('data', (chunk) => { data += chunk; });

                    res.on('end', () => {
                      if (res.statusCode >= 200 && res.statusCode < 300) {
                        console.log(`Successfully sent PR data to webhook (Status: ${res.statusCode})`);
                      } else {
                        const errorMsg = `Failed to send PR data to webhook: Status ${res.statusCode}`;
                        console.error(errorMsg);
                        console.error(`Response: ${data}`);
                        // Fail the job if the webhook returns an error
                        core.setFailed(errorMsg);
                      }
                    });
                  });

                  req.on('error', (error) => {
                    const errorMsg = `Network error when sending to webhook: ${error.message}`;
                    console.error(errorMsg);
                    core.setFailed(errorMsg);
                  });

                  req.on('timeout', () => {
                    req.destroy();
                    const errorMsg = 'Request to webhook timed out after 10 seconds';
                    console.error(errorMsg);
                    core.setFailed(errorMsg);
                  });

                  req.write(stringifyResult.data);
                  req.end();

                } catch (error) {
                  console.error(`Failed to process PR data: ${error.message}`);
                  core.setFailed(`PR review webhook error: ${error.message}`);
                }
      EOL)
  ⎿  Running…
Cheffromspace · 1 year ago

@bcherny Not write tool, Claude created a here document to workaround not wanting to read the existing file. Not using verbose mode.

---
│ Settings │
│ Configure Claude Code preferences │
│ │
│ ❯ Auto-compact true │
│ │
│ Use todo list true │
│ │
│ Verbose output false │
│ │
│ Theme Dark mode (colorblind-friendly) │
│ │
│ Notifications auto │
│ │
│ Editor mode normal

---

● Now, let me create the CI workflow file:

● Write(file_path: .github/workflows/ci.yml)…
⎿  Error: File has not been read yet. Read it first before writing to it.

● Let me create the file properly:

● Bash(mkdir -p /home/jonflatt/source/google-calendar-mcp/.github/workflows)…
⎿  (No content)

● Write(file_path: .github/workflows/ci.yml)…
⎿  Error: File has not been read yet. Read it first before writing to it.

● Let me try differently:

● Bash(mkdir -p /home/jonflatt/source/google-calendar-mcp/.github/workflows && cat > /home/jonflatt/source/google-calendar-mcp/.github/workflows/ci.yml << 'EOL'…
name: CI

on:
pull_request:

Cheffromspace · 1 year ago

made a couple updates to my comments above

neno-is-ooo · 1 year ago

it happens to me at every session almost

Mcreve · 1 year ago

It looks like you're 'seeing' the model read through the previous context. It does not seem to occur when >35% context remaining

georgeguimaraes · 1 year ago

this happens to me every session. I'm using Wezterm as my terminal and zsh on mac.

Snoowp · 1 year ago

Also happening to me rn, using it in WSL. It happened after I pasted a large amount of context into the CLI. It seems to snap back to the top each time

ameyer117 · 1 year ago

Really bad flickering happening for me as well with WSL (Ubuntu), not nearly as bad on MacOS.

Claude Code Status v1.0.6

zantiu · 1 year ago

I fixed the flickering in VS Code in Windows with this setting:

!Image

david-strejc · 1 year ago

Really ENOYING - can I fix it in closed version myself (using Claude of course) and send patch?

aguyinmontreal · 1 year ago

WSL issue still going strong.

dylanhuff · 1 year ago

Seeing this in the VS Code plugin on MacOS 15.5, happens very often

Shinaima · 1 year ago

Just to make this clear: It is a visual bug, but atleast for me, the flickering is a lot faster than shown in the videos. To me it is just annoying, but I have seen lots of content with less flickering with an epylepsy warning, so you might want to prioritize it a little higher as just a visual bug that is definetely harmless.

Edit: Added video as proof. Please note that this is not the most extreme case I have seen.

https://github.com/user-attachments/assets/1bc69cb9-b36e-441e-8cff-c35787855cf6

dempc6469 · 1 year ago

experiencing same. Extremely annowing.

Vasiliy-Bondarenko · 1 year ago

this is not a minor issue. i have a pretty long terminal buffer and some text processing enabled in iterm. so refreshing whole terminal history take about a minute. it's basically unusable at this point. please fix it.

dempc6469 · 1 year ago
this is not a minor issue. i have a pretty long terminal buffer and some text processing enabled in iterm. so refreshing whole terminal history take about a minute. it's basically unusable at this point. please fix it.

I had luck starting it in a sep terminal. I also installed the new Claude Code extension in VSCode but that didn't seem to have any affect on this bug.

expozeur · 1 year ago

Same issue.

clafollett · 1 year ago

@Cheffromspace

I've found numerous bug reports now with most pointing back to this one. I have this happen WAY too often. I've also had it crash Windsurf IDE numerous times and it's crashed my fully updated Macbook Pro M3 Max 36GB RAM 3 times all over the past 3 weeks. Twice corrupting my chat context.

I think this should be a critical high priority. Resizing a terminal window should not cause this much pain!

clafollett · 1 year ago
this is not a minor issue. i have a pretty long terminal buffer and some text processing enabled in iterm. so refreshing whole terminal history take about a minute. it's basically unusable at this point. please fix it.

Agreed @Vasiliy-Bondarenko!!!

HOT FIX IT please Anthropic!!! 👀

digitalappsbd · 1 year ago

i have same problem in mac warp terminal. fix this asap!

kfirfer · 1 year ago

same here macos 15.5 , zsh

Helgoe · 1 year ago

Happening on WSL using VScode. I get endless looping at hyperspeed and I don't know what to do to stop it. This is extremely disruptive. I've had this happen 3 times now today.

mschmoyer · 1 year ago

+1. Also witnessing this in JetBrains terminal. Especially when resizing windows, which many folks do often. Highly disruptive!

atxtechbro · 1 year ago

Still experiencing this issue - June 2025

I can confirm this exact flickering/glitching behavior is still happening on Linux Mint with the latest Claude Code. The terminal constantly flashes between different text states during operations, making it nearly impossible to see what's happening in real-time.

Additional examples where I've seen this:

  • GitHub MCP operations (mcp__github__create_issue)
  • Regular gh CLI commands
  • Auto-accept edit tags constantly flashing on/off at bottom of screen

This has been open since April with no fix. The constant visual disruption seriously undermines the developer experience and makes me question the value of a Claude Max subscription when core functionality like terminal rendering remains broken for months.

This needs priority attention - it's not just a minor annoyance but a significant accessibility and usability issue that makes the tool frustrating to use daily.

junebash · 1 year ago

I am also seeing this in Ghostty on macOS 26.0 developer beta 2. (I understand this OS isn't officially supported, just wanted to get the data point in there.)

srao-positron · 1 year ago

This happens to me all the time. I have a medical issue that makes me at risk for a seizure. The flickering starts the symptoms of a seizure for me. I love Claude Code. Can you please fix this?

Astrotope · 1 year ago

Please fix. Claude code in amazing, but this is a real detractor. A fix for this would have a significant impact on user experience.

gustavotsilva · 1 year ago

<img width="411" height="238" alt="Image" src="https://github.com/user-attachments/assets/a7c053dc-4db3-43c1-8960-1ca392a15877" /> Clearing the terminal fixes the problem (temporarily)

johnkferguson · 1 year ago

Having this issue as well on Linux with Ghostty.

fortunexbt · 1 year ago

Same issue on apple terminal.

omayhemo · 1 year ago

I experience this issue in every terminal, without fail. I just had a seizure and I'm suing... I'm joking. But seriously, you need to get this solved ASAP. It is a true hazard and it's irresponsible to not place a warning at minimum.

Mor-Li · 1 year ago

Same Problem on Linux Server with latest Claude Code

Vasiliy-Bondarenko · 1 year ago
The hook in /home/[username]/.claude-code/hooks/claude-commandments.sh provides these reminders on EVERY tool use: # ALWAYS remind about NO THEATRICS on EVERY tool use echo -e "${RED}🚫 NO THEATRICS REMINDER:${NC} Never use loading animations, spinners, progress bars, or hide commands" echo -e "${RED} Show real work: Display actual commands and real output transparently${NC}" echo -e "${RED} ⚠️ NO RAPID SCROLLING: Never dump large outputs that scroll the screen${NC}" echo -e "${RED} ⚠️ TRUNCATE OUTPUT: Limit output to relevant portions only${NC}" echo -e "${RED} ⚠️ NO SCREEN FLICKER: Never redraw entire terminal or cause flashing${NC}" echo -e "${RED} ⚠️ NO STATUS SPINNERS: Avoid in-progress indicators that flicker${NC}"

this is a PerToolUse hook, right? so i set it up with "*" match like this

<img width="1180" height="341" alt="Image" src="https://github.com/user-attachments/assets/e147eac7-4484-470d-a7ea-5b0b35031e8b" />

did not work. for me...

<img width="610" height="162" alt="Image" src="https://github.com/user-attachments/assets/f3973ef8-70d1-4601-bd10-3d37c5b872b2" />

huffjs · 1 year ago

Eventually freezes the window and the terminal, finite`.

Please fix.

vitality82 · 1 year ago

Come on Anthropic, these UX issues are really a PITA!

adriangalilea · 12 months ago

When Claude Code launched I understood this was just early adopter problems, but its been a while, please prioritize this.

ayd0 · 12 months ago

Started having this issue, but only with verbose output set to true. Fedora using Gnome terminal.

ghost · 12 months ago

I am having the same problem

jsaveker · 11 months ago

I am also having the same issue. Seems to happen with MCP tool responses.

mattpodolak · 11 months ago

also having this issue on mac with zsh

wojo · 11 months ago

Same here on macOS, when it gets stuck like this sometimes I have to close Claude in VSCode and restart. No other way to get around it, not even clearing the console.

stevenx · 11 months ago

Have the same on Mac

lior-airis · 11 months ago

Reporting similar issues on MacOS Sequoia 15.1.1.
I moved to Ghostty to mitigate this because they print faster, so the wait is shorter, but it still happens frequently.

saif-mazhar · 11 months ago

Reporting same issue but only in --verbose mode. Latest MacOS.

Yolan10 · 11 months ago

Same on WSL with AND without --verbose

XJhrack · 11 months ago

I am having the same problem

mscottford · 11 months ago

Apologies for the +1, but I didn't see anyone else reporting where I've seen this happen. I'm working with a sub-agent, and I ran with --verbose, because I wanted to see the prompts that were being given to the sub-agent. However, the output is flickering, and I'm not able to scroll up to read the history while the sub-agent is executing.

saif-mazhar · 11 months ago

It happens to me without --verbose as well, but not as often. When I expand the terminal window, that stops the flickering most of the time.

kfirfer · 11 months ago

its happens also in cursor cli. perhaps some third party library issue.

mverteuil · 11 months ago

It may be helpful to only some of you, but if you're using Claude Code in a more robust terminal application like iTerm2, this issue seems to stem from running /clear when the actual buffer contains more history. By clearing the terminal buffer I seem to be able to stop this from occurring.

If I am launching Claude Code form within PyCharm, for example, clearing/flushing the buffer does not seem to be effective in the way that it is with iTerm2. While this does not solve the issue with the application entirely, if someone had a medical concern like epilepsy the current behaviour could trigger an episode so this may provide some relief.

jimmyn · 11 months ago

I have the same issue, very annoying

md-f-sarker · 11 months ago

same issue i have been seeing for weeks now

FrancisBourre · 11 months ago

Same issue, it's a major blocking issue when it happens.

byigitt · 11 months ago

Same here.

fabiotheo · 11 months ago

Same here

pengi64 · 11 months ago

Same issue with verbose thinking, iterm2

misterdojo777 · 10 months ago

same issue

WeathermanTony · 10 months ago

Please just stop using any AI tool - learn to code yourself in anything -
way better off.

On Sun, Aug 24, 2025 at 9:02 AM dojo @.***> wrote:

misterdojo777 left a comment (anthropics/claude-code#769) <https://github.com/anthropics/claude-code/issues/769#issuecomment-3218091115> same issue — Reply to this email directly, view it on GitHub <https://github.com/anthropics/claude-code/issues/769#issuecomment-3218091115>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/A25OH4IL33JVC65MCVEKCR33PGZW7AVCNFSM6AAAAAB27OFU62VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTEMJYGA4TCMJRGU> . You are receiving this because you commented.Message ID: @.***>
WeathermanTony · 10 months ago

The fact that this claude.md even exists should be warning to everyone. Programmers will be required - forever. The fact that you just noticed this flicker

CLAUDE.md

is a good time to just stop it. Before you get like me. tony@cirigliano.com

WeathermanTony · 10 months ago

Easily 3,000 hours in - and it only keeps get worse....

WeathermanTony · 10 months ago

Sounds harsh. Just wait.. You'll add to that claude.md

WeathermanTony · 10 months ago

Might you actually get as far as me, you'll have your own levels of Hell to add, won't know a damn thing about coding, but will learn verbal and facial expression skills that will instantly vaporize Chuck Norris or any modern equivalent. Prove me wrong - please.

WeathermanTony · 10 months ago

One last funny and I will be quiet. You will be the dude here (substitute Claude for Niagara)
https://www.youtube.com/watch?v=8KpsUlvzbkk

wojo · 10 months ago

It's either something I'm doing or the latest updates, but this is happening a lot to me again. So, it's not even close to being mitigated or solved. It's so extremely disruptive, and sometimes it even crashes all my VS Code terminals. It also happens inside of iTerm2.

artnikbrothers · 10 months ago
jimmyn · 10 months ago

This is extremely annoying, it happens in all terminals. I think it is related to tool use

https://github.com/user-attachments/assets/ac3e1539-ca9b-4c62-adb1-e044d696d342

edxeth · 10 months ago

It happens to me too and it's very frustrating!

Windows 11 Pro 24H2 (OS Build 26100.4946)
WSL 2.5.10
Ubuntu 24.04.3 LTS
WezTerm 20240203-110809-5046fc22
Oh My Zsh 2525dae
VentoraLabs · 10 months ago

same!

farrellh1 · 10 months ago

I think it happens when there has been a lot of conversations, then it happens.

marcoscale98 · 10 months ago

I noticed that it happens when a subagent is running (v1.0.98)

WeathermanTony · 10 months ago

Please try starting Claude Code CLi like this: term=screen yourclaudestartcommandhere
e.g. term=screen claude or term=screen npx @anthropic-ai/claude-code --dangerously-skip-permissions

lior-airis · 10 months ago

@chrislloyd @bcherny hi, can you say what's the status with this bug please?

VentoraLabs · 10 months ago

same still :)

razodactyl · 10 months ago

Anyone able to recommend a workaround while this gets fixed?

bukzor · 10 months ago

This issue makes me queasy whenever there's a Task call during a long context.
It seems to re-print its entire curses content on each update from the Task, which seems to happen more than once a second.

rustanacexd · 10 months ago

still happening for me as of now

Mor-Li · 10 months ago

I think use tmux will alleviate this situaion

tljstewart · 10 months ago
I think use tmux will alleviate this situaion

nah worse. wezterm+tmux the spinner shimmering causes statusline to flicker with each shimmer ... however, it doens't flicker in wezterm w/o tmux ...

https://github.com/user-attachments/assets/966d8dc9-f249-478c-b05a-45f6592845e6

marcoscale98 · 10 months ago

Five months have passed and it still hasn't been resolved, absurd! Really annoying! It happens to me at least 3-4 times a day.

omayhemo · 10 months ago

Anthropic is bleeding out and going backwards. I recommend giving Codex a try. They have an open source CLI integration. OpenAI never lies to me like Claude does. Smooth as silk ux on warp. Anthropic blew it.

abdull1986 · 9 months ago

Any MCP command that outputs text longer than the terminal height causes display issues—this happens in both the regular terminal and the VS Code integrated terminal (e.g., with Atlassian and Serena). I tried limiting the amount of text shown when Claude calls a command, but that didn’t help. Unfortunately, there’s no option to disable --verbose input. It would be very useful to have a quiet or silent mode for MCP commands, similar to how sub-agents can be called with minimal output.

wolframs · 9 months ago

Can confirm this is still an issue, but only in my VSCode environment, not when I run in Windows Terminal standalone:

VSCode Version:
Version: 1.104.2 (user setup)
Commit: e3a5acfb517a443235981655413d566533107e92
Date: 2025-09-24T11:21:37.073Z (1 wk ago)
Electron: 37.3.1
ElectronBuildId: 12404162
Chromium: 138.0.7204.235
Node.js: 22.18.0
V8: 13.8.258.31-electron.0
OS: Windows_NT x64 10.0.26100

Claude Code CLI: v2.0.1

Using PowerShell 7.5.2 (pwsh.exe, not inbuilt windows powershell.exe)

Triggered by:

  • Long MCP command output
  • Long pwsh script execution command output
vaknin · 9 months ago

Happens on Alacritty Terminal on X11 Arch Linux, with or without tmux.

ShravanSunder · 9 months ago

in tabby as well

psarno · 9 months ago

Still an issue - Git Bash on Windows 11.

It is completely unusable when multiple sub-agents are spawned with approval on.

You can't give approval to them due to the flickering, even moving up/down with arrow keys does not fix it as it sometimes does with a single approval. The agents abort.

hd24-jspoerer · 9 months ago

This is still an issue. VS Code in Windows 10 (Power Shell).

I do not use sub-agents.

Seems to be related to long MCP responses.

rweijnen · 9 months ago

I have the same issue intermittently, running on Windows (not WSL)

theturtle32 · 9 months ago

Happens on macOS iTerm2 as well, and is even worse running inside tmux.

My hypothesis: Claude Code redraws and re-outputs the ENTIRE conversation buffer every time it's updating certain elements of its TUI. The other reason I suspect as much is that running Claude Code on a remote server via SSH often streams MASSIVE AMOUNTS OF DATA, multiple megabytes per second (!!) over SSH to my terminal while it's receiving its response from Anthropic's API.

It SHOULD be doing surgical updates using escape sequences, not re-rendering entire swaths of the UI in order to update a status line.

ruant · 9 months ago

Powershell inside vscode here, I often wake up on the floor after passing out because of this epilepsy inducing flickery.
Please make it stop 🙏🙏
On latest 2.0.15 Claude Code

@bcherny

wolframs · 9 months ago
It SHOULD be doing surgical updates using escape sequences, not re-rendering entire swaths of the UI in order to update a status line.

I think it's doing that for a lot of things, but try pasting 100 lines of any text into the input when the context is already large, that makes it flicker for me too... And I guess that's a tricky one to solve.

WeathermanTony · 9 months ago

So true. Even dumbass Claude could fix this issue with very restricted
access to that one bit of code.

On Tue, Oct 14, 2025 at 5:09 PM Wolfram S. @.***> wrote:

wolframs left a comment (anthropics/claude-code#769) <https://github.com/anthropics/claude-code/issues/769#issuecomment-3403624550> It SHOULD be doing surgical updates using escape sequences, not re-rendering entire swaths of the UI in order to update a status line. I think it's doing that for a lot of things, but try pasting 100 lines of any text into the input when the context is already large, that makes it flicker for me too... And I guess that's a tricky one to solve. — Reply to this email directly, view it on GitHub <https://github.com/anthropics/claude-code/issues/769#issuecomment-3403624550>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/A25OH4KT2Y7DQCCUQT4NLED3XVRBBAVCNFSM6AAAAAB27OFU62VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTIMBTGYZDINJVGA> . You are receiving this because you commented.Message ID: @.***>
juancri · 9 months ago
madorb · 9 months ago

Happens in iterm, happens in intellij terminal

dutradotdev · 9 months ago

still happening and this is VERY annoying

MarcusChamberlain · 8 months ago

Jetbrains Rider integrated terminal, "2025.2.3", same problem. I almost always have to keep the terminal hidden in the background unless I really need to use Claude, and then when I send my prompt immediately switch to a different tab. As you can imagine, it strains the usefulness of the tool at that point.

mgoulet101 · 8 months ago

vscode "terminal mode" plugin on Windows in a PowerShell, does the same thing as of CC 2.0.22. I think it only happens when there are concurrent tasks and one of them is off the top of the screen. I just created a new "CDK deploy" skill in my project and I'm trying to run like 5 stacks concurrently. It works fine, but as soon as one of the Bash wrapper tasks goes past the top of the scroll view of the CC terminal, it goes nuts with the flicker, just like what others are saying.

dstreefkerk · 8 months ago

Having the same problems with 2.0.24. Windows CLI or WSL, same issue.

mgoulet101 · 8 months ago

I'm able to easily reproduce it in 2.0.24 (Windows + vscode + terminal-mode extension + PowerShell). I gave it two concurrent tasks to do and it was working fine. As soon as I shrink the window height to less than the output of those concurrent tasks, it starts to flicker. It seems that whenever it wants to update the output of a task that is off screen (above the current scroll view), it ratchets to the very-top of the window, then when the task that is at the bottom updates its output, it auto-scrolls back to the bottom. The two tasks end up fighting each other and the screen flickers.

wolframs · 8 months ago
As soon as I shrink the window height to less than the output of those concurrent tasks, it starts to flicker.

Can confirm that this reproduces the issue.

rweijnen · 8 months ago

This is a widespread easy to reproduce issue, I wonder if it's currently under active research?

ruant · 8 months ago

I've tried asking on the Discord server as well, but there isn't much response from Anthropic about it there either.
An update from the team would reassure people that it's being worked on, right now all bets are off that this will ever be fixed.
Issue is over 6 months old.

@chrislloyd @bcherny

MaximeLas · 8 months ago

It's very frustrating that no one from the team has even acknowledged this widespread issue, which has been affecting such a large number of devs for several months now and has been the topic of dozens, if not hundreds of gh issues.

mgoulet101 · 8 months ago

I wonder if Anthropic is putting their focus on the native plugin (in vscode anyway). Though CC seems at it's heart a pure CLI solution, which I love. Once they fix the missing "bypass permissions" mode in the native plugin, I may go to that and not look back.

SkoricIT · 8 months ago

This is majorly annoying. Please take care of this.

rweijnen · 8 months ago
I wonder if Anthropic is putting their focus on the native plugin (in vscode anyway). Though CC seems at it's heart a pure CLI solution, which I love. Once they fix the missing "bypass permissions" mode in the native plugin, I may go to that and not look back.

It happens in terminal windows as well so it's just something needs fixing and it will be fixed everywhere it seems.

alberthendriks · 8 months ago

Workaround: When this happens, click in the flickering terminal and then press space bar. Repeat two or three times if it doesn't help within 1s.

abdullah-orangevest · 8 months ago

@claude what do you think , i even dropped my Anthropic subscription because of this issue and not able to use my subscription with any other coding agents

Folcon · 8 months ago

I had this issue specifically on macos in claude code, the easiest workaround I found was installing iterm2, this stopped the flickering entirely, for at least this last week. However I do notice if I change the terminal window size it increases the likelihood of flickering.

So hopefully that's useful context for people.

kaspermarstal · 8 months ago

Still happend in Windows Terminal with v2.0.27

mgoulet101 · 8 months ago

I'm now on 2.0.28 in vscode, now using a Git Bash terminal in "terminal mode" of the extension.

It is flickering with a vengeance. It's actually simpler than I thought. Whenever there is any output that goes "above screen", it goes nuts. This happens a lot when I'm in plan mode. If the plan is bigger than one screen, it'll flicker while rendering, then go quiet before asking me if I want to go code. If I say No, change the plan, it flickers the whole time while I'm typing my changes. I have to close my eyes so I can type blindly. Crazy. But once it latches up my updates, it calms down again, until there is another plan bigger than one screen height. The problem happens similarly if the active work is updating the screen, e.g. 5-10 concurrent tasks, one or more of which go "above screen".

This is a huge problem. Would be nice if someone at Anthropic could comment. It's the easiest thing to reproduce (on windows anyway, can't speak to mac/linux).

I'm still hopeful that the native plugin will make this OBE, once it's ready for prime time.

nervousmammoth · 8 months ago

still happening on Win11 Windows Terminal WSL2 Ubuntu

mathiasseredszun · 8 months ago

+1 Windows, WSL

owlboy · 8 months ago

Still happening inside the latest Rider on macOS.

curtis-arch · 8 months ago

very much still on mac - Version 15.7.1 (24G231) with CC 2.0.28

juancri · 8 months ago

I noticed that increasing the terminal size mitigates this issue

jeffcovey · 8 months ago

Most of my time with Claude Code now is spent waiting 5-10 minutes until the seizure-inducing light show is done. Nothing I try will make it stop.

waldoalvarez00 · 8 months ago

Seems the bug is in Ink library. I am leaving this here in case it helps to track it down:

https://github.com/vadimdemedes/ink/issues/809

psarno · 8 months ago

Good find. It does seem to be a bug in the Ink library.

Anthropic should just put together a nice cross-platform Python CLI with rich lib or similar.

JSX in Node ... 🙄 The terminal isn't DOM. Square peg, round hole.

0xFlo · 8 months ago

When it "goes nuts" it crashes my entire vscode if I have multiple terminal windows open it's a guarantee that it crashes within the next 20min

waldoalvarez00 · 8 months ago
Most of my time with Claude Code now is spent waiting 5-10 minutes until the seizure-inducing light show is done. Nothing I try will make it stop.

Interferes a lot with work. The user has to wait until all the big mess calms down and in the meanwhile cannot inspect what the model is doing and interfere/guide it if necessary. Is the biggest drawback of Claude Code I have seen. Degrades possible outcome since I am smarter than all those AIs. At least for now. Sometimes I have seen the model take wrong decisions and interfere. Focusing on features and not tackling bugs is a receipt for failure. I use Claude a lot. We are paying Max 5x with the company (I requested it). And totally honest, I could care less about those new features they publish sometimes. What it is now currently working, if didn't had those serious bugs would be great. Of course, would be great to have Opus 4.5 too but that should take a while to train/verify.

atxtechbro · 8 months ago

Investigation Complete: Ink Flickering is an Architectural Limitation

Hey everyone, I've completed a comprehensive investigation of the terminal flickering issue. TL;DR: It's a fundamental architectural limitation of Ink that cannot be fixed with simple patches.

What I Tested

Over 3 days (Nov 1-3, 2025), I tested 6 different approaches across 3 phases:

Phase 1 - Reproduction

Phase 2 - External Fixes

  • OSC 133 sequences → Still flickers
  • bcherny's Ink fork (with OSC133) → Still flickers
  • Ink v3.2.0, v4.0.0, v4.4.1 → All flicker

Phase 3 - Source Code Modifications

  • Built Ink from source
  • Tested 3 different rendering approaches by modifying log-update.ts:
  1. cursorUp + overwrite → Still flickers
  2. Overwrite-only (no clearing) → Still flickers
  3. Line-by-line differential → Still flickers (actually worse)

Success rate: 0/6 (0%)

Why All Fixes Failed

The problem is architectural:

  1. Ink regenerates the complete output on every React state change
  2. Full component tree traversal even when only status line changes
  3. By the time log-update.ts receives output, it's just a string with no context about what changed
  4. Any cursor movement is visible in terminals like tmux

The flickering pattern you see ([2K[1A repeated 60+ times) is Ink moving the cursor up through all 60 lines, erasing and rewriting everything.

What Would Actually Work

From my analysis, only architectural changes would fix this:

Option 2 - Separate StatusLine Component (Most Practical) ✅

  • Create special <StatusLine> component with separate rendering path
  • Use absolute cursor positioning (ESC[{row};{col}H)
  • Update status independently from main content
  • Effort: 200-300 lines of code, 2-3 days
  • Works in tmux: Yes!

This would require changes to Ink itself or a fork.

For Claude Code Team

Short Term:

  • Accept this as a known limitation of Ink
  • Document it for users
  • Consider adding photosensitivity disclaimer

Medium Term:

  • Reduce status update frequency (200ms instead of 100ms)
  • Suggest terminals with better buffering (Kitty, Alacritty)

Long Term:

  • Implement StatusLine component approach (2-3 days)
  • Or migrate to alternative TUI library (Blessed has screen diffing)

Complete Documentation

I've created comprehensive documentation of the entire investigation:

📦 Repository: https://github.com/atxtechbro/test-ink-flickering

📄 Key Documents:

Bottom Line

The flickering cannot be fixed without significant changes to Ink's architecture. Options are:

  1. Accept the limitation (easiest)
  2. Implement StatusLine component (2-3 days, universal fix)
  3. Switch to alternative TUI library (Blessed, Textual, etc.)

Happy to discuss further or help if Claude Code team decides to pursue Option 2!

---

Investigation Date: November 1-3, 2025
Test Environment: tmux + GNOME Terminal, Linux Mint, Node v24.11.0
Approaches Tested: 6 (all failed)

WeathermanTony · 8 months ago

Hell of a try, They should hire you.

On Mon, Nov 3, 2025 at 6:15 PM Morgan Joyce @.***>
wrote:

atxtechbro left a comment (anthropics/claude-code#769) <https://github.com/anthropics/claude-code/issues/769#issuecomment-3482981776> Investigation Complete: Ink Flickering is an Architectural Limitation Hey everyone, I've completed a comprehensive investigation of the terminal flickering issue. TL;DR: It's a fundamental architectural limitation of Ink that cannot be fixed with simple patches. What I Tested Over 3 days (Nov 1-3, 2025), I tested 6 different approaches across 3 phases: Phase 1 - Reproduction ✅ - Created minimal Ink app reproducing the exact flickering - Confirmed it matches Claude Code's behavior - Repository: https://github.com/atxtechbro/test-ink-flickering Phase 2 - External Fixes ❌ - OSC 133 sequences → Still flickers - bcherny's Ink fork (with OSC133) → Still flickers - Ink v3.2.0, v4.0.0, v4.4.1 → All flicker Phase 3 - Source Code Modifications ❌ - Built Ink from source - Tested 3 different rendering approaches by modifying log-update.ts: 1. cursorUp + overwrite → Still flickers 2. Overwrite-only (no clearing) → Still flickers 3. Line-by-line differential → Still flickers (actually worse) Success rate: 0/6 (0%) Why All Fixes Failed The problem is architectural: 1. Ink regenerates the complete output on every React state change 2. Full component tree traversal even when only status line changes 3. By the time log-update.ts receives output, it's just a string with no context about what changed 4. Any cursor movement is visible in terminals like tmux The flickering pattern you see ([2K[1A repeated 60+ times) is Ink moving the cursor up through all 60 lines, erasing and rewriting everything. What Would Actually Work From my analysis, only architectural changes would fix this: Option 2 - Separate StatusLine Component (Most Practical) ✅ - Create special <StatusLine> component with separate rendering path - Use absolute cursor positioning (ESC[{row};{col}H) - Update status independently from main content - Effort: 200-300 lines of code, 2-3 days - Works in tmux: Yes! This would require changes to Ink itself or a fork. For Claude Code Team Short Term: - Accept this as a known limitation of Ink - Document it for users - Consider adding photosensitivity disclaimer Medium Term: - Reduce status update frequency (200ms instead of 100ms) - Suggest terminals with better buffering (Kitty, Alacritty) Long Term: - Implement StatusLine component approach (2-3 days) - Or migrate to alternative TUI library (Blessed has screen diffing) Complete Documentation I've created comprehensive documentation of the entire investigation: 📦 Repository: https://github.com/atxtechbro/test-ink-flickering 📄 Key Documents: - CONCLUSIONS.md <https://github.com/atxtechbro/test-ink-flickering/blob/main/CONCLUSIONS.md> - Executive summary and recommendations - FIX-TESTING.md <https://github.com/atxtechbro/test-ink-flickering/blob/main/FIX-TESTING.md> - All tested fixes with full source code - INK-ANALYSIS.md <https://github.com/atxtechbro/test-ink-flickering/blob/main/INK-ANALYSIS.md> - Complete architectural deep-dive Bottom Line The flickering cannot be fixed without significant changes to Ink's architecture. Options are: 1. Accept the limitation (easiest) 2. Implement StatusLine component (2-3 days, universal fix) 3. Switch to alternative TUI library (Blessed, Textual, etc.) Happy to discuss further or help if Claude Code team decides to pursue Option 2! ------------------------------ Investigation Date: November 1-3, 2025 Test Environment: tmux + GNOME Terminal, Linux Mint, Node v24.11.0 Approaches Tested: 6 (all failed) — Reply to this email directly, view it on GitHub <https://github.com/anthropics/claude-code/issues/769#issuecomment-3482981776>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/A25OH4ND2IIOQRPJSGKJ6VL327HYRAVCNFSM6AAAAAB27OFU62VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTIOBSHE4DCNZXGY> . You are receiving this because you commented.Message ID: @.***>
richardkmichael · 8 months ago

Open Ink PR allowing overflow: 'scroll' on Box. Demo video in a comment..

Should fix flickering (re-render), jumpiness and long scrolling of entire chat on load (initial scroll position).

softwarecatscomgm · 8 months ago

This can also be mitigated by having an command/ mode (similar to ctrl+o for output) which will collapse all task outputs under the task bullet

gorlovka · 8 months ago

keeps flickering, no mode changes helps 2.0.34 version , ubuntu 24.04

norandom · 8 months ago

This bug breaks the entire application.

Pentadome · 8 months ago

Stop releasing new useless features and fix this already

KIYOYOZU · 8 months ago

me too
This problem still persists. When using the VS Code IDE, this happens when outputting red-green code differences.

yadunandan004 · 8 months ago

Same thing while running go unit tests. Happens almost everytime

maeri · 8 months ago

I know you guys are extra busy @bcherny but any updates on this ? thank you

sang-nm · 8 months ago

I have too. Got blink on every terminal with long task. W11.

ulayera · 7 months ago

If Ink is the issue, then why it happens on claude code and not in gemini-cli (both use Ink)?

norandom · 7 months ago
If Ink is the issue, then why it happens on claude code and not in gemini-cli (both use Ink)?

It's not an Ink issue per se. Gemini fixed it intelligently weeks (months?) ago. Google also brought out many new tools, Gemini 3, and guess what... their client is open-source. Vote with your wallet.

SkoricIT · 7 months ago

This literally makes my Claude Code into a flickering black box while processing. This is a serious usability issue.

ruant · 7 months ago

@bcherny @ThariqS @dhollman

rweijnen · 7 months ago

The bigger underlying concern is that it's not addressed nor responded to by Claude team. Seeing this with so many issue and very agressive auto close.

At the very least, acknowledge and tell us if there's a plan to fix @bcherny @ThariqS @dhollman

ulayera · 7 months ago
> If Ink is the issue, then why it happens on claude code and not in gemini-cli (both use Ink)? It's not an Ink issue per se. Gemini fixed it intelligently weeks (months?) ago. Google also brought out many new tools, Gemini 3, and guess what... their client is open-source. Vote with your wallet.

This is your opinion, and it doesn't seem relevant to the bug at hand. As you can see i'm clearly voting with my wallet by trying here.

Although, i should've said "if it's an issue _with_ Ink" instead.

@bcherny @ThariqS @dhollman this needs an urgent fix

qwaiteer · 7 months ago

i can't use claude anymore because of this issue ! this needs an urgent fix

codefromthecrypt · 7 months ago

I wonder if the maintainers aren't aware how serious this is. It can really mess with your eyes, possibly worse for certain folks who have conditions. Choosing health or claude is a bad choice. it shouldn't be like this.

JuanCS-Dev · 7 months ago

Screen Flickering - Accessibility Issue & Duplicate of #826

139 comments. 190 reactions. Reopened because the fix didn't work.

Root Cause (Same as #826)

The "screen flickering" during Claude's "thinking" status is caused by full-buffer redraws every time the spinner/timer updates (~10 times per second).

I've posted detailed technical analysis on #826:
https://github.com/anthropics/claude-code/issues/826#issuecomment-3575434493

Why This Is an Accessibility Problem

Strobe/flashing lights trigger:

  • Photosensitive epilepsy
  • Vestibular disorders
  • Migraine headaches
  • ADHD focus disruption

The rapid flash (10Hz) is in the danger zone for photosensitive seizures (3-70Hz range).

Immediate Mitigation

Option A: Disable Extended Thinking (reduces status updates)

// ~/.claude/config.json
{
  "alwaysThinkingEnabled": false
}

Option B: Terminal with no transparency (reduces flash perception)

# Windows Terminal settings:
{
  "profiles": {
    "defaults": {
      "opacity": 100,  // No transparency
      "useAcrylic": false
    }
  }
}

Option C: Reduce Contrast (makes flashing less harsh)

  • Use dark theme + low-contrast color scheme
  • Reduces visual impact of buffer redraws

Proper Fix (For Anthropic - URGENT)

Add accessibility mode that disables real-time status updates:

// Config option:
{
  "ui": {
    "accessibilityMode": true,  // Disables status spinner
    "statusUpdateInterval": 5000  // Only update every 5s instead of 100ms
  }
}

Or use static status instead of animated:

⏳ Thinking... (10s elapsed)

Instead of animated spinner that triggers redraws.

Why Was This Closed Then Reopened?

The fix in v2.0.x reduced flicker frequency but didn't eliminate it. Users still report issues, hence reopened.

The only true fix is: Stop redrawing the entire buffer. Update ONLY the status line.

Alternative: Headless Mode

For users severely affected:

# Batch mode (no TUI, no flickering):
claude --non-interactive "Your prompt here"

# Or redirect:
echo "Your prompt" | claude > output.txt

---

This affects multiple users with disabilities. Suggest treating as P0 accessibility issue, not just "visual annoyance."

WeathermanTony · 7 months ago

Obviously this was more important. LOL Tip: Use /stickers to order Claude
Code swag

On Tue, Nov 25, 2025 at 7:40 AM Juan C.S. @.***> wrote:

JuanCS-Dev left a comment (anthropics/claude-code#769) <https://github.com/anthropics/claude-code/issues/769#issuecomment-3575453362> Screen Flickering - Accessibility Issue & Duplicate of #826 <https://github.com/anthropics/claude-code/issues/826> 139 comments. 190 reactions. Reopened because the fix didn't work. Root Cause (Same as #826 <https://github.com/anthropics/claude-code/issues/826>) The "screen flickering" during Claude's "thinking" status is caused by full-buffer redraws every time the spinner/timer updates (~10 times per second). I've posted detailed technical analysis on #826 <https://github.com/anthropics/claude-code/issues/826>: #826 (comment) <https://github.com/anthropics/claude-code/issues/826#issuecomment-3575434493> Why This Is an Accessibility Problem Strobe/flashing lights trigger: - Photosensitive epilepsy - Vestibular disorders - Migraine headaches - ADHD focus disruption The rapid flash (10Hz) is in the danger zone for photosensitive seizures (3-70Hz range). Immediate Mitigation Option A: Disable Extended Thinking (reduces status updates) // ~/.claude/config.json { "alwaysThinkingEnabled": false } Option B: Terminal with no transparency (reduces flash perception) # Windows Terminal settings: { "profiles": { "defaults": { "opacity": 100, // No transparency "useAcrylic": false } } } Option C: Reduce Contrast (makes flashing less harsh) - Use dark theme + low-contrast color scheme - Reduces visual impact of buffer redraws Proper Fix (For Anthropic - URGENT) Add accessibility mode that disables real-time status updates: // Config option:{ "ui": { "accessibilityMode": true, // Disables status spinner "statusUpdateInterval": 5000 // Only update every 5s instead of 100ms }} Or use static status instead of animated: ⏳ Thinking... (10s elapsed) Instead of animated spinner that triggers redraws. Why Was This Closed Then Reopened? The fix in v2.0.x reduced flicker frequency but didn't eliminate it. Users still report issues, hence reopened. The only true fix is: Stop redrawing the entire buffer. Update ONLY the status line. Alternative: Headless Mode For users severely affected: # Batch mode (no TUI, no flickering): claude --non-interactive "Your prompt here" # Or redirect:echo "Your prompt" | claude > output.txt ------------------------------ This affects multiple users with disabilities. Suggest treating as P0 accessibility issue, not just "visual annoyance." — Reply to this email directly, view it on GitHub <https://github.com/anthropics/claude-code/issues/769#issuecomment-3575453362>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/A25OH4L4TTRCN5EAZ3C33Z336RE2BAVCNFSM6AAAAAB27OFU62VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTKNZVGQ2TGMZWGI> . You are receiving this because you commented.Message ID: @.***>
ngPati · 7 months ago

@bcherny it's December and the terminal flickers even more. how is that?

<img width="505" height="168" alt="Image" src="https://github.com/user-attachments/assets/4b8cf1eb-f717-4ca8-b81a-5f370c15be9c" />

ngPati · 7 months ago

▐▛███▜▌ Claude Code v2.0.56
▝▜█████▛▘ Opus 4.5 · Claude Max

working like a charm really

https://github.com/user-attachments/assets/2eb614a9-4963-4f73-8a18-b38a1940b1eb

waldoalvarez00 · 7 months ago

I switched to VSCode extension. No flickering. It was nearly impossible to work with terminal. I do still use terminal with servers over SSH and also with WSL but at least some of the flickering is gone for me. VS Code extension seems to lag a little bit vs console version, but still far better on my side. At least I can interfere when the model takes a bad decision. Sometimes it likes to skip over issues or try some workaround like modifying tests to make them pass. And I need to interfere, so it doesn't. Also, extension lets me see the thinking easily and it has some buttons replacing commands.

codefromthecrypt · 7 months ago

the flickering may be not happening in VSCode, but it does happen in JetBrains. It is cool to have alternatives though, so this doesn't dismiss the prior comment.

BigFishDreamWater · 7 months ago

I encountered this issue as well. Then I pulled out the Claude Code separately, enlarged the window to full screen, and that resolved the problem. My version is 2.0.54 (Claude Code).

rweijnen · 7 months ago

At this point the Claude team hasn't shown any interest whatsoever in fixing or even looking at this. Maybe they were hoping to auto close the issue after 30 days - as is the case with most other issues?

Malingisslen · 7 months ago

I haven't been able to really pinpoint when this happens more often but in some sessions it is making the work unsustainable and I have to start a new session and try to prompt claude code to understand what it was doing. Usually this causes me to loose not only time but also significant work which is enfuriating. I feel it tends to be more prominent when in plan mode and when several agents are working in parallell.

Hopefully you will find a solution soon!

ngPati · 7 months ago

I don't really get it, they have the best model, but the cli is a garbage, the desktop app as well (you use it for little time it gets laggy as hell on m1 ultra cpu and then crashes lol)

jasonftl · 7 months ago

Asking Claude Code to do the following recreates the issue for me in a token friendly way:

Run 20 sleep 5 commands in parallel

For me it's to do with Terminal Height. When more than one spinner is active and one of the spinners scrolls off the top of the terminal, it flickers between the two spinners.

--Update 10 Dec 2025--
After further testing, this now only occurs for me within a VS Code terminal window - any type - cmd.exe, Git Bash, PowerShell, WSL etc. The same terminal window, but launched separately to and outside of VS Code, does not have this issue. Even VS Code Insiders (1.107) and VS Code's "external terminal" option exhibit the same flickering.

I believe the root cause is within VS Code's xterm.js terminal emulator and that Claude Code's spinner rendering is a trigger. This may warrant a cross-post to the VS Code repository.

--Update 17 Dec 2025--
Glad to see that Anthropic have come to the same conclusion as me regarding VS Code's xterm.js and are working with the relevant teams to get that updated and fixed. Sadly the latest 2.0.72 version makes things worse; corrupting the display by updating the wrong lines.

mattpodolak · 7 months ago

this issue makes claude code painful to use, finally made the switch to using cursor for AI coding and have 0 regrets

immartian · 7 months ago

agreed, switched to Antigravity to use Claude 4.5 there

caoimhinb · 7 months ago

yeah this is really bad for the eyes

codefromthecrypt · 7 months ago

I think the current approach of everyone (guilty too here) making comments hasn't worked so far. Does anyone have a close connection to anthropic themselves personally, to attempt to raise visibility of this?

aturkelson · 7 months ago

I'm experiencing the same issue in CC 2.0.67 when using the CLI. However, the VSCode extension does not have this problem for me, which has forced me to abandon the CLI for now. I hope this issue gets resolved soon.

TheBloodthirster · 7 months ago

old problem since claude code first version, try many ways to solve still can't fix

chrislloyd collaborator · 7 months ago

The flicker has been one of the most disruptive issues in Claude Code, and we've been working on it for months. Thanks for the reports and videos — they helped us understand what was happening. I know we've been quiet on this thread. We didn't want to share speculative updates while we were still working out the approach.

We've rewritten our rendering system from scratch, reducing offscreen flickers by 85%. The fix has been live for 10% of users now and will be enabled by default in v2.0.72. Here's what causes the flicker, how we're mitigating it, and what's next.

What is the flicker?

Terminals are built on a 50-year-old abstraction: the VT100's escape sequences. There's no scene graph, no retained mode rendering, no way to say "update this element"—just a stream of characters and cursor movements. Every interactive terminal app—Vim, tmux, htop, and now Claude Code—is working within this constraint.

Most people's mental model of a terminal is like a web page: content exists in a long document, the viewport moves up and down over it, and you can edit anywhere. Terminals don't work like that. There's one insertion point (the cursor) you move with escape sequences like \x1b[5;10H (row 5, col 10), then write characters. No DOM, just seek and write.

There are two regions: the viewport (visible grid) and the scrollback buffer (lines that scrolled off the top). The viewport sits at the bottom. When content exceeds the viewport height, the top row gets pushed into scrollback. Scrollback is immutable. The cursor can only move within the viewport; there's no escape sequence to position it in scrollback. When you scroll up to read earlier output, you're viewing a buffer the terminal emulator maintains. The application has no idea you've scrolled and no way to update what you're looking at.

!Diagram showing the viewport fixed at the bottom with scrollback above, and how scrolling moves the window independently

Unlike regular CLI tools that print output and exit, Claude Code is a long-running interactive UI. We redraw permission dialogs, diff views, progress indicators, and input prompts dozens of times per second as state changes. When we render offscreen or the terminal resizes, we have to clear scrollback with \x1b[3J and re-render everything. That's the flicker. 80% of sessions hit at least one, depending on terminal height and UI size.

Offscreen renders: when content scrolls into scrollback and we need to update it, scrollback is immutable so we have to re-render. This is also why scrolling up during a render causes the view to jump.

Resize: we track what we think is on screen and where we think the cursor is (so we can update only what changed), but many things can cause that to diverge from reality. When it does, we have to clear and re-render. Resize your window triggers both cases - the terminal soft-wraps content and moves the cursor, so we have to clear and re-render.

!Diagram showing that changes in scrollback cause flicker, while changes in the viewport don't

We've largely solved offscreen flickers. Resize flickers remain, but they're less frequent.

What we've done

We originally built Claude Code on Ink, a React renderer for the terminal. But Ink's <Static> component creates a hard boundary in your component tree that fights React's model. We kept hitting bugs where updates were suppressed or triggered full redraws. While Ink recently added incremental rendering that rewrites only changed lines, we wanted better performance and more control over the output.

Over the past few months, we've rewritten our rendering system from scratch (while still using React). The core insight: instead of treating scrollback as a problem to recover from, we track it explicitly. We know exactly which cells are in the viewport versus scrollback, so we can update the viewport surgically and only trigger full redraws when we genuinely have no other choice.

The key changes:

  • Cell-based diffing: Instead of comparing lines, we diff individual cells and emit the minimal escape sequences to update only what changed. We track whether content has scrolled into scrollback, and only trigger full redraws when actually necessary.
  • Double buffering: We blit to an offscreen buffer first, then diff against the previous frame to compute the update.
  • Damage tracking: When UI elements shrink or move, we track the "damaged" regions we need to clear.
  • Native CJK and emoji support: We give wide characters explicit spacer cells, keeping the buffer aligned to visual columns.
  • Pending wrap resolution: We use space-backspace rather than newlines to resolve cursor state, which preserves layout while preserving long text for copy/paste.

We also wrap updates in DEC synchronized update sequences (mode 2026). This is a relatively new terminal extension that lets applications signal "I'm in the middle of a frame, don't paint yet." Terminals that support it buffer our output and render atomically, eliminating tearing:

!Diagram showing how synchronized updates buffer terminal output so users see complete frames

The rewrite fixes the worst case. Previously, once content scrolled offscreen, any change, even within the viewport, triggered a full redraw, and you'd stay stuck flickering. It won't eliminate flicker entirely since we fundamentally can't modify content that's in scrollback, but it's a significant improvement. We're also redesigning UI components to be more compact so they stay within the viewport more often. The new question prompts use horizontal tabs instead of tall vertical lists, for example.

Why not use alternate screen mode and virtual scrolling?

This is the most common suggestion we hear, and it's what some other terminal AI tools do.

When you run emacs, less, or htop, the terminal switches to an "alternate screen"—a separate buffer that doesn't interact with scrollback. The program controls everything: scrolling, selection, the works. When you exit, your previous terminal content reappears. This would solve flicker entirely, since there's no scrollback to fight with.

The tradeoff is the native terminal experience. With our current approach, you get Cmd+F search, text selection, and copy/paste that work exactly like the rest of your terminal. In alternate screen mode, we'd have to reimplement all of that. Every app that uses alternate screen has its own keybindings, its own scrolling, its own selection model. You have to learn each one. We want Claude Code to get out of the way between you and our models, not add another UI to master.

We'd rather mitigate flicker than give up that native-feeling experience. This doesn't rule out alternate screen mode in the future, but our bar for it is very high.

Why this took so long

We started with almost no tests to verify rendering. It was humbling: fix something, break something else, revert.

What unblocked us was property-based testing. We wrote tests that rendered components through both the old and new systems, then compared their output using a real terminal emulator (xterm.js). The tests generated thousands of random UI states—different widths, content lengths, Unicode edge cases—and verified the new renderer matched the old one.

With that feedback loop, Claude could really cook.

Going forward

If you're seeing tearing mid-render, try Ghostty, iTerm2, or Windows Terminal (preview build)—these support DEC 2026 synchronized updates.

We can't fix the VT100 legacy ourselves, but we can improve the ecosystem. We're working with the maintainers of xterm.js (which powers VS Code and Cursor) and tmux to add DEC 2026 support. When these patches land, developers using these tools will get flicker-free terminal apps—not just Claude Code.

Now that the rendering rewrite is shipping, we'll be following up with UI changes to keep content within the viewport more often, reducing the situations where offscreen renders are needed in the first place.

---

Thanks again for sticking with us through this. I'm going to close this issue, but feel free to open new issues for specific bugs you encounter.

apdavydenkov · 7 months ago

I'm testing a solution that has practically solved the problem for me. Today I coded and made about 4 compressed ones and didn't get a single manifestation of this bug. If there are some other artifacts, but they don't bother me in any way. In general, what is the essence of the problem. The Claude Code interface is based on React Ink. Not all elements are dynamic. For example, the command menu is dynamic, the TODO sheet, or command execution too. Just text is just text that doesn't cause a problem. But dynamic elements do. If such an element is higher than the window size, then you will get something like an attempt to scroll either to the beginning or to the end, redraw the component and scroll again. Everything is complicated by the large number of animations. All of them cause redrawing and jumps if there are large React Ink components on the screen at that time. On a phone with a small screen, the problem becomes catastrophic. But where I had endless jumping cycles, now I was able to use Claude Code normally. But there are bugs that someone might not like. But as for me, some graphical bugs are better than sometimes a broken application.
I JUST INSTALLED 2.0.72 AND I CONFIDENTLY DECLARE THAT THE PROBLEM HAS NOT BEEN SOLVED AT ALL! MY PHONE IS GOING CRAZY (IT JUST WORKS WITH MY SOLUTION).

jonesnc · 7 months ago

Unfortunately, I'm not seeing much improvement in 2.0.72 on the scrolling issue front either.

rweijnen · 7 months ago

@chrislloyd first of all, thank you for the detailed update. I appreciate that.

I think most of us understand that this is not an easy issue to fix but, at least for me, I still don't understand why there was complete silence. A simple - we are aware of the issue, are taking it seriously but will need time to fix it would have been possible and certainly appreciated.

A quick close of the issue as was attempted an hour ago does not feel appropriate, so good that it's open for comments. Especially as some testers above already report negative on the improvements.

Sadly it feels like not responding to issues, auto closing or closing them after 30 days of ignoring is common practice. Potentially because resources are more focussed on features rather than bug fixing? A great example is the nul file creation issue, which should actually be an easy fix but somehow doesn't get attention.

zackees · 7 months ago

Yeah it seems fixed!!!!!!

THANK YOU!

andrewchen5678 · 7 months ago

It is still happening a lot for me on v2.0.72 to the extent that it crashed visual studio code like before.

marcindulak · 7 months ago

Opened https://github.com/anthropics/claude-code/issues/14393

Update 2025-12-19: the current improvement (2.0.72) does not cover Gnome Terminal.

I still see flickering when Claude Code generates a lot of output: the view appears to jump repeatedly up to the beginning of the session and back to the bottom where Claude appends new output.

Is the fix also expected to cover Claude Code native (2.0.72) on Ubuntu 24.04, with Gnome Terminal Version 3.52.0 for GNOME 46, a terminal emulator for the GNOME desktop, using VTE version 0.76.0 +BIDI +GNUTLS +ICU +SYSTEMD?

Here is the terminal size:

stty size
29 128

https://github.com/user-attachments/assets/cdae709e-bdcd-4dbe-8b42-de81e3b9d801

janbam · 7 months ago

i've got a crazy idea:
add a config item to disable all animations

apdavydenkov · 7 months ago

@yannbam, They won't do it. Bells and whistles come first. I did this and will make it publicly available in a couple of days once I've tested it better.

dimonchoo · 7 months ago

I understand the reasoning behind prioritizing a native terminal experience, and I agree that preserving familiar behaviors like Cmd+F, standard selection, and copy/paste is a real advantage.

That said, have you considered giving users an explicit choice between modes?

You could keep the current default mode exactly as it is — simple, native, and compatible with all terminals. But at the same time, offer an optional alternate-screen / virtual scrolling mode for users who prefer stability over native scrollback, or who are already comfortable with tools like less, htop, or emacs.

This way there’s no forced compromise:
• users who value a native terminal feel keep it,
• users who are bothered by flicker or heavy output can opt into a more controlled UI.

I understand this adds development complexity, but it shifts the tradeoff from the product to the user. In my opinion, that kind of flexibility can significantly improve the perceived quality of the product and make it suitable for a wider range of workflows.

Just an idea — but one that might let Claude Code serve both camps well.

immartian · 7 months ago

It's really much tolerable now at my end.

I read @chrislloyd explanation and do realize it's a problem of archaic terminal concept which never faces such a large scale scenario before.

Maybe Claude can consider to rewrite a Claude Code at this age. Kudos.

apdavydenkov · 7 months ago

I need a couple of people who have awesome problems to test my solution (python script). You can email me at: {my-github-username}@gmail.com

tstambulsky · 7 months ago

It's working better for me now.

artnikbrothers · 6 months ago

and they say, AI will replace all devs

andrewchen5678 · 6 months ago

Very horrible flicker that eventually made visual studio code crash with v2.0.73, please reopen:

(⎈|N/A:N/A)it3@it3s-MacBook-Pro-4 wormhole-rs % claude --version
2.0.73 (Claude Code)
(⎈|N/A:N/A)it3@it3s-MacBook-Pro-4 wormhole-rs % which claude
/Users/it3/.local/bin/claude
(⎈|N/A:N/A)it3@it3s-MacBook-Pro-4 wormhole-rs % ls -l /Users/it3/.local/bin/claude
lrwxr-xr-x@ 1 it3  staff  46 Dec 18 16:23 /Users/it3/.local/bin/claude -> /Users/it3/.local/share/claude/versions/2.0.73
(⎈|N/A:N/A)it3@it3s-MacBook-Pro-4 wormhole-rs % 

https://github.com/user-attachments/assets/83fd96a6-cc29-427a-9228-e87f3a7acc41

Ozzian · 6 months ago

I am having a new issue -- the output gets somehow weirdly center of the screen causing broken sentences and un-readable text

<img width="1251" height="764" alt="Image" src="https://github.com/user-attachments/assets/217701fd-2954-4f13-ab57-656fec2820ea" />

macasas · 6 months ago

Claude Code CLI Gemini CLI and Qwen CLI all come from the same original CLI source. They all have this behaviour in macos Terminal or VS Code integrated terminal.

I switched to iTerm, not only is it faster, the mad scrolling/flickering behaviour has gone, although now I've said that no doubt it will come back :-)

SteveyBoros · 6 months ago

@chrislloyd

Absolute joke of an update. You claim to have fixed the problem, when basic testing shows you haven't and then you close all related issues?

Who even are you people. Open source this and let people actually fix these issues. Stop adding new fancy animations and fix the basic functionality.

It's still an issue natively, and it's still an issue on Windows Terminal (preview). All on 2.0.73

eon-dev1 · 6 months ago

Good work. No more problems for me on ubuntu VS code bash terminal, with the claude "native" installation.

Update: verbose mode needs to be turned off in /config to use agents that read files from the codebase, like Plan or Explore. Verbose mode enabled will cause the flickering still.

andrewchen5678 · 6 months ago

What's claude "native" installation? The one I have with v2.0.73 flickers very bad.

eon-dev1 · 6 months ago
What's claude "native" installation? The one I have with v2.0.73 flickers very bad.

Originally I installed the npm version, but reinstalled with the new option. but it was arouind the same time v2.0.72 was released which fixed most of the issues, and now I'm not getting any at all (so far, hope I don't jinx it).

<img width="861" height="321" alt="Image" src="https://github.com/user-attachments/assets/f3316f95-30ff-4833-a53b-7432311c677a" />

lbds137 · 6 months ago

It's still broken for me.

andrewchen5678 · 6 months ago
> What's claude "native" installation? The one I have with v2.0.73 flickers very bad. Originally I installed the npm version, but reinstalled with the new option. but it was arouind the same time v2.0.72 was released which fixed most of the issues, and now I'm not getting any at all (so far, hope I don't jinx it). <img alt="Image" width="861" height="321" src="https://private-user-images.githubusercontent.com/25285433/528732309-f3316f95-30ff-4833-a53b-7432311c677a.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NjYxODA2MDgsIm5iZiI6MTc2NjE4MDMwOCwicGF0aCI6Ii8yNTI4NTQzMy81Mjg3MzIzMDktZjMzMTZmOTUtMzBmZi00ODMzLWE1M2ItNzQzMjMxMWM2NzdhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUxMjE5VDIxMzgyOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWIwZmNmYWRmYTk1N2QyNmU1NzRmZDE3NTg0NWYwYThlMzcxMWUwYzY4YzU0MTY5MGVmNzUyM2NiMWJhMTRiMjkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.0yXTe2u6jHRTFS8Hzbom8tT4YFAzs3uw6NUhDHKzWes">

I was already using the native version.

(⎈|N/A:N/A)it3@it3s-MacBook-Pro-4 wormhole-rs % claude --version
2.0.73 (Claude Code)
(⎈|N/A:N/A)it3@it3s-MacBook-Pro-4 wormhole-rs % which claude
/Users/it3/.local/bin/claude
(⎈|N/A:N/A)it3@it3s-MacBook-Pro-4 wormhole-rs % ls -l /Users/it3/.local/bin/claude
lrwxr-xr-x@ 1 it3  staff  46 Dec 18 16:23 /Users/it3/.local/bin/claude -> /Users/it3/.local/share/claude/versions/2.0.73
(⎈|N/A:N/A)it3@it3s-MacBook-Pro-4 wormhole-rs % 
brson · 6 months ago

Still an issue, no noticeable improvements, under tmux under alacritty on ubuntu 24.04. Version 2.0.75.

marcindulak · 6 months ago
Still an issue, no noticeable improvements, under tmux under alacritty on ubuntu 24.04. Version 2.0.75.

https://github.com/tmux/tmux/issues/4299#issuecomment-3667976260

codefromthecrypt · 6 months ago

I've not seen any improvement at all in jetbrains. still flickers with latest as of today claude-code

FrostKiwi · 6 months ago

@andrewchen5678

Very horrible flicker that eventually made visual studio code crash with v2.0.73, please reopen:

as mentioned by @chrislloyd in https://github.com/anthropics/claude-code/issues/769#issuecomment-3667315590

We're working with the maintainers of xterm.js (which powers VS Code and Cursor) and tmux to add DEC 2026 support. When these patches land, developers using these tools will get flicker-free terminal apps—not just Claude Code.
chrislloyd collaborator · 6 months ago

Hey folks, sad update - we received reports of an increase in typing latency last week and have rolled this back out of an abundance of caution. It was a difficult decision as we know how annoying the flickering is. I'm still investigating but it likely won't re-land until after the new year.

In the meantime, I recommend either using a modern terminal emulator like Ghostty or making your terminal taller.

Reopening the issue to reflect the current state.

SteveyBoros · 6 months ago
Hey folks, sad update - we received reports of an increase in typing latency last week and have rolled this back out of an abundance of caution. It was a difficult decision as we know how annoying the flickering is. I'm still investigating but it likely won't re-land until after the new year. In the meantime, I recommend either using a modern terminal emulator like Ghostty or making your terminal taller. Reopening the issue to reflect the current state.

You should have re-opened it when everyone told you it wasn't even fixed in the first place.

derspotter · 6 months ago

This is so annoying, makes it unusable after a while.

code-ric · 6 months ago
Hey folks, sad update - we received reports of an increase in typing latency last week and have rolled this back out of an abundance of caution. It was a difficult decision as we know how annoying the flickering is. I'm still investigating but it likely won't re-land until after the new year. In the meantime, I recommend either using a modern terminal emulator like Ghostty or making your terminal taller. Reopening the issue to reflect the current state.

Thanks for the good explanation. Sad though you had to roll back to the previous system for now, but it is how it is. Keep up the great work!

immartian · 6 months ago

I wonder if Anthropic should have an independent coder with two panes(conversation and file viewer with a mini explorer) after all without legacy terminal constraints.

(Conceptual)
<img width="1326" height="843" alt="Image" src="https://github.com/user-attachments/assets/dac64341-d92a-4701-86ce-3cc442045364" />

mehulparmariitr · 6 months ago

Its not solved yet, even while typing it keeps on scrolling to top and coming back

mehulparmariitr · 6 months ago
Hey folks, sad update - we received reports of an increase in typing latency last week and have rolled this back out of an abundance of caution. It was a difficult decision as we know how annoying the flickering is. I'm still investigating but it likely won't re-land until after the new year. In the meantime, I recommend either using a modern terminal emulator like Ghostty or making your terminal taller. Reopening the issue to reflect the current state.

Can intellij be configured to use a different terminal instead of their default?
https://ghostty.org/download

marcindulak · 6 months ago

Ghostty hepled me a bit (I'm not in intellij), but I'm still getting some flickering https://github.com/anthropics/claude-code/issues/14393#issuecomment-3694563673, so Ghostty is not a complete solution.

mehulparmariitr · 6 months ago
Ghostty hepled me a bit (I'm not in intellij), but I'm still getting some flickering #14393 (comment), so Ghostty is not a complete solution.

That's unfortunate. Are there any standalone terminals that can solve this issue? And is it possible to replace IntelliJ's default terminal with a third-party app?

gaborbernat · 6 months ago
And is it possible to replace IntelliJ's default terminal with a third-party app?

No.

develar · 6 months ago

Disclaimer: This is not an official JetBrains answer, and I am not a representative.

Claude Code is one of the best tools for AI-based development, and at JetBrains, we have developers who use solely AI-based development, without manual coding. Even for a monorepo with 2M files and core-level tasks.

Given this, you can expect a fix for the terminal flickering issue in IntelliJ IDEA soon. I do my best to prioritize fixing this issue. I am not an official representative, but I would like to apologise for the current situation and the non-delivery of the fix in a timely manner.

Froredion · 6 months ago
If Ink is the issue, then why it happens on claude code and not in gemini-cli (both use Ink)?

I looked into why flickering occurs in Claude Code but not in Gemini CLI, even though both use Ink.

Key finding: both have issues, and the difference comes from the Ink forks they use and how they work.

  • Gemini CLI (Jacob’s fork): append-only rendering + alternate buffer (disabled by default, but works when enabled)

→ never erases lines (uses line-based diffing instead) → no blank frames → no flicker

  • Claude Code (bcherny fork): DEC atomic updates

→ works only on some terminals

  • Claude Code rewrite (later reverted): cell-based diffing + double buffer

→ reduced flicker but introduced latency

Terminals already overwrite characters in-place, so Gemini’s approach avoids calling erase entirely for alternate buffer approach only, that’s why it feels smoother. Claude Code still erases + redraws lines, which is what causes visible flashes.

Why Gemini CLI is smoother

  1. alternate buffer aand incremental rendering (disabled by default)
  2. core fix is never render more lines than the terminal has rows, but also is not enough as they're actively trying to fix it too: https://github.com/google-gemini/gemini-cli/issues/10673

Bottom line:

This one needs to be brought to the war room, the bug has grown its own army, and some of its spies are already on Claude's side 😄

On a serious note: I don’t have access to the Claude Code real dev repo, so I can’t dig deeper or comment directly. The real rationale would be clearer to the Claude Code maintainers.

Their initial fix was smart, but it likely wasn’t narrowed or optimized enough, which caused additional bugs across different terminals.

FrostKiwi · 6 months ago

@Froredion Please don't start 2026 with AI Slop.

On a serious note: I don’t have access to the Claude Code repo, so I can’t dig deeper or comment directly.

~~This literally is the repo~~

Froredion · 6 months ago
This literally is the repo

The real dev repo is closed-source, this repo only consists of plugins and documentations.

here's the minified version from npmjs but beautified: (426K+ lines because it's closed source)

<img width="886" height="262" alt="Image" src="https://github.com/user-attachments/assets/7a9894c4-23ba-4d3f-a9b6-ecf4e55af7cd" />

nsaulnier-ti · 6 months ago
FrostKiwi · 6 months ago
The real dev repo is closed-source, this repo only consists of plugins and documentations.

Huh, you are right. I thought it was open source 🤔
Should have actually looked into it before commenting, sorry 😔

Your AI response mentioned

Why Gemini CLI is smoother - alternate buffer

In https://github.com/anthropics/claude-code/issues/769#issuecomment-3667315590 the devs mentioned that they avoiding this on purpose:

### Why not use alternate screen mode and virtual scrolling? This is the most common suggestion we hear, and it's what some other terminal AI tools do. [...] We'd rather mitigate flicker than give up that native-feeling experience. This doesn't rule out alternate screen mode in the future, but our bar for it is very high.
mehulparmariitr · 6 months ago
Disclaimer: This is not an official JetBrains answer, and I am not a representative. Claude Code is one of the best tools for AI-based development, and at JetBrains, we have developers who use solely AI-based development, without manual coding. Even for a monorepo with 2M files and core-level tasks. Given this, you can expect a fix for the terminal flickering issue in IntelliJ IDEA soon. I do my best to prioritize fixing this issue. I am not an official representative, but I would like to apologise for the current situation and the non-delivery of the fix in a timely manner.

At this point, I have greater confidence that JetBrains will be able to help resolve this issue more promptly than the Claude team. That said, this raises a concern specific to JetBrains products: in standalone terminals such as Ghostty or iTerm2, the issue occurs far less frequently. Despite JetBrains indicating that the terminal has been reworked, it continues to exhibit noticeable flickering when compared to other terminal solutions.

I have created a YouTrack issue to track this behavior:
https://youtrack.jetbrains.com/issue/IJPL-226186

saidgraphic-gif · 6 months ago

Workaround: Debounce Terminal Output (50ms)

I found a workaround for this flickering issue when embedding Claude Code in an xterm.js terminal (Electron app).

The Problem

Claude Code updates the status bar thousands of times per second during response generation. xterm.js renders each update immediately, causing rapid repaints and visible flickering.

The Solution

Instead of writing PTY output directly to xterm.js, debounce with 50ms delay:

let outputBuffer = '';
let flushTimeout = null;
const BATCH_DELAY = 50; // ms - wait for "pause" in output

ptyProcess.onData(data => {
outputBuffer += data;

// Reset timer on each chunk - only render after 50ms of silence
if (flushTimeout) clearTimeout(flushTimeout);

flushTimeout = setTimeout(() => {
if (outputBuffer && terminal) {
terminal.write(outputBuffer);
outputBuffer = '';
}
flushTimeout = null;
}, BATCH_DELAY);
});

Why It Works

  • Coalesces thousands of rapid updates into single atomic renders
  • 50ms delay is imperceptible to humans
  • Eliminates flickering completely

What Didn't Work

  • requestAnimationFrame batching (16ms) - still too fast
  • DEC 2026 Synchronized Output (\x1b[?2026h) - xterm.js doesn't support it
  • CSS backdrop-filter: blur() - didn't mask the visual flicker

Environment

  • xterm.js v5.5.0 with WebGL addon
  • Electron 33.x
  • macOS (likely works on other platforms too)

Hope this helps others experiencing the same issue!

saidgraphic-gif · 6 months ago

I found a solution that fixes typing latency while keeping the debounce for flickering:

The key insight: Flush the output buffer immediately on any keypress, but keep debouncing PTY output.

let outputBuffer = '';
let flushTimeout = null;
const BATCH_DELAY = 50;

function flushOutputBuffer() {
if (flushTimeout) {
clearTimeout(flushTimeout);
flushTimeout = null;
}
if (outputBuffer && terminal) {
terminal.write(outputBuffer);
outputBuffer = '';
}
}

// Flush on input BEFORE sending to PTY
terminal.onData(data => {
flushOutputBuffer(); // ← This is the fix
ptyProcess.write(data);
});

// Keep debounce for output
ptyProcess.onData(data => {
outputBuffer += data;
if (flushTimeout) clearTimeout(flushTimeout);
flushTimeout = setTimeout(flushOutputBuffer, BATCH_DELAY);
});

Result: Typing responsive, ESC works instantly, no flickering.

Tested with 3 parallel Haiku agents - works perfectly.

psarno · 6 months ago

Do you have a reliable test case to induce the flickering every time in the official package?

I made an all-in-one patch using your proposal (which seems sound) + the latency for the typing but I can't do an A/B comparison because I don't have a repro that flickers 100% of the time in the official package.

I do experience it - I just can't reproduce it which makes it difficult.

Even the sub-agents in long contexts will not always exhibit the flickering for me.

marcindulak · 6 months ago
Do you have a reliable test case to induce the flickering every time in the official package? I made an all-in-one patch using your proposal (which seems sound) + the latency for the typing but I can't do an A/B comparison because I don't have a repro that flickers 100% of the time in the official package. I do experience it - I just can't reproduce it which makes it difficult. Even the sub-agents in long contexts will not always exhibit the flickering for me.

I have this reproduction example https://github.com/anthropics/claude-code/issues/14393, but it's for Ubunt/Gnome (still flickers with Claude Code 2.0.76), I don't know whether it induces flickering in xterm.js.

SteveBronder · 6 months ago

^Also still flickering on 2.0.76 when spinning up multiple subagents with the task tool in a vscode terminal. Here is my sysinfo. I'm not sure if this should be a seperate issue or not, happy to make one.

Environment:
Claude Code Version: 2.0.76 (Claude Code)
Terminal: VS Code integrated terminal
VS Code Version: 1.107.1 994fd12f8d3a5aa16f17d42c041e5809167e845ax64
OS: Linux 1e7447199c77 6.8.0-88-generic #89-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 01:02:46 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
TERM: xterm-256color
TERM_PROGRAM: vscode
Shell: bash
Dockerfile: [link]
Description:
When Claude spawns subagents via the Task tool, the terminal experiences noticeable screen flickering. This is especially pronounced when multiple agents are launched in parallel or in quick succession.

Steps to Reproduce:

  1. See the gist here for the vscode dev container setup
  2. In a new directory, open vscode and put the files in the gist above into a .devcontainer directory
  3. Built the container in vscode
  4. Start the container
  5. Open a terminal from within vscode
  6. Call reproduce-flickering.sh, or start claude and ask it to spawn 3 subagents to do different tasks
  7. Observe screen flickering/redrawing during agent initialization and execution

Expected Behavior:
Smooth terminal output without flickering when agents are spawned.

Actual Behavior:
Screen flickers/redraws repeatedly as each subagent initializes, causing visual disruption and making it difficult to follow output.

One easy fix for this is to tell claude to run subagents in the background by default.

chester0 · 6 months ago

also getting flickering

kion · 6 months ago

Still experiencing an overwhelming amount of flickering in IntelliJ IDEA / Android Studio with Claude Code 2.0.76 - this often makes it nearly unusable. Hope this gets fixed soon (although it's not just CC issue in this case - JetBrains needs to fix their terminal).

derspotter · 6 months ago

The issue is absolutely devastating. All the VSCode forks have this massive problem. Only Ghostty helps a lot.

privitera · 6 months ago

@chrislloyd can we get an update?

I have personally looked into this multiple times over the last ~6 months, and there has been surprisingly little change. The internal team (which presumably uses CC all day, every day) must be experiencing this bug. It is extremely surprising that there has been zero communication around workarounds or recommended terminal configuration.

The CC CLI uses the Ink [cc @vadimdemedes] + React rendering pipeline.

What is happening

1. Flicker detection (telemetry)

onFlicker: (G, Z, Y, J) => {
  if (J === "resize") return; // Ignore resize-caused flicker
  let X = Date.now();
  if (X - Q < 1000) // If flicker within 1 second
    n("tengu_flicker", { // Log telemetry event
      desiredHeight: G,
      actualHeight: Z,
      ink2Enabled: Y,
      reason: J
    });
  Q = X;
}

Flicker is explicitly tracked as telemetry (tengu_flicker), but not addressed.

2. Render throttling exists

this.scheduleRender = A.debug
  ? this.onRender
  : dp1(this.onRender, 32, { leading: true, trailing: true })
  • dp1 is a throttle function
  • 32ms is approximately a 30fps cap
  • Each render still clears the entire terminal

3. The actual problem

if (Z.type === "clearTerminal")
  this.options.onFlicker?.(B.outputHeight, B.rows, ...)

Every render that requires a layout change triggers clearTerminal - which causes flicker.

The 30fps throttle does not help because even at 30fps, clearing and redrawing the entire buffer (including scrollback) results in visible flashing. This is especially severe during streaming when tokens arrive rapidly.

Proposed fix

Use Ink's <Static> component to commit historical messages so they are never re-rendered. Only new content should be drawn.

// Current (inferred): All messages re-render on every state change
{messages.map(msg => <Message key={msg.id} {...msg} />)}

// Fix: Historical messages committed to terminal buffer
<Static items={historicalMessages}>
  {msg => <Message key={msg.id} {...msg} />}
</Static>
<CurrentStreamingMessage />

This avoids clearing previously-rendered output and eliminates the flicker entirely.

Feature request: Visual-only clear

Neither /clear nor /compact address this issue - both end the current session.

A new command (e.g., /wipe, /flush, /visual-clear, or /reset-view) would help:

  • Clear rendered messages from terminal buffer
  • Keep full conversation context in memory
  • Conversation continues seamlessly
  • Effectively resets the render state without losing context

This would provide immediate relief without requiring architectural changes to the rendering pipeline. Users could invoke it when flicker becomes severe, continuing their work without losing conversation history.

Related issues

  • #3648 - Terminal Scrolling Uncontrollably During Claude Code Interaction
  • #7276 - VS Code Terminal Flickering and Crash During Long Conversations
  • #9935 - Excessive scroll events (4,000-6,700 scrolls/second)
  • #10794 - Critical: Terminal Flickering Causes Complete VSCode Crashes
  • #4851 - Scrollback Buffer Rewind Lag After Extended Use

Alternative approaches

For reference, OpenAI's Codex CLI uses Rust + ratatui instead of Ink. ratatui employs double-buffering with cell-level diffs - it tracks which terminal cells have changed between frames and only updates those, rather than clearing and redrawing the entire buffer.

This is a well-established pattern for flicker-free TUI rendering. I've implemented similar dirty-tracking / cell-diff approaches in TUIs from scratch and can confirm it eliminates flicker entirely, even with high-frequency updates.

The fundamental issue isn't terminal speed or throttling - it's the architectural choice to clear and redraw everything on each render.

Environment

  • Claude Code version: 2.0.76
  • Analysis performed on npm package @anthropic-ai/claude-code@2.0.76
privitera · 6 months ago

@Froredion where do you see that Codex uses Ink? I looked into it and determined that Codex uses Rust+ratatui.

Froredion · 6 months ago
@Froredion where do you see that Codex uses Ink? I looked into it and determined that Codex uses Rust+ratatui.

I'm the wrong guy to mention, I've never mentioned Codex, apologies.

mdc-git · 6 months ago

@chrislloyd

As much as I appreciate your efforts on the VSCode/Xterm front,

making your terminal taller

isn't a solution at all. On the other hand, I can confirm that Ghostty has zero issues.

MelGrubb · 6 months ago

I use the terminal in my IDE (Rider), mainly because it makes it easy to keep multiple conversations on multiple worktrees separated from each other. The problem is this issue. The terminal absolutely loses its mind multiple times per day, and it's supremely irritating. You'd better hope an epileptic programmer never has to Type here to tell Claude what to do differently because WOW does that get flashy.

tl;dr - Claude is great. This bug makes interacting with Claude into a nightmare.

mehulparmariitr · 6 months ago

At least IntelliJ has committed to resolving the issue by enabling support for the Synchronized Output Mode terminal emulator feature in the IntelliJ Terminal by the end of January. In contrast, the Claude engineers have not provided any response or ETA so far.

Reference:
https://youtrack.jetbrains.com/issue/IJPL-226186#focus=Comments-27-13159558.0-0

mehulparmariitr · 6 months ago

Is something fixed in 2.1.1 released version?

jasonftl · 6 months ago

I tried to upgrade xterm.js in VSCode to see if that would resolve the flickering. Now I'm not a hardened dev but do tinker a lot so please consider E&OE.

VSCode's integrated terminal appears to use xterm.js 5.6.0-beta.136, which I understand does not support synchronised output (DEC private mode 2026) but xterm.js 6.0.0 added support for this (https://github.com/xtermjs/xterm.js/pull/5453)

I built a custom xterm.js 6.0.0 and replaced VSCode's bundled version at: C:\Program Files\Microsoft VS Code\resources\app\node_modules\@xterm\xterm\lib\xterm.js

VSCode didn't immediately spit it out (=== XTERM 6.0.0 CUSTOM === seen in dev console)

but... the flickering persists

It seems that although xterm.js 6.0.0 supports synchronised output Claude Code does not take advantage of it.

Claude Code (or its Ink rendering layer) also needs to be updated to use DEC private mode 2026:

CSI ? 2026 h (begin synchronised update)
[...screen updates...]
CSI ? 2026 l (end synchronised update)

marcindulak · 6 months ago
I tried to upgrade xterm.js in VSCode to see if that would resolve the flickering. Now I'm not a hardened dev but do tinker a lot so please consider E&OE. VSCode's integrated terminal appears to use xterm.js 5.6.0-beta.136, which I understand does not support synchronised output (DEC private mode 2026) but xterm.js 6.0.0 added support for this (xtermjs/xterm.js#5453) I built a custom xterm.js 6.0.0 and replaced VSCode's bundled version at: C:\Program Files\Microsoft VS Code\resources\app\node_modules@xterm\xterm\lib\xterm.js VSCode didn't immediately spit it out (=== XTERM 6.0.0 CUSTOM === seen in dev console) but... the flickering persists It seems that although xterm.js 6.0.0 supports synchronised output Claude Code does not take advantage of it. Claude Code (or its Ink rendering layer) also needs to be updated to use DEC private mode 2026: CSI ? 2026 h (begin synchronised update) [...screen updates...] CSI ? 2026 l (end synchronised update)

https://github.com/anthropics/claude-code/issues/769#issuecomment-3688503436 says

... we received reports of an increase in typing latency last week and have rolled this back out ...

It's not clear what got "rolled back", because there seem to be no trace in the changelog (up to and including 2.0.76) of rolling back the functionality that reduced flickering, introduced in 2.0.72.

https://github.com/anthropics/claude-code/blob/553d6ffc3e2a2b719c501d56a062560c5ce23b54/CHANGELOG.md?plain=1#L179

The changelog management needs improvement (see e.g., https://github.com/anthropics/claude-code/issues/15134, https://github.com/anthropics/claude-code/issues/16809, and older issues about changelog management).

jasonftl · 6 months ago

I ran 2.0.72 with xterm 6.0.0 in vscode and...

npx @anthropic-ai/claude-code@2.0.72

...the latency was awful and the flicker still there. :-(

seanGSISG · 6 months ago

Just adding my experience here: switching to WezTerm completely resolved the flickering issues for me and is fully compliant with the DEC 2026 synchronized updates as mentioned by @chrislloyd https://github.com/anthropics/claude-code/issues/769#issuecomment-3667315590.

I use VSCode and an external WezTerm with /ide set to VSCode

Environment:
Host: Windows (Native install)
Guest: WSL2 (Running Claude Code)

Setup:

  1. Install WezTerm on Windows.
  2. Place the .wezterm.lua file in your %USERPROFILE% directory.
  3. Update the default_domain in the config below to match your WSL distribution name (e.g., Ubuntu-24.04 or Ubuntu).

The config works great out of the box, but I've included my personal .lua which includes a specific fix for Claude Code multiline input (mapping Shift+Enter to send ESC + LF) which has apparently also been fixed in the latest update.

local wezterm = require 'wezterm'
local config = wezterm.config_builder()
local act = wezterm.action

-- ============================================
-- PROFILES / DOMAINS
-- ============================================

-- WSL domains (auto-detected)
config.wsl_domains = wezterm.default_wsl_domains()

-- Default to WSL Ubuntu
config.default_domain = 'WSL:Ubuntu-24.04'

-- Launch menu for profile switching (LEADER + Space)
config.launch_menu = {
  {
    label = 'WSL Ubuntu',
    args = { 'wsl.exe', '-d', 'Ubuntu-24.04' },
  },
  {
    label = 'PowerShell 7',
    args = { 'pwsh.exe', '-NoLogo' },
  }

-- ============================================
-- APPEARANCE / THEME
-- ============================================

-- Catppuccin Mocha theme
config.color_scheme = 'Catppuccin Mocha'

-- Font configuration
config.font = wezterm.font_with_fallback {
  { family = 'JetBrains Mono', weight = 'Medium' },
  { family = 'Cascadia Code' },
  'Segoe UI Emoji',
  'Noto Color Emoji',
}
config.font_size = 11.0

-- Window settings
config.initial_cols = 120
config.initial_rows = 30
config.window_padding = {
  left = 12,
  right = 12,
  top = 12,
  bottom = 12,
}

-- Windows 11 Acrylic transparency
config.window_background_opacity = 0.92
config.win32_system_backdrop = 'Acrylic'

-- Tab bar styling
config.use_fancy_tab_bar = true
config.hide_tab_bar_if_only_one_tab = true
config.tab_bar_at_bottom = false
config.tab_max_width = 25

config.window_frame = {
  font = wezterm.font { family = 'Segoe UI', weight = 'Bold' },
  font_size = 10.0,
  active_titlebar_bg = '#1e1e2e',
  inactive_titlebar_bg = '#181825',
}

config.colors = {
  tab_bar = {
    inactive_tab_edge = '#45475a',
  },
}

-- ============================================
-- KEYBINDINGS
-- ============================================

-- Leader key: CTRL+A (tmux-style)
config.leader = { key = 'a', mods = 'CTRL', timeout_milliseconds = 1000 }

config.keys = {
  -- Pane splitting (tmux-style)
  { key = '|', mods = 'LEADER|SHIFT', action = act.SplitHorizontal { domain = 'CurrentPaneDomain' } },
  { key = '-', mods = 'LEADER', action = act.SplitVertical { domain = 'CurrentPaneDomain' } },

  -- Pane navigation (vim-style)
  { key = 'h', mods = 'LEADER', action = act.ActivatePaneDirection 'Left' },
  { key = 'j', mods = 'LEADER', action = act.ActivatePaneDirection 'Down' },
  { key = 'k', mods = 'LEADER', action = act.ActivatePaneDirection 'Up' },
  { key = 'l', mods = 'LEADER', action = act.ActivatePaneDirection 'Right' },

  -- Pane resizing
  { key = 'H', mods = 'LEADER|SHIFT', action = act.AdjustPaneSize { 'Left', 5 } },
  { key = 'J', mods = 'LEADER|SHIFT', action = act.AdjustPaneSize { 'Down', 5 } },
  { key = 'K', mods = 'LEADER|SHIFT', action = act.AdjustPaneSize { 'Up', 5 } },
  { key = 'L', mods = 'LEADER|SHIFT', action = act.AdjustPaneSize { 'Right', 5 } },

  -- Pane zoom toggle
  { key = 'z', mods = 'LEADER', action = act.TogglePaneZoomState },

  -- Close pane
  { key = 'x', mods = 'LEADER', action = act.CloseCurrentPane { confirm = true } },

  -- Tab management
  { key = 'c', mods = 'LEADER', action = act.SpawnTab 'CurrentPaneDomain' },
  { key = 'n', mods = 'LEADER', action = act.ActivateTabRelative(1) },
  { key = 'p', mods = 'LEADER', action = act.ActivateTabRelative(-1) },

  -- Launcher menu (profile switcher)
  { key = 'Space', mods = 'LEADER', action = act.ShowLauncher },

  -- Quick domain switching
  { key = 'w', mods = 'LEADER', action = act.ShowLauncherArgs { flags = 'FUZZY|WORKSPACES|DOMAINS' } },

  -- Copy mode (vim-style)
  { key = '[', mods = 'LEADER', action = act.ActivateCopyMode },

  -- Copy/paste
  { key = 'c', mods = 'CTRL|SHIFT', action = act.CopyTo 'Clipboard' },
  { key = 'v', mods = 'CTRL|SHIFT', action = act.PasteFrom 'Clipboard' },

  -- Font size
  { key = '+', mods = 'CTRL|SHIFT', action = act.IncreaseFontSize },
  { key = '-', mods = 'CTRL', action = act.DecreaseFontSize },
  { key = '0', mods = 'CTRL', action = act.ResetFontSize },

  -- Command palette
  { key = 'P', mods = 'CTRL|SHIFT', action = act.ActivateCommandPalette },

  -- Shift+Enter sends ESC + LF (for Claude Code multiline input)
  { key = 'Enter', mods = 'SHIFT', action = act.SendString '\x1b\x0a' },
}

-- Tab switching with ALT+1-9
for i = 1, 9 do
  table.insert(config.keys, {
    key = tostring(i),
    mods = 'ALT',
    action = act.ActivateTab(i - 1),
  })
end

-- ============================================
-- ADVANCED SETTINGS
-- ============================================

-- Scrollback
config.scrollback_lines = 10000

-- Cursor
config.default_cursor_style = 'BlinkingBar'
config.cursor_blink_rate = 500
config.cursor_blink_ease_in = 'Constant'
config.cursor_blink_ease_out = 'Constant'

-- Bell
config.audible_bell = 'Disabled'
config.visual_bell = {
  fade_in_duration_ms = 75,
  fade_out_duration_ms = 75,
  target = 'CursorColor',
}

-- GPU rendering
config.front_end = 'WebGpu'
config.webgpu_power_preference = 'HighPerformance'

-- Quick select patterns (CTRL+SHIFT+Space)
config.quick_select_patterns = {
  '[0-9a-f]{7,40}',  -- git hashes
  'https?://\\S+',   -- URLs
  '/[\\w./-]+',      -- file paths
}

-- Hyperlink rules
config.hyperlink_rules = wezterm.default_hyperlink_rules()

-- Window close confirmation
config.window_close_confirmation = 'AlwaysPrompt'

-- ============================================
-- STATUS BAR
-- ============================================

wezterm.on('update-right-status', function(window, pane)
  local date = wezterm.strftime '%H:%M'
  local domain = pane:get_domain_name()

  window:set_right_status(wezterm.format {
    { Foreground = { Color = '#89b4fa' } },
    { Text = domain .. '  ' },
    { Foreground = { Color = '#a6adc8' } },
    { Text = date .. ' ' },
  })
end)

return config
adamtaylor13 · 6 months ago

At this point, I'd greatly prefer typing latency over this bug. When this bug happens, I cannot use iTerm 2—at all. I can't swap panes, I can't move tabs, I can't even hit "Cmd+," to open my settings. It just freezes the entire terminal until it's done thrashing.

I can work-around by editing my prompts in vim until the typing latency is fixed. Is there a way I can run the version that had the flickering fix in it?

Side question: This just got worse within the last ~48 hours—did something ship that changed this significantly?

SteveyBoros · 6 months ago

Honestly, this is a joke at this point.
The latest "we're banning the use of third party clients" is the final straw.

We use those third party clients because yours is literally unusable when bugs like this exist. Then you gaslight us by saying "it's fixed" and then you close the issue.

It's not fixed, nor has it ever been fixed.

scottshambaugh · 6 months ago

Still happening here on WSL in a cursor terminal.

Heziode · 6 months ago
saadnvd1 · 6 months ago

Still happening on iTerm2 Claude Code 2.1.5

kajeagentspi · 6 months ago

Happening on ghostty as well

mgoulet101 · 6 months ago

Anyone else seeing this improved in 2.1.6?

My setup: Windows, vscode 1.108.0, CC vscode extension 2.1.6, CC 2.1.6, claude running in a powershell in a vscode terminal.

I've been using 2.1.6 all morning and can see more colorful diffs and zero flickering - something has definitely changed. At one point I had concurrent tasks running/updating off-screen above the viewport where I'm pretty sure flickering would have occurred. I even scrolled up at one point to look at a large diff while things were happening below (off screen) and it behaved... sanely. Too good to be true?

brupelo · 6 months ago
Anyone else seeing this improved in 2.1.6? My setup: vscode 1.108.0, CC vscode extension 2.1.6, CC 2.1.6, claude running in a powershell in a vscode terminal. I've been using 2.1.6 all morning and can see more colorful diffs and zero flickering - something has definitely changed. At one point I had concurrent tasks running/updating off-screen above the viewport where I'm pretty sure flickering would have occurred. I even scrolled up at one point to look at a large diff while things were happening below (off screen) and it behaved... sanely. Too good to be true?

Still not fixed properly on 2.0.76.

On Windows Terminal with multi-layout Docker containers, flickering happens constantly (fullscreen, resizing, layout changes). More importantly, the UI flickers on every keystroke while typing (e.g. when typing a command). This makes normal use almost impossible and often requires restarting the process, clearing the terminal, or even closing and recreating the tab to recover.

EricPaulson · 6 months ago
> Anyone else seeing this improved in 2.1.6? > My setup: vscode 1.108.0, CC vscode extension 2.1.6, CC 2.1.6, claude running in a powershell in a vscode terminal. > I've been using 2.1.6 all morning and can see more colorful diffs and zero flickering - something has definitely changed. At one point I had concurrent tasks running/updating off-screen above the viewport where I'm pretty sure flickering would have occurred. I even scrolled up at one point to look at a large diff while things were happening below (off screen) and it behaved... sanely. Too good to be true? Still not fixed properly on 2.0.76. On Windows Terminal with multi-layout Docker containers, flickering happens constantly (fullscreen, resizing, layout changes). More importantly, the UI flickers on every keystroke while typing (e.g. when typing a command). This makes normal use almost impossible and often requires restarting the process, clearing the terminal, or even closing and recreating the tab to recover.

Exact same issue here on WSL2 in Windows Terminal. Constant flickering - almost impossible to use.

derspotter · 6 months ago
Anyone else seeing this improved in 2.1.6? My setup: Windows, vscode 1.108.0, CC vscode extension 2.1.6, CC 2.1.6, claude running in a powershell in a vscode terminal. I've been using 2.1.6 all morning and can see more colorful diffs and zero flickering - something has definitely changed. At one point I had concurrent tasks running/updating off-screen above the viewport where I'm pretty sure flickering would have occurred. I even scrolled up at one point to look at a large diff while things were happening below (off screen) and it behaved... sanely. Too good to be true?

It might be the new VS Code 108 though. I just saw in the changelogs that they worked on the terminal.

jbeckton · 6 months ago

Windows terminal Claude Code 2.1.6 is still a problem with scroll, sometimes it gets so bad, even when I scroll back to the prompt when I type it just scrolls back to the top on every key press.

Claude Desktop with Claude Code enabled has a memory leak or something as it becomes unusable after about 30 minutes.

I'm paying $100 a month for Tools that I can even use.

mgoulet101 · 6 months ago

@derspotter might be right. I've been using CC all day now on some pretty involved chores in vscode 1.108 and there is basically no flicker. I can shrink the vertical height of the terminal to be very narrow and still no flicker. It seems too good to be true. Yes apparently vscode 108 added support for "synchronized output'" mode in the terminal, but I keep reading that CC does not support that protocol yet.

privitera · 6 months ago

I have noticed that a very consistent way to trigger this issue is by using agents in verbose mode.

They have decided to be cute and put a little blinking Unicode bullet to the left of the agent's response which triggers the refresh storm if it scrolls beyond the top of the active terminal window.

Can we have a --no-animations flag?

thegeosman · 6 months ago

Happening on Ubuntu till today. Come on folks, should we fixed already, use claude code to fix itself.

mehulparmariitr · 6 months ago

IntelliJ has released a preview build with a fixed terminal that supports synchronized output mode.

Please test this build and share your feedback to them.

Reference: https://youtrack.jetbrains.com/issue/IJPL-204106/Terminal-flickers-when-running-interactive-programs-like-Claude-Code#focus=Comments-27-13182068.0-0

jbeckton · 6 months ago

After getting tired of the Claude Code scrolling and flickering issues, I discovered a few GitHub issue threads by users complaining about these same issues I am having. Anthropic is a billion-dollar company and they cannot figure out how to build tools without major useability issues. I decided to try OpenCode for the first time and WOW what an improvement! All I had to do was log into my GitHub Copilot account that I was already paying for, I boosted to the Pro+ plan, and I get all the Anthropic models plus a bunch more and I can easily toggle to them within the same session.

I'm not sure what my typical usage will cost me while using the Copilot models, but I bet the $100 a month I have been sending Anthropic will go a long way in Copilot. I love Claude and Opus but the tools from Anthropic are a major disappointment.

I'll give OpenCode and Copilot a serious try while sending my monthly AI budget to GitHub rather than Anthropic and see how it pans out.

zinglax · 6 months ago

⚠️ WARNING: INDUCES SEIZURES

privitera · 6 months ago

I posted an analysis last week, but to bring it back to this specific issue: stop trying to update animated elements that have scrolled into the immutable scrollback buffer

kpe · 6 months ago

i still have the issue in claude-code 2.1.7 on fedora in alacritty (since months) no (plan) to fix yet? The issue is really annoying

unr · 6 months ago

This is horrid, and the number one reason I miss using OpenCode.

fxmarty-amd · 6 months ago

Any update regarding this?

jcredland · 6 months ago

Surely this can't be that hard to fix by a team who brought us Opus :). Come on guys it's AWFUL :)

foxfirecodes · 6 months ago

before you post...

tldr - let's not spam this thread more!

as much as this is a frustrating issue I think it's counterproductive to continue to spam posts about how upset we are and how they should be doing better. the point has been made, so unless you have something to contribute towards actually solving the issue (like this very helpful comment that gives an actual clue to the problem) i suggest you reconsider posting.

this issue thread is already so bloated (>300 msgs) and the more we clutter it with repetitive comments the harder we are making it for the team to grok the meaningful context in the thread that could genuinely help to solve this. please keep that in mind before posting 💜

kid4git · 6 months ago

Yeah sure, let's all be silent and keep on paying top dollar while they have been sitting back for months and keep doing so. When there are hundreds of disappointed users reporting here (and those are only the ones who made it here), then you should be trying really, really hard to come up with a solution.

jonhoo · 6 months ago

Worth noting that as a workaround when this happens, zooming out/decreasing the font size in your terminal will generally help. The issue manifests when what claude wants to continuously render on your screen is taller than your terminal height, and a smaller font makes more stuff fit, so makes that less likely to happen.

brupelo · 6 months ago

@foxfirecodes, with all due respect, I understand where you’re coming from and I believe your intentions are good. In general, I also agree with the importance of keeping threads on topic. That said, if you read this thread and the many related ones (ie: look at this one #3648 where people demanded to reopen few times), you’ll see that many people have shared genuinely valuable feedback multiple times in an effort to get Anthropic’s attention and encourage constructive change. Unfortunately, the response so far has been non-existent.

As @kid4git rightly pointed out, using this service is already prohibitively expensive (ie: extra usage on max plan is crazy expensive), and the current situation with this issue has/is causing real pain for us the customers—both in terms of wasted time and significant financial cost. This isn’t a minor inconvenience; it’s a serious issue. When people are paying substantial amounts of money for a service, there’s a reasonable expectation of professionalism and reliability.

Large corporations shouldn’t be given a free pass in situations like this, period. When they treat customers well, they deserve praise and positive recognition. However, when they fail to meet their responsibilities to paying users, it is entirely reasonable to apply pressure—or, ultimately, to walk away and leave honest, critical feedback—so they clearly understand the impact of their actions.

If this were an open-source project, I would completely agree—the expectations would be different. In that case, I likely wouldn’t spend time raising feedback in this way and would instead contribute directly to fixing the issue or helping resolve it efficiently. However, that isn’t the situation here: we are paying real money for this service and product. From that perspective, raising concerns and providing feedback is not counterproductive—nor is it “spam”—but rather the appropriate and responsible thing to do.

We are customers, and in a very real sense, our payments support these companies. Expecting our concerns to be taken seriously is not unreasonable. Recent examples, such as Microsoft’s erosion of user trust with their hostile actions towards users, show the consequences of dismissing long-standing customers. That raises a simple question: should users stay silent and accept poor outcomes like this, or speak up and demand better?

When long-standing customers raise concerns, it’s a strong signal something is wrong.

foxfirecodes · 6 months ago

i hear your concerns and im 1000% on the same page that being vocal about issues, especially for something you're paying stupid amounts of money for, is not only reasonable but commendable. that being said im not sure an issue thread is the best place to do that, for two reasons:

  1. cluttering the issue thread is going to make it harder for the anthropic folks to find the very useful context that is scattered about this thread. nobody wants to read 300 comments and I fear the end result will be an even longer wait time for this to be fixed. as a dev I personally avoid threads like this like the plague and I will absolutely procrastinate dealing with it as long as possible lol
  2. i don't think this medium provides the greatest leverage. my 2c is that social media is probably the better place to be vocal and has a greater chance of putting real pressure on anthropic to save face and prioritize fixing this. id guess that even a single post about this popping off would easily translate to 1000x+ pressure on anthropic as opposed to yet another (inevitably hidden) comment on an already gargantuan issue thread. or we could go push this on Hacker News or smth. imo we need people outside of this issue to be aware and be vocal if we want to make anthropic give a shit

all that being said, that's just my take. it's everyone's prerogative to be vocal however and wherever they please and im not judging anyone for using this as the surface to be vocal. but i do think we can be more effective elsewhere! /shrug

falense · 6 months ago

Still an issue for me on 2.1.9 with Linux Mint and Bash

SteveyBoros · 6 months ago
# before you post... tldr - let's not spam this thread more! as much as this is a frustrating issue I think it's counterproductive to continue to spam posts about how upset we are and how they should be doing better. the point has been made, so unless you have something to contribute towards actually solving the issue (like this very helpful comment that gives an actual clue to the problem) i suggest you reconsider posting. this issue thread is already so bloated (>300 msgs) and the more we clutter it with repetitive comments the harder we are making it for the team to grok the meaningful context in the thread that could genuinely help to solve this. please keep that in mind before posting 💜

Until they open source Claude Code and start treating their customers like... Customers... Then they are quite rightly only going to get complaints. Especially when they sit here and actively kill third party solutions that work and then lie and close open issues claiming the problem is fixed.

There has been ZERO follow up from the team since they falsely claimed this issue was solved. They do it to themselves.

zackmckennarunpod · 6 months ago

still a problem here with ghostty and tmux, what a pain.

ethanfischer · 6 months ago

https://github.com/user-attachments/assets/10e0d5c8-d5fd-4471-bbfe-e3b74d849879

This is what I see with windows terminal using wsl1 with ubutnu on windows 10.

Claude Code 2.1.6

Update: this seems like it might be a separate issue from what this thread is discussing. When I use claude code in Alacritty I don't get the same issue as I do in windows terminal

Update 2: I don't see this issue when using powershell version with windows terminal

SnakeO · 6 months ago

Please fix this

andyrong33 · 6 months ago

Still having this issue on version 2.1.11

vemvcs · 5 months ago
In the meantime, I recommend either using a modern terminal emulator like Ghostty or making your terminal taller.

@chrislloyd doesn't this work because the becomes visible as the terminal gets taller?

Which begs the question, would the issue disappear if the character wasn't animated at all?

Same for the symbol.

Doing something similar fixed flickering issues in Emacs: https://github.com/anthropics/claude-code/issues/247#issuecomment-3058405139

marcindulak · 5 months ago

See https://news.ycombinator.com/item?id=46701013. @chrislloyd commented on 2026-01-21

The good news: we shipped our differential renderer to everyone today.

This suggests that an improvement got shipped in https://www.npmjs.com/package/@anthropic-ai/claude-code/v/2.1.14
I'm not able to easily identify this improvement in the changelog. I'm also including version 2.1.12, but that was released 5 days ago, so it's probably not that.

https://github.com/anthropics/claude-code/blob/a6a8045031de9ff3e44683264e2ed6d434a8c0b6/CHANGELOG.md?plain=1#L3-L24

brupelo · 5 months ago

Stil not fixed properly in 2.1.17 (windows terminal + docker/ubuntu), here's some examples where CC gets crazy, starts flickering and you can't ESC and interrupt, you can't ctrl+c and you end up killing the pane/process...

https://github.com/user-attachments/assets/93581bec-a71e-4adb-92cb-935134490fbb

https://github.com/user-attachments/assets/aba88302-c2c3-4dcf-ac16-1aeadcc419e1

----------------

Anyway... Thank you to the developer who shared the detailed explanation on hacker News about the TUI rendering architecture and recent fixes. While we appreciate the technical transparency and the recent deployment of the differential renderer, the explanation actually reinforces several fundamental concerns about Claude Code's architectural choices that have caused long-standing performance issues.

The Architecture Problem in Their Own Words

The developer confirmed our worst fears about the architecture:

"Most people's mental model of CC is that 'it's just a TUI' but it should really be closer to 'a small game engine'. For each frame our pipeline constructs a scene graph with React -> layout elements -> rasterize them to a 2d screen -> diff that against the previous screen -> _finally_ use the diff to generate ANSI sequences to draw."

This admission reveals why users have suffered through "seconds, not ms" of GC pauses on slower machines. The problem wasn't incidental—it was architecturally guaranteed by this 5-layer transformation pipeline that creates garbage at every step.

The Real-World Cost: Windows Terminal Case Study

The developer's post mentions that "~1/3 of sessions see at least a flicker" after their fix. Yet, for many users, the problem is far worse than an occasional flicker—it's a complete breakdown of functionality.

On Windows Terminal, Claude Code 2.1.17 remains critically unstable (videos above): The application flickers, becomes unresponsive, fails to provide answers, and often requires a forced process termination. This isn't just a visual glitch; it has direct financial consequences:

  • Wasted API tokens and money for paid plans when processes hang
  • Lost work and context when sessions must be killed
  • Broken workflow that defeats the purpose of a coding assistant

This persistent instability on a major platform like Windows Terminal underscores that the architectural issues are not merely theoretical—they directly impact reliability and user trust.

The GC Catastrophe Was Predictable

The developer states:

"More allocations == more GC == more frames where the VM is locked up seemingly doing nothing. On slower machines we were seeing this in the order of seconds, not ms."

This isn't surprising when you consider what happens each frame:

  1. React creates new element objects (garbage)
  2. Layout calculation creates intermediate structures (garbage)
  3. Rasterization creates buffer copies (garbage)
  4. Diffing creates comparison structures (garbage)
  5. ANSI generation creates strings (garbage)

At 60 FPS, that's ~300 allocation cycles per second—an unsustainable load for any garbage collector, especially on resource-constrained machines. The Windows Terminal instability is likely a manifestation of this exact problem under different runtime conditions.

The "Fix" Is Actually a Workaround

The solution described—"converting the screen buffer to packed TypedArrays"—is telling. This is a low-level optimization (manual memory management) to fix problems created by a high-level framework choice (React). It's the equivalent of adding racing tires to a combine harvester to make it faster on a racetrack, rather than using a race car.

The fact that this extreme optimization was necessary to achieve basic typing responsiveness highlights the fundamental mismatch between React's architecture and high-FPS terminal rendering. Yet even with these optimizations, critical platforms like Windows Terminal remain broken.

A Simpler, More Effective Alternative

Successful terminal applications (vim, tmux, htop) use far simpler architectures:

  • Double buffering (not 5-layer pipelines)
  • Dirty region tracking (not full scene graph diffs)
  • Direct ANSI output (not React reconciliation → layout → rasterization → diff → ANSI)

These applications don't suffer from GC pauses or platform-specific instability because they:

  1. Minimize allocations per frame (often zero)
  2. Reuse buffers instead of creating new ones
  3. Update only what changed instead of rebuilding everything
  4. Respect terminal characteristics rather than treating them as game engines

The DEC 2026 Solution Highlights the Core Issue

The developer mentions working on DEC 2026 (synchronized output) support, which is excellent. However, this terminal-level feature shouldn't be necessary to prevent flickering and crashes in a well-architected TUI. Many terminal applications render perfectly without it because they use appropriate architectures for the medium.

Moving Forward: Questions for the Team

Given the continued instability on platforms like Windows Terminal:

  1. Is there a specific timeline and priority for fixing the critical Windows Terminal instability that causes hangs and wasted tokens?
  1. Given the GC issues and performance challenges across platforms, is there consideration of moving away from the React-based scene graph approach for core rendering?
  1. Could a simpler virtual screen buffer architecture reduce complexity while improving performance on all systems, especially resource-constrained ones?
  1. What's the long-term maintenance cost of maintaining these deep optimizations versus adopting a simpler, more reliable architecture?

Conclusion: Stability Over Complexity

The Hacker News explanation confirms that Claude Code's performance issues stem from architectural over-engineering. While we appreciate the hard work on optimizations, we're concerned that the core architecture continues to prioritize framework familiarity over terminal-appropriate design patterns—with real consequences for users on platforms like Windows Terminal.

Terminals have thrived for decades because of their simplicity and reliability. Our hope is that the Claude Code team prioritizes fixing critical platform instabilities and considers whether continuing down the "game engine" path is sustainable, or whether a simpler, more terminal-native architecture might deliver the stability users expect—especially when real money and productivity are at stake.

The recent fixes are appreciated, but the architectural concerns and platform-specific bugs remain. We encourage the team to address the Windows Terminal instability as a priority and reconsider whether the current complexity delivers proportional value to all users.

---

Anyway, that said... it's good to at least be getting some feedback now. I don't want to add unnecessary pressure—we all know dev work is hard—but it's important to understand the customer's point of view and as I said in past thread, giving honest feedback to us the customers is the right thing to do.

This is a really expensive product, and for the past months has been underdelivering. The extra usage costs add up quickly. When you've spent a significant amount of time in an interactive session—onboarding the agent, painstakingly correcting the same repeated mistakes (which is often more frustrating than mentoring a junior)—and then the dreaded flickering starts, locks up in a loop, and forces you to kill the process... you lose all that work, time, and money.

That moment makes you want to just close the account, give up on the product for good, look for alternatives, and move on. Then you take a breath, and instead, you find yourself here, engaging in the issue thread, hoping for a proper fix.

We're here because we see the potential and want the tool to succeed (and offering proper competitive prizes). Hopefully, this feedback helps underline why stability isn't just a nice-to-have feature; for users, it's the foundation of trust and value.

mehulparmariitr · 5 months ago

IntelliJ is able to resolve this by enabling support for synchronized output mode.
So far, after upgrading to 2025.3.2, I have not encountered this issue.

Do other terminals also need to enable this? Has the iTerm beta—which fixed the issue in its beta version—already implemented this support?

https://youtrack.jetbrains.com/articles/IDEA-A-2100662610/IntelliJ-IDEA-2025.3.2-253.30387.90-build-Release-Notes

rori4 · 5 months ago

maybe if you guys focus on fixing this issue people won't even bother using opencode
instead you block a working interface

0xchasercat · 5 months ago

Still broken lol

ivnnv · 5 months ago

This has been almost fixed for me in macOS in iTerm and the built-in VSCode terminal (Ghostty never seemed to have this problem even for earlier CC versions).
So no more crazy flickering, but I still have a case where the scroll position is suddently moved to the top of the conversation and Im in need of manually (mouse scrolling or hitting the end key) to get into the bottom again.

wangschien · 5 months ago

Same issue over SSH (Termius + dtach, ~100ms+ latency). Every TUI update causes a full screen clear + redraw, which over high-latency connections becomes severe visible flickering.

Notably, OpenAI's Codex CLI in the exact same environment (same SSH client, same dtach session, same latency) does not exhibit this behavior.

A --low-bandwidth or --no-clear flag that avoids full screen clears would make Claude Code usable over remote SSH without resorting to -p mode.

privitera · 5 months ago

Codex uses rust + ratatui which properly handles diffing. CC uses Ink which
redraws everything constantly.

Best solution I have found is to turn off all verbose responses and
instructed agents to only write to files instead of sending their output to
the chat and increasing the number of rows that need to be refreshed.

Running with —debug and inspecting the logs makes it pretty obvious that
the problem gets worse as the row count increases.

It feels like the anthropic team doesn’t actually understand how their
stack works under the hood (becoming a common problem with “vibe coded”
applications).

On Sun, Feb 1, 2026 at 10:23 AM wangschien @.***> wrote:

wangschien left a comment (anthropics/claude-code#769) <https://github.com/anthropics/claude-code/issues/769#issuecomment-3831696695> Same issue over SSH (Termius + dtach, ~100ms+ latency). Every TUI update causes a full screen clear + redraw, which over high-latency connections becomes severe visible flickering. Notably, OpenAI's Codex CLI in the exact same environment (same SSH client, same dtach session, same latency) does not exhibit this behavior. A --low-bandwidth or --no-clear flag that avoids full screen clears would make Claude Code usable over remote SSH without resorting to -p mode. — Reply to this email directly, view it on GitHub <https://github.com/anthropics/claude-code/issues/769#issuecomment-3831696695>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/AAWR6KJC4IVXEJNU6KQLZ5L4JZADRAVCNFSM6AAAAAB27OFU62VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTQMZRGY4TMNRZGU> . You are receiving this because you commented.Message ID: @.***>
zinglax · 5 months ago

I think we switched from "my terminal is flickering & scroll back is making me dizzy" to "my computer gets really hot & my fans are always on"

TinyTb · 5 months ago

Maybe it's time to just build a new operating system. Claude OS

kajeagentspi · 5 months ago

Opus 4.6 can build a c compiler but not close this issue. That's how difficult it is guys.

immartian · 5 months ago
Maybe it's time to just build a new operating system. Claude OS

right, there should be AI-native OS and should be built by AI itself. Go Anthropic.

jonesnc · 5 months ago
Opus 4.6 can build a c compiler but not close this issue. That's how difficult it is guys.

Yeah it's probably as stable as claude code's renderer.

ahelme · 5 months ago

Pls fix 🙏🏼🥹

niomartinez · 5 months ago

It's fixed now for me,

nepfaff · 4 months ago

this keeps coming back. For me, it happens if 1. claude has a task list, 2. claude is waiting for a task to complete, 3. I queue a message, 4. I interupt claude to see my new message. This is in tmux. Makes it quite unuseable.

F1LT3R · 4 months ago

Started happening to me yesterday. Almost unusable in tmux.

kajeagentspi · 4 months ago
Started happening to me yesterday. Almost unusable in tmux.

Are you using the team mode? It happens because the window gets too short. Really unusable so you should use the in process one.

F1LT3R · 4 months ago
Are you using the team mode? It happens because the window gets too short. Really unusable so you should use the in process one.

Yes on Team Mode.

Worked yesterday. Was fine for weeks since I started using it. Broken today. The whole point I switched to Claude from Cursor was that Cursor keep breaking things I relied on, like SSH dev.

Now Claude is at it too.

Firstly, I want to use the TMUX view for Agent Teams. I prefer it.

Secondly, all of my dev flow is in nested TMUX panes. Can I even use "the in process one"?

kajeagentspi · 4 months ago
> Are you using the team mode? It happens because the window gets too short. Really unusable so you should use the in process one. Yes on Team Mode. Worked yesterday. Was fine for weeks since I started using it. Broken today. The whole point I switched to Claude from Cursor was that Cursor keep breaking things I relied on, like SSH dev. Now Claude is at it too. Firstly, I want to use the TMUX view for Agent Teams. I prefer it. Secondly, all of my dev flow is in nested TMUX panes. Can I even use "the in process one"?

Yes you can I'm also running mine in tmux. You just need to set the flag because the default is auto so if you're in tmux it would use tmux.

mehulparmariitr · 4 months ago

I noticed that whenever the app asks a Yes/No question, if you are scrolling at that moment, the screen immediately jumps back to the top.

F1LT3R · 4 months ago
You just need to set the flag

Which flag do I need to set?

kajeagentspi · 4 months ago
> You just need to set the flag Which flag do I need to set?

--teammate-mode in-process

let4be · 4 months ago

Same issue, any workaround? makes it very hard to work with claude

Perlover · 4 months ago

Version 2.1.76 has brought back that flickering issue. I hadn't noticed it for a long time, but now it seems to have returned. It's really inconvenient to watch what's happening during the process because when you scroll up in the terminal, for example, in Linux Mint xterm, the flickering constantly jumps you back to the top of the chat window. This makes it impossible to track the progress of the work.

let4be · 4 months ago

For me it both flickers and auto scrolls to the top, literally unusable lol

F1LT3R · 4 months ago
--teammate-mode in-process

Unfortunately this did not fix things, as my whole IDE is TMUX.

Claude is rapidly showing my history scroll back every time it updates the screen. It's making me feel very nauseous. Really. I can't work like this. 🤮 🤮 🤮

This is such a tragedy. CLI tool that can't work in TMUX. I guess there is tool that provides Anthropic LLMs at a bundled price, that either works, or doesn't break features every other release.

The state of AI right now.

nbros · 4 months ago

I'm using tmux too and it was fine at first, but with recent Claude Code updates it's flashing like crazy.

torarnv · 4 months ago

Still seeing this in iTerm2 with latest release of Claude Code and iTerm2. Scrollback jump to top, as described in https://github.com/anthropics/claude-code/issues/826

cruzlauroiii · 4 months ago

A fix is available as a Claude Code plugin: scroll-fix

Install:

/plugin marketplace add cruzlauroiii/claude-code
/plugin install scroll-fix@cruzlauroiii-plugins

Root cause: both Ink renderer AND readline/prompt system emit cursor-up sequences exceeding viewport height. The plugin clamps all cursor-up per write call. Also includes Ctrl+6 freeze toggle.

PR: https://github.com/anthropics/claude-code/pull/35683

ijstokes · 3 months ago

@cruzlauroiii I'd try this but:

❯ /plugin marketplace add cruzlauroiii/claude-code
  ⎿  Error: The name 'claude-code-plugins' is reserved for official Anthropic marketplaces. Only repositories from 'github.com/anthropics/' can use this name.
tomasruizt · 3 months ago

Still reproducing — terminal flickers/rapidly scrolls up and down while Claude Code streams edits, making it very difficult to follow the output. No crashes, just constant visual jitter during response streaming.

Environment:

  • Claude Code in Cursor's integrated terminal, connected via SSH to a remote server
  • macOS client (Darwin 25.3.0, Apple Silicon)

https://github.com/user-attachments/assets/0ca5abed-3917-40e0-a8fc-1c72a46f56cf

convexshiba · 3 months ago

Experiencing the same flickering with CC Version: 2.1.81, debian 13
macOS with iTerm2 Build 3.6.9

same with tmux and without tmux.

yurukusa · 3 months ago

Terminal flickering during tool calls is one of the most reported issues. While the root fix needs to come from Anthropic's rendering layer, here are mitigations:
Workaround 1 — Use tmux or screen:

tmux new-session -s claude 'claude'

tmux adds a buffer layer between Claude Code's rendering and your terminal emulator, which can significantly reduce visible flickering.
Workaround 2 — Reduce terminal refresh rate:

  • iTerm2: Preferences → General → Rendering → reduce "Frames per second" (try 30 instead of 60)
  • Kitty (kitty.conf): repaint_delay 20 (default is 10ms)
  • Alacritty: No direct setting, but enabling VSync in your GPU driver can help

Workaround 3 — Switch terminals:
Flickering severity varies by terminal:

  • Ghostty: Often reported as less flickery
  • Kitty: Generally good
  • Terminal.app / cmd.exe: Often worse
  • VS Code terminal: Variable — try both Native UI mode and the integrated terminal

Workaround 4 — Reduce output verbosity:
Less rendering = less flickering. In CLAUDE.md:

Be concise in your responses. Avoid streaming large blocks of text.
Use file writing (Write tool) instead of printing large outputs inline.

Workaround 5 — Use headless mode for long tasks:

claude -p "your prompt" > output.md

No TUI = no flickering.
This affects #769, #1913, #1486, #36582, and several other issues. The common thread is that Ink (Claude Code's TUI framework) redraws the entire viewport on updates, which causes visible flicker when updates are rapid (e.g., during streaming or tool calls).

F1LT3R · 3 months ago

Looking through the Claude Code source code after the leak, it appears that there is a CLAUDE_CODE_NO_FLICKER env var that is set for Anthropic employees.

Might be worth a try if you experience the flickering :)

<img width="1745" height="858" alt="Image" src="https://github.com/user-attachments/assets/461bccd6-1d98-47ab-a778-db8967a1866d" />

zinglax · 3 months ago

@F1LT3R Oh perfect, I knew it was probably as simple as setting an environment variable. Will also be setting USER_TYPE=ant from now on too.

In all honesty, this is crazy. thanks for the tidbit & investigation!

convexshiba · 3 months ago

I also found a DISABLE_ALL_BUGS_FOR_SIX_MONTH flag. So considerate. /s

kajeagentspi · 3 months ago

Before the teams feature has been released I asked claude running glm4.7 to find flags that enable that feature. Should've done the same for this. t's all under our noses all this time. But like the amount of slop is crazy.

ThatDragonOverThere · 3 months ago

v2.1.92 partial fix regression: the changelog states 'Fixed an issue where the same message could appear at two positions when scrolling up in fullscreen mode' — but the same content block is appearing THREE times (not two) in the same session on v2.1.92. The fix reduced the duplication count but didn't eliminate it. Windows 11, Windows Terminal, fullscreen mode.

CrimsonGlory · 1 month ago

It happens to me when I'm inside gnu screen inside other gnu screen
Claude version 2.1.168.

rep-movsd · 21 days ago

I had fixed this in 1987 but infortunately I lost that floppy disk

LasseRafn · 7 days ago

dont worry surely Fable 6 will be able to nail this issue, or Mythos 8 perhaps

rep-movsd · 4 hours ago

@Fable6 - please rewrite all software on Earth, but fix this first