Assist Satellite: expose supported conversation reset/end controls and configurable session timeout #4568
Unanswered
egaryw2011
asked this question in
Core functionality
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Describe your core improvement
Add supported Assist Satellite conversation-lifecycle controls so a satellite can explicitly end/reset its retained Home Assistant conversation without starting another pipeline or announcement. Ideally this would include an assist_satellite.end_conversation or assist_satellite.reset_conversation action, a configurable conversation/session timeout, and an option or policy where a new explicit wake-word invocation starts a fresh Home Assistant conversation while an STT-only hands-free follow-up preserves the existing conversation.
Current limitations
Assist Satellite currently retains its Home Assistant conversation_id across pipeline runs. When an LLM returns continue_conversation=true, Home Assistant stores that agent as continue_conversation_agent and the next turn becomes _intent_agent_only, deliberately bypassing local sentence triggers and Prefer local intents.
This is correct for a genuine hands-free answer to the LLM's follow-up question. The problem is that an explicit new wake-word activation also reuses the retained Home Assistant conversation_id, so an unrelated command such as "turn off the kitchen lights" can still be forced back to the LLM instead of being handled by the local Home Assistant intent.
ESPHome already distinguishes these cases: an explicit device wake starts at WAKE_WORD, while a hands-free continuation starts at STT. ESPHome's own 30-second conversation timeout has also been verified to work, but it does not reset the Home Assistant-side ChatSession because Assist Satellite maintains its own conversation_id.
Home Assistant currently has a hard-coded ChatSession timeout of 5 minutes plus periodic cleanup. The public Assist Satellite actions expose announce, start_conversation and ask_question, but there is no supported end/reset conversation action. start_conversation creates a fresh session internally but also announces/starts a new listening pipeline, so it is not suitable as a session-reset mechanism.
Technical benefits
Gives Assist Satellite integrations and automations a supported way to control conversation lifecycle without modifying Home Assistant Core or private state.
Preserves genuine multi-turn conversations while allowing a new explicit wake word to represent a new user invocation.
Prevents stale LLM follow-up ownership from temporarily bypassing Prefer local intents.
Improves deterministic Home Assistant control when an LLM is used only as fallback.
Allows installations to align Home Assistant conversation lifetime with the actual satellite follow-up window, for example 30 seconds.
Avoids fragile workarounds such as modifying CONVERSATION_TIMEOUT, deleting hass.data entries, changing private _conversation_id attributes, or patching Core files that will be overwritten on update.
Provides a cleaner platform capability for ESPHome satellites and future voice integrations rather than requiring each implementation to invent its own workaround.
Additional context
No response
All reactions