Why a graph instead of a prompt chain?
Prompt chains are do-A-then-B. Graphs declare nodes and edges so the runtime can retry, branch, checkpoint, and pause for a human. If the workflow can send email, merge a branch, or write Workday, you want that control flow inspectable.
Where we already run this
Nexora turns intent into a DAG a human approves before code, git, or deploy. The private RAG recommender uses LangChain/LangGraph over a catalog index. Conductor is the multi-agent cousin: planner versus executor versus human, with auto-merge off. The blog on LangGraph patterns is the essay; this page is the buyer landing.
Demo LangGraph vs production LangGraph
| Concern | Demo | Production |
|---|---|---|
| State | A loose dict | Typed models; invalid writes fail fast |
| Tools | Anything the model invents | Idempotent, permissioned, named |
| Retries | Unbounded or none | Backoff with a cap and a fallback node |
| Humans | Optional toast | Interrupt before send, merge, deploy, HRIS write |
| Durability | Dies with the process | Checkpoints so long runs survive restarts |
| Observe | Print statements | A hop-level trace you can show in review |
Bottom line: If you cannot point to the interrupt node and the eval set, you do not have a production graph yet.
HITL is a node, not a slide
A human-in-the-loop interrupt pauses the graph, shows the plan, and resumes only after approval. Nexora does this for high-impact steps. Conductor does it for production-impacting engineering work. Skipping the node to “move faster” is how unattended merges happen.
- Name the risky actions in writing before you draw the graph
- Keep auto-merge to main off unless a human clicked
- Store the approval with the run so audit is not a Slack hunt
Related work and reading
Frequently asked questions
Do you only use LangGraph?
It is a frequent orchestration choice for Python agent graphs. FastAPI, custom DAGs, and other runtimes appear when the product already has a brain (Nexora, Conductor). The pattern—typed state, gates, traces—matters more than the logo.
What is an interrupt node?
A graph node that stops execution and waits for a human decision before a risky tool runs. Without it, “HITL” is a retrospective.
How do you keep retries from exploding cost?
Bound fan-out, cap retries, and fail to a fallback or a human. Unbounded retry loops are how a stuck tool becomes an invoice.
Is this legal or compliance advice?
No. It is engineering practice from systems we have shipped. Your counsel decides what “approval” means in a regulated workflow.