{"id":"ac245be6-55a3-4c97-ad02-e340fe85f50e","slug":"spillwavesolutions-mastering-langgraph-agent-skill","name":"mastering-langgraph","description":"Build stateful AI agents and agentic workflows with LangGraph in Python. Covers tool-using agents with LLM-tool loops, branching workflows, conversation memory, human-in-the-loop oversight, and production monitoring. Use when - (1) building agents that use tools and loop until task complete, (2) creating multi-step workflows with conditional branches, (3) adding persistence/memory across turns with checkpointers, (4) implementing human approval with interrupt(), (5) debugging via time-travel or LangSmith. Covers StateGraph, nodes, edges, add_conditional_edges, MessagesState, thread_id, Command objects, and ToolMessage handling. Examples include chatbots, calculator agents, and structured workflows.","canonicalUrl":"https://www.xpersona.co/agent/spillwavesolutions-mastering-langgraph-agent-skill","sourceUrl":"https://github.com/SpillwaveSolutions/mastering-langgraph-agent-skill","homepage":null,"source":"GITHUB_OPENCLEW","vendor":{"slug":"spillwavesolutions","label":"Spillwavesolutions","url":"https://github.com/SpillwaveSolutions/mastering-langgraph-agent-skill"},"protocols":["OPENCLEW"],"capabilities":["format"],"trustScore":null,"trustConfidence":"unknown","artifactCount":0,"benchmarkCount":0,"lastRelease":null,"freshnessAt":"2026-04-15T04:12:21.053Z","freshnessLabel":"Apr 15, 2026","securityReviewed":true,"openapiReady":false,"stats":[{"label":"Trust score","value":"Unknown"},{"label":"Compatibility","value":"OpenClaw"},{"label":"Freshness","value":"Apr 15, 2026"},{"label":"Vendor","value":"Spillwavesolutions"},{"label":"Artifacts","value":"0"},{"label":"Benchmarks","value":"0"},{"label":"Last release","value":"Unpublished"}],"factsPreview":[{"factKey":"vendor","label":"Vendor","value":"Spillwavesolutions","category":"vendor","href":"https://github.com/SpillwaveSolutions/mastering-langgraph-agent-skill","sourceUrl":"https://github.com/SpillwaveSolutions/mastering-langgraph-agent-skill","sourceType":"profile","confidence":"medium","observedAt":"2026-04-15T05:21:22.124Z","isPublic":true,"metadata":{}},{"factKey":"protocols","label":"Protocol compatibility","value":"OpenClaw","category":"compatibility","href":"https://www.xpersona.co/api/v1/agents/spillwavesolutions-mastering-langgraph-agent-skill/contract","sourceUrl":"https://www.xpersona.co/api/v1/agents/spillwavesolutions-mastering-langgraph-agent-skill/contract","sourceType":"contract","confidence":"medium","observedAt":"2026-04-15T05:21:22.124Z","isPublic":true,"metadata":{}},{"factKey":"traction","label":"Adoption signal","value":"31 GitHub stars","category":"adoption","href":"https://github.com/SpillwaveSolutions/mastering-langgraph-agent-skill","sourceUrl":"https://github.com/SpillwaveSolutions/mastering-langgraph-agent-skill","sourceType":"profile","confidence":"medium","observedAt":"2026-04-15T05:21:22.124Z","isPublic":true,"metadata":{}},{"factKey":"docs_crawl","label":"Crawlable docs","value":"6 indexed pages on the official domain","category":"integration","href":"https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar","sourceUrl":"https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar","sourceType":"search_document","confidence":"medium","observedAt":"2026-04-15T05:03:46.393Z","isPublic":true,"metadata":{}},{"factKey":"handshake_status","label":"Handshake status","value":"UNKNOWN","category":"security","href":"https://www.xpersona.co/api/v1/agents/spillwavesolutions-mastering-langgraph-agent-skill/trust","sourceUrl":"https://www.xpersona.co/api/v1/agents/spillwavesolutions-mastering-langgraph-agent-skill/trust","sourceType":"trust","confidence":"medium","observedAt":null,"isPublic":true,"metadata":{}}],"highlights":["31 GitHub stars","Trust evidence available"],"agentCard":{"name":"mastering-langgraph","description":"Build stateful AI agents and agentic workflows with LangGraph in Python. Covers tool-using agents with LLM-tool loops, branching workflows, conversation memory, human-in-the-loop oversight, and production monitoring. Use when - (1) building agents that use tools and loop until task complete, (2) creating multi-step workflows with conditional branches, (3) adding persistence/memory across turns with checkpointers, (4) implementing human approval with interrupt(), (5) debugging via time-travel or LangSmith. Covers StateGraph, nodes, edges, add_conditional_edges, MessagesState, thread_id, Command objects, and ToolMessage handling. Examples include chatbots, calculator agents, and structured workflows.","source":"GITHUB_OPENCLEW","sourceId":"github:1124410972","repository":"https://github.com/SpillwaveSolutions/mastering-langgraph-agent-skill","documentation":"https://www.xpersona.co/agent/spillwavesolutions-mastering-langgraph-agent-skill","protocols":["OPENCLEW"],"capabilities":["format"],"languages":["typescript"],"install":{"command":"git clone https://github.com/SpillwaveSolutions/mastering-langgraph-agent-skill.git","ecosystem":"git"},"examples":[{"kind":"example","language":"python","snippet":"from langgraph.graph import StateGraph, START, END\nfrom langgraph.checkpoint.memory import InMemorySaver\nfrom langchain_openai import ChatOpenAI\nfrom langchain_core.messages import HumanMessage, AnyMessage\nfrom typing_extensions import TypedDict, Annotated\nimport operator\n\n# 1. Define state\nclass State(TypedDict):\n    messages: Annotated[list[AnyMessage], operator.add]  # Append mode\n\n# 2. Define node\nllm = ChatOpenAI(model=\"gpt-4\")\n\ndef chat(state: State) -> dict:\n    response = llm.invoke(state[\"messages\"])\n    return {\"messages\": [response]}\n\n# 3. Build graph\ngraph = StateGraph(State)\ngraph.add_node(\"chat\", chat)\ngraph.add_edge(START, \"chat\")\ngraph.add_edge(\"chat\", END)\n\n# 4. Compile with memory\nchain = graph.compile(checkpointer=InMemorySaver())\n\n# 5. Invoke with thread_id for persistence\nresult = chain.invoke(\n    {\"messages\": [HumanMessage(content=\"Hello!\")]},\n    config={\"configurable\": {\"thread_id\": \"user-123\"}}\n)\nprint(result[\"messages\"][-1].content)"},{"kind":"example","language":"python","snippet":"# ✓ Good: raw data\nclass State(TypedDict):\n    user_question: str\n    retrieved_docs: list[str]\n    intent: str\n\n# ✗ Bad: pre-formatted\nclass State(TypedDict):\n    full_prompt: str  # Mixes data with formatting"}]}}