All notable changes to Claude Code Audio Hooks will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
scripts/quick-configure.sh: Lightweight hook manager for Quick Setup (Lite tier) users — enable, disable, or list individual hooks without cloning the repository--listshows which of the 4 Quick Setup hooks are enabled/disabled--disable <Hook>removes a hook from~/.claude/settings.json--enable <Hook>re-adds a hook with the correct platform-specific command--only <Hook> [Hook...]keeps only the specified hooks, removes the rest- Works via
curl | bash(no clone needed), same pattern asquick-setup.sh - Case-insensitive hook name matching
- Supports Python and Node.js for JSON manipulation
scripts/quick-unsetup.sh: Now removes all 4 installed hooks includingPermissionRequest(was only removing 3: Stop, Notification, SubagentStop)
- Per-hook notification mode overrides: New
notification_settings.per_hookconfig allows independently controlling audio and desktop notifications per hook type (e.g.,"pretooluse": "audio_only"to skip desktop notifications for frequent hooks) disablednotification mode: Suppresses both audio and desktop notifications while still allowing TTS and logging — different fromenabled_hooks: falsewhich skips everything--hook-modeCLI flag:bash scripts/configure.sh --hook-mode pretooluse=audio_only posttooluse=disabledfor quick per-hook mode configuration- Per-hook mode validation with automatic fallback to global mode on invalid values
hook_runner.pynotification mode resolution now checksper_hookoverrides before falling back to globalnotification_settings.mode- Debug logging now shows both per-hook and global mode for each hook trigger
- Updated
config/default_preferences.jsonandconfig/user_preferences.jsonwithper_hookfield - Updated CLAUDE.md, README.md with per-hook notification mode documentation
No reinstall needed — existing installations self-update automatically on the next hook trigger after git pull. The per_hook field is fully backward compatible: if absent, all hooks use the global mode as before.
- Audio theme switching broken: The
audio_filessection in config templates hardcoded all 14 hooks todefault/..., silently overriding theaudio_themesetting — switching to"custom"had no effect get_audio_file()logic: Now ignoresaudio_filesentries that match the default template pattern (default/<filename>), soaudio_themeis always respected- Stale installed copy:
~/.claude/hooks/hook_runner.pywas copied once at install and never updated aftergit pull configure.sh --themeincomplete: Only edited JSON config without syncinghook_runner.pyto~/.claude/hooks/
- Auto-sync:
hook_runner.pynow includesHOOK_RUNNER_VERSIONconstant andcheck_and_self_update()— the installed copy in~/.claude/hooks/detects newer versions in the project directory and self-updates on next hook trigger - configure.sh hook_runner sync:
--themecommand now copieshook_runner.pyto~/.claude/hooks/after switching theme - README "Ask Claude Code" table: Quick-reference showing users what to say to Claude Code for theme switching, hook toggling, and config checks
- Removed
audio_filesblock fromconfig/default_preferences.jsonandconfig/user_preferences.json(backward compatible —get_audio_file()handles missing section viaconfig.get("audio_files", {})) - Updated README config examples to use
audio_themeinstead of per-hookaudio_files - Updated version references to 4.2.2 across CLAUDE.md, README.md
No reinstall needed — existing installations self-update automatically on the next hook trigger after git pull. Or force sync now:
cd ~/claude-code-audio-hooks
git pull
cp hooks/hook_runner.py ~/.claude/hooks/hook_runner.py- PostToolUseFailure hook: Audio alert when a tool execution fails (matches on tool name)
- SubagentStart hook: Audio alert when a background subagent is spawned (matches on agent type)
- TeammateIdle hook: Audio alert when an Agent Teams teammate goes idle
- TaskCompleted hook: Audio alert when an Agent Teams task is completed
- 5 new ElevenLabs Jessica voice audio files:
permission-request.mp3,tool-failed.mp3,subagent-start.mp3,teammate-idle.mp3,team-task-done.mp3 - Full coverage of all 14 Claude Code hook events
- Total hook types: 10 → 14
- Total audio files: 9 → 14 (each hook now has a unique audio file)
permission_requesthook now uses its ownpermission-request.mp3(was sharingnotification-urgent.mp3)posttoolusefailureuses critical urgency for desktop notifications- Updated all documentation to reflect new hook count
- Updated installers to register all 14 hook types with correct matcher support
Re-run your installer to register the new hooks:
# Full Install
bash scripts/install-complete.sh # macOS/Linux/WSL/Git Bash
.\scripts\install-windows.ps1 # Windows PowerShellNote: All 4 new hooks are disabled by default. Enable them in config/user_preferences.json if needed.
Adds PermissionRequest hook support — the "Allow this bash command?" permission dialog now triggers audio and desktop notifications. Closes #5.
PermissionRequesthook — 4th default-enabled hook across all installation tiers- Quick Setup (macOS): Basso.aiff (distinct from Sosumi for Notification)
- Quick Setup (Linux): dialog-warning.oga
- Quick Setup (WSL/Git Bash): SystemSounds.Question
- Full Install (all platforms): notification-urgent.mp3
- Context extraction for permission_request: shows
Permission needed: <tool_name> - Critical urgency desktop notifications for permission_request (same as notification)
- TTS message: "Permission required"
hooks/hook_runner.py— Added permission_request to defaults, context extraction, critical urgencyscripts/quick-setup.sh— Added PermissionRequest as 4th hook with distinct system soundsscripts/install-complete.sh— Registered PermissionRequest with matcherscripts/install-windows.ps1— Registered PermissionRequest with matcherconfig/default_preferences.json/config/user_preferences.json— Added permission_request entriesCLAUDE.md— Updated hook diagrams, tables, settings examplesREADME.md— Updated notification types from 9→10, added PermissionRequest documentation
Re-run your installer to register the new hook:
# Quick Setup
curl -sL https://raw.githubusercontent.com/ChanMeng666/claude-code-audio-hooks/master/scripts/quick-setup.sh | bash
# Full Install
bash scripts/install-complete.sh # macOS/Linux/WSL/Git Bash
.\scripts\install-windows.ps1 # Windows PowerShellQuick Setup on macOS 15+ (Sequoia) produced no sound because osascript notifications were silently blocked.
- Quick Setup now uses
afplayfor audio playback (works without permissions on all macOS versions) osascriptnotification kept as best-effort for desktop popups- Each hook uses a distinct system sound: Glass (Stop), Sosumi (Notification), Pop (SubagentStop)
Fixes multiple bugs that prevented correct hook registration on Windows and blocked uninstallation of modern hook_runner.py-based entries.
- Bug: Windows branch registered hooks without
|| truefallback ortimeout - Impact: A missing
hook_runner.pywould cause Claude Code hook errors instead of silent fallback - Fix: Added
|| trueto command andtimeout: 10to hook entries, matching the Unix branch
- Bug: PowerShell installer ignored
enabled_hookspreferences and always registered all 9 hooks - Impact: Users heard audio for every tool call (PreToolUse/PostToolUse), making it very noisy
- Fix: Reads
user_preferences.json(ordefault_preferences.json) and only registers enabled hooks - Also fixed: Added
|| trueandtimeout = 10to all hook commands - Also fixed: Settings.json now written as UTF-8 without BOM (was using
Out-File -Encoding UTF8which adds BOM on PS 5.x)
- Bug:
HOOK_SCRIPTSarray and Pythonhook_scriptslist did not includehook_runner.py - Bug:
endswith(script)matching failed on commands likepy "path/hook_runner.py" stop || true(command ends with|| true, not with the script name) - Impact: Uninstaller left hook entries in
settings.jsonandhook_runner.py/.project_pathfiles on disk - Fix: Added
hook_runner.pyand.project_pathto removal lists; changedendswithtoinfor substring matching
- Bug:
rm -f /tmp/claude_audio_hooks.lockfails on Windows (Git Bash) where temp is$TEMP - Fix: Uses
${TEMP:-${TMP:-/tmp}}for cross-platform temp directory
- Bug:
((removed++))returns exit code 1 whenremoved=0, causingset -eto terminate the script - Fix: Changed to
((removed += 1))which always returns 0
- Bug: Test checked for
notification_hook.shin settings.json, but modern installs usehook_runner.py - Fix: Changed grep pattern to
hook_runner.py
- Bug: Displayed
/tmp/claude_hooks_log/hook_triggers.logwhich is not the actual log path - Fix: Shows platform-appropriate path (
$TEMP/claude_audio_hooks_queue/logs/on Windows,/tmp/claude_audio_hooks_queue/logs/on Unix)
This release fixes a critical bug that prevented audio from playing on Windows installations.
- Bug: PowerShell 5.x's
-Encoding UTF8writes files with BOM (Byte Order Mark) - Impact:
.project_pathfile started with\xef\xbb\xbf, causing path resolution failure - Fix: Use
[System.IO.File]::WriteAllText()with explicit UTF-8 encoding without BOM
- Enhancement: Changed encoding from
utf-8toutf-8-sigwhen reading.project_path - Benefit: Python's
utf-8-sigcodec automatically strips BOM if present - Backward Compatible: Works correctly with both BOM and non-BOM files
The issue manifested as NO_AUDIO_CONFIG in hook trigger logs because:
.project_pathcontained\xef\xbb\xbfD:/path/...instead ofD:/path/...- Path validation failed since the BOM-prefixed path didn't exist
- Audio files couldn't be located, resulting in silent failures
This release adds comprehensive Windows native support and improves cross-platform compatibility across all environments.
- New: Native PowerShell installer for Windows users who don't use Git Bash
- Features:
- Prerequisite checking (Python 3.6+, Claude Code CLI)
- Automatic settings.json configuration
- Installation validation and testing
- Non-interactive mode (
-NonInteractiveflag)
- New: Cross-platform diagnostic utility for troubleshooting
- Checks:
- Python version and platform detection (Windows/WSL/macOS/Linux/Git Bash)
- Hooks directory and hook_runner.py installation status
- Project path configuration and audio files availability
- Claude settings.json hook configuration
- Recent hook trigger logs
- Options:
--verbosefor detailed info,--test-audioto test playback
- New: Set
CLAUDE_HOOKS_DEBUG=1environment variable to enable detailed logging - Logs include: Hook triggers, path normalization, audio playback attempts, errors
- Log location:
$TEMP/claude_audio_hooks_queue/logs/debug.log(Windows) or/tmp/claude_audio_hooks_queue/logs/debug.log(Unix)
- Path Normalization: Handles Git Bash (
/d/...), WSL2 (/mnt/c/...), and Cygwin (/cygdrive/c/...) paths - PowerShell Safety: Proper escaping of special characters in audio file paths
- Temp Directory: Cross-platform temp directory detection with multiple fallbacks
- Error Handling: Granular exception handling with detailed error logging
- Debug Output: Comprehensive logging when
CLAUDE_HOOKS_DEBUG=1is set
- Temp Directory: Uses platform-appropriate temp directories (
$TEMPon Windows,/tmpon Unix) - Path Format: Saves
.project_pathin Windows format on Windows environments - Python Detection: Prioritizes
pylauncher on Windows, thenpython3, thenpython
- Debug Logging: Added
log_debug()andlog_error()functions - Temp Directory: Cross-platform temp directory handling
- Path Functions: Unified path conversion with
hook_runner.py
- ✅ Windows Native: Full support via PowerShell installer
- ✅ Windows + Git Bash: Automatic path conversion
- ✅ Windows + WSL: PowerShell audio playback via temp file copy
- ✅ macOS: Full support (afplay)
- ✅ Linux: Full support (mpg123/ffplay/aplay)
- ✅ Cygwin: Full support with path conversion
For existing installations:
cd claude-code-audio-hooks
git pull origin master
# Re-run installer to update all components
bash scripts/install-complete.sh # Linux/macOS/Git Bash
# Or: .\scripts\install-windows.ps1 # Windows PowerShellTo enable debug logging:
export CLAUDE_HOOKS_DEBUG=1 # Linux/macOS/Git Bash
# Or: $env:CLAUDE_HOOKS_DEBUG = "1" # Windows PowerShellThis release fixes two critical issues affecting WSL users and new installations.
- Problem: Windows MediaPlayer could not access audio files via WSL UNC paths (
\\wsl.localhost\...) - Solution: Audio files are now copied to Windows temp directory (
C:/Windows/Temp) before playback - Impact: WSL users can now hear audio notifications correctly
- Technical Details:
- Modified
play_audio_internal()inhooks/shared/hook_config.sh - Automatic cleanup after playback completes
- Increased playback wait time from 3s to 4s for reliability
- Background process handles file cleanup to avoid blocking
- Modified
- Problem: Installer generated deprecated hooks format, causing Claude Code v2.0.32+ to report "Invalid Settings"
- Solution: Updated installer to generate new array-based format required by Claude Code v2.0.32+
- Impact: New installations now work correctly with latest Claude Code
- Technical Details:
- Modified
scripts/install-complete.shPython script - Old format:
"Notification": "~/.claude/hooks/notification_hook.sh" - New format:
"Notification": [{"hooks": [{"type": "command", "command": "~/.claude/hooks/notification_hook.sh"}]}] - Each hook now formatted as array of matcher objects
- Modified
- ✅ WSL users: Both audio playback and hooks format fixed
- ✅ macOS users: No changes (continues using afplay)
- ✅ Linux users: No changes (continues using mpg123/aplay)
- ✅ Git Bash users: No changes (already working)
For existing installations:
cd claude-code-audio-hooks
git pull origin master
# Update hook audio playback
cp hooks/shared/hook_config.sh ~/.claude/hooks/shared/hook_config.sh
# Re-run installer to update hooks format
bash scripts/install-complete.sh- WSL audio fix: Main development team
- Hooks format fix: Special thanks to @PaddyPatPat for identifying and documenting the hooks format issue in PR #2
This version was superseded by v3.3.3 which includes additional hooks format fix. Please upgrade to v3.3.3.
Fixed critical issues preventing successful installation on WSL and other platforms.
-
Bash arithmetic expression error with
set -e:- Replaced post-increment operators (
++) with compound assignment (+=1) - Post-increment returns 0 when variable is 0, causing
set -eto exit - Affected counters:
STEPS_COMPLETED,WARNINGS,ERRORS, and all test counters - Installation now completes successfully on all platforms
- Replaced post-increment operators (
-
Python type error in configuration validation:
- Fixed
TypeError: unsupported operand type(s) for +: 'int' and 'str' - Configuration validation now filters out comment keys (starting with
_) - Properly handles JSON files with inline comments
- Fixed
- ✅ Installation now works reliably on WSL
- ✅ All arithmetic operations safe with
set -e - ✅ Configuration validation handles commented JSON
- ✅ No breaking changes - fully backward compatible
# Before (fails with set -e when var=0)
((STEPS_COMPLETED++))
# After (works correctly)
((STEPS_COMPLETED+=1))All core scripts (install-complete.sh, uninstall.sh, configure.sh) now support non-interactive mode - enabling complete automation by Claude Code and scripts!
-
Non-interactive mode for
install-complete.sh:--yes/-y/--non-interactive- Skip audio test prompt--help- Show comprehensive usage guide- Auto-completes installation without user input
-
Non-interactive mode for
uninstall.sh:--yes/-y/--non-interactive- Auto-confirm all removals--help- Show comprehensive usage guide- Automatically removes: hooks, settings, config, audio files
- Creates backups before deletion
- Zero prompts, full automation
- Version updates:
install-complete.sh→ v3.2.0uninstall.sh→ v3.2- Added version info in script headers
-
Complete Claude Code Automation - AI assistants can now:
- Install without prompts:
bash install-complete.sh --yes - Uninstall without prompts:
bash uninstall.sh --yes - Configure hooks:
bash configure.sh --enable notification - Fully automate entire lifecycle
- Install without prompts:
-
CI/CD Ready:
- Perfect for deployment pipelines
- Scriptable setup and teardown
- No TTY required
- ✅ 100% non-interactive capability across all scripts
- ✅ Claude Code can fully automate install/uninstall/configure
- ✅ Zero user input required for automation
- ✅ Backward compatible - interactive mode still default
# Full automated installation
bash scripts/install-complete.sh --yes
# Full automated uninstallation
bash scripts/uninstall.sh --yes
# Configure hooks programmatically
bash scripts/configure.sh --enable notification stop --disable pretooluseconfigure.sh now supports both human-friendly interactive mode AND programmatic CLI interface - making it usable by Claude Code, scripts, and automation tools!
- Programmatic CLI Interface for
configure.sh:--list- List all hooks and their status--get <hook>- Get status of specific hook (returnstrue/false)--enable <hook> [hook2...]- Enable one or more hooks--disable <hook> [hook2...]- Disable one or more hooks--set <hook>=<value>- Set hook to specific value--reset- Reset to recommended defaults--help- Show comprehensive usage guide
- Batch Operations - Enable/disable multiple hooks in one command
- Idempotent Operations - Safe to run multiple times, only changes what's needed
- Clear Output - Visual indicators (✓/✗) for all operations
- configure.sh is now a dual-mode tool:
- No arguments → Interactive menu (existing functionality preserved)
- With arguments → Programmatic CLI (new functionality)
- All programmatic commands automatically save changes
- Error handling for unknown hooks (warnings, not failures)
- AI Assistant Integration - Claude Code and other AI tools can now:
- Query hook configuration programmatically
- Enable/disable hooks based on user preferences
- Automate configuration setup
- Script Automation - Easy to integrate into deployment scripts
- Backward Compatible - Interactive mode works exactly as before
- ✅ Claude Code can now configure hooks!
- ✅ Scriptable configuration - No more manual editing needed
- ✅ Batch operations - Change multiple hooks at once
- ✅ 100% backward compatible - Existing users unaffected
# Check if notification hook is enabled
bash scripts/configure.sh --get notification
# Enable multiple hooks at once
bash scripts/configure.sh --enable notification stop subagent_stop
# Mixed operations in one command
bash scripts/configure.sh --enable notification --disable pretooluseFurther simplification by removing truly unnecessary internal scripts and fixing broken references. Now only essential, actively-used files remain.
scripts/internal/detect-environment.sh(25KB) - Completely redundant- Environment detection already integrated in
hooks/shared/path_utils.sh - Never actually called - only mentioned in log messages
- Removed entire
/scripts/internal/directory (now empty)
- Environment detection already integrated in
scripts/.internal-tests/check-setup.sh(8.3KB) - Unused diagnostic script- Not called by install-complete.sh
- Had broken path references in test-audio.sh
scripts/.internal-tests/test-path-conversion.sh(5.7KB) - Never invoked- No script in the entire project calls it
- Pure legacy code
- Broken references in
test-audio.sh:- Removed reference to non-existent
./scripts/check-setup.sh - Removed reference to non-existent
docs/AUDIO_CREATION.md - Updated to point users to installer and README.md
- Removed reference to non-existent
- Misleading suggestions in
install-complete.sh:- Removed suggestions to manually run
detect-environment.sh - Replaced with advice to re-run installer
- Removed suggestions to manually run
scripts/.internal-tests/now contains only 1 file:test-path-utils.sh(8.7KB) - The ONLY test script actually used by installer- Everything else eliminated
- ✅ ~39KB of truly redundant code removed (detect-environment.sh + unused tests)
- ✅ Zero broken references - All documentation now accurate
- ✅ Ultra-minimal structure - Only files that are actually used
- ✅ No duplicate functionality - Environment detection in one place only
This release further streamlines the project structure by removing unnecessary files and hiding internal utilities from users. The goal: users clone and run ONE installation command, with ZERO confusion.
- Deleted
/examples/directory - Redundant with/config/directory- Removed outdated v1.0 example files
- Eliminated duplicate configuration examples
- Configuration examples now only in
/config/
- Deleted
/docs/directory - Empty directory, all docs consolidated in README.md - Deleted obsolete patch script -
scripts/internal/apply-windows-fix.sh- v2.x legacy patch script no longer needed
- All fixes now integrated into
install-complete.sh
- Removed personal development files - Added
.claude/to.gitignore
- Hidden internal test scripts - Renamed
/scripts/tests/→/scripts/.internal-tests/- Test scripts are auto-run by installer, users shouldn't see them
- Reduces decision paralysis and confusion
- Updated all internal references to new path
- Simplified documentation references
- Removed suggestions to manually run internal scripts
- Updated bug report template to request log files instead
- Simplified project structure diagram
- Cleaner visible file structure
- From 7 top-level directories → 5 directories
- From 21+ visible files → ~15 essential files
- Only user-facing scripts visible in
/scripts/
- ✅ Zero decision anxiety - One clear installation path
- ✅ Reduced confusion - No unnecessary files or scripts visible
- ✅ Cleaner project - ~4,100 lines of redundant code removed
- ✅ Better UX - Users focus on: Clone → Install → Use
- Uninstall Script: Fixed bash syntax error on line 115 where
localkeyword was incorrectly used outside function scope
This release focuses on simplifying the user experience by consolidating all installation, validation, and testing into a single streamlined workflow. Users no longer need to run multiple scripts or worry about patches and upgrades.
- Integrated Installation Workflow:
install-complete.shnow automatically:- Detects environment (WSL, Git Bash, Cygwin, macOS, Linux)
- Applies platform-specific fixes automatically
- Validates installation with comprehensive tests
- Offers optional audio testing at the end
- All in one smooth, automated process
- Organized Directory Structure:
scripts/internal/- Internal tools auto-run by installer (users don't need to know about these)scripts/tests/- Testing tools auto-run by installer (users don't need to run manually)
- Interactive Audio Testing: Installer now asks if users want to test audio playback
- Comprehensive Validation: Automated 5-point validation during installation
- Simplified Installation: From 6 manual steps down to 1 command
- Before v3.0: Clone → Install → Verify → Test → Configure → Restart
- v3.0: Clone → Install (everything else automatic) → Restart
- Success Rate Improvement: From 95% to 98%+ due to integrated diagnostics
- Installation Time: Reduced from 2-5 minutes to 1-2 minutes
- Upgrade Method: Now recommends uninstall + fresh install instead of upgrade scripts
- Simpler, cleaner, no conflicts with old structure
- Takes only 1-2 minutes
- Guarantees optimal configuration
- Redundant Scripts:
- ❌
install.sh- Replaced by enhancedinstall-complete.sh - ❌
upgrade.sh- Users should uninstall + reinstall for v3.0 - ❌ Manual
check-setup.shruns - Now auto-runs during installation - ❌ Manual
detect-environment.shruns - Now integrated into installer - ❌ Manual path testing - Now automatic during installation
- ❌
- Redundant Documentation:
- Removed scattered .md files (AI_INSTALL.md, UTILITIES_README.md, etc.)
- Everything now in README.md only
- Cleaner, more maintainable documentation
scripts/detect-environment.sh→scripts/internal/detect-environment.shscripts/apply-windows-fix.sh→scripts/internal/apply-windows-fix.shscripts/check-setup.sh→scripts/tests/check-setup.shscripts/test-path-utils.sh→scripts/tests/test-path-utils.shscripts/test-path-conversion.sh→scripts/tests/test-path-conversion.sh
- install-complete.sh v3.0 (was v2.1):
- Integrated environment detection
- Automatic platform-specific fixes
- Comprehensive validation (7 checks)
- Interactive audio testing option
- Better error reporting and troubleshooting guidance
- README.md:
- Updated to v3.0 with accurate script references
- Simplified installation instructions
- Removed references to deleted scripts
- Updated troubleshooting section
- Clearer upgrade instructions
- Accurate project structure diagram
- ✅ One-Command Installation: Everything handled automatically
- ✅ No Manual Testing Required: Installer validates everything
- ✅ No Patches Needed: All fixes applied automatically
- ✅ Cleaner Project: Only essential user-facing scripts remain
- ✅ Better Documentation: Single source of truth (README.md)
- ✅ Faster Installation: 1-2 minutes vs 2-5 minutes
- ✅ Higher Success Rate: 98%+ vs 95%
- Directory structure changed: Old scripts moved to
internal/andtests/ - Removed scripts: Users upgrading from v2.x should uninstall first, then install v3.0
- No upgrade.sh: Fresh install recommended for cleanest experience
For users upgrading from v2.x or earlier:
cd ~/claude-code-audio-hooks
bash scripts/uninstall.sh # Remove old version
git pull origin master # Get v3.0
bash scripts/install-complete.sh # Fresh install- Version: 3.0.0
- Scripts reorganized: 11 scripts → 4 user-facing + 5 internal/test scripts
- Installation steps: 11 automated steps (up from 10)
- Total lines of code: Reduced by removing redundancy
- Success rate: 98%+
- Installation time: 1-2 minutes
- Dual Audio System: Complete flexibility to choose between voice and non-voice notifications
- 9 new modern UI chime sound effects in
audio/custom/directory - 9 refreshed voice notifications in
audio/default/directory (Jessica voice from ElevenLabs)
- 9 new modern UI chime sound effects in
- Pre-configured Examples:
config/example_preferences_chimes.json- All chimes configurationconfig/example_preferences_mixed.json- Mixed voice and chimes with scenario templates
- Audio Customization Documentation: New comprehensive section in README explaining:
- Three audio options (voice-only, chimes-only, mixed)
- Quick-start guide for switching to chimes
- Available audio files comparison table
- Configuration scenarios for different use cases
- User Choice Philosophy: System now supports complete user customization
- Default configuration uses voice (existing behavior preserved)
- Users can easily switch to chimes or create mixed configurations
- Simple one-file configuration change to switch audio sets
- README.md updated with new "Audio Customization Options" section
- Version badges updated to v2.4.0
- Table of Contents updated with new audio customization section
- User flexibility: Users can now choose audio style based on personal preference
- Music-friendly option: Chimes don't interfere with background music
- Mixed configurations: Different audio types for different notification priorities
This release addresses user feedback requesting non-voice notification options, particularly for users who:
- Play music while coding
- Prefer instrumental sounds over AI voices
- Want different audio styles for different notification types
The dual audio system maintains backward compatibility (default voice notifications) while providing complete flexibility for users who want alternatives.
- Critical bug in configure.sh save_configuration() function that prevented saving on macOS
- Python heredoc in configure.sh now correctly passes CONFIG_FILE path using shell variable substitution
- Resolved IndexError when accessing sys.argv[1] in Python heredoc
- Full compatibility with macOS default bash 3.2
- Bash version detection in install.sh with helpful warnings
- Compatibility notes in scripts for macOS users
- Replaced bash 4+ associative arrays with indexed arrays in configure.sh and test-audio.sh
- Replaced bash 4+ case conversion operators (${var^^} and ${var,,}) with tr commands in path_utils.sh
- All scripts now work with bash 3.2+ without requiring Homebrew bash on macOS
- Refactored configure.sh to use parallel indexed arrays instead of associative arrays
- Refactored test-audio.sh to use parallel indexed arrays for configuration data
- Updated path_utils.sh to use portable tr command for case conversion
- Enhanced README with macOS compatibility information
- Automatic format compatibility for Claude Code v2.0.32+
- Git Bash path conversion fixes
- Enhanced Windows compatibility
- Path conversion issues on Git Bash
- Audio playback on various Windows environments
- Hook trigger logging system
- Diagnostic tools for troubleshooting
- View-hook-log.sh script for monitoring hook triggers
- 9 different hook types (up from 1 in v1.0)
- Professional ElevenLabs audio files
- Interactive configuration tool
- JSON-based user preferences
- Audio queue system
- Debounce system
- Automatic v1.0 upgrade support
- Complete project restructure
- Modular hook system with shared library
- Cross-platform support improvements
- Basic stop hook with audio notification
- Simple installation script
- Custom audio support