Claude Code’s progress now speaks through an Echo Dot

A developer linked Claude Code to an Echo Dot through Home Assistant, turning long-running tasks into spoken Japanese updates , after working around SSH, authentication and storage snags.

A developer has described building a Home Assistant-based bridge that lets Claude Code announce its progress through an Echo Dot, turning a silent terminal workflow into spoken status updates in Japanese. In the account, the author says the system reads out brief messages such as when a task is starting and when it has finished, which makes it easier to follow long-running jobs without keeping the screen in view. The project also served as a live test of the setup while the article itself was being written, with the Echo Dot reportedly speaking progress updates from the study as the draft moved through revision and verification.

At its core, the arrangement links Claude Code to a Home Assistant instance over SSH, then uses a Python script to call Home Assistant’s REST API and send text to an Alexa notification entity. The author says the working path was to generate a short-lived token, authenticate to Home Assistant, and target an Alexa device through the notification service. Home Assistant’s Alexa Devices integration supports Echo-class hardware and distinguishes between Speak and Announce entities, with Announce adding a chime before the message is read aloud.

The implementation only settled after several technical setbacks. According to the author, the Home Assistant SSH add-on rebuilds its authorised keys from configuration at start-up, so manual edits do not survive a restart. The same setup also disabled SFTP in practice, which meant modern scp transfers failed because OpenSSH expects an SFTP subsystem for file copy operations. That left two workable transfer methods: piping the script over ssh or forcing the legacy scp protocol with the -O option. The add-on repository notes that SFTP behaviour can depend on configuration, but the general limitation described by the author matches the broader protocol model documented by OpenBSD.

Authentication and storage introduced two further constraints. Home Assistant’s REST API expects a bearer token in the Authorization header, and service calls follow the POST /api/services// pattern. Rather than creating another long-lived credential in the interface, the author built a short-lived JWT from data in Home Assistant’s .storage/auth file and used that token for each request. The script itself had to live in a persistent location under /homeassistant/scripts, because /tmp is volatile in Home Assistant environments and can be cleared on restart. Home Assistant’s shell command documentation makes the same distinction between persistent configuration storage and temporary paths.

Once those problems were cleared, the result was a small but useful layer of feedback for day-to-day development. The author says the feeling of not knowing what Claude Code is doing during a multi-step task largely disappeared, because progress can now be followed by sound alone. The same mechanism has also been repurposed for CI completion notices and other long-running shell commands. In effect, the system reduces to a short chain: ssh to Home Assistant, mint a token, call the REST API, and trigger Alexa Announce. The lesson from the project is less about home automation itself than about how a few apparently minor implementation details, from disabled SFTP to non-persistent storage, can determine whether a toolchain works at all.

Disclaimer: This content is intended for informational purposes only. Readers are advised to exercise their own judgement, conduct due diligence, or consult a qualified expert before acting on any information provided.