Hey everyone!
You know what always bugged me about AI assistants? Theyâre basically fancy voice-controlled keyboards. âTurn on lightsâ â lights turn on. Revolutionary stuff, right? ![]()
I always wanted my smart home to be more like⊠well, smart. Not just waiting for commands like a digital butler, but actually asking me what I want. Like âHey, you just got home - want me to turn on the lights and start coffee?â and I just say âyeahâ instead of barking orders at my house.
What GLaSSIST Is
Started a few months ago as a simple desktop voice assistant for Home Assistant (original post here). Sits in your tray, listens for wake words, processes commands through HA Assist. You know, the usual stuff.
But v2.0.0 is where it gets interestingâŠ
Pro tip: Works best with AI conversation agents like Claude, GPT, or Gemini instead of the basic HA conversation. They understand context much better and can handle more complex requests.
The Revolution: Interactive Prompts
Now Home Assistant can send questions TO GLaSSIST and get voice responses back. This changes everything:
Door opens â HA: âWelcome home! Turn on lights and start coffee?â
You: âYes please!â
Result: Lights on, coffee brewing, no clicking anything
High energy usage detected â HA: âWant me to optimize power usage?â
You: âDo itâ
Result: Climate adjusted, non-essential devices off
Itâs like having an actual conversation with your house instead of just shouting commands at it.
How It Works (Simple Version)
- HA detects something (motion, door, high usage, whatever)
- HA asks GLaSSIST to ask you a question via HTTP API
- GLaSSIST plays TTS
- You respond with voice
- HA AI processes your response and does the thing
No complex scripts needed - AI automatically understands context and executes appropriate actions.
Downloads & Setup
Windows: GLaSSIST-Setup.exe
GitHub: GitHub - SmolinskiP/GLaSSIST: Desktop voice-assistant application for Home Assistant with visual animations and VAD (Voice Activity Detection).
(Linux support exists but is janky - focusing on Windows for now)
Setup: Download â Run â Enter HA details â Pick wake words â Done.
Whatâs New in v2.0.0
- Interactive Prompts API - The main event
- Fixed wake word cross-activation - Basic models no longer trigger each other
- ESC key support - Instantly hide interface during gaming
- Better TTS handling - No more wrong audio playback
- Context cleanup - Conversations donât loop anymore
For the Nerds 
Tech Stack:
- Python backend with asyncio WebSocket for HA API
- HTTP server (port 8766) for receiving HA prompts
- Three.js frontend with audio visualization
- WebRTC VAD for speech detection
- 100+ OpenWakeWord ONNX models
Integration:
Add to your HA configuration.yaml:
rest_command:
glassist_prompt:
url: "http://YOUR_GLASSIST_IP:8766/prompt"
method: POST
headers:
Content-Type: "application/json"
payload: |
{
"message": "{{ message }}",
"context": "{{ context }}",
"timeout": {{ timeout | default(15) }}
}
Full setup guide with examples: INTERACTIVE_PROMPTS_SETUP.md
Fast example:
Intelligent Door Entry
- alias: "đȘ Smart Welcome Home"
description: "Context-aware arrival with personalized greeting"
trigger:
- platform: state
entity_id: lock.front_door
to: 'unlocked'
condition:
- condition: state
entity_id: person.john
state: 'home'
for: "00:00:30"
action:
- service: rest_command.glassist_prompt
data:
message: >
{% set time_away = (now() - states.person.john.last_changed).total_seconds() / 3600 %}
{% if time_away > 8 %}
Welcome back! You've been away for {{ time_away | round(1) }} hours.
Shall I activate arrival mode? Lights on, climate to comfort, and check what happened while you were gone?
{% else %}
Quick trip! Want me to resume where we left off?
{% endif %}
context: "User just arrived home after being away. If they want arrival mode, turn on lights, set comfortable temperature, and provide status update of what happened while away"
timeout: 25
Finally, a smart home that actually feels smart instead of just voice-controlled! ![]()
![]()
Feedback welcome - especially if you find creative ways to annoy your house with questions! ![]()
