Voice, for agents

Give your agents a voice.

Voice is a standalone app in the Lattices family. Agents and scripts send it text over one local API, and it reads the text aloud in order, showing what it reads in a small panel. With Lattices running, it also tells you when things happen: a download finishes, a build is done.

macOS 26+ · Apple silicon · signed + notarized

Speech 0.3.0 downloads as Speech.app and appears as Voice in the menu bar. Use matching Lattices app and CLI versions, 0.15.1 or later.

speech.sockAuthenticated local RPCQueue-owned playbackHUD readalong

How it works

Speaking takes one call.

An agent sends text and Voice reads it aloud. Seven more calls cover the rest: status, pause, resume, seek, stop, next and voices.

speech.sock
→ speech.enqueue { "text": "Release build finished. 34 tests passed.", "voice": "af_heart" }← { "id": "job_9f3", "state": "queued" }→ speech.status← playing · 01:58 remaining
01

Send the text

An agent or script sends the words to Voice over a local socket. It needs no speech code and no audio library.

02

Voice queues it

Voice holds the queue, picks the voice and plays each job in order. A job keeps playing if the sender exits.

03

Control playback

Pause, resume, seek, skip or stop with the same calls. A small panel shows what is playing.

Voices

Three kinds of voice.

Every provider uses the same queue and the same calls. Voice remembers a preferred voice for each provider, and a voice named in the request always wins.

offline · zero setup

System voices

The voices built into macOS. No keys and no downloads; they work as soon as Voice opens.

local neural · no account

Kokoro on-device

Kokoro downloads its model and voice assets on first use, then speaks on your Mac without a network connection or an API key.

cloud quality · your key

OpenAI TTS via Vox

Add an OpenAI key to use hosted voices such as gpt-4o-mini-tts. The key stays in the Keychain, never in settings files or logs.

Playback panel

See what it's reading.

While Voice plays, a small panel shows the text being read, its progress and what's queued next, without taking focus from what you're doing. It hides when the queue is empty, and the menu bar brings it back.

Who does what

Lattices sends. Voice speaks.

Lattices

One client among many

The Lattices app, your agents and your scripts all use the same calls. They send text and get a job id back; only Voice manages the queue.

Explore Lattices →
Voice

Handles everything after that

Voice.app does the synthesis, the queue, the audio, the panel and the voice settings. It is a separate signed app, so playback continues when a client disconnects.

Read the source →

With Lattices

Hear what your Mac is doing.

With Lattices running, Voice can announce events as they happen, so you don't have to keep checking.

Download finished

a long fetch completes in the background

Build done

a release build finishes while you read email

Agent summary

an agent finishes a task and Voice reads its result

One call to speak

Any agent or script sends text to one local socket. Voice queues it and reads it aloud, and the readout finishes even if the sender quits.

Hear when work finishes

When a task ends, its summary is read out while you keep working. Set it up once and every agent you run can use it.

See what is playing

A small panel shows the text being read, its progress and how many readouts are queued. It hides when the queue is empty.

From source

Build the next version.

Voice is written in Swift. The API server, the queue, the panel and speech providers are all in products/voice.

Upcoming source builds replace Kokoro with Phonon on the Neural Engine. The first use downloads a 137 MB model; speech then runs locally. Phonon uses a fixed speaking rate. This change is not included in the Speech 0.3.0 download above.

  • macOS 26+ on Apple silicon
  • Swift toolchain
  • No macOS permissions needed
Browse products/voice →
products/voice
$ HUDSONKIT_WITH_VOICE=0 swift test --package-path products/voiceVoice tests passed$ products/voice/tools/package.shLocal Voice.app artifact

Runs on its own

Voice manages its own queue and keeps playing when a client disconnects.