Play a lizard sound for terminal commands and Claude Code chat events.
Choose Your Mode
Terminal-only mode (quickest): install and run commands in the integrated terminal.
Claude Code mode (extra setup): add a hooks block in ~/.claude/settings.json.
Install in 30 Seconds
Open Extensions in VS Code/Cursor.
Search for Lizard.
Click Install.
Reload the window.
Terminal-Only Setup (1 minute)
Keep lizard.enabled = true (default).
Open an integrated terminal.
Run:
echo hello
Optional manual test: run command palette action Lizard: Test Sound.
Optional diagnostics: run Lizard: Show Diagnostics to print backend and config info in Output -> Lizard.
Claude Code Setup (2-3 minutes)
Open Settings:
Press Cmd + , on Mac (Ctrl + , on Windows/Linux).
In the search box, type lizard.
Turn on these toggles:
Lizard: Enabled
Lizard › Claude Hooks: Enabled
Lizard › Claude Hooks: Trigger User Prompt Submit
Lizard › Claude Hooks: Trigger Stop
Open Command Palette:
Press Cmd + Shift + P on Mac (Ctrl + Shift + P on Windows/Linux).
Run: Lizard: Show Claude Hook Setup
Copy the generated JSON snippet.
Open ~/.claude/settings.json.
Paste the generated hooks block at top level, right after enabledPlugins.
Example shape:
{
"env": {
"...": "keep your existing values"
},
"enabledPlugins": {
"...": true
},
"hooks": {
"...": "paste the full output from Lizard: Show Claude Hook Setup"
}
}
Restart Cursor.
Open a new integrated terminal.
Verification
Terminal mode checks
echo hello
You should hear the sound once when the command starts.
Claude mode checks
echo $LIZARD_HOOK_ENABLED
echo $LIZARD_HOOK_BASE_URL
claude
Send one prompt and wait for completion. You should hear sound on:
UserPromptSubmit (when you send)
Stop (when Claude finishes)
What It Does
Terminal trigger: listens for integrated terminal command-start events.
Claude trigger: listens for local Claude hook events (UserPromptSubmit, Stop).
Playback path: native OS players first, webview fallback second.
Settings
lizard.enabled: master on/off.
lizard.volume: playback volume (0 to 1).
lizard.debounceMs: minimum gap between plays in milliseconds.
lizard.preferWebview: use webview before native players.
lizard.claudeHooks.enabled: enable local Claude hook receiver.
lizard.claudeHooks.triggerUserPromptSubmit: play on submit.
lizard.claudeHooks.triggerStop: play on completion.
lizard.claudeHooks.logRequests: log request metadata in Output -> Lizard (no payload contents).
If You Installed Claude Hooks Before 0.0.3
Update to the latest version of Lizard.
Run Lizard: Show Claude Hook Setup again.
Replace your previous Claude hooks command strings once.
Reason: starting in 0.0.3, LIZARD_HOOK_TOKEN is no longer exported to the shell environment and the hook token is stored in VS Code SecretStorage instead.
Common Mistakes
Pasting hooks inside enabledPlugins instead of top-level JSON.
Forgetting to reopen terminal after enabling Claude hooks.
Keeping old hook commands that depend on $LIZARD_HOOK_TOKEN.
Troubleshooting by Mode
Terminal mode
Run Lizard: Test Sound.
Open View -> Output, choose Lizard, confirm playback logs.
Run Lizard: Show Diagnostics to print detected native backends and current settings.
On Windows, playback prefers WAV via PowerShell SoundPlayer for consistency, then tries ffplay if available.
On Linux, install one player: paplay, aplay, ffplay, or mpg123.