-
-
The Strands Agent reasoning live — flagging who needs follow-up, skipping vacations, catching overdue returns.
-
Architecture: a staff-facing frontend and an autonomous Strands Agent both read/write the same SQLite database.
-
Simple PIN login for staff — every note gets attributed to whoever logged it, useful for shift-based teams.
-
The main patient view — automatically sorted by status, with upcoming vacations flagged right on the row.
-
A reminder panel appears shortly before a waitlisted patient's preferred time, so staff never miss a same-day cancellation opening.
-
Note detail view showing who logged it and when plus a live waitlist badge with the patient's preferred time, editable.
-
Dedicated vacation view with custom columns — dates, notes, and quick actions to edit or end a patient's vacation.
-
Adding a note with a waitlist request — staff pick the patient's preferred date and time directly from a built-in calendar.
Inspiration
At a clinic, a patient finishes an appointment and says "I'll text you guys when I can come in." Staff makes a mental note. The patient doesn't call back. Weeks later, they've quietly missed their treatment window - not because anyone did anything wrong, but because nothing in the daily workflow is built to notice silence.
This isn't minor: U.S. healthcare loses an estimated $150 billion a year to missed and un-rebooked appointments, and independent practices lose $150,000+ a year on average from patients who don't return. A patient who misses one appointment is 70% more likely not to return within 18 months. And this gets harder, not easier, as a practice grows - a medium or large clinic with hundreds of active patients has no realistic way to manually track who's gone quiet, who's on vacation, and who's simply waiting on insurance.
What it does
A Strands Agents SDK agent (running Claude via Amazon Bedrock) reads the clinic's patient data and reasons about priority - not through hardcoded rules, but through a system prompt that defines how to think about the data:
• Flags patients with no appointment and no note as highest priority • Recognizes vacation without penalizing it - waits until the return date to resurface a patient • Distinguishes "paused" (e.g. insurance ran out) from "ignoring us" - excludes paused patients from the urgent list entirely • Reads staff notes for time cues ("said she'll call back tomorrow") and calculates and sets its own reminders
On top of the agent, staff get a daily-use tool: a filterable patient table, PIN-based note attribution (so a manager can see who spoke to a patient last - useful for shift-based teams), multi-location switching, note history to spot cancellation patterns, and waitlist reminders that keep re-surfacing an opening until someone acts on it.
How we built it
• agent.py - the Strands agent: model, tools, and the system prompt defining priority logic and reminder detection • tools/patient_tools.py - the agent's tools: read patients, manage notes, log vacation/pause with dates, set reminders, schedule appointments • server.py - a Flask API exposing the tools and agent over HTTP • A single-page HTML/JS frontend: patient table, note history, inline vacation/pause/scheduling panels, PIN login • SQLite for storage
Status is always computed, never stored directly - derived fresh from underlying facts (note? appointment? paused? on vacation?) every time it's displayed, so a patient can never end up in a contradictory state like "needs follow-up" and "scheduled" at once.
Challenges we ran into
Getting status logic right was harder than expected - early versions stored status as a field that could be set directly, which allowed contradictory states. The fix was making status a computed value, derived from facts every render, not a field anyone sets.
AWS SSO session handling also required care - sessions expire and need re-authentication, which shaped how the demo and agent runs are structured.
Accomplishments that we're proud of
The agent doesn't just list overdue patients - it reasons through genuinely different situations (vacation vs. paused vs. ignoring calls) and responds to each differently, the way a thoughtful staff member would. It also reads unstructured note text and sets its own reminders without being told to.
What we learned
That the highest-value use of an agent here isn't automating patient contact - it's making a human's judgment call faster and better-informed. Keeping the agent out of direct patient contact was a deliberate design choice, not a limitation.
What's next
Two-way EHR sync (DrChrono or similar) under a proper BAA, so bookings and cancellations sync automatically in both directions. A manager view summarizing follow-up activity per staff member. Autonomous, scheduled agent runs via Amazon Bedrock AgentCore instead of a manual trigger.


Log in or sign up for Devpost to join the conversation.