Actionable lines sit inside prose. Ordering the MRI, starting the statin, chasing the referral — all of it lives in someone’s memory.
Actionable lines sit inside prose. Ordering the MRI, starting the statin, chasing the referral — all of it lives in someone’s memory.
One pasted note becomes typed cards in Postgres — medication, test, referral, next_visit, general_task — with due dates read out of the note.
Cards carry dependencies. A card turns at_risk while its blocker is open, and heals itself the moment the blocker closes.
A 28-diagnosis checklist asks the model which expected care items this note’s cards miss, and offers them to the doctor to approve or dismiss.
An MCP server exposes six careloop_* tools over REST, so any agent can read, flag and close the same cards a clinician sees.
No EHR or FHIR feed (notes are pasted), one shared demo password, no per-user MCP tokens, and triage results are not shown in the UI yet.
/api/* to FastAPI. The note agent is the only writer of cards, Gemini is the only model,
Postgres holds the state, the MCP server is a pure REST client with no database credentials, and UrgencyWatcher files triage results into its own schema.
Open the interactive version: the same diagram, clickable, in the project docs.
Every node carries the file and line that proves it
list_patients, list_cards, get_card, close_card, flag_card_risk, list_notes
Agents act through the API, never through the database
Today a single tool-calling agent decides what is actionable and writes every card. Would you keep that, or hand extraction to deterministic code and use the model only for judgement and phrasing?
Our MCP tools can close and flag cards. What is the safest permission shape for a clinical server — scoped tools, an approval step, or human-only closure?
Which features would you reach for — citations back to the note, structured outputs, or an eval harness on the checklist?