Inspiration

Before writing any code, I read what Echo owners write when their smart home breaks. The same story showed up again and again.

"I'll say turn off the living room lights and she'll tell me she can't find the device. I say the exact same thing again five seconds later and suddenly it works."

"I tried to turn off the light. Had to freaking check if it's off or not."

"Customer support had me completely remove all of the smart devices and said I had to rebuild all of my routines from scratch."

The most helpful review of the Alexa app on Google Play, out of more than 18,000, says simply: "Alexa says OK when nothing happens." Another owner woke up to find every plug in the house switched on, asked Alexa what happened, and got "might have been a power failure or a router problem." Even The Verge's one year review of Alexa+ ended with a reviewer who had re-added 55 Hue devices six times in a year: "That is an assistant I would pay money for."

Alexa+ got smarter at talking. Nobody made it better at finding out why your house is broken. When a device fails today, Alexa guesses, support tells you to start over, and you never learn what actually went wrong. I wanted to build the opposite: an assistant that tests, asks, proves and fixes.

What it does

Fixwright is a home doctor for Alexa+. It works like a good electrician: rule out the likely causes in order, ask one useful question, fix the real fault, and come back to check.

Ask "why does the hallway lamp keep saying it's not responding?" Fixwright checks the hub, the signal and the maker's cloud first. When no sensor can settle it, it asks the one sensor every home has, the person standing in it: "I'll flash the hallway lamp twice. Did it blink?" You say yes, or "haan", and it knows the lamp works and the real problem is the name: "Hallway Lamp" still points at an old copy of the lamp left behind when it was paired again.

It shows exactly what it will change and waits for your yes. Then it moves the name to the lamp that is online, switches it on and off to prove it answers, and rolls everything back by itself if anything does not read back. The next morning your phone gets a push: "Hallway lamp answered all 9 commands overnight. Repair confirmed."

It also explains things the house did, from its own logs. Ask why every plug turned on at 3 a.m. and you hear "Power came back at 3:12. Fourteen devices restarted within four seconds. None of your automations fired," while the house plan on screen replays the power cut. Then it offers to make those plugs remember whether they were on or off. A checkup finds names that collide, dying batteries and plugs that keep dropping off Wi-Fi, and Fixwright will never switch off something you marked protected, like the strip that runs an aquarium filter.

How we built it

  • A self hosted MCP server in TypeScript on the official MCP SDK, live on Cloudflare Workers, with 11 tools. Every tool returns one spoken line for voice only speakers plus structured data for screens.
  • One SQLite Durable Object per household, holding a ledger of every event in the house and every check, answer and repair Fixwright made.
  • A Bayesian diagnosis engine over ten causes. It treats the person's answer as a sensor with its own reliability, and only says Confirmed when every sentence it speaks is backed by a logged event.
  • Repairs that start as a dry run with a signed one time confirm token. Each step runs once, is read back from the house, and is rolled back on a mismatch.
  • Three MCP Apps screens built to the Alexa+ add-on design guide, and an Alexa+ style host that switches between a large display, a small display, a phone and a voice only speaker in the middle of a conversation, with the house drawn as a live floor plan.
  • A Home Assistant adapter, so the same diagnosis and repairs run on a real smart home hub and are read back through its own API.
  • homefault, an open source smart home twin with ten real fault types and a benchmark, so any smart home agent can prove its diagnosis instead of claiming it.
    • homefault, an open source smart home twin with ten real fault types and a benchmark, so any smart home agent can prove its diagnosis instead of claiming it.

The engine picks each next check by how much it would teach against how much it would disturb the house:

$$\text{next probe} = \arg\max_{q} \frac{\mathbb{E}[\Delta H(q)]}{1 + 2\,d_q + c_q / 2\,\text{s}}$$

Challenges we ran into

Asking a person a question halfway through a diagnosis, on a server that keeps no session. The question comes back as data, Alexa asks it in its own turn, and the answer continues the same diagnosis even if the screen was closed.

Fitting inside the free plan's 10 milliseconds of CPU per request. Schemas are built once at startup and new homes start from a prebuilt template, so normal requests stay under a millisecond.

Fixwright's own fingerprints. Its test flashes appear in the house logs like a person using the app, so its first answer to "why did the plugs turn on at 3?" blamed someone with a phone. It now recognizes its own actions.

Safety that holds up. Locks, garage doors and alarms are off limits. Testing found that a device name written in capital letters slipped past that rule on a test lock. That was the first thing fixed, and the test stays forever.

Accomplishments that we're proud of

  • It is live. Anyone can break the demo house in ten different ways and watch Fixwright find and fix the fault in under a minute.
  • We built HomeTruth, a benchmark of 720 smart home scenarios with known causes, and tested Fixwright against a plain LLM reading the same logs. The questions Fixwright asks lifted that LLM from 71 to 83 correct diagnoses out of 100, fixing 12 and breaking none.
  • When Fixwright names a cause it is right 96% of the time, because it says "I can't tell yet" instead of guessing. The plain LLM is right 74% of the time.
  • On 20 real incidents rebuilt from owner reports, Fixwright never once confirmed a wrong cause.
  • 2,057 automated tests, and an end to end test that plays the whole story in a real browser.

What we learned

Models are very good at sounding sure. The hard part is knowing when you actually know, and being honest when you don't. The person in the room is the best sensor in the house, and one good question beats ten guesses. A fix is only a fix once you have checked it the next morning.

What's next for Fixwright, the home doctor for Alexa+

Real homes first, starting with Home Assistant households, then SmartThings and Tuya. On the Alexa side, a device health signal for add-ons and a way for add-ons to speak first would let Fixwright catch a failing device before you ever notice. Every broken home it fixes teaches it something, and we want that knowledge working for every home on Alexa.

Built With

Share this project:

Updates

Submission history