
Heads-up
io.github.abhishek207Published by GitHub account abhishek207v1.7.0Updated Nov 3, 2026
Spoken voice alerts on Mac, Linux and Windows when your coding agent finishes a task or needs you.
Overview
Heads-up's local MCP server; no sign-in required; STDIO.
No AI overview yet: these facts come from the registry entry and the server itself.
Installation
In SourceWeft
- Open Heads-up in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Heads-up
Spoken alerts on your Mac, Linux or Windows PC when Claude Code finishes a task or needs you, so you can step away from the keyboard and still know when to come back.
"Hello from Kosh. I need your review."
Heads-up is a plugin for Claude Code (and Codex): a small local MCP server, a skill that teaches the agent when to speak up, and hooks. The agent calls one tool, notify_user, and your computer plays a short line: one of 20 built-in clips, or Claude's own words in the voice you picked, spoken by a free voice that runs on your computer or by ElevenLabs or Sarvam with your own key. It stays quiet when you're on a call, in Focus or Do Not Disturb, or away from home, and it can also wait until you've left the keyboard.
What it does
- 20 alerts in 7 voices (American, British, Australian and Indian; male and female), 140 built-in clips. No API key needed for these.
- Works without a key: out of the box it plays the built-in clips ("Hello. I need your review."). Project names and Claude's own words are opt-in features that switch on once you download the local voice or add your own ElevenLabs or Sarvam key.
- Local voice (free, optional): a voice model that speaks on your computer with no key and no account, in two sizes you can hear before downloading. 12 voices (American, British and Indian English), no daily limit. See Local voice.
- Project names (local voice or your key): "Hello from Brand Bakery Hub." Each project's name is recorded once, then cached.
- Which chat needs you: with several sessions open, the line opens with the chat's title as the Claude app shows it (or your
/renametitle in Claude Code): "Hello from Kosh. Thread: Fix Safari export button. I need your review." Always with the local voice; with a paid voice only on lines Claude writes itself. - Claude's own words (local voice or your key): when a fixed line doesn't say enough, Claude adds a short
message("The migration ran, but two tables need your review.") and it's spoken live. Lines are cleaned (no code or links), capped in length and cached. With a key they also count against a daily character budget. If it can't be recorded, the regular alert plays. - Any voice from your provider (your key): add voices from your ElevenLabs account or any of Sarvam's 37 speakers on the settings page. Alerts in that voice are recorded the first time each plays, or all at once.
- Your own wording (local voice or your key): change what any alert says on the settings page; only that line is recorded.
- Cost you can see: characters used today and this month per provider, plus your ElevenLabs plan's credit counter.
- Automatic alerts via Claude Code hooks: permission prompts, and turns that run longer than 2 minutes, even if Claude forgets to call the tool. Background sessions (
claude -p, SDK workers) never trigger them. - Polite by default
- Away detection (off by default): silent if you used the keyboard or mouse in the last 60 seconds. It's off because with several sessions open you're usually typing in another one when this one needs you; switch it on in settings.
- Calls and Focus: silent while a microphone or camera is in use, or while a macOS Focus or your desktop's Do Not Disturb is on. If the mic or camera comes on while an alert is speaking (dictation, a call), it stops at once.
- Stop:
headsup stop, or the Stop button on the settings page, ends the alert mid-sentence (and drops any waiting behind it). Bindheadsup stopto a key with a macOS Shortcut (or your desktop's keyboard shortcuts) if you want one keypress. - Locations: optionally only play on saved networks (Home, office), recognised by the router's hardware address. No GPS.
- Quiet hours, a gap between alerts, and an hourly limit.
- Ear-safe volume: if your computer is muted or quiet, an alert briefly turns it up, then restores it. AirPods and headphones never go above 50%; speakers never above 90%. When Heads-up can't tell what's playing the sound, it uses the headphone limit.
- Settings page at
http://127.0.0.1:4777(headsup), local only.
Requirements
- Node.js 20+ and Claude Code (or Codex), on macOS, Linux or Windows 10/11
ffmpegfor anything recorded, with the local voice or your key (brew install ffmpeg,sudo apt install ffmpeg,winget install Gyan.FFmpeg)- Optional: the local voice (about 420 MB of disk, or 210 MB for the smaller model), or an ElevenLabs and/or Sarvam API key, only for recording new lines
Platforms
headsup install checks all of this and says what's missing. On Linux it prints the install line for your distribution (apt, dnf, pacman, zypper); no helper needs building. On Windows it builds the small helper with the C# compiler that ships with Windows (.NET Framework 4), so nothing extra is downloaded. Anything Heads-up can't see is reported on the settings page and by headsup status, never treated as "not on a call".
Linux and Windows support is new in 1.7.0. Linux has been tested on PipeWire with GNOME's Do Not Disturb; other desktops are best effort. Windows is early: it hasn't run on a real PC yet, so if something doesn't work there, please open an issue. Over SSH, in a container or on a machine with no sound server, alerts are skipped with a reason instead of playing into nothing.
Install
In Claude Code, one step:
Or from a terminal, which also builds the helper your system needs and adds the headsup command:
From a checkout, npm run setup does the same with the local copy. It's safe to run again after an update. It:
- checks Node and ffmpeg, and on Linux the sound, call and keyring tools,
- builds the helper into the data folder: the call detector on macOS (needs
swiftc), the Windows helper on Windows; Linux needs none, - adds the heads-up marketplace and installs the plugin in Claude Code, and allows its
notify_usertool in~/.claude/settings.json(backup insettings.json.heads-up-backup). Without the allow rule the first alert in each session waits on a permission prompt, which defeats the point when you're away, - removes the pre-plugin setup if it finds it (MCP entry, hooks, CLAUDE.md section), so alerts don't double,
- installs the plugin in Codex too if Codex is installed; trust its hooks there with
/hooks(Codex asks again after every Heads-up update: until you do,codex execreports the hooks as Failed), - writes the
headsupcommand to~/.local/bin(%USERPROFILE%\.local\bin\headsup.cmdon Windows, the same folder Claude Code's own installer uses).
headsup uninstall takes it all out again and keeps your settings.
What the plugin contains
Check the manifests with npm run validate.
Other MCP clients
Any MCP client can run the server on its own over stdio:
That gives the client the notify_user tool. The skill and hooks only come with the Claude Code plugin, and npx headsup-mcp install builds the helper.
Use
Instructions for agents
The settings page has a box where you tell agents when to alert you and what to say, for example "Start with what you need from me, then name the task" or "Don't alert me for tasks that took under 5 minutes". Heads-up keeps the text in its own config and hands it to every agent when a session starts, in the MCP server's instructions and the notify_user tool description. Nothing is written into your CLAUDE.md or skill files, so plugin updates never wipe it. Sessions already open pick up a change after a restart. Your switches, quiet times and volume caps still decide what plays.
Local voice
A free voice that runs on your computer, for people who want project names and Claude's own words without paying for a key. It's off until you download it. On the settings page, under Local voice, play the sample of each model and of each of the 12 voices, download the one you like, then pick one of its 12 voices under Voice, "On this Mac" ("On this computer" on Linux, "On this PC" on Windows). It runs on macOS (Apple silicon and Intel), Linux (x64 and arm64) and Windows (x64; not yet tried on a real PC). From a terminal: headsup local install (full quality) or headsup local install small.
- What it is: Kokoro, an 82-million-parameter text-to-speech model, run by sherpa-onnx. The smaller model is the same one stored in 8-bit numbers, which is where its rougher sound comes from. Heads-up downloads them from their official releases, checks each file against a pinned checksum, and keeps them in the data folder. Nothing is installed anywhere else.
- One at a time: switching downloads the other model (the engine is kept) and replaces the current one, which keeps working until the new one is ready. Lines already recorded in a local voice are made again with the new model.
- What it costs: nothing per line. There's no daily budget and no limit on new project names. It uses your CPU and memory for a few seconds each time it records a new line, then frees them; after the download the settings page shows what that took on your computer. Nothing stays loaded between alerts, and lines already made are cached and play instantly.
- Speed and length: under Local voice, Speaking speed sets how fast it talks (0.7× to 1.5×), and Longest line sets how much Claude can say in one alert (1,000 characters by default, up to 2,000). It's free, so Claude is told to say everything it needs: what happened, which review, decision or input, and the options. A long line starts playing once its first sentence is ready, and the rest is made while it speaks. Paid voices keep their own, shorter limit under Claude's own words.
- Voices: 6 American, 4 British, 2 Indian (a Hindi voice reading English). For a native Indian English voice use Sarvam with your key.
- Keys still work: the local voice is one more choice next to ElevenLabs and Sarvam. If you'd rather not run a model on your computer, skip it and use a key.
headsup local removedeletes it. If you have no key, project names and Claude's own words switch off again.
API keys
Only needed to record new lines with ElevenLabs or Sarvam: project names, your wording, added voices and Claude's own words. The local voice needs no key. Add them on the settings page; they go into your system's key store (macOS Keychain, your Linux keyring, Windows Credential Manager) and are never written to a file or shown again. ElevenLabs keys are checked before they're saved (free), and the Test button speaks a few words with yours. Heads-up also reads ELEVENLABS_API_KEY / SARVAM_API_KEY from the environment, and Keychain items named elevenlabs-api-key / sarvam-api-key.
With a key, Claude's lines are sent to your provider to be spoken, so Claude is told to keep code, paths and secrets out of them, and Heads-up replaces any links, file paths, email addresses and key-like strings that slip through with "a link", "a file" and so on before anything is sent. The daily budget (1,000 characters by default) caps everything recorded automatically; what you record from the settings page isn't capped.
Where things live
- The plugin folder (Claude Code keeps it under
~/.claude/plugins/): code and built-in voices. - The data folder (or
$HEADS_UP_HOME):~/Library/Application Support/heads-upon macOS,~/.local/share/heads-upon Linux ($XDG_DATA_HOME/heads-upif set),%LOCALAPPDATA%\heads-upon Windows. It holds your settings, alert log, hook state, recordings (segments/,cache/clips/) the usage log (usage.json) and the local voice if you downloaded it (local/).
Privacy and security
- What leaves your computer: nothing, until you add a key. The local voice speaks on your computer; downloading it fetches two files from npm and GitHub and sends nothing about you. With a key, only the text being recorded (a project's name, your wording, Claude's line) goes to ElevenLabs or Sarvam, plus free calls to list your ElevenLabs voices and plan usage. No analytics, no telemetry, no other servers.
- What stays on your computer: the call, Focus, away and location checks all run locally. The mic and camera check only asks the system whether a device is in use (macOS, PipeWire, or Windows' privacy record); it never opens one or records anything. Locations are your router's hardware address, kept in your settings file. The alert log (including Claude's lines) is in the data folder above, readable only by you.
- Keys: in your system's key store (or your environment), never in a file, a log or the settings page.
headsup uninstallkeeps them in case you reinstall and prints the command to remove them. - Settings page: listens on 127.0.0.1 only, answers only to
127.0.0.1andlocalhost(no DNS rebinding), refuses requests from other websites, can't be framed by another site, and stops after 30 idle minutes. - No dependencies: plain Node and your system's own tools. The only thing fetched at runtime is the local voice, and only when you ask for it: a pinned sherpa-onnx build and Kokoro model, each checked against a SHA checksum before use.
- Found a security problem? See SECURITY.md.
Troubleshooting
hook.login the data folder has one line per hook decision and why.- The settings page's "Recent alerts" shows every alert, played or skipped, with the reason.
HEADS_UP_DISABLED=1silences everything for one process (handy for tests).- "No sound output on this machine" means Heads-up found no sound server (an SSH session, a container, a Linux box without PipeWire or PulseAudio). If sound does reach you some other way, set
HEADS_UP_ASSUME_AUDIO=1. - Linux:
headsup statussays which detectors can't see anything on your desktop (Do Not Disturb on some desktops, idle time on KDE Wayland), and those checks are simply skipped there. - Codex doesn't tell hooks whether a session is interactive, so a long
codex execrun also announces when it finishes. Claude Code's background runs (claude -p, SDK) are ignored. - Codex in full-auto ("YOLO") mode never asks for approval, so the approval alert never fires there.
Voices and credits
Voices powered by ElevenLabs (elevenlabs.io) and Sarvam AI.
- English clips: ElevenLabs voices Brian, Sarah, George, Alice and Charlie, made on the ElevenLabs free plan. Credit: elevenlabs.io. Non-commercial use only.
- Indian English clips: Sarvam Bulbul v3 voices Aditya and Priya.
- Local voice: Kokoro-82M by hexgrad (Apache-2.0), run with sherpa-onnx (Apache-2.0), which uses espeak-ng (GPL-3.0) for pronunciation. Downloaded on demand, not shipped in this package.
Lines you record with your own key are made under your own account and your provider's terms.
Contributing
Use it, fork it, change it. Outside pull requests aren't accepted and are closed automatically; bug reports are welcome as issues. See CONTRIBUTING.md.
License
Copyright (C) 2026 Brand Bakery.
The code is licensed under the GNU General Public License v3.0 (GPL-3.0-only): use, change and share it freely; if you distribute a modified version, it must stay under the GPL with its source available. The built-in clips in voices/ aren't covered by it; see voices/NOTICE.md.
Built and maintained by Brand Bakery.
Source: README.md at commit 2c577a8
Tools
0Version history
1- v1.7.0LatestNov 3, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts