🔔
[WezTerm]ClaudeCodeHooksからの通知クリック時に適切なPaneにフォーカスする
はじめに
この記事 のWezTerm版です。
ClaudeCodeのNative通知だとWezTermのタブが切り替わらなかったので作成しました。
WezTerm使い始めて3時間で書いているのでもっと良い方法があれば教えてください。
前提
OS: Mac
Ternmial: WezTerm
terminal-notifierがインストールされている。
仕組み
- WezTermで実行中のshellでは
WEZTERM_PANEという環境変数が設定されている - hooksで上記環境変数から取得したpane_idを一時ファイルに保存しつつ、terminal-notifierで通知
- terminal-notifierのexecuteオプションでフォーカス用のスクリプトを実行
-
wezterm cli activate-paneコマンドでpaneにフォーカス
コード
#!/bin/bash
# .claude/hooks/claude-notification.sh
# stdin から JSON を読み取り
INPUT=$(cat)
TYPE=$(echo "$INPUT" | jq -r '.notification_type // .hook_event_name // "unknown"')
CWD=$(echo "$INPUT" | jq -r '.cwd // ""')
MESSAGE=$(echo "$INPUT" | jq -r '.message // ""')
# idle_prompt は通知しない
if [ "$TYPE" = "idle_prompt" ]; then
exit 0
fi
# 通知メッセージを設定(message フィールドがあればそれを使用)
if [ -n "$MESSAGE" ]; then
MSG="$MESSAGE"
else
case "$TYPE" in
permission_prompt) MSG="許可が必要です" ;;
tool_permission_prompt) MSG="ツール実行の許可が必要です" ;;
user_question_prompt) MSG="質問があります" ;;
Stop) MSG="タスクが完了しました" ;;
*) MSG="通知" ;;
esac
fi
# WezTerm ペインIDを一時ファイルに保存
# 環境変数 WEZTERM_PANE から現在のペインIDを取得
WEZTERM_INFO_FILE="/tmp/claude-wezterm-info"
if [ -n "$WEZTERM_PANE" ]; then
echo "$WEZTERM_PANE" > "$WEZTERM_INFO_FILE"
else
# デバッグ: 環境変数が設定されていない場合のログ
echo "WEZTERM_PANE not set" > "$WEZTERM_INFO_FILE.log"
fi
# 通知を送信(クリック時に focus スクリプトを実行)
terminal-notifier \
-title "Claude Code" \
-subtitle "${CWD##*/}" \
-message "$MSG" \
-sound Hero \
-group "claudecode" \
-execute "$HOME/.claude/hooks/focus-pane.sh"
exit 0
#!/bin/bash
# ~/.claude/hooks/focus-pane.sh
WEZTERM_INFO_FILE="/tmp/claude-wezterm-info"
# WezTerm をアクティブに(バックグラウンドで並列実行)
osascript -e 'tell application "WezTerm" to activate' &
# ペインをアクティブ化(ファイルが存在する場合)
if [ -f "$WEZTERM_INFO_FILE" ]; then
PANE_ID=$(<"$WEZTERM_INFO_FILE")
[ -n "$PANE_ID" ] && wezterm cli activate-pane --pane-id "$PANE_ID" 2>/dev/null
fi
wait
{
//
// その他の設定
//
"hooks": {
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/claude-notification.sh"
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/claude-notification.sh"
}
]
}
]
}
}
以上!
Discussion