From e463dd13925fb0c8d9fbd615f13ffaa9acdae3fc Mon Sep 17 00:00:00 2001 From: Lukas Kosina Date: Thu, 5 Mar 2026 11:00:46 +0100 Subject: [PATCH] Fix Bash launching notifications for every command (#42) Only fire browser notifications for interactive tools (AskUserQuestion, Write, Edit, NotebookEdit, ExitPlanMode), not for Bash PermissionRequest events. The dashboard card still shows "Waiting for input" status for Bash permission prompts, but no browser notification is triggered. --- src/dashboard.test.ts | 6 ++++++ src/dashboard.ts | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/dashboard.test.ts b/src/dashboard.test.ts index 52c18e5..09f1473 100644 --- a/src/dashboard.test.ts +++ b/src/dashboard.test.ts @@ -58,6 +58,12 @@ describe("getDashboardHtml", () => { assert.ok(html.includes("claude-waiting-")); }); + it("only notifies for interactive tools, not Bash", () => { + assert.ok(html.includes("NOTIFY_TOOLS")); + assert.ok(html.includes("NOTIFY_TOOLS[s.lastEvent]")); + assert.ok(html.includes("AskUserQuestion")); + }); + it("contains Stop and Restart buttons", () => { assert.ok(html.includes('id="btnStop"')); assert.ok(html.includes('id="btnRestart"')); diff --git a/src/dashboard.ts b/src/dashboard.ts index a66fe1f..d909e83 100644 --- a/src/dashboard.ts +++ b/src/dashboard.ts @@ -516,6 +516,7 @@ export function getDashboardHtml(): string { var STATUS_LABELS = { running: 'Running', waiting: 'Waiting for input', done: 'Done' }; var STATUS_ORDER = { running: 0, waiting: 1, done: 2 }; + var NOTIFY_TOOLS = { ExitPlanMode: 1, AskUserQuestion: 1, Write: 1, Edit: 1, NotebookEdit: 1 }; function timeAgo(ts) { var diff = Math.floor((Date.now() - ts) / 1000); @@ -582,7 +583,7 @@ export function getDashboardHtml(): string { } if (notificationsEnabled && 'Notification' in window && Notification.permission === 'granted') { newSessions.forEach(function(s) { - if (s.status === 'waiting' && previousStatuses[s.sessionId] !== 'waiting') { + if (s.status === 'waiting' && previousStatuses[s.sessionId] !== 'waiting' && NOTIFY_TOOLS[s.lastEvent]) { new Notification('Claude Code - Waiting for input', { body: folderName(s.cwd), tag: 'claude-waiting-' + s.sessionId