Local Conversations with Home Assistant Voice Assist

It is now possible for Home Assistant to ask YOU a question and you be able to answer conversationally. This does not require that you use an LLM. It is all handled locally.

Local Conversations with Home Assistant Voice Assist

The Home Assistant roadmap promised to make Assist, Home Assistant's own voice assistant, more conversational. In the July 2025 release of Home Assistant, they did just that. It is now possible for Home Assistant to ask YOU a question and you be able to answer conversationally. This does not require that you use an LLM. It is all handled locally. If you don't have the local hardware power for this and you subscribe to the Nabu Casa cloud, you can use their hardware for super-fast responses.

Be sure to watch my video on this topic.

Video

How does this work, you ask? It relies on automations in Home Assistant. This follows the normal automation path. Trigger->Conditions->Actions.

Let's first create a trigger. For testing and demo, I created a helper that I can toggle on and off. Eventually, I will apply this to the garage door or some lights, etc., but to keep the peace and the acceptance factor, I don't want to experiment with "production" household items. If you want to play around first, I recommend creating a fake entity like this.

The generic helper I created for demo and testing.

On to the automation. Navigate to Settings -> Automations and Scenes (or use the 'c' key shortcut and type automations). Once there, click on the blue CREATE AUTOMATION button on the bottom right of the screen. Choose Create new automation.

Dialog with multiple new automation selections

On the next screen, you will need select a trigger. In the "When" section, click on "Add Trigger".

Dialog for adding a trigger to fire off the automation.

You will want to select the device you want to interact with. This could be your garage door, a light, a door lock, etc. In my case, I'll use the test helper I set up. You will also want to select the criteria and the amount of time to wait. I want the trigger to happen when the entity moves to an "on" state, and that entity remains in that state for 10 minutes.

The trigger options showing the generic helper moving to an on state for 10 min.

You can add additional conditions if you want via the "And if (optional)" section if you want, but I will skip that for now. Next, you will want to add the "Then do" settings and actions. I will start by adding an Assist satellite action and then an Ask question sub action. This will allow me to send a sentence to my assist speaker and start the conversation.

On the next screen, you need to select the entity you are going to have the conversation with. This will be an Assist satellite. You need to enter the question that will be asked based on what you set for the trigger above. In my case, I'm going to ask about the kitchen light for demo purposes, even though I am just using a fake helper.

Most importantly, you need to provide some answers by clicking the ADD button in the answers section. We'll create a "yes" and "no" answer.

Fill in the values in the action

The Answer ID is important as that is how we will determine what action(s) to take based on how you answer the question. The sentences are all the different ways you can so "yes" to the question.

You need to do the same thing for the "no" option

Add sentences for the "no" answer ID

Once you have added both of these by clicking ADD on the bottom of each sentence box, you will see the sentence displayed in the Answers section. You also need to populate the Response variable box. You can put whatever word you want in there. I'll use the word "response". We'll need this later.

Insert a response variable. This is required.

After doing the above, you will create another action. This time, it will be a "Choose" action. This allows us to set a couple of conditions based on whether you responded yes or no to the question.

Dialog showing the action type "choose"

We will then select the ADD CONDITION option and select template as the option type.

Dialog showing the selection of the ADD CONDITION action under option 1.
Dialog showing the Template option for the ADD CONDITION action

This is where you will post some yaml (don't be scared of yaml). In this case, it is one line that evaluates the response id you set above. You will need to change the word "response" to whatever word you used. In this case, you answered yes to the question this template will evaluate to true.

Fill in the value template with {{ response.id == 'yes' }}

We need to add two actions now (or more if you want) to this condition. The first will be to have the satellite say something back to you and the second will be to turn off the light, or helper in my demo case.

Add an action under the first option

This time will select Assist satellite and then Announce. Choose the same satellite that set above to ask the question and then input a sentence you want the device to say when responding yes.

Add the section action by again choose the ADD ACTION button under Option 1. In my case I will turn off the input boolean helper I created for this demo.

Choose the device or entity that you will perform the action on. In my case it is the simulated light using an input.boolean

You will now add a second option to provide a response if you tell Assist not to do anything based on the "no" responses set above.

Add a second option for the choose action

Add a template condition just like you did for the "yes" response and this time set it to equal "no".

Fill in the same yaml as above for the template except this will be for the 'no' ID

Add another Assist announce action to state whatever you want to say when you aren't going to have Home Assistant do anything.

Fill in the values for the 'no' response ID

...and that's all there is to it. You now have a conversational automation with Home Assistant, with Home Assistant starting the conversation and you responding with whatever you want Home Assistant to do.

Did you know that there is an easier way? The Home Assistant team has already created a blueprint that you can use. If you are not familiar with blueprints, you can read about them here. In addition to making it easier to set things up, as of this writing there are already 49 different "yes" response options and and equal number of "no" responses.

            answers:
              - id: "yes"
                sentences: 
                  - "Yes"
                  - Sure
                  - Absolutely
                  - Go ahead
                  - Please do
                  - Of course
                  - That's fine
                  - Do it
                  - Yep
                  - Yeah
                  - Ok
                  - Okay
                  - Affirmative
                  - I agree
                  - Sounds good
                  - You got it
                  - Definitely
                  - By all means
                  - Why not
                  - Indeed
                  - Confirmed
                  - Let's do it
                  - Certainly
                  - Right
                  - Fine
                  - All good
                  - Make it so
                  - I approve
                  - That's right
                  - I'm okay with that
                  - No problem
                  - Go for it
                  - Sounds fine
                  - I'm on board
                  - Proceed
                  - It's a yes
                  - I'm in
                  - Okay yes
                  - That's a yes
                  - Yeah go ahead
                  - I'm good with that
                  - Positive
                  - Do that
                  - It's okay
                  - Works for me
                  - I'm fine with that
                  - Yep do it
                  - Please go ahead
                  - That's what I want
                  - Exactly
              - id: "no"
                sentences: 
                  - "No"
                  - Nope
                  - Don't
                  - Please don't
                  - No thank you
                  - I don't think so
                  - Not now
                  - That's a no
                  - I'd rather not
                  - No way
                  - Not really
                  - Cancel that
                  - Negative
                  - Stop
                  - Don't do it
                  - I said no
                  - No need
                  - Never mind
                  - Not necessary
                  - No that's not right
                  - I disagree
                  - Skip it
                  - Don't proceed
                  - I don't want that
                  - Don't go ahead
                  - Leave it
                  - That's incorrect
                  - I prefer not to
                  - No thanks
                  - I'm not okay with that
                  - I'm saying no
                  - Let's not
                  - Not this time
                  - I'm not in
                  - Please don't do that
                  - Don't take action
                  - I'd say no
                  - No action needed
                  - I'm against that
                  - I'd skip it
                  - Rather not
                  - Not today
                  - I'm not sure better not
                  - That's not what I want
                  - That won't be necessary
                  - I don't agree
                  - No that's wrong
                  - Let's skip that
                  - I'm not comfortable with that

Using the blueprint is as simple as importing by click the blueprint link and adding it to your Home Assistant instance. Once imported, you will find it in your blueprints section. Click on the 3 dots on the right hand side and create a new script (this is a script type blueprint).

Create a script by clicking the overflow dots or simply click the blueprint.

In the script, I filled everything like you see below and saved it. It will ask you to rename it and then it will be saved under the Scripts section. An added benefit of using this blueprint is the ability to set retries in case Assist didn't understand your response as well as set a custom response for this scenario. This is done in the "Other responses" and "Advanced parameters" sections.

Fill out all the value in the blueprint, including the advanced retries section

You can now use this in your automation. In the example automation I created in this post, you would replace all the action items in the "Then do" with this simple script.

In the previous automation, replace all the Then Do actions with this script

Choose your Voice assistant for the conversation to happen and choose if you want the preannounce to play.

Choose the assist device from the screen that shows up when selecting the script as the action.

Using a blueprint greatly reduces the amount of work needed to build a useful automation. This is the full yaml for the above automation using the blueprint.

alias: Demo 3 voice ask test
description: ""
triggers:
  - trigger: state
    entity_id:
      - input_boolean.generic_toggle_for_voice_ask_test
    to: "on"
    for:
      hours: 0
      minutes: 0
      seconds: 5
conditions: []
actions:
  - action: script.demo_ask_a_if_kitchen_light_should_be_turned_off
    metadata: {}
    data:
      preannounce: true
      voice_assistant: assist_satellite.home_assistant_voice_0900d7_assist_satellite
mode: single

You would create scripts using the blueprints for all the various conversations you want to have. There will likely be more blueprints and examples from the community that will showcase this new feature. All I need now are more Assist satellites around my house.

That's it. I showed you the long way and the shorter way of creating a voice conversation in Home Assistant. Now you can use your imagination to create other conversations based on what you want Home Assistant to do for you.