Claude Code Notify — macOS通知連携ツール

Tool

概要

macOS向けの小さなユーティリティ「claude-code-notify」は、ターミナルで動作するClaude Code(CLI版)に対してイベント発生時にネイティブ通知を表示するためのスクリプト集です。リポジトリは少数ファイルで構成され、install.sh/uninstall.shでフックを導入・除去します。通知対象は作業完了、許可の要求、入力待ち、質問の提示などで、ターミナルを見ていないときでもユーザーの注意を引ける点が利点です。導入手順はgitクローンしてインストールスクリプトを実行するだけのシンプル設計になっています。

GitHub

リポジトリの統計情報

  • スター数: 2
  • フォーク数: 0
  • ウォッチャー数: 2
  • コミット数: 3
  • ファイル数: 5
  • メインの言語: Shell

主な特徴

  • macOSネイティブの通知(Notification Center)でClaude Codeの重要イベントを知らせる。
  • install.sh / uninstall.sh による簡単導入・削除フロー。
  • hooksディレクトリで通知ロジックを分離、既存フローへ組み込みやすい設計。
  • 軽量なシェル実装で追加依存が少ない(環境によりosascriptやterminal-notifier利用の可能性)。

技術的なポイント

claude-code-notifyはシェルスクリプト中心の最小限構成なので、仕組み自体は素朴で分かりやすいです。リポジトリにあるhooksフォルダには、Claude Codeの出力や状態を検知して通知を発行するためのスクリプトが格納されている想定で、install.shはこれらをユーザーのClaude Code設定ディレクトリや実行フローにコピー/登録する役割を持ちます。通知の発行にはmacOS標準のosascript(AppleScript)またはサードパーティのterminal-notifierを利用するパターンが一般的で、本プロジェクトも同様にNotification Centerへメッセージを投げる形を取っている可能性が高いです。

設計上のポイントとして、CLIアプリケーションの「状態検知」を標準出力のテキストや終了コードで行い、特定のキーワード(“Ready for next instruction”、“needs permission”、“idle and waiting for input” 等)をマッチさせて通知をトリガーするやり方が考えられます。hooksスクリプトはパイプラインに差し込まれて出力を監視するか、あるいはClaude Codeが用意するフック機構に登録される実装になります。uninstall.shはインストール時に行ったファイル配置や設定変更をロールバックし、クリーンに元の状態へ戻すための処理を行います。

セキュリティと互換性の観点では、macOS専用である点、通知発行に対するユーザーの許可(通知センターの権限)や、外部ツール依存(terminal-notifier等)があるか否かを確認する必要があります。また、Claude Codeの出力フォーマットや将来のアップデートによる仕様変化に依存するため、監視対象のテキストやフック機構が変わると動作保証が揺らぐリスクがあります。改良案としては、設定ファイルで検出キーワードを管理したり、ログファイル監視やファイルロックを使ったより堅牢な状態検知、macOS以外のプラットフォーム(Linuxのnotify-send等)対応の抽象化を行うことが挙げられます。

プロジェクトの構成

主要なファイルとディレクトリ:

  • LICENSE: file
  • README.md: file
  • hooks: dir
  • install.sh: file
  • uninstall.sh: file

まとめ

軽量で導入が容易な、ターミナル向け通知を提供するmacOS専用ユーティリティ。

リポジトリ情報:

READMEの抜粋:

Claude Code Notify

Get macOS notifications when Claude Code needs your attention in the terminal.

Install

git clone https://github.com/slava-dvc/claude-code-notify.git
cd claude-code-notify
./install.sh

What You Get

Notifications when Claude Code:

  • Finishes a task - “Ready for next instruction”
  • Needs permission - “Claude needs permission to continue”
  • Is waiting for input - “Claude is idle and waiting for input”
  • Has a question - Shows the question t…