FlowRunner
Pricing
Theme
Start Free

LangGraph and FlowRunner

LangGraph pauses a graph with interrupt() and holds its state. FlowRunner reaches the person in Slack or email, waits for their answer, and keeps the record of the decision.

2026-11-02 Updated November 3, 2026 9 min

Add FlowRunner when

  • An interrupt() has to reach someone who isn't a developer, in Slack, email, WhatsApp, phone, or a Form
  • The answer may take days, and someone should get a reminder or an escalation
  • A graph run should start from an event in a business app, not only from your own code
  • The decision and what followed need a record that an ops or compliance person can read

LangGraph on its own is enough when

  • The person resuming the graph is the user in your own app
  • Developers review interrupts themselves in LangSmith Studio
  • The graph is a research or prototype project with nothing to approve

TL;DR

  • LangGraph is how you build an agent that survives: a graph with persisted state, durable execution, and interrupt() to pause for a human and resume later. FlowRunner is what you put around that pause: it reaches the person in Slack, email, WhatsApp, phone, or a Form, waits days if it has to, reminds and escalates, and keeps a record of the decision.
  • LangGraph holds the state and waits as long as you need. It doesn’t tell anyone a decision is waiting. That part, plus starting runs from business apps and turning a finished run into business steps, is where FlowRunner fits.
  • Your graph stays in your code, in your process or on LangSmith Deployment. FlowRunner doesn’t run Python.
  • If the person resuming the graph is the user already in your app, LangGraph on its own is enough.

What LangGraph is for

LangGraph is an open source framework and runtime, under the MIT license, for agents that have to be reliable over time. You model the agent as a graph of nodes, mix deterministic steps with model calls, and LangGraph persists the state as it goes. The docs put it as agents that “survive failures and resume long-running work.”

The pieces that matter here:

  • Persistence and durable execution. A checkpointer saves thread state, which is what makes human-in-the-loop, time travel, and recovery work. You choose a durability mode per run: exit (save when the run ends or interrupts), async (save in the background), or sync (save before each next step).
  • interrupt(). Called inside a node, it pauses the graph and returns a payload to the caller. With a checkpointer and a thread_id, the graph “waits indefinitely until you resume execution” with Command(resume=...), and the resume value becomes interrupt()’s return value. One detail to design for: on resume, the node runs again from its start, so code before interrupt() runs twice.
  • Retries. A RetryPolicy per node, such as RetryPolicy(max_attempts=3).
  • LangSmith Deployment. LangGraph Platform is now called LangSmith Deployment (and LangGraph Studio is LangSmith Studio). It runs graphs as Cloud, Hybrid, Self-hosted, or a Standalone Agent Server, with durable execution, streaming, cron jobs interpreted in UTC, and a webhook that fires when a run completes. Agent Server also exposes deployed agents as MCP tools at /mcp.
  • Pricing. The framework is free. LangSmith’s Plus plan is $39 per seat per month and includes one free small serverless deployment. Usage is metered in LSUs, where one LSU is $1, and a deployment is charged on what it consumes, for example 0.0675 LSU per vCPU-hour of runtime compute.

If your agent needs to pause, hold state, and pick up exactly where it stopped, LangGraph is built for that. What it hands back to you is everything that happens while it’s paused.

What FlowRunner adds around it

An interrupt() is a pause with a payload. Someone has to see that payload, decide, and send the answer back, and LangGraph leaves all of that to you. Studio is a developer tool, not an inbox for the finance lead. So teams end up writing a notifier, a review page, reviewer sign-in, reminder jobs, and a table of who decided what.

FlowRunner is that layer:

  • Reaching the person. A flow sends the interrupt’s payload to the reviewer on email, Slack, WhatsApp, phone, or a Form with a public link. The reviewer needs no account and never sees your graph.
  • Waiting, with reminders. The flow waits for the answer: up to 30 days on Free, Starter, and Growth, and up to a year on Professional and above. While it waits, it can send a reminder after a few hours or move the request to a backup approver after a day. The waiting run is one execution.
  • Bringing the answer back. When the person answers, the flow POSTs the decision to your resume endpoint with the thread_id, and your code calls Command(resume=...). The flow’s HTTP Request block retries on 5XX and network errors if your endpoint is briefly down.
  • A record of the decision. Each run keeps every block’s input and output: what was asked, whom, when, and what came back. Log history runs from 24 hours on Free to unlimited on Enterprise, and from Professional the audit log records who changed the flow.
  • Triggers into the graph. LangSmith Deployment’s webhook goes out when a run completes. Starting a run when an email lands, a Shopify order is updated, or a DocuSign envelope comes back is a FlowRunner trigger across 2,100+ integrations, with the account connected once.
  • What happens after the run. A finished run usually means business steps: update the record, email the customer, tell the account owner. A flow can take those over from your graph’s output.

How they work together

The graph stays where it runs. FlowRunner handles the parts around it. The LangGraph guide has the code.

The interrupt goes to a person, the answer comes back. A node calls interrupt() with the refund details. Your app sees the interrupt in the result and posts the payload and the thread_id to a FlowRunner approval flow through the non-blocking Call Flow API. Sending the request from the app, after invoke returns, keeps it out of the node, so the node’s re-run on resume doesn’t message the reviewer twice. The flow asks on Slack, reminds, escalates, and POSTs the decision to your resume endpoint. Use a durable checkpointer: the answer might come Thursday, after two deploys.

A finished run continues as business steps. On LangSmith Deployment, pass a webhook URL when you create a run, pointed at a flow whose first block is an External Callback. Each completed run then starts a flow with the run’s status, thread_id, and values. The flow writes the result to the CRM, emails the customer, and posts a summary. Your deployment’s webhook settings can add a static header from an environment variable, so FlowRunner’s key travels in the FR-Access-Key header instead of the URL. A run paused at an interrupt is reported as success, so have the flow check the values before it acts.

A business event starts a graph run. A flow catches the event with that app’s trigger, keeps only the fields the graph needs, and calls your app’s endpoint or your deployment over HTTP. The integration’s auth lives in FlowRunner, and the run record shows what came in and what the graph sent back.

A FlowRunner agent calls your graph. A FlowRunner AI Agent block can use tools from any MCP server you register with a publicly reachable URL and a token or OAuth 2.0. If your deployment’s /mcp endpoint, or an MCP server you write around the graph, meets that, a FlowRunner agent can call your graph as one of its tools, alongside human-review flows it calls the same way.

When you don’t need FlowRunner

Some LangGraph projects have everything they need already:

  • The user in your app is the reviewer. A chat app where the person who approves is the person typing can show the interrupt in your own UI and resume from there.
  • Developers resolve the interrupts. If the only people answering are on the team that built the graph, Studio and a small script may be all it takes.
  • Nothing outside the graph cares. A research agent or an internal prototype with no business apps on either side and nothing to approve doesn’t need a layer around it.
  • You’ve built the review loop already. If your notifier, review page, and decision log work, keep them.

Add FlowRunner when the person who answers an interrupt isn’t a developer, when the answer can take days, or when business apps need to start runs and receive results.

Feature comparison

DimensionLangGraph on its ownLangGraph with FlowRunner
Where the graph runsYour process, or LangSmith DeploymentThe same place, unchanged. FlowRunner doesn’t run Python
Pause for a humaninterrupt() and Command(resume=...) with a checkpointerThe same, with a flow handling the reviewer’s side
Telling the reviewerYours to buildEmail, Slack, WhatsApp, phone, or a Form with a public link
Decision screenYours to build; Studio is for developersSlack buttons, an email reply, or a Form
Waiting for the answerThe thread waits indefinitely; reminders and escalation are yoursThe flow waits up to 30 days (Free, Starter, Growth) or a year (Professional and above), with reminders and escalation as blocks
Record of the decisionYour own table, plus LangSmith tracesEach run’s inputs and outputs, readable by anyone on the team; audit log from Professional
Starting a runYour code, or Deployment’s API and cron jobsAlso 2,100+ integration triggers and FlowRunner schedules
After a run completesDeployment’s webhook to an endpoint you writeThe webhook starts a flow at an External Callback
RetriesRetryPolicy per nodeThe same in the graph, plus Retry Policy on every HTTP call the flow makes
MCPClient through LangChain’s adapter; Agent Server exposes /mcpFlowRunner AI agents can use a registered MCP server’s tools
CostFramework free; LangSmith Plus $39 per seat plus LSU usage for DeploymentPlus FlowRunner: Free at 100 executions a month, Starter from $5; one flow run is one execution

Frequently asked questions

Is FlowRunner a LangGraph alternative?

Not as a swap. LangGraph is a framework and runtime for stateful agents written as graphs in your code, and that code keeps running where it runs. FlowRunner works around it: it reaches the person an interrupt is waiting for, waits for their answer, starts graph runs from business events, and records what happened for the rest of the team.

Does LangGraph have human-in-the-loop?

Yes. Calling interrupt() inside a node pauses the graph and returns a payload to the caller. With a checkpointer and a thread_id, the graph waits indefinitely, and Command(resume=...) on the same thread continues it with the human's answer. What LangGraph leaves to you is telling a person that a decision is waiting, giving them somewhere to answer, and calling resume.

How do I send a LangGraph interrupt to Slack or email?

When invoke returns with an interrupt, your app posts the payload and the thread_id to a FlowRunner flow through the non-blocking Call Flow API. The flow messages the reviewer on Slack, email, WhatsApp, phone, or a Form, waits for the answer, and POSTs it to your resume endpoint, which calls the graph with Command(resume=...). The LangGraph guide has the code.

Can FlowRunner run my LangGraph graph?

No. FlowRunner runs JavaScript in its Custom Cloud Code block and in custom extensions, not Python. Your graph stays in your own process or on LangSmith Deployment. FlowRunner calls it over HTTP or MCP, and your app calls FlowRunner through the Call Flow API or an External Callback.

What is LangSmith Deployment, and how is it priced?

It's the new name for LangGraph Platform: LangChain's runtime for deploying agents, with durable execution, streaming, scaling, cron jobs, and webhooks. It comes with LangSmith's Plus plan at $39 per seat per month, which includes one free small serverless deployment, or Enterprise. Usage is metered in LSUs, where one LSU is $1, and deployments are charged on the compute and memory they use.

Can a FlowRunner flow start a LangGraph run?

Yes. A flow can start from any of FlowRunner's 2,100+ integrations, a schedule, or an API call, and then call your app's endpoint or your deployment over HTTP with the input the graph needs. Going the other way, LangSmith Deployment can send its completion webhook to a FlowRunner External Callback, so a finished run starts the business steps that follow.

What does adding FlowRunner cost?

The Free plan is $0 with 100 executions a month and no card, and every new account starts with 14 days of Professional. Starter is $5 a month for 300 executions or $15 for 3,000. One execution is one complete flow run, so an approval flow that waits three days for an answer is still one execution.

Editorial policy

Ready to try it?

Start on the Free plan. No card required, and every new account gets 14 days of Professional.