
A home AI that only says "done" when the real world proves it
Muni hears the promises you make in passing, turns each into a contract, and closes it only on real evidence. Built on Amazon Bedrock Nova, EventBridge Scheduler, DynamoDB, S3 and seven more AWS services.
I built a home AI that only says “done” when the real world proves it — on Amazon Bedrock, EventBridge and nine more AWS services
TL;DR: Muni hears the promises you make in passing (“I’ll call Mom at 7”, “I’ll bring the parcel inside”), turns each one into a contract, and closes it only when evidence arrives. It runs live on AWS: Bedrock Nova reads intentions the rules miss, EventBridge Scheduler fires every nudge on time, and DynamoDB, S3 and KMS keep a tamper-evident record.
▶ Video: https://youtu.be/bQ7NeIiHXAQ · Try it (one click, no account): https://100-49-183-59.sslip.io · Code (MIT): https://github.com/vivekyarra/Muni
The problem
Every assistant can set a reminder. None of them know if you did the thing. A reminder only knows that it fired. A courier’s “delivered” message does not put a parcel on your porch. So the promises that matter slip, and nobody notices until it is too late.
What Muni does
- It listens. Promises come from normal conversation through Bee and Alexa+. You do not open an app. Small talk is ignored. A family member’s request waits for your OK.
- It watches for proof. Ring camera vision checks deliveries and the front door. Pose tracking counts real squats for a Fire TV “Reality-Lock”. Your own confirmation is always labelled as yours, never as sensor proof.
- It acts on time. One hour before a deadline you get a quiet note. Twenty-five minutes before, an alert, but only if you are not already on it.
- It keeps humans in charge. If a parcel leaves the porch, Muni saves the clip and a SHA-256 manifest and asks: was this family? Nothing goes to the police unless you approve the exact packet.
The AWS architecture
| Service | Job in Muni |
|---|---|
| Amazon Bedrock (Nova Lite) | Reads promises the rules can’t parse and returns strict JSON. It can propose a contract, never verify one. |
| EventBridge Scheduler | One at() schedule per T-60, T-25 and deadline job. In a live test they fired +0.77 s, +0.43 s and +0.33 s after schedule. |
| Amazon SQS + DLQ | Delivers scheduler wake-ups to the reconciler. Failed messages go to a dead-letter queue. |
| Amazon DynamoDB | Holds a copy of contracts, agents, incidents and audit records, with conditional writes. |
| Amazon S3 + AWS KMS | Private, versioned, SSE-KMS evidence replica. |
| AWS Secrets Manager | Ledger key, passwords and the Bedrock key. Nothing secret lives in git. |
| Amazon CloudWatch | Logs plus queue-age and DLQ alarms. |
| Amazon EC2 + Systems Manager | Runtime host. Deploys go through SSM Run Command with no SSH. |
| AWS CloudFormation | The whole stack as code, linted in CI. |
Why rules first, then Bedrock
The commitment compiler is deterministic first. It parses deadlines (“tonight”, “by the 5th”, “day after tomorrow”), triggers (“when I get home”) and recurrence (“every Monday”). This path is free, fast and explainable.
When the rules find nothing in a sentence that still sounds like an intention, such as “ugh, the car needs servicing this weekend, I’m on it”, Muni calls Nova Lite through the Converse API at temperature 0 and asks for JSON only: title, local due time, recurrence and confidence. Muni then validates every field.
Safety rules on the model:
- Nova can propose a contract. It can never verify one.
- A reading under 0.8 confidence waits for the owner.
- Calls are capped per hour and time out after 8 seconds, so a slow model never blocks the ledger.
- The service uses a dedicated IAM key that can only invoke Nova Lite.
Result: that car sentence becomes “Service the car”, due Saturday, at 0.95 confidence. “This coffee is good” becomes nothing.
Every deadline is a real schedule
For each promise with a clock time, Muni creates three one-time EventBridge Scheduler
at() schedules with ActionAfterCompletion=DELETE. They target an encrypted SQS queue that wakes the reconciler. The reconciler checks the evidence and decides: stay quiet, nudge, or record a miss honestly.Evidence you can trust
Every state change is an append-only event with one trace ID, from the spoken sentence to the screen. A transactional outbox copies state to DynamoDB and evidence to S3 with KMS encryption. Each evidence packet carries a SHA-256 manifest, so tampering shows.
Lessons
- An evidence policy is a product feature. People trust “not verified yet” more than a green tick that lies.
- Rules first, model second is cheap and explainable, and Bedrock handles the long tail.
- EventBridge Scheduler
at()fits per-item jobs perfectly. There is no cron to babysit, and each schedule deletes itself. - Friction I hit: Bedrock returned “Operation not allowed” on my first account with no reason, and CloudFront account verification surfaced only mid-stack. Both are written up in the repo’s friction log.
Try it
Open https://100-49-183-59.sslip.io and press Try Muni live. Each visitor gets a private copy of a full day. The whole stack is open source under MIT: https://github.com/vivekyarra/Muni .
Built for the Amazon Developer “Build, Ship, Shape” hackathon.
Tags: Amazon Bedrock, Amazon Nova, Amazon EventBridge, Amazon DynamoDB, Amazon S3, AWS, Serverless, Generative AI, Smart Home, Hackathon
Enjoyed reading this content? Let the author know!
Your likes, comments, shares, and saves help creators reach more builders.
Loading recommendations
Loading article