Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →LangGraph StateGraph builder with state schema design. Create stateful agent workflows with cycles, conditionals, and persistence.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-16 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-01 | ✗→✗ | = Same ✗ | 104% | 0% |
| case-02 | ✗→✗ | = Same ✗ | 60% | 0% |
| case-03 | ✗→✗ | = Same ✗ | 117% | 0% |
| case-04 | ✗→✗ | = Same ✗ | 87% | 0% |
Build stateful agent workflows using LangGraph's StateGraph pattern. Design state schemas, create nodes, define edges with conditional routing, and enable persistence.
LangGraph is a library for building stateful, multi-actor applications with LLMs. The StateGraph is the core abstraction that enables:
pythonfrom typing import TypedDict, Annotated from langgraph.graph import StateGraph, END from langgraph.graph.message import add_messages # Define state schema class AgentState(TypedDict): messages: Annotated[list, add_messages] current_step: str iteration: int # Create nodes def agent_node(state: AgentState) -> AgentState: # Process state and return updates return {"current_step": "processed", "iteration": state["iteration"] + 1} def tool_node(state: AgentState) -> AgentState: # Execute tools based on agent decisions return {"current_step": "tools_executed"} # Build graph graph = StateGraph(AgentState) graph.add_node("agent", agent_node) graph.add_node("tools", tool_node) # Define edges graph.set_entry_point("agent") graph.add_edge("agent", "tools") graph.add_conditional_edges( "tools", lambda state: "end" if state["iteration"] >= 3 else "continue", {"end": END, "continue": "agent"} ) # Compile app = graph.compile()
pythondef router(state: AgentState) -> str: """Route based on state conditions.""" last_message = state["messages"][-1] if hasattr(last_message, "tool_calls") and last_message.tool_calls: return "tools" elif state["iteration"] >= state.get("max_iterations", 10): return "end" else: return "agent" graph.add_conditional_edges( "agent", router, { "tools": "tool_executor", "agent": "agent", "end": END } )
pythonfrom langgraph.checkpoint.sqlite import SqliteSaver # Configure checkpointer memory = SqliteSaver.from_conn_string(":memory:") # Compile with persistence app = graph.compile(checkpointer=memory) # Run with thread_id for persistence config = {"configurable": {"thread_id": "conversation-1"}} result = app.invoke(initial_state, config=config) # Resume from checkpoint result = app.invoke(None, config=config) # Continues from last state
pythonfrom langgraph.graph import StateGraph graph = StateGraph(AgentState) # ... add nodes ... # Compile with interrupt points app = graph.compile( checkpointer=memory, interrupt_before=["tool_executor"] # Pause before tool execution ) # First invocation - pauses at interrupt result = app.invoke(initial_state, config) # After human approval, resume result = app.invoke(None, config) # Continues past interrupt
javascriptconst langgraphStateGraphTask = defineTask({ name: 'langgraph-state-graph-design', description: 'Design and implement a LangGraph StateGraph workflow', inputs: { workflowName: { type: 'string', required: true }, stateSchema: { type: 'object', required: true }, nodes: { type: 'array', required: true }, edges: { type: 'array', required: true }, enablePersistence: { type: 'boolean', default: true }, interruptPoints: { type: 'array', default: [] } }, outputs: { graphCode: { type: 'string' }, stateSchemaCode: { type: 'string' }, compiledGraph: { type: 'boolean' }, artifacts: { type: 'array' } }, async run(inputs, taskCtx) { return { kind: 'skill', title: `Design StateGraph: ${inputs.workflowName}`, skill: { name: 'langgraph-state-graph', context: { workflowName: inputs.workflowName, stateSchema: inputs.stateSchema, nodes: inputs.nodes, edges: inputs.edges, enablePersistence: inputs.enablePersistence, interruptPoints: inputs.interruptPoints, instructions: [ 'Analyze workflow requirements and state needs', 'Design state schema with proper typing', 'Create node functions with state transformations', 'Define edges and conditional routing logic', 'Configure persistence if enabled', 'Add interrupt points for human-in-the-loop', 'Compile and validate the graph' ] } }, io: { inputJsonPath: `tasks/${taskCtx.effectId}/input.json`, outputJsonPath: `tasks/${taskCtx.effectId}/result.json` } }; } });
Other measured skills in the registry, with their headline benchmark lift.