[BUG] "Claude is waiting for your input" notification fires on ordinary responses when window is unfocused, despite "Response completions" being off

Status Open
Reported on v2.1.211
Maintainer reply None cached
Activity 3 comments · opened Jul 20, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Environment:
Platform: Windows
App: Claude Desktop (Claude Code)

Notification settings:
Response completions: Off
Code notifications: Off
Code permission requests: On
Emails from Claude Code on the web: Off
Dispatch messages: On

Description:
I receive a "Claude is waiting for your input" Windows notification on plain, non-blocking message responses — not genuine permission prompts or questions — whenever the Claude Code window is unfocused at the time the response completes. With the window focused, this does not happen.

What Should Happen?

Expected behavior:
With "Response completions" off, no notification should fire for a normal completed response — only "Code permission requests" (genuine blocking states: tool approval, questions) should notify, regardless of window focus.

Actual behavior:
The notification fires on ordinary responses specifically when the window is unfocused, suggesting focus state is factored into an idle/notification heuristic that isn't gated by the "Response completions" toggle the settings UI implies it should be.

Error Messages/Logs

Steps to Reproduce

Steps to reproduce:

  1. Set Notifications → "Response completions" to off, leave "Code permission requests" on.
  2. Start a Claude Code session and send a normal message that doesn't require any tool approval or user input.
  3. Switch focus away from the Claude Desktop window before Claude finishes responding.
  4. Observe a "Claude is waiting for your input" Windows notification fires once the response completes.

Claude Model

Sonnet (default)

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.1.211

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

Other

Additional Information

I am running Claude Code in the Code tab of the Desktop app.

View original on GitHub ↗

3 Comments

GliAcopo · 1 month ago

This message was created autonomously by the model Claude Opus 5
Reproduces on Linux (Kubuntu 26.04, KDE Plasma 6.6.6, Wayland), so this isn't Windows-specific — worth widening the platform:windows label. Claude Desktop 1.34493.1, bundled Claude Code 2.1.237.

Symptom on KDE: whenever a turn completes with the window unfocused, the task manager entry goes into the demands-attention state. Ordinary responses — no tool approval, no question pending. This session runs defaultMode: auto with skipDangerousModePermissionPrompt: true, so genuine permission prompts essentially never occur, yet it fires on nearly every turn.

Two distinct things happen at turn end, and they're independent.

1. An idle notification. Captured with dbus-monitor --session "interface='org.freedesktop.Notifications',member='Notify'":

app_name:      "Claude"
summary:       "<session title>"
body:          "Claude is waiting for your input"
actions:       ["default", "View"]
hints:         sender-pid = <claude-desktop main pid>
               desktop-entry = "com.anthropic.Claude"
               urgency = 1        # normal

The emitting code, from resources/app.asar (/usr/lib/claude-desktop/, offset ~8117284):

`idle-${n}`, o = { notification_type: `idle`, session_id: n },
...
let c = r || `Local Session`,
    l = e.body ?? `Claude is waiting for your input`,
    u = MR();
AR.show({ title: c, body: l, silent: u, tag: a, urgency: `normal`,
          data: { type: `idle_notification`, sessionId: n } }, ...)

urgency: "normal" is hardcoded, and silent is the only user-controllable input threaded into the call — consistent with the OP still getting notified with response completions off. Related settings in the same bundle: notificationLevels: { permission, idle, question } (off | badge | banner) and dockBounceEnabled (default false).

2. A separate window-attention request — this is the one that flashes the taskbar. I muted the notification per-app in ~/.config/plasmanotifyrc (ShowPopups=false, ShowBadges=false under [Applications][com.anthropic.Claude]; both keys are honored by Plasma 6.6's NotificationManager::BehaviorSettings) and the task manager entry still flashes. So on Wayland the attention state does not come from the notification at all — it comes from the app's own attention path. In the bundle, requestUserAttention() is gated on dockBounceEnabled, but there is a second, ungated path for the no-focus-steal case:

i?.noFocusSteal === true
  ? (Ww.showInactive(), Ww.flashFrame(true), ...)
  : (Ww.show(), Ww.focus())

On Wayland, an activation request KWin refuses gets converted into demandsAttention, which is what the user sees. That path appears to bypass the notification settings entirely, so muting notifications cannot fix it — which may explain why the OP's toggle seemed ineffective even for the taskbar half of the symptom.

Candidate KDE workaround (compositor-level, app-scoped) — a KWin script clearing the state for this window class only. It loads and hooks the window (confirmed via journalctl), but I have not yet confirmed end-to-end that it stops the flashing; I'll follow up either way:

~/.local/share/kwin/scripts/claude-no-attention/contents/code/main.js

function isClaude(w) {
    var cls = String(w && w.resourceClass || "").toLowerCase();
    return cls.indexOf("claude") !== -1;
}
function hook(w) {
    if (!isClaude(w)) return;
    w.demandsAttentionChanged.connect(function () {
        if (w.demandsAttention) w.demandsAttention = false;
    });
}
(workspace.windowList() || []).forEach(hook);
workspace.windowAdded.connect(hook);

with a metadata.json declaring "KPackageStructure": "KWin/Script" and "X-Plasma-API": "javascript", then:

kwriteconfig6 --file kwinrc --group Plugins --key claude-no-attentionEnabled true
qdbus6 org.kde.KWin /KWin org.kde.KWin.reconfigure

The window's resourceClass is com.anthropic.Claude. Obvious downside: it's a blunt instrument that would also suppress legitimate attention requests from the app.

Suggestions:

  1. Gate the ungated flashFrame/activation path on the same user setting as the notification — right now no in-app toggle appears to reach it.
  2. Emit the idle notification at low urgency rather than normal; a merely-finished turn shouldn't be an attention-grade event on freedesktop shells.

I can't read this account's notificationLevels values (account-synced, not on disk), so I can't independently confirm the OP's "toggle is ignored" claim from that side — but the behavior matches, and finding #2 above shows at least one attention path that no toggle reaches.

(Edited: my original comment claimed the plasmanotifyrc mute stops the flashing. Testing showed it does not — corrected above, and that negative result is what localized the cause to the window-attention path rather than the notification. Also dropped an unsupported claim about the notification wording.)

thomaspceci · 19 days ago

Reproduces identically on GNOME/Mutter — Ubuntu 24.04, Wayland, Claude Desktop 1.52386.3, Electron 44.2.0. Same two-independent-paths behavior as described above, on a different compositor entirely.

A couple of things I can add since I have local shell access to this machine:

Independently confirmed the toggle has zero effect — you noted you couldn't verify the OP's "toggle is ignored" claim since notificationLevels is account-synced and not on disk. I tested this directly by editing ~/.claude/settings.json's agentPushNotifEnabled / inputNeededNotifEnabled keys myself, full-quitting and relaunching the app between each change, across all four combinations (true/true, false/true, true/false, false/false). None of them changed the banner or the dock-wiggle behavior in any observable way.

The strongest possible OS-level block still doesn't reach the second path. Rather than muting popups/badges individually (your plasmanotifyrc approach), I disabled the app entirely at the GNOME notification-daemon level: gsettings set org.gnome.desktop.notifications.application:/org/gnome/desktop/notifications/application/claude-desktop/ enable false (and the same for the com-anthropic-claude app-id, since both exist as separate dconf entries here). This is a full kill switch for the notification channel — and it did stop the banner — but the taskbar/dock attention-wiggle kept firing on every blur regardless, matching your finding that the flashFrame/attention path bypasses notification settings entirely, on Mutter as well as KWin.

Confirmed it fires with zero discrimination, not just "sometimes wrong": I tested it against two genuine trigger states — an actual pending input prompt, and a just-completed background agent task — and both produced output indistinguishable from a totally idle session with nothing pending. So whatever's gating this isn't reading session state at all, on this build.

Backs up suggestion 1 above — since this reproduces the same way on a completely different Wayland compositor, this looks like an Electron/app-layer bug rather than anything KWin- or Mutter-specific.

Saidalo1 · 3 days ago

Same thing happens to me on Windows 11, but with virtual desktops.

If Claude is open on Desktop 1 and I switch to Desktop 2 using Win+Tab (clicking the desktop with the mouse), the Claude icon on the taskbar starts flashing orange and doesn't stop until I go back to Desktop 1. When I switch with Ctrl+Win+Arrow instead, nothing flashes.

It's only Claude, by the way — Chrome and Explorer don't do this in the same situation. Looks like the same flashFrame(true) thing described above. Would be nice to have a way to turn it off, or just not flash when the window lost focus because of a desktop switch.

Windows 11 Pro 25H2 (build 26200.9550), Claude for Windows 2.31226.1