@kivimedia/call-me-skill
v0.4.1
Published
Voice-alert skill for Claude Code: Claude calls your name when it needs your attention, with a short SFX chime and a desktop number cue.
Maintainers
Readme
call-me-skill
Claude Code calls your name out loud when it needs your attention.
You're deep in another window. Claude finishes a long task, hits a question it can't answer, or fails a build. Instead of a beep you might miss, it plays a short musical sting and says:
"Ziv, my man, calling from desktop 2: render finished."
Built for Windows. Uses your existing ElevenLabs voice for TTS and ships with 10 pre-bundled Lyria 2 intro chimes you audition during setup.
v0.2 (new): background hotkey daemon. Double-tap Ctrl to jump straight to the desktop + window that called you. Win+Ctrl+1..9 to jump to any desktop (works around the broken built-in shortcut).
Why
Beeps blend in. A short chime + a real voice saying your name + which desktop the calling window is on cuts through everything else you're doing. The desktop number tells you exactly where to look. With the v0.2 daemon running, you don't even need to look - just double-tap Ctrl and you're there.
Install
npm install -g @kivimedia/call-me-skill
call-me-skill setupThe wizard asks 8 questions:
- Your name - what Claude calls you ("Ziv")
- Your gender - shapes complimentary phrasing ("you nailed it" vs "she nailed it")
- Helper gender - male / female / neutral, drives the addressing style ("my man" / "my dear" / "friend")
- Sentence length - short / medium / long
- Intro music - audition any of the 10 bundled Lyria chimes, pick one or
none - ElevenLabs API key - get one at https://elevenlabs.io/app/settings/api-keys
- Voice picker - lists the voices in your ElevenLabs account; the default Adam voice is excluded so you have to pick something distinctive
- Test alert - plays a "setup complete" call so you can hear the result end to end
Config lives in ~/.config/call-me-skill/config.json. Secrets go in
~/.config/call-me-skill/.env with 0600 perms. Nothing is ever written to
the repo.
Use
From the command line
call-me-skill speak "render finished"
# Plays: <chime> "Ziv, my man, calling from desktop 2: render finished."Options:
--length short|medium|long Override the configured sentence length
--no-intro Skip the intro chimeHotkey daemon (v0.2)
call-me-skill daemon start # background process, survives terminal close
call-me-skill daemon status
call-me-skill daemon stopOnce running, two hotkeys work globally:
- Double-tap Ctrl within 400ms -> jumps to the desktop + window of the
last
speakcall. The double-tap state machine resets on any other key press, so Ctrl+C / Ctrl+V / Ctrl+T won't trigger it accidentally. - Win+Ctrl+1..9 -> jumps to desktop 1..9. (The built-in Windows shortcut for this is unreliable on some machines.)
Manual jump (no hotkey):
call-me-skill jump 5 # jump to desktop 5The daemon writes a log to ~/.config/call-me-skill/daemon.log so you can
see what it's doing. PID lives at ~/.config/call-me-skill/daemon.pid.
From a Claude Code skill
Add it to any Claude Code project as a skill:
---
name: call-me
description: Call Ziv out loud when you need his attention
---
When you finish a long task, hit a question you can't answer, or need
human input, run:
call-me-skill speak "<one short sentence about what's up>"
Keep the message under 8 words. The skill prepends "{name}, calling from
desktop {N}, " automatically.Then in any conversation: /call-me and the model will use it.
How it works
- Compose - reads your config, picks a random phrasing template for your
helper gender + chosen length, substitutes
{name},{address},{desktop},{message}. - Detect desktop - finds which desktop the calling process lives on.
When invoked from a VS Code / Cursor / Antigravity terminal (which sets
VSCODE_PID/CURSOR_PID/ANTIGRAVITY_PIDautomatically), the CLI resolves that PID's main-window HWND and asksIVirtualDesktopManager::GetWindowDesktopId(hwnd)for its desktop GUID, then matches againstHKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\VirtualDesktops. This is the correct answer when an automated agent like Claude Code callsspeakfrom a different desktop than the one the human is currently looking at. To force a specific PID, setCALL_ME_PID=<pid>in env. When no PID env var is set (interactive shell, manual CLI use), falls back to the foreground-desktop registry lookup. Also captures the foreground window handle (used by the daemon to jump back). - TTS - sends the sentence to ElevenLabs with your chosen voice.
- Play - PowerShell
System.Windows.Media.MediaPlayerplays the intro chime then the speech, back to back. End users only hear the first ~2-3s of each 30s Lyria clip - playback is capped at the queue level.
Roadmap
v0.1 (shipped):
- [x] CLI:
setup,speak - [x] 10 bundled Lyria intro chimes
- [x] ElevenLabs voice picker (excludes default Adam)
- [x] Gender-aware phrasing templates (3 helpers x 3 lengths)
- [x] Windows desktop number detection
v0.2 (this release):
- [x] Hotkey daemon - background process that listens for:
- [x] Double-tap Ctrl: jump to the desktop + window of the last call
- [x] Win+Ctrl+1..9: jump to desktop N (works around the broken built-in shortcut)
- [x]
jump <N>subcommand for manual desktop switching - [x] No native binary needed - desktop switching uses synthetic Win+Ctrl+Arrow
keypresses via
SendInput, so we ship pure Node + PowerShell
v0.3 (next):
- [ ] Voice mode toggle -
call-me-skill mode on|off. When on, Claude Code's Stop hook auto-firesspeakwith a short summary every time the agent stops. - [ ] macOS / Linux support (Mission Control / GNOME Activities)
- [ ] npm publish to
@kivimedia/call-me-skill - [ ] Configurable hotkeys - let users rebind double-Ctrl to triple-Alt etc.
Maintainer notes
The 10 bundled intros are Lyria 2 generations. To regenerate them:
GOOGLE_VERTEX_SA_JSON_FILE=C:/path/to/sa.json npm run gen-introsThe service account needs roles/aiplatform.user on a project with the
Vertex AI API enabled and access to lyria-002 in us-central1.
End users do not need any Google credentials - the WAVs ship with the package.
License
MIT (c) 2026 Kivi Media. See LICENSE.
