AWS Builder Center
A home AI that only says "done" when the real world proves it

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.

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

ServiceJob 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 SchedulerOne 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 + DLQDelivers scheduler wake-ups to the reconciler. Failed messages go to a dead-letter queue.
Amazon DynamoDBHolds a copy of contracts, agents, incidents and audit records, with conditional writes.
Amazon S3 + AWS KMSPrivate, versioned, SSE-KMS evidence replica.
AWS Secrets ManagerLedger key, passwords and the Bedrock key. Nothing secret lives in git.
Amazon CloudWatchLogs plus queue-age and DLQ alarms.
Amazon EC2 + Systems ManagerRuntime host. Deploys go through SSM Run Command with no SSH.
AWS CloudFormationThe 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

  1. An evidence policy is a product feature. People trust “not verified yet” more than a green tick that lies.
  2. Rules first, model second is cheap and explainable, and Bedrock handles the long tail.
  3. EventBridge Scheduler at() fits per-item jobs perfectly. There is no cron to babysit, and each schedule deletes itself.
  4. 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
Any opinions in this article are those of the individual author and may not reflect the opinions of AWS.
Enjoyed reading this content? Let the author know!

Your likes, comments, shares, and saves help creators reach more builders.

Loading recommendations

Loading article