Lizard
Play a lizard sound for terminal commands and Claude Code chat events.
Install in 30 Seconds
- Open Extensions in VS Code/Cursor.
- Search for Lizard.
- Click Install and reload the window.
That is enough for Terminal-only mode.
Quick Setup for Claude Code (2 minutes)
- Open settings and enable:
lizard.enabled = true
lizard.claudeHooks.enabled = true
lizard.claudeHooks.triggerUserPromptSubmit = true
lizard.claudeHooks.triggerStop = true
- Run command palette action:
Lizard: Show Claude Hook Setup
- Paste the generated hooks JSON into:
If your file already has env and enabledPlugins, add hooks right after enabledPlugins like this:
{
"env": {
"...": "keep your existing env values"
},
"enabledPlugins": {
"...": true
},
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "curl -sS -X POST \"$LIZARD_HOOK_BASE_URL/claude/user-prompt-submit\" -H \"x-lizard-token: $LIZARD_HOOK_TOKEN\" -H \"content-type: application/json\" -d \"{}\" >/dev/null 2>&1 || true",
"timeout": 5
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "curl -sS -X POST \"$LIZARD_HOOK_BASE_URL/claude/stop\" -H \"x-lizard-token: $LIZARD_HOOK_TOKEN\" -H \"content-type: application/json\" -d \"{}\" >/dev/null 2>&1 || true",
"timeout": 5
}
]
}
]
}
}
Restart Cursor and open a new integrated terminal.
Verify env vars are present:
echo $LIZARD_HOOK_ENABLED
echo $LIZARD_HOOK_BASE_URL
echo $LIZARD_HOOK_TOKEN
Quick Test
Terminal-only mode
echo hello
Claude chat mode
claude
Send a prompt and wait for Claude to finish. You should hear sound on:
- prompt submit (
UserPromptSubmit)
- response completion (
Stop)
Manual sound test
Run command palette action:
What It Does
- Terminal mode: plays sound when integrated terminal command-start events fire.
- Claude chat mode: plays sound when Claude hook events (
UserPromptSubmit, Stop) are received.
- Playback reliability: native OS players first, webview fallback second.
Settings
lizard.enabled: Master on/off switch for Lizard sounds.
lizard.volume: Playback volume from 0 to 1.
lizard.debounceMs: Minimum gap between sounds in milliseconds.
lizard.preferWebview: Try webview before native players.
lizard.claudeHooks.enabled: Enable Claude hook receiver.
lizard.claudeHooks.triggerUserPromptSubmit: Sound on prompt send hook.
lizard.claudeHooks.triggerStop: Sound on response done hook.
lizard.claudeHooks.token: Optional fixed token (blank = generated session token).
lizard.claudeHooks.logRequests: Log incoming Claude hook request payloads.
Troubleshooting
- Open
View -> Output and select Lizard.
- Confirm server startup log appears.
- Re-run
Lizard: Show Claude Hook Setup if hooks stop working.
- Re-check env vars in a new integrated terminal:
echo $LIZARD_HOOK_ENABLED
echo $LIZARD_HOOK_BASE_URL
echo $LIZARD_HOOK_TOKEN
- If terminal sound fails on Linux, install one of:
paplay, aplay, ffplay, mpg123.
Privacy/Security Note
Claude hook requests are local-only:
- server binds to
127.0.0.1
- requests require
x-lizard-token
No external hook endpoint is required.