-
-
Meet Orbie, the ghost who keeps a receipt for everything your smart home does.
-
Why it exists: assistants act, then shrug when asked why. Built for the Amazon Developer Hackathon with Kiro
-
The home, in 3D. Every light, plug and lock is a real device Orbie can act on.
-
Press / for every command: lights off, undo, why, ghosts, share. No manual needed.
-
"Lights off" prints a receipt. The grow lights are fenced off, the chain is verified, undo is one word away.
-
Small wins get a flash, glitter and a sound. Learning to trust your assistant should be fun.
-
Ghost hunt: the hallway lamp changed 8 times with no known cause, about every 60 minutes. Orbie says "I can't tell" instead of guessing.
-
The receipt tape: every change, who made it, how sure we are. Click any row to open it.
-
Measured, not claimed: levels passed 0 to 9, wrong-target actions 8 to 0, made-up answers 3 to 0.
-
Phantom Bench: nine real smart-home failures replayed with and without Orbie. Same house, same words, same result every time.
-
Stamp Book: locked stamps tell you exactly how to earn them, so nothing is a mystery.
-
Set up your own home: rooms and devices by hand, from a template, or imported.
-
Connect Home Assistant: pick what Orbie can see. Starts in Preview, so nothing real is touched until you say so.
Inspiration
A Reddit thread caught me: "Alexa+ is turning my lights on and off." Dozens of replies, and the real pain wasn't the bug. It was that nobody could say why. Lights at 2 AM? A routine? A cloud? A ghost? And when the assistant explains itself, it says "you asked me to." (They didn't.)
Banks solved "what did you do with my stuff?" decades ago with receipts. Smart homes still run on vibes. So I gave one a receipt printer and a ghost named Orbie 👻
What it does
Orbie is a self-hosted MCP server (Streamable HTTP, spec 2025-11-25) that gives every smart-home action:
- 🧾 a receipt: hash-chained, with an evidence grade
- 🚧 a fence: "lights off" won't kill the freezer or the grow lights
- ↩️ an undo: exact states restored, or "things changed, I touched nothing"
- 🕵️ an honest why: answered from the ledger only. No record? "I can't tell, and I won't guess."
- 👻 a ghost hunt: spots things that switch by themselves, like every ~60 minutes
How I built it
Solo, in TypeScript, with Kiro writing specs while I wrote code: a pure engine, an Express + MCP server, a React + 3D web app, and a deterministic benchmark.
Receipts chain together, $h_n = \mathrm{SHA256}(h_{n-1} \parallel r_n)$, so editing history breaks every hash after it. A "ghost" is a repeating unexplained change: at least 4 events with $\dfrac{\mathrm{MAD}(\Delta t)}{\mathrm{median}(\Delta t)} < 0.15$.
Risky actions need a signed, single-use confirm token that a language model never sees. Only a human hold-to-confirm can approve. It talks to Home Assistant (preview mode by default), and any OpenAI-compatible model works through three lines of .env.
Challenges I ran into
- No Alexa+ access. It's partner-only, so the assistant is simulated, and the app says so on every screen.
- MCP has no "ask first" step. I invented the confirm token.
- False premises. "Why did it turn on?" when it turned off. Orbie now politely disagrees.
- My 3D house vanished. I was opening a new WebGL context on every render and browsers cap those. A ghost in my own machine.
- My own bug: a dry-run blocked the same command as a "duplicate" once live mode was on. A preview must never count as "done".
Accomplishments that I'm proud of
- 9 / 9 on my Phantom Bench of real reported failures; a naive assistant scores 0 / 9 (wrong-target actions 8 → 0, made-up answers 3 → 0).
- 138 unit tests plus browser tests, and a fresh clone runs with one
docker compose up(180 MB image). - A cute 3D home, a spooky splash, custom sounds, and an assistant that says "I don't know" with a straight face.
What I learned
Honesty is a feature you have to design. "I can't tell" is a great answer when a receipt backs it up. Also: test the boring paths (preview then live) before the flashy ones.
What's next for Orbie
- Test against a real Home Assistant and, when access opens, a real Alexa+.
- Authentication on
/mcpand a public hosted endpoint. - An Agent Skill wrapper so any assistant can pick Orbie up in one line.
- More ghosts. Always more ghosts.
Built for the Amazon Developer Hackathon, Alexa+ track by @himanshu007-creator.
Built With
- alexa-plus
- d3.js
- docker
- express.js
- home-assistant
- indexeddb
- mcp
- mcp-apps
- model-context-protocol
- node.js
- openai-api
- playwright
- react
- react-three-fiber
- streamable-http
- three.js
- typescript
- vite
- vitest
- web-speech-api
- webgl
- whisper
Log in or sign up for Devpost to join the conversation.