LangGraph
LangGraph is LangChain's low-level orchestration framework for building stateful, long-running, multi-agent AI workflows using directed graph architectures (inspired by Pregel/Beam and NetworkX). It models agents as nodes in a graph, with edges controlling flow — enabling cycles, conditional branching, parallel execution, human-in-the-loop, and subgraph composition that linear chains cannot express.
This skill covers all major patterns for building and deploying LangGraph systems: core graph architecture, the three canonical multi-agent patterns (supervisor, swarm, hierarchical), persistence and state management, production debugging, and evaluation methodology.
Before you begin: Install dependencies:
pip install langgraph langchain langchain-openai langsmith
Quick Start
Create your first LangGraph agent in under 10 lines:
from langgraph.graph import StateGraph, MessagesState, START, END
def hello_agent(state: MessagesState):
return {"messages": [{"role": "ai", "content": "Hello, world!"}]}
graph = StateGraph(MessagesState)
graph.add_node("agent", hello_agent)
graph.add_edge(START, "agent")
graph.add_edge("agent", END)
graph = graph.compile()
graph.invoke({"messages": [{"role": "user", "content": "hi!"}]})
Next steps:
- Use the Pattern Selection Guide below to choose supervisor, swarm, or hierarchical architecture — each pattern links to its recommended template
- Load the corresponding reference file for the deep pattern walkthrough
- Use the Choosing Your Starting Point table below to pick scaffold, template, or reference based on your task
- For a complete runnable example matching your pattern, use the linked template in assets/templates/
Design Principles — These Govern Every Graph Decision
- State is the source of truth — all inter-node communication happens through state, not through side channels or global variables.
- Nodes are pure-ish — a node receives state, does work, returns updates. It should not depend on state that isn't passed to it.
- Reducers prevent conflicts — any state key written by multiple nodes in parallel MUST have a reducer.
- Start simple — a single agent with good prompts beats a multi-agent system with bad routing. Add agents only when a single prompt or toolset becomes unwieldy.
- Use
Send() for dynamic fan-out — when you don't know how many workers you'll need at compile time, spawn them dynamically from the orchestrator node.
- Subgraph state isolation — subgraphs with different state schemas need a wrapper function to transform state at the boundary. Shared-schema subgraphs can be added directly as nodes.
When to Reach For This
| Context |
What to load |
| Building a new LangGraph workflow from scratch |
references/architecture.md — core concepts first |
| Designing a multi-agent routing system |
references/multi-agent-supervisor.md or references/multi-agent-swarm.md — compare patterns |
| Composing nested agent teams |
references/multi-agent-hierarchical.md — subgraph composition |
| Adding persistence, interrupts, or long-term memory |
references/persistence.md — checkpointers and stores |
| Deploying to production or debugging failures |
references/production.md — deployment, observability, failure modes |
| Setting up eval pipelines for routing accuracy |
references/evals.md — evaluation methodology |
| Diagnosing a specific failure (loop, context loss, crash) |
references/troubleshooting.md — known failure modes |
Pattern Selection Guide
| Your constraint |
Prefer |
Why |
| Routing accuracy > latency |
Supervisor |
Centralized routing node, focused prompt: ~94% accuracy |
| Latency is primary constraint |
Swarm |
Direct agent-to-agent handoffs, ~40% fewer LLM calls |
| Clear domain boundaries |
Swarm |
Agents rarely misroute, handoffs are crisp |
| Ambiguous domain boundaries |
Supervisor |
Overlapping concerns resolved by dedicated router |
| < 3 distinct domains |
Skip multi-agent |
A specialized single agent is simpler |
| Multi-domain requests common |
Swarm |
Latency savings compound across handoffs |
| Need centralized audit trail |
Supervisor |
Every routing decision visible in traces |
| Nested team structures |
Hierarchical |
Subgraphs as nodes, each team self-contained |
Choosing Your Starting Point
| Your goal |
Start with |
Why |
| Build a project from scratch, need generated code |
scripts/lg-supervisor-scaffold.py or scripts/lg-swarm-scaffold.py |
Scaffolds generate complete project structure (state.py, agents.py, graph.py) with placeholders to fill in |
| Understand a complete, working example |
assets/templates/ matching your chosen pattern |
Templates are self-contained runnable files with all patterns wired — best for learning by reading |
| Deep dive into a pattern's internals |
Corresponding reference in references/ |
References explain tradeoffs, failure modes, and design rationale — best for customization |
| Debug or optimize an existing system |
references/production.md or references/troubleshooting.md |
Production reference covers deployment + observability; troubleshooting reference covers symptom→fix tables |
Core Primitives
LangGraph uses two APIs:
| API |
When to use |
Pattern |
Graph API (StateGraph) |
Full control over graph structure, conditional edges, subgraphs |
add_node() + add_edge()/add_conditional_edges() |
Functional API (@task + @entrypoint) |
Simpler linear workflows, less boilerplate |
Decorator-based, Pythonic |
Both APIs produce the same compiled graph — choose based on how much control you need.
Key Gotchas
- Subgraph persistence defaults to per-invocation — each subgraph call starts fresh. Set
checkpointer=True for per-thread memory, checkpointer=False for fully stateless.
- Per-thread subgraphs cannot run in parallel — same-namespace checkpoint conflicts. Use
ToolCallLimitMiddleware or disable parallel tool calls.
- The supervisor bottleneck — every interaction requires a routing LLM call, even for obvious intents. Add a fast-path classifier (keyword matching or small model) for unambiguous requests.
- Swarm ping-pong — no natural recursion guard. Track
handoff_count in state and hard-limit at 3, then escalate to human or fallback agent.
- Lost messages on handoff —
Command.update must include paired messages from the specialist's tool-calling loop, or the next agent sees malformed history.
- State access from parent to subgraph — subgraphs manage their own checkpoint namespace. Use Store for cross-graph-boundary data.
- Checkpoint bloat — long conversations accumulate checkpoints. Prune periodically or set retention policies on DB-backed checkpointers.
- No auto-load-on-install — skills aren't auto-discovered at session start by name mention. The agent must explicitly call
skill_view(name='langgraph') to load this skill.
Reference Files
| File |
Load when |
references/architecture.md |
You need to understand LangGraph core concepts: graph structure, nodes, edges, state, the two APIs, and basic agent loop construction. Read this first if you're new to LangGraph. |
references/multi-agent-supervisor.md |
You're designing a supervisor-based multi-agent system with a central routing node. Contains architecture, structured output routing, specialist wrappers, and full code examples. |
references/multi-agent-swarm.md |
You're designing a swarm-based multi-agent system with direct agent-to-agent handoffs. Contains handoff tool patterns, Command-based routing, and comparative metrics vs supervisor. |
references/multi-agent-hierarchical.md |
You're composing nested agent teams using subgraphs. Covers subgraph wiring (shared vs different state schemas), persistence modes, namespace isolation, and hierarchical team structures. |
references/persistence.md |
You're adding checkpointer-based short-term memory or store-based long-term memory. Covers per-invocation vs per-thread vs stateless modes, checkpoint backends, and cross-thread memory patterns. |
references/production.md |
You're deploying a LangGraph system to production. Covers Agent Server deployment, LangSmith observability, streaming patterns, and common production failure modes with fixes. |
references/evals.md |
You're setting up evaluation pipelines for multi-agent systems. Covers routing accuracy, resolution coverage, LangSmith eval datasets, and LLM-as-judge evaluators. |
references/troubleshooting.md |
You're debugging a specific LangGraph failure. Covers routing loops, context loss, checkpointer conflicts, token waste, and state inspection techniques. |
assets/templates/supervisor-graph.py |
Runnable supervisor example with billing, tech support, and account specialists — fast-path classifier, structured output routing, audit trail, and recursion guard. |
assets/templates/swarm-graph.py |
Runnable swarm example with triage agent plus 3 specialists — direct agent-to-agent handoffs via Command, recursion guard, and full traceability. |
assets/templates/subgraph-agent.py |
Runnable subgraph composition examples — all 3 wiring patterns (different state schemas, shared state keys, per-thread with namespace isolation). |
Scripts
| Script |
What it does |
scripts/lg-supervisor-scaffold.py |
Generates a complete supervisor pattern project with state schema, routing agent, specialist nodes, and graph assembly |
scripts/lg-swarm-scaffold.py |
Generates a complete swarm pattern project with handoff tools, triage agent, specialist agents, and conditional routing |
scripts/lg-eval-generator.py |
Generates evaluation datasets and runs LangSmith evaluators for routing accuracy and resolution coverage |
1---2name: langgraph3description: Build multi-agent AI systems with LangGraph — the low-level orchestration framework for stateful, graph-based agent workflows. Covers supervisor, swarm, and hierarchical multi-agent patterns; subgraph composition; state management (checkpointers/stores); persistence; evals; and production debugging. Reach for this when designing agent architectures that need cycles, conditional branching, parallel execution, or human-in-the-loop patterns. Do not use this skill for unrelated requests; route to the nearest named specialist.4license: MIT5---67# LangGraph89LangGraph is LangChain's low-level orchestration framework for building stateful, long-running, multi-agent AI workflows using directed graph architectures (inspired by Pregel/Beam and NetworkX). It models agents as **nodes** in a graph, with **edges** controlling flow — enabling cycles, conditional branching, parallel execution, human-in-the-loop, and subgraph composition that linear chains cannot express.1011This skill covers all major patterns for building and deploying LangGraph systems: core graph architecture, the three canonical multi-agent patterns (supervisor, swarm, hierarchical), persistence and state management, production debugging, and evaluation methodology.1213> **Before you begin:** Install dependencies:14> ```bash15> pip install langgraph langchain langchain-openai langsmith16> ```1718## Quick Start1920Create your first LangGraph agent in under 10 lines:2122```python23from langgraph.graph import StateGraph, MessagesState, START, END2425def hello_agent(state: MessagesState):26 return {"messages": [{"role": "ai", "content": "Hello, world!"}]}2728graph = StateGraph(MessagesState)29graph.add_node("agent", hello_agent)30graph.add_edge(START, "agent")31graph.add_edge("agent", END)32graph = graph.compile()3334graph.invoke({"messages": [{"role": "user", "content": "hi!"}]})35```3637**Next steps:**381. Use the **Pattern Selection Guide** below to choose supervisor, swarm, or hierarchical architecture — each pattern links to its recommended template392. Load the corresponding reference file for the deep pattern walkthrough403. Use the **Choosing Your Starting Point** table below to pick scaffold, template, or reference based on your task414. For a complete runnable example matching your pattern, use the linked template in assets/templates/4243> **Design Principles — These Govern Every Graph Decision**44> 1. **State is the source of truth** — all inter-node communication happens through state, not through side channels or global variables.45> 2. **Nodes are pure-ish** — a node receives state, does work, returns updates. It should not depend on state that isn't passed to it.46> 3. **Reducers prevent conflicts** — any state key written by multiple nodes in parallel MUST have a reducer.47> 4. **Start simple** — a single agent with good prompts beats a multi-agent system with bad routing. Add agents only when a single prompt or toolset becomes unwieldy.48> 5. **Use `Send()` for dynamic fan-out** — when you don't know how many workers you'll need at compile time, spawn them dynamically from the orchestrator node.49> 6. **Subgraph state isolation** — subgraphs with different state schemas need a wrapper function to transform state at the boundary. Shared-schema subgraphs can be added directly as nodes.5051## When to Reach For This5253| Context | What to load |54|---------|-------------|55| Building a new LangGraph workflow from scratch | `references/architecture.md` — core concepts first |56| Designing a multi-agent routing system | `references/multi-agent-supervisor.md` or `references/multi-agent-swarm.md` — compare patterns |57| Composing nested agent teams | `references/multi-agent-hierarchical.md` — subgraph composition |58| Adding persistence, interrupts, or long-term memory | `references/persistence.md` — checkpointers and stores |59| Deploying to production or debugging failures | `references/production.md` — deployment, observability, failure modes |60| Setting up eval pipelines for routing accuracy | `references/evals.md` — evaluation methodology |61| Diagnosing a specific failure (loop, context loss, crash) | `references/troubleshooting.md` — known failure modes |6263## Pattern Selection Guide6465| Your constraint | Prefer | Why |66|----------------|--------|-----|67| Routing accuracy > latency | **Supervisor** | Centralized routing node, focused prompt: ~94% accuracy | `assets/templates/supervisor-graph.py` |68| Latency is primary constraint | **Swarm** | Direct agent-to-agent handoffs, ~40% fewer LLM calls | `assets/templates/swarm-graph.py` |69| Clear domain boundaries | **Swarm** | Agents rarely misroute, handoffs are crisp | `assets/templates/swarm-graph.py` |70| Ambiguous domain boundaries | **Supervisor** | Overlapping concerns resolved by dedicated router | `assets/templates/supervisor-graph.py` |71| < 3 distinct domains | **Skip multi-agent** | A specialized single agent is simpler | `references/architecture.md` |72| Multi-domain requests common | **Swarm** | Latency savings compound across handoffs | `assets/templates/swarm-graph.py` |73| Need centralized audit trail | **Supervisor** | Every routing decision visible in traces | `assets/templates/supervisor-graph.py` |74| Nested team structures | **Hierarchical** | Subgraphs as nodes, each team self-contained | `assets/templates/subgraph-agent.py` |7576## Choosing Your Starting Point7778| Your goal | Start with | Why |79|----------|------------|-----|80| Build a project from scratch, need generated code | `scripts/lg-supervisor-scaffold.py` or `scripts/lg-swarm-scaffold.py` | Scaffolds generate complete project structure (state.py, agents.py, graph.py) with placeholders to fill in |81| Understand a complete, working example | `assets/templates/` matching your chosen pattern | Templates are self-contained runnable files with all patterns wired — best for learning by reading |82| Deep dive into a pattern's internals | Corresponding reference in `references/` | References explain tradeoffs, failure modes, and design rationale — best for customization |83| Debug or optimize an existing system | `references/production.md` or `references/troubleshooting.md` | Production reference covers deployment + observability; troubleshooting reference covers symptom→fix tables |8485## Core Primitives8687LangGraph uses two APIs:8889| API | When to use | Pattern |90|-----|-------------|---------|91| **Graph API** (`StateGraph`) | Full control over graph structure, conditional edges, subgraphs | `add_node()` + `add_edge()`/`add_conditional_edges()` |92| **Functional API** (`@task` + `@entrypoint`) | Simpler linear workflows, less boilerplate | Decorator-based, Pythonic |9394Both APIs produce the same compiled graph — choose based on how much control you need.9596## Key Gotchas9798- **Subgraph persistence defaults to per-invocation** — each subgraph call starts fresh. Set `checkpointer=True` for per-thread memory, `checkpointer=False` for fully stateless.99- **Per-thread subgraphs cannot run in parallel** — same-namespace checkpoint conflicts. Use `ToolCallLimitMiddleware` or disable parallel tool calls.100- **The supervisor bottleneck** — every interaction requires a routing LLM call, even for obvious intents. Add a fast-path classifier (keyword matching or small model) for unambiguous requests.101- **Swarm ping-pong** — no natural recursion guard. Track `handoff_count` in state and hard-limit at 3, then escalate to human or fallback agent.102- **Lost messages on handoff** — `Command.update` must include paired messages from the specialist's tool-calling loop, or the next agent sees malformed history.103- **State access from parent to subgraph** — subgraphs manage their own checkpoint namespace. Use Store for cross-graph-boundary data.104- **Checkpoint bloat** — long conversations accumulate checkpoints. Prune periodically or set retention policies on DB-backed checkpointers.105- **No auto-load-on-install** — skills aren't auto-discovered at session start by name mention. The agent must explicitly call `skill_view(name='langgraph')` to load this skill.106107## Reference Files108109| File | Load when |110|------|-----------|111| `references/architecture.md` | You need to understand LangGraph core concepts: graph structure, nodes, edges, state, the two APIs, and basic agent loop construction. Read this first if you're new to LangGraph. |112| `references/multi-agent-supervisor.md` | You're designing a supervisor-based multi-agent system with a central routing node. Contains architecture, structured output routing, specialist wrappers, and full code examples. |113| `references/multi-agent-swarm.md` | You're designing a swarm-based multi-agent system with direct agent-to-agent handoffs. Contains handoff tool patterns, Command-based routing, and comparative metrics vs supervisor. |114| `references/multi-agent-hierarchical.md` | You're composing nested agent teams using subgraphs. Covers subgraph wiring (shared vs different state schemas), persistence modes, namespace isolation, and hierarchical team structures. |115| `references/persistence.md` | You're adding checkpointer-based short-term memory or store-based long-term memory. Covers per-invocation vs per-thread vs stateless modes, checkpoint backends, and cross-thread memory patterns. |116| `references/production.md` | You're deploying a LangGraph system to production. Covers Agent Server deployment, LangSmith observability, streaming patterns, and common production failure modes with fixes. |117| `references/evals.md` | You're setting up evaluation pipelines for multi-agent systems. Covers routing accuracy, resolution coverage, LangSmith eval datasets, and LLM-as-judge evaluators. |118| `references/troubleshooting.md` | You're debugging a specific LangGraph failure. Covers routing loops, context loss, checkpointer conflicts, token waste, and state inspection techniques. |119| `assets/templates/supervisor-graph.py` | Runnable supervisor example with billing, tech support, and account specialists — fast-path classifier, structured output routing, audit trail, and recursion guard. |120| `assets/templates/swarm-graph.py` | Runnable swarm example with triage agent plus 3 specialists — direct agent-to-agent handoffs via Command, recursion guard, and full traceability. |121| `assets/templates/subgraph-agent.py` | Runnable subgraph composition examples — all 3 wiring patterns (different state schemas, shared state keys, per-thread with namespace isolation). |122123## Scripts124125| Script | What it does |126|--------|-------------|127| `scripts/lg-supervisor-scaffold.py` | Generates a complete supervisor pattern project with state schema, routing agent, specialist nodes, and graph assembly |128| `scripts/lg-swarm-scaffold.py` | Generates a complete swarm pattern project with handoff tools, triage agent, specialist agents, and conditional routing |129| `scripts/lg-eval-generator.py` | Generates evaluation datasets and runs LangSmith evaluators for routing accuracy and resolution coverage |