Earpiece

← Agents

Voice notifications for Claude Desktop and Cowork

Give Claude a long research task or a Cowork job and step away. When it's done, or stops to ask you something, Claude tells you out loud in one sentence. Free and open source.

What you hear

One short line, written by Claude itself, at the end of a reply that did real work:

  • Done: “Trip planning. Booked options are in the doc, the Lisbon hotel is the cheapest.”
  • Needs you: “Quarterly report. Should I use last year’s numbers for the comparison?”
  • Error: “Inbox cleanup. I couldn’t reach the mail connector, nothing was changed.”

Quick chat replies stay silent on purpose. You hear Claude when there’s something worth stepping back for.

Set it up in the app

  1. Download Earpiece and open it. The first builds are unsigned, so macOS asks you to allow it once under System Settings → Privacy & Security → Open Anyway.
  2. Open Agents and click Connect next to Claude Desktop. It shows Connected when it’s done. Connecting only edits the file shown there, and keeps a backup.
  3. Quit and reopen Claude Desktop, so it starts the Earpiece server.
  4. Click Test voice at the top of the Overview page to hear it.

Agents

Earpiece listens to each agent in the way that agent supports. Connecting only edits the file shown, and keeps a backup.

Claude DesktopChats and Cowork. Claude calls an earpiece_notify tool when it finishes real work or needs you, and writes the line itself. Quit and reopen Claude Desktop after connecting.
Connected
How
MCP server in claude_desktop_config.json
Speak for this agentTurn off to mute it without disconnecting.
Name Earpiece saysUsed when announcing the agent. Leave empty for the default.
VoiceA Smallest voice id just for this agent, so you can tell them apart. Empty uses your main voice.
Claude CodeTerminal Claude Code, and the Code tab in Claude Desktop if it runs your hooks.
Connected
How~/.claude/settings.json
Hooks in ~/.claude/settings.json
Speak for this agentTurn off to mute it without disconnecting.
Name Earpiece saysUsed when announcing the agent. Leave empty for the default.
VoiceA Smallest voice id just for this agent, so you can tell them apart. Empty uses your main voice.
Minimum turn lengthSeconds. Shorter turns stay silent. Empty uses 30 s.
CodexCodex CLI. An existing notify command keeps working.
Connected
How~/.codex/config.toml
notify in ~/.codex/config.toml
Speak for this agentTurn off to mute it without disconnecting.
Name Earpiece saysUsed when announcing the agent. Leave empty for the default.
VoiceA Smallest voice id just for this agent, so you can tell them apart. Empty uses your main voice.
Minimum turn lengthSeconds. Shorter turns stay silent. Empty uses 30 s.

Any other tool can talk to Earpiece with the command line: earpiece emit --agent my-tool --type turn_end --line “Build finished”. It shows up here once it has sent something.

The Agents page of the Mac app, with Claude Desktop first. It's a working copy: click around.

The Claude Desktop card on the Agents page shows where the server is registered: an MCP server in ~/Library/Application Support/Claude/claude_desktop_config.json.

Make it yours in the app

SettingWhereWhat it does
Speak for this agentAgents → Claude DesktopMutes Claude Desktop without disconnecting it.
Name Earpiece saysAgents → Claude DesktopThe name used when lines announce the agent.
VoiceAgents → Claude DesktopA voice just for Claude Desktop, so you can tell it apart from your coding agents.
Say the agent’s nameVoiceStarts each line with the agent’s name instead of just the topic.
Quiet for a whileQuietNothing is read aloud, but every update still shows in the notch.
Quiet hoursQuietSilence at night, with “Still say” to let “needs you” through.
API keysAPI KeysOptional Smallest.ai key for natural voices. No OpenAI key needed here.

Only one line plays at a time across Claude Desktop, Claude Code and Codex.

Prefer the terminal?

Install from source and connect only Claude Desktop, then quit and reopen Claude Desktop:

Terminal
git clone https://github.com/adissocrazy/earpiece.git
cd earpiece
node bin/earpiece.mjs install --only claude-desktop
npm link
earpiece test

The installer adds one entry under mcpServers, roughly like this, and backs up the file first:

claude_desktop_config.json
{
  "mcpServers": {
    "earpiece": {
      "command": "/path/to/node",
      "args": ["/path/to/earpiece/bin/earpiece.mjs", "mcp"]
    }
  }
}

Your other MCP servers are left alone. If your organisation set up its own Claude build with a separate settings folder, that one gets the server too. earpiece uninstall removes the entry, the same as Disconnect.

How it works: a small MCP server

Claude Code and Codex have hooks, so Earpiece listens to them. Claude Desktop doesn’t. Instead, Earpiece adds a local MCP server, earpiece mcp, to claude_desktop_config.json. It gives Claude one tool, earpiece_notify, and tells Claude to call it once, as the last step, when a reply:

StatusWhen Claude sends it
doneIt finished multi-step work: tool calls, files, research, code.
needs_inputIt stops to ask you a question or needs a decision or approval.
errorIt couldn’t finish because something failed.

Claude writes the sentence itself and adds a short topic name for the conversation, so you know which chat it was. The server runs on your Mac over stdio and talks only to the Earpiece app.

  • Claude decides when to speak. With no hooks, Earpiece relies on Claude calling the tool at the end of real work. It usually does.
  • No summary key needed. Claude already wrote the line, so nothing from the chat is sent anywhere for a summary. Your Mac’s voice reads it for free, or use a natural voice with your own key or Earpiece Pro.

What the server enforces

  • Speakable lines only. Markdown and code are stripped, links become their domain, file paths their file name, and IDs and secrets are dropped. Lines are cut to about 25 words.
  • No loops. The same update twice within a minute is skipped, and more than five calls a minute are refused, with a note telling Claude to call once per reply.
  • Claude knows what happened. The tool result says whether the line was queued, or held back because Earpiece is off, in quiet mode or inside your quiet hours.

Questions

Does it work in Cowork?

Yes. The server is available to Claude in chats and in Cowork.

I added Earpiece but hear nothing.

Quit and reopen Claude Desktop so it starts the server, then give Claude a task with a few steps. A one-line answer is meant to stay silent.

Does my chat leave my machine?

No summary is needed, so the chat isn’t sent anywhere by Earpiece. If you use a natural voice (your own key or Pro), the one spoken sentence goes to the voice provider to be read aloud (through our server on Pro).