Commit caebccc2a246

Vincent Demeester <vincent@sbr.pm>
2026-01-28 09:36:25
feat(claude-hooks): replace notify-send with terminal bell
Use terminal bell (\a) instead of desktop notifications for Claude session events. Works with kitty's bell_on_tab setting to highlight tabs when Claude needs attention. - Add bell_on_tab to kitty config - Replace notify-send with terminal bell in session hooks - Remove libnotify dependency from claude-hooks Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 24f3392
Changed files (4)
home
common
desktop
tools
claude-hooks
cmd
initialize-session
save-session
home/common/desktop/kitty.nix
@@ -11,6 +11,7 @@
       listen_on = "unix:/tmp/my-kitty";
       macos_option_as_alt = "yes";
       copy_on_select = "yes";
+      bell_on_tab = "yes";
       notify_on_cmd_finish = "invisible 5.0 notify";
 
       active_tab_foreground = "#C6A0F6";
tools/claude-hooks/cmd/initialize-session/main.go
@@ -3,7 +3,6 @@ package main
 import (
 	"fmt"
 	"os"
-	"os/exec"
 	"path/filepath"
 	"strconv"
 	"strings"
@@ -131,12 +130,8 @@ func main() {
 		fmt.Fprintf(os.Stderr, "[initialize-session] Warning: Could not load CORE skill: %v\n", err)
 	}
 
-	// Send desktop notification
-	cmd := exec.Command("notify-send", "-u", "low", "Claude Code", "Session started")
-	if err := cmd.Run(); err != nil {
-		// Silent failure - don't break workflow
-		fmt.Fprintf(os.Stderr, "[initialize-session] Warning: Could not send notification: %v\n", err)
-	}
+	// Ring terminal bell to notify user (works with kitty bell_on_tab)
+	fmt.Fprint(os.Stderr, "\a")
 
 	// Log session start to history (silent failure)
 	if err := logSessionStart(); err != nil {
tools/claude-hooks/cmd/save-session/main.go
@@ -25,12 +25,8 @@ func main() {
 		os.Exit(0)
 	}
 
-	// Send desktop notification
-	cmd := exec.Command("notify-send", "-u", "low", "Claude Code", "Session ending")
-	if err := cmd.Run(); err != nil {
-		// Silent failure - don't break workflow
-		fmt.Fprintf(os.Stderr, "[save-session] Warning: Could not send notification: %v\n", err)
-	}
+	// Ring terminal bell to notify user (works with kitty bell_on_tab)
+	fmt.Fprint(os.Stderr, "\a")
 
 	// Get session statistics
 	statsCmd := exec.Command("claude-hooks-session-stats")
tools/claude-hooks/default.nix
@@ -1,8 +1,6 @@
 {
   buildGoModule,
   lib,
-  makeWrapper,
-  libnotify,
 }:
 
 buildGoModule {
@@ -12,8 +10,6 @@ buildGoModule {
 
   vendorHash = "sha256-bdpAteulG3045jPdEpjcT4yGlnxLKDMlK7lk9WVRTKc=";
 
-  nativeBuildInputs = [ makeWrapper ];
-
   # Build all binaries
   subPackages = [
     "cmd/capture-tool-output"
@@ -24,7 +20,7 @@ buildGoModule {
     "cmd/session-stats"
   ];
 
-  # Rename binaries to have consistent prefix and wrap with dependencies
+  # Rename binaries to have consistent prefix
   postInstall = ''
     mv $out/bin/capture-tool-output $out/bin/claude-hooks-capture-tool-output
     mv $out/bin/initialize-session $out/bin/claude-hooks-initialize-session
@@ -32,10 +28,6 @@ buildGoModule {
     mv $out/bin/validate-docs $out/bin/claude-hooks-validate-docs
     mv $out/bin/save-session $out/bin/claude-hooks-save-session
     mv $out/bin/session-stats $out/bin/claude-hooks-session-stats
-
-    # Wrap save-session to include notify-send in PATH
-    wrapProgram $out/bin/claude-hooks-save-session \
-      --prefix PATH : ${lib.makeBinPath [ libnotify ]}
   '';
 
   meta = {