Inspiration

One in four older adults lives alone. Families want to know a parent is okay — without an app that person will never open. The daily check-in is a phone call that gets skipped, or a silence nobody notices until it is too late. CarePilot exists so the family is only interrupted when there is a real decision to make.

What it does

CarePilot is an Everyday Agent that runs the morning wellness check over plain SMS.

  • The Check-In Agent texts Margaret every morning, reads her reply in plain language, and extracts structured health signals (meds, pain, dizziness, mood, emergency language).
  • Severity is ok → watch → alert → urgent. Quiet mornings stay on the family dashboard. Mid-tier events create a human-in-the-loop action. Urgent events (chest tightness, shortness of breath, a fall) notify the family immediately and recommend 911 — they do not wait for approval.
  • Under the LLM there is a deterministic keyword floor (src/agents/parsing.py). Emergency language can never be classified below urgent, even if the model or its JSON parsing fails. The LLM gets a floor, not a veto.
  • Sundays, the Family Agent writes a plain-language digest: adherence, patterns, positives.
  • The family dashboard is a live read model of the same store the agents write to. Demo mode simulates SMS/email delivery; the Bedrock calls, tools, and database writes are real.

How we built it

FastAPI + a Twilio webhook (or the dashboard demo panel) → AWS Strands Agents SDK → Claude Haiku 4.5 on Amazon Bedrock. Three specialized Strands agents — Check-In, Alert, Family — act only through typed @tool functions (SQLite locally, DynamoDB in production, SMS). APScheduler runs the 8:00 AM check-in and Sunday digest without anyone clicking. An AgentCore runtime entry point lives in agentcore/agent.py.

Architecture diagram: carepilot-architecture.svg

Challenges we ran into

Naive rfind("{") JSON extraction pulled nested objects and could drop an urgent classification. We replaced it with a balanced-brace parser keyed on required fields, then added the severity floor so a parse failure cannot hide chest pain.

Accomplishments that we're proud of

A working end-to-end product, not a chatbot: SMS in, structured event out, family notified only when it matters. The urgent path was verified live: chest tightness + shortness of breath → URGENT, family SMS + email with a 911 instruction, dashboard hero flipped to “Reach Margaret now.”

What we learned

For a safety product, the model is a classifier with a floor. Typed tools beat free-form side effects. SMS is the right interface for the people who will never install an app.

What's next for CarePilot

Live Twilio on a real family circle, longer pattern memory across weeks, and an AgentCore deploy for the runtime.

Built With

Share this project:

Updates

Submission history