Home / Blog / A smart speaker that speaks first: Home Assistant, n8n and an AI agent behind Yandex Alice

A smart speaker that speaks first: Home Assistant, n8n and an AI agent behind Yandex Alice

A Yandex Alice speaker only answers when spoken to. In one day we wired Home Assistant, n8n and our own AI agent so that Alice answers questions about our tasks and notes, and any system can make her speak on its own. Here is how it works, why every answer comes in two steps, and where the limits are.

Home AssistantYandex Alicen8nAI agentsmart homenotifications

In short. We wanted our Alice smart speaker to become the voice of our infrastructure: speak up when something happens and answer questions about our tasks and notes. We built it from Home Assistant on a laptop, an n8n workflow and the Hermes AI agent running in a sandbox. Two directions work today: a spoken question gets an answer in 20–30 seconds, and any script can post text to a webhook and hear it from the speaker five seconds later. Below are the decisions we had to make and the limits we live with.

Diagram: Alice speaker → Yandex skill → n8n → AI agent → answer queue → Home Assistant on the laptop → back to the speaker
Diagram: Alice speaker → Yandex skill → n8n → AI agent → answer queue → Home Assistant on the laptop → back to the speaker

The problem: a speaker that only replies

We have a Yandex Station Mini at home, already running the Yandex smart home: kettle, TV, robot vacuum. But Alice only talks when addressed. A failed nightly backup or a stuck vacuum showed up in Telegram, and the phone is not always at hand.

We wanted two things. First, the speaker should announce events without being asked. Second, a question like "what tasks do I have on this project this week" should be answered by an agent that sees our task tracker and notes, not by a web search.

Home Assistant as the bridge to the speaker

We started with Home Assistant 2026.11 in Docker on a MacBook. The speaker is connected through the YandexStation integration; in this release HACS is no longer needed, the integration installs from the built-in catalog. Home Assistant then gets a "Station Mini" entity, and a single call makes it say any text. The same call with a different type runs the text as a voice command, such as "play music".

Docker on macOS runs inside its own VM, so network discovery does not see local devices; we added the vacuum, the player and the speaker by account and IP address. The laptop must also stay awake. With the lid closed it keeps working only on power with an external monitor attached.

Why every answer comes in two steps

Spoken questions arrive through a private skill in Yandex Dialogs. The skill posts the recognized text to an n8n webhook and waits about three seconds for a reply. That is not enough for an agent with tools: in our tests a task-related answer took about 25–30 seconds.

So the reply is split. n8n answers the skill right away, in about 0.6 seconds, with "Got it, checking now" and closes the session. The question then goes to the agent, and its answer lands in a queue (an n8n data table) with a copy in Telegram. Keeping the skill session open for the whole wait would leave the speaker busy and unable to say the answer itself.

The way back: the laptop pulls answers

This was the key architectural decision. The server running n8n cannot reach the laptop, which sits at home behind a router, while the laptop reaches out freely. So Home Assistant asks n8n every five seconds whether answers are waiting and hands them to the speaker.

OptionWhy we did not pick it
Expose Home Assistant to the internetanother door into the home network for one feature
Keep a tunnel from the server to homebreaks on network changes and laptop sleep
Poll the queue from the laptopchosen: nothing is exposed, up to 5 seconds of delay

Polling has a cost: about 17,000 workflow runs per day. When we briefly turned on execution saving for debugging, the n8n log collected 45 identical entries in three minutes. We moved the queue into its own workflow and stopped saving its successful runs; real questions to the agent are still logged.

The same queue is what makes the speaker proactive. We added a second webhook, "Say": any system posts text to it, the text joins the same queue, and the speaker says it within five seconds. For Alice there is no difference between an answer and a message from a script.

The agent in a sandbox

Questions are answered by Hermes, an open-source agent we already ran in Telegram. For voice it got a separate profile. A misrecognized phrase must not break anything, so the profile runs in a Docker container with only the notes folder mounted, read-only. It sees tasks through the MCP server of our OKRFlow tracker and can create a task when asked.

We tested the isolation directly by asking the agent to write a file into the notes and into a temp folder. The kernel rejected the write to the notes with "Read-only file system", and the temp file stayed inside the container; it never appeared on the server. The profile has its own access key, and the key of the full-access agent is not passed to n8n.

The agent also had to learn brevity. Early answers ran 50–60 words, close to a minute of speech. A rule of "one or two sentences, up to 20 words; for several items give the count and the one or two that matter" brought them down to about 20 words.

What we got

"Alice, ask Domovoy when the logistics contract is due" gives an instant "Got it" and, half a minute later, a short spoken answer plus the same message in Telegram. We checked the "Say" webhook with a test signal: text from a script played on the speaker a few seconds later. We used a similar no-open-ports approach for home hardware when waking a PC from vacation, and described the agent itself in an agent instead of a script.

Honest limits

  • Monitoring is not wired to voice yet. The channel is built and tested, but backup and server alerts still go to Telegram only. Before connecting them we need quiet hours so the speaker does not wake anyone at night.
  • The laptop has to be on. If it sleeps, the answer is not spoken, but it still reaches Telegram and waits in the queue.
  • Speech recognition makes mistakes. We named the skill "Domovoy", and once Yandex heard "play the movie Domovoy". Pick a skill name without homonyms.
  • Every question stands alone. The skill closes the session after "Got it", so a follow-up needs a new phrase with the skill name.
  • 20–60 seconds of delay. Fine for information, but for "turn on the light" Alice's built-in commands are better.

FAQ

Can this work without a laptop? Yes, Home Assistant runs on a Raspberry Pi or a mini PC. We started on the laptop because it was at hand, but a dedicated device is more reliable for 24/7 use.

Why not expose Home Assistant and push commands directly? Polling from the laptop needs no open ports in the home network, and up to five seconds of delay is fine for voice notifications.

Do I need a paid skill or a listing in the Yandex catalog? No. A private skill is published without review and is available only to your account, and n8n additionally rejects requests from other accounts.

What can the agent do by voice? Answer about tasks and notes, search the web and create a task in the tracker. The voice profile has no access to the servers.

→

Read next

All articles →

An AI assistant for business: taking bookings, reminders and client questions off the front desk

An assistant that only answers leaves people the hardest part: booking, reminding, inviting clients back. We added a Clients module to GraphRAG with services, schedules and message scenarios, connected Telegram, Max and a website widget, and wrote a separate gateway for regular company accounts. Here are the decisions we made, what we threw away and where the limits are.

Read →

An agent instead of a script: we moved an AI assistant's logic into data and tested it on 300 questions

Knowledge-base assistants are usually built as a pipeline (router → retrieval → answer), and every new kind of question adds a branch. In GraphRAG we replaced the pipeline with an agent that has eight tools, and moved everything that must always happen into a versioned, tested JSON harness. How it works, what a blind comparison on 300 questions showed, and where the agent still loses.

Read →

A local AI video editor: how a laptop reads a media library and cuts a clip to music from a text prompt

A trip left me with a hundred phone videos and a dozen tracks, and the editing kept slipping for weeks. So I built an app that analyzes the library with a local vision-language model, marks up the music by beats and bars, and turns one sentence into a rough cut on the timeline. What it does, which rakes I stepped on, and what it will not do.

Read →