From Heartbeat to Hospital: Building a Closed-Loop Health Agent with LangGraph A developer has built a closed-loop health assistant using LangGraph, LangChain, and the HealthKit API. The system detects heart rate anomalies, verifies symptoms with the user, and automatically books doctor appointments through hospital APIs. The workflow uses a state machine to manage loops and user interruptions for safety. We live in an era where our watches know more about our hearts than we do. But there’s a massive gap between receiving a "High Heart Rate" notification and actually sitting in a doctor's office. Most health apps just give you data; they don't give you a solution. Today, we are bridging that gap by building a closed-loop health assistant using LangGraph , LangChain , and the HealthKit API . By leveraging AI Agents and advanced LLM healthcare automation , we can create a system that doesn't just monitor—it acts. We’ll be using a LangGraph state machine to orchestrate a complex workflow: detecting anomalies, verifying symptoms with the user, and automatically interacting with hospital booking APIs. 🏥💻 Unlike simple linear chains, health interventions require loops and state persistence. If a user is feeling fine despite a high heart rate, we might just log it. If they feel dizzy, we book an appointment. Here is how the data flows through our LangGraph agent: php graph TD A Start: HealthKit Alert -- B{Analyze Heart Data} B -- Normal -- C Log & End B -- Anomaly Detected -- D Ask User for Symptoms D -- E{User Response} E -- "I'm fine" -- F Log Observation E -- "I feel dizzy/pain" -- G Search Available Doctors G -- H Confirm Appointment Time H -- I Execute Booking API I -- J Notify User & Send Calendar Invite F -- K End J -- K To follow this advanced tutorial, you'll need: In LangGraph, the State object is the single source of truth. It tracks the conversation history, health metrics, and whether a booking is required. python from typing import Annotated, TypedDict, List, Union from langgraph.graph.message import add messages class AgentState TypedDict : Tracks the conversation history messages: Annotated list, add messages Current health vitals vitals: dict Booking status booking confirmed: bool User symptoms symptoms: List str Our agent needs to interact with the real world. We’ll define two tools: one to fetch health data and one to book appointments. python from langchain core.tools import tool @tool def fetch health metrics : """Fetches the latest heart rate data from HealthKit.""" In a real app, this calls the iOS Bridge return {"heart rate": 115, "status": "Tachycardia Detected", "timestamp": "2023-10-27T10:30:00"} @tool def book doctor appointment specialty: str, preferred time: str : """Books an appointment via the hospital API.""" print f"CONFIRMED: Booking {specialty} for {preferred time}" return {"status": "Success", "appointment id": "REF-9921", "doctor": "Dr. Smith"} Now, we define the nodes and the logic that governs the transitions. We use a ToolNode to handle the execution of our Python functions. python from langgraph.prebuilt import ToolNode from langgraph.graph import StateGraph, END Define the Logic Node def analyze data state: AgentState : Logic to decide if we need to escalate to a doctor vitals = state.get "vitals", {} if vitals.get "heart rate", 0 100: return {"messages": "system", "Heart rate is high. I must ask the user about symptoms." } return {"messages": "system", "Everything looks normal." } Build the Graph workflow = StateGraph AgentState workflow.add node "monitor", analyze data workflow.add node "tools", ToolNode fetch health metrics, book doctor appointment workflow.set entry point "monitor" ... Additional edges and logic would go here A critical aspect of healthcare agents is safety. We don't want the AI booking surgery without a "Yes" from the human. LangGraph's interrupt feature allows us to pause execution until the user provides input. 🛑 In a real implementation, we use a breakpoint before the booking tool to ensure the user has explicitly agreed to the time and date. Building a toy agent is easy; building a HIPAA-compliant, production-grade health system is a different beast. For deep dives into advanced state-management patterns and enterprise AI deployment, I highly recommend checking out the WellAlly Tech Blog . They provide excellent resources on: It’s been a massive source of inspiration for how I structure my production LangGraph instances By moving from a "reactive" dashboard to a "proactive" agent, we change the user experience from anxiety-inducing alerts to seamless care coordination. LangGraph provides the perfect framework for this because it treats "loops" and "state" as first-class citizens. What do you think? Would you trust an AI agent to book your doctor's appointment? Let's discuss in the comments below 👇 If you enjoyed this tutorial, don't forget to Follow for more "Learning in Public" AI content 🚀