Skip to Content
DocumentationApp CatalogCompanion Apps🎙️ Home Assistant Voice PE

🎙️ Home Assistant Voice PE

Your Voice PE, answered by your Companion. Companion Voice connects the Home Assistant Voice Preview Edition  to a Companion that runs on your own hardware, answers with your local model, and remembers what matters to you through Companion Memory.

The guided setup is built in your browser. The keys it generates are never sent to Companion Intelligence.

Get a Companion Core, a personal AI appliance and local server, or download Companion Hub to turn a computer you already own into one.Buy Companion Core →Download Companion →Back to ci.computer

Status: available. Run it with Docker on any computer on your network, or install Home Assistant Voice from the Companion Hub store, where it is listed as version 1.1.0 and needs Companion Hub 0.2.41 or newer. The guided setup at ha.ci.computer  covers both paths and checks your install at the end.

What it adds to Home Assistant

Companion Voice runs a small Wyoming  server on TCP port 10700. Home Assistant’s built-in Wyoming Protocol integration turns it into three services, which you can use together or on their own:

ServiceShows up in Home Assistant asWhat it does
companion-conversationConversation agentAnswers with your local model, grounded in Companion Memory
companion-sttSpeech-to-textTranscribes through the speech server you choose
companion-ttsText-to-speechSpeaks the reply through the speech server you choose

The simplest setup uses only companion-conversation and keeps Home Assistant’s own faster-whisper and Piper add-ons for speech. No custom components are needed.

How a question travels

The Voice PE hears its wake word on the device. Home Assistant’s Assist pipeline turns speech into text and hands it to the voice bridge, which asks the Companion API for an answer, drawing on your memory first.

Set it up

Install from the store

In Companion Hub, open the store, search for Home Assistant Voice and install it. It needs Companion Hub 0.2.41 or newer. Hub connects it to the models it already runs, so there is nothing to configure.

Approve Companion Memory

Hub asks you to approve a key for the app. The key reaches only your memory, to recall and to save conversations. It cannot delete anything. See API keys for how scopes work.

Continue in Home Assistant

Follow Connect Home Assistant below, using your Hub’s address as the host.

Connect Home Assistant

Add the Wyoming Protocol integration

Open Home Assistant: add Wyoming . Enter the host from the step above and port 10700. Home Assistant lists companion-stt, companion-tts and companion-conversation.

Create the assistant

In Voice assistants , add an assistant called Companion:

SettingSimplest setupFully local or cloud speech
Conversation agentcompanion-conversationcompanion-conversation
Speech-to-textfaster-whisper (add-on)companion-stt
Text-to-speechPiper (add-on)companion-tts
Wake wordOn the deviceOn the device

Give it to the Voice PE

On the Voice PE’s device page , set Assistant to Companion. Say the wake word and ask something only your Companion would know.

Choose how it speaks

SetupSpeech-to-text and text-to-speechLeaves your home
Simplest (recommended)Home Assistant’s faster-whisper and Piper add-onsNothing
Fully local voiceWhisper and Kokoro in a bundled speaches  container, or Hub’s speech enginesNothing
Cloud speechOpenAI Whisper and TTSAudio for transcription and speech only; answers stay local

Companion Memory

With memory connected, every answer starts by fetching your profile context and the memories most relevant to what you asked, within a 1.5 second budget. They reach the model as reference data, never as instructions. After the answer, the exchange is saved as a conversation from ha-voice-pe, grouped by Home Assistant’s conversation, so it shows up in your memory like any other chat.

  • Scope: the key needs only the memory scope. Under Hub, the connect flow creates exactly that. For Docker, create one in Companion Memory under Settings, API keys, as described in Connect Companion Memory.
  • Saving is optional: set CI_MEMORY_SAVE_TURNS=false to recall without saving.
  • Resilient: if memory is slow or offline, the assistant still answers, without it.

Configuration

The Docker .env from ha.ci.computer sets everything. The variables you are most likely to change:

VariableDefaultWhat it controls
CI_MODELollama:llama3.2The model that answers. Small models reply fastest.
LANGUAGESenLanguages offered to Home Assistant
SYSTEM_INSTRUCTIONSConcise assistantHow your Companion speaks
CI_MEMORY_URL, CI_MEMORY_API_KEYemptyCompanion Memory address (ending in /api behind its gateway) and key
STT_BASE_URL, TTS_BASE_URLemptyAn OpenAI-compatible speech server, for Companion speech
CI_TTS_VOICEalloyVoice for Companion speech, for example af_heart with Kokoro
WYOMING_ZEROCONFfalseLet Home Assistant discover the bridge by itself (needs host networking)

Check your setup

The last step at ha.ci.computer  asks your server what it is connected to and shows each part: the API, your key, the model, speech and memory. From any computer on your network you can ask the same thing:

curl http://<host>:8080/health curl -H "Authorization: Bearer $MASTER_API_KEY" http://<host>:8080/v1/status

Under Companion Hub, use the Voice API key from the app’s page in Hub as MASTER_API_KEY, and the address where your Hub exposes the app’s API in place of <host>:8080.

Troubleshooting

Home Assistant cannot connect Wyoming is plain TCP, not a web address. Enter only the IP and port 10700, and make sure no firewall blocks it. From the Home Assistant host, nc -vz <ip> 10700 should succeed.

The Voice PE lights up but never answers Run the check. A failing language model usually means the model is still downloading or was never pulled.

Speech-to-text returns nothing With fully local voice, download the speech models once (the setup page lists the two commands). With the simplest setup, choose faster-whisper and Piper in the assistant instead of the companion services.

Answers do not use my memory The key needs the memory scope, and the address must end in /api when you reach Companion Memory through its gateway. The check shows the exact error.

The web check fails but curl works Browsers block an https page from calling a plain http address on your network. Serve the API over https with Tailscale Serve or a Cloudflare Tunnel, or trust the curl result.

Last updated on