fix(claude-code): remove the erroring attention-bell hook
The hook rang the terminal bell by walking the process ancestry for a process named `claude`, but nix wraps the binary so its `comm` is `.claude-wrapped`. The match never fired: the bell never rang, and the loop fell through to a non-zero exit that surfaced as a Stop hook error on every turn. Remove the hook, its script, and the Stop and Notification wiring. The tmux monitor-bell config is left in place as a general nicety.
This commit is contained in:
@@ -10,18 +10,6 @@
|
|||||||
let
|
let
|
||||||
cfg = config.modules.claude-code;
|
cfg = config.modules.claude-code;
|
||||||
user = config.user.name;
|
user = config.user.name;
|
||||||
|
|
||||||
# Rings the terminal bell so tmux flags the background pane.
|
|
||||||
bellHook = [
|
|
||||||
{
|
|
||||||
hooks = [
|
|
||||||
{
|
|
||||||
type = "command";
|
|
||||||
command = "~/.claude/hooks/attention-bell.sh";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.modules.claude-code.enable = lib.mkEnableOption ''
|
options.modules.claude-code.enable = lib.mkEnableOption ''
|
||||||
@@ -57,14 +45,11 @@ in
|
|||||||
skills = ./skills;
|
skills = ./skills;
|
||||||
|
|
||||||
# Installed under ~/.claude/hooks, referenced by the settings below.
|
# Installed under ~/.claude/hooks, referenced by the settings below.
|
||||||
hooks."attention-bell.sh" = builtins.readFile ./hooks/attention-bell.sh;
|
|
||||||
hooks."agent-sudo-guard.sh" = builtins.readFile ./hooks/agent-sudo-guard.sh;
|
hooks."agent-sudo-guard.sh" = builtins.readFile ./hooks/agent-sudo-guard.sh;
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
model = "opus";
|
model = "opus";
|
||||||
hooks = {
|
hooks = {
|
||||||
Stop = bellHook;
|
|
||||||
Notification = bellHook;
|
|
||||||
PreToolUse = [
|
PreToolUse = [
|
||||||
{
|
{
|
||||||
matcher = "Bash";
|
matcher = "Bash";
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# attention-bell.sh — ring the terminal bell in this Claude session's tmux pane
|
|
||||||
# so tmux's monitor-bell flags the (background) window red in the status bar.
|
|
||||||
#
|
|
||||||
# Claude Code runs hooks as detached subprocesses: they have no controlling
|
|
||||||
# terminal, so /dev/tty is unavailable here. But the parent-process chain up to
|
|
||||||
# the `claude` process stays intact, and `claude` itself holds the pane's pty.
|
|
||||||
# So we walk ancestry to find it and write the bell straight to that tty.
|
|
||||||
# (Writing a bare BEL to an explicit /dev/pts/N works even from a detached
|
|
||||||
# process — verified against tmux's window_bell_flag.)
|
|
||||||
|
|
||||||
pid=$PPID
|
|
||||||
while [ "$pid" -gt 1 ] 2>/dev/null; do
|
|
||||||
if [ "$(ps -o comm= -p "$pid" 2>/dev/null)" = claude ]; then
|
|
||||||
tty=$(ps -o tty= -p "$pid" 2>/dev/null | tr -d ' ')
|
|
||||||
[ -n "$tty" ] && [ "$tty" != '?' ] && printf '\a' > "/dev/$tty"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
pid=$(ps -o ppid= -p "$pid" 2>/dev/null | tr -d ' ')
|
|
||||||
[ -z "$pid" ] && break
|
|
||||||
done
|
|
||||||
Reference in New Issue
Block a user