-
-
Quiet Hours: a household admin autopilot on Strands + AgentCore that only interrupts you for real decisions.
-
A fresh day: seven items arrive, from bills to a phishing invoice, and the next background sweep sorts them.
-
Three rules: a deterministic policy gates every action, escalations become one tap, and every answer is remembered.
-
Running a home is a stream of small, boring, slightly risky tasks that cost attention when it is scarcest.
-
Strands agent on AgentCore Runtime, S3 parked interrupts, AgentCore Memory, DynamoDB, EventBridge, Lambda, Slack, Next.js.
-
The "handled quietly" timeline. Every action carries the reason the autonomy policy allowed it.
-
nterruptions fall 3 → 2 → 1 while quiet work rises. Standing permissions learned from decisions sit beside it.
-
Ask "why did you pay the piano invoice without asking?" and it answers from its own audit log.
-
After three days: what was handled quietly, the one decision still waiting, and today's items tile by tile.
-
Day 1 cards: each is a paused Strands tool call with the policy's reason. Approve, approve and trust, or decline.
-
After answering: nothing needs you. The timeline shows what you trusted, approved and declined.
Inspiration
Every household runs on a stream of small admin: bills, renewals, appointment recalls, school forms, deliveries that need a signature, and the occasional "URGENT overdue invoice" that is really phishing. None of it is hard. All of it steals attention, usually in the evening, when attention is scarcest. We did not want one more app to open. We wanted an agent that runs in the background and only speaks up when there is a real decision to make — and that gets quieter the longer it runs.
What it does
Quiet Hours is a household admin autopilot. On a schedule (EventBridge Scheduler) it reads the household's inbound stream and:
- Handles the routine on its own: pays recurring bills that look normal, books appointments inside the family's preferred window, fills recurring forms from the household profile, moves deliveries to a day someone is home, and blocks phishing.
- Pauses for anything that is genuinely your call: a bill 81% above usual, an insurance premium up 18%, a form that needs your signature, a brand-new vendor. You get one decision card with the reason, on the dashboard and on Slack, with one-tap Approve / Approve and trust / Decline.
- Learns from every answer: "Approve and trust" becomes a standing permission and a memory, so the same kind of item never interrupts you again. The dashboard's trend chart shows interruptions falling day by day (3 → 2 → 1 in the demo).
- Explains itself: every action carries the policy reason it was allowed, and you can ask the agent "why did you pay that?" — it answers from its own audit log.
How we built it
- Strands Agents SDK: a triage agent with structured output (
TriageResult), one specialist agent per item (bills, scheduling, paperwork) with 13 custom@tools, and theHumanInTheLoopintervention driven by a deterministic autonomy policy as its classifier. When the policy says "ask", Strands raises an interrupt that freezes the exact tool call. The agent's session is stored in S3 (S3SessionManager), so a human can answer minutes or days later in a different AgentCore invocation; the agent resumes and the tool runs with the frozen arguments. Hooks write an audit trail with the policy reason; a lockdown hook keeps the agent from improvising after a denial. - Amazon Bedrock AgentCore: Runtime (CodeZip, deployed with the AgentCore CLI), Memory (USER_PREFERENCE + SEMANTIC strategies) that learns from decision events, and Observability.
- AWS around it: EventBridge Scheduler → Lambda →
InvokeAgentRuntime; a DynamoDB single table for items, actions, decision cards and the trust ledger; S3 for parked sessions; Amazon Bedrock Nova models (Claude-ready); AWS SAM for the infrastructure. - Product layer: a Next.js dashboard on Vercel (decision inbox, "handled quietly" timeline, interruptions trend, ask box) and Slack incoming-webhook cards with HMAC-signed one-click links.
- Demo video: scripted Playwright capture of the live dashboard, narration by Amazon Polly (generative voice), assembled with ffmpeg.
Challenges we ran into
- Making human-in-the-loop durable. An approval can arrive hours later, in a different process. Strands interrupts plus a session manager gave us exactly that, and a two-process spike proved it in the first hour before we built on it.
- Keeping the model honest. The policy, not the model, decides what may run unattended. Early on the model tried to pay a "capped" amount instead of the bill amount, so the payment tool now refuses any amount that does not match the bill, and refuses anything flagged as suspicious.
- Session reuse. A second sweep once resumed the previous sweep's parked session and inherited its trusted-tool state. Every item now gets a fresh session id per sweep, recorded on the decision card.
- Model access. Anthropic models on Bedrock were gated on this account during the build, so the agent ships on Amazon Nova with a one-line switch to Claude.
Accomplishments that we're proud of
A complete loop, deployed and verified end to end in the cloud: scheduled sweeps on AgentCore Runtime, decision cards with signed one-tap links, resume of a paused agent in a new invocation, preferences landing in AgentCore Memory, and a dashboard that shows the agent getting quieter over time. Plus a 14-test policy suite and a reproducible, narrated demo video pipeline.
What we learned
Autonomy is a policy problem more than a prompting problem. Once every write is gated by explicit, testable rules and every escalation carries its reason, people trust the agent enough to hand it more. And "interrupt, park, resume" is a far better primitive for real-world agents than "approve first, then act".
What's next for Quiet Hours
Real inboxes and calendars through AgentCore Identity (Gmail, Google Calendar), bill-pay and scheduling integrations behind AgentCore Gateway, per-member notification preferences and quiet hours, a weekly "what I did" digest, and Claude specialists once model access is enabled.
Built With
- amazon-bedrock
- amazon-bedrock-agentcore
- amazon-dynamodb
- amazon-eventbridge
- amazon-nova
- amazon-polly
- amazon-web-services
- aws-lambda
- aws-sam
- boto3
- ffmpeg
- next.js
- playwright
- pydantic
- python
- react
- slack
- strands-agents
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.