{"id":"c868eacf-ff55-40f1-98fa-7d47ad09873d","shortId":"BRPQ2j","kind":"skill","title":"Langgraph","tagline":"Antigravity Awesome Skills skill by Sickn33","description":"# LangGraph\n\nExpert in LangGraph - the production-grade framework for building stateful, multi-actor\nAI applications. Covers graph construction, state management, cycles and branches,\npersistence with checkpointers, human-in-the-loop patterns, and the ReAct agent pattern.\nUsed in production at LinkedIn, Uber, and 400+ companies. This is LangChain's recommended\napproach for building agents.\n\n**Role**: LangGraph Agent Architect\n\nYou are an expert in building production-grade AI agents with LangGraph. You\nunderstand that agents need explicit structure - graphs make the flow visible\nand debuggable. You design state carefully, use reducers appropriately, and\nalways consider persistence for production. You know when cycles are needed\nand how to prevent infinite loops.\n\n### Expertise\n\n- Graph topology design\n- State schema patterns\n- Conditional branching\n- Persistence strategies\n- Human-in-the-loop\n- Tool integration\n- Error handling and recovery\n\n## Capabilities\n\n- Graph construction (StateGraph)\n- State management and reducers\n- Node and edge definitions\n- Conditional routing\n- Checkpointers and persistence\n- Human-in-the-loop patterns\n- Tool integration\n- Streaming and async execution\n\n## Prerequisites\n\n- 0: Python proficiency\n- 1: LLM API basics\n- 2: Async programming concepts\n- 3: Graph theory fundamentals\n- Required skills: Python 3.9+, langgraph package, LLM API access (OpenAI, Anthropic, etc.), Understanding of graph concepts\n\n## Scope\n\n- 0: Python-only (TypeScript in early stages)\n- 1: Learning curve for graph concepts\n- 2: State management complexity\n- 3: Debugging can be challenging\n\n## Ecosystem\n\n### Primary\n\n- LangGraph\n- LangChain\n- LangSmith (observability)\n\n### Common_integrations\n\n- OpenAI / Anthropic / Google\n- Tavily (search)\n- SQLite / PostgreSQL (persistence)\n- Redis (state store)\n\n### Platforms\n\n- Python applications\n- FastAPI / Flask backends\n- Cloud deployments\n\n## Patterns\n\n### Basic Agent Graph\n\nSimple ReAct-style agent with tools\n\n**When to use**: Single agent with tool calling\n\nfrom typing import Annotated, TypedDict\nfrom langgraph.graph import StateGraph, START, END\nfrom langgraph.graph.message import add_messages\nfrom langgraph.prebuilt import ToolNode\nfrom langchain_openai import ChatOpenAI\nfrom langchain_core.tools import tool\n\n# 1. Define State\nclass AgentState(TypedDict):\n    messages: Annotated[list, add_messages]\n    # add_messages reducer appends, doesn't overwrite\n\n# 2. Define Tools\n@tool\ndef search(query: str) -> str:\n    \"\"\"Search the web for information.\"\"\"\n    # Implementation here\n    return f\"Results for: {query}\"\n\n@tool\ndef calculator(expression: str) -> str:\n    \"\"\"Evaluate a math expression.\"\"\"\n    return str(eval(expression))\n\ntools = [search, calculator]\n\n# 3. Create LLM with tools\nllm = ChatOpenAI(model=\"gpt-4o\").bind_tools(tools)\n\n# 4. Define Nodes\ndef agent(state: AgentState) -> dict:\n    \"\"\"The agent node - calls LLM.\"\"\"\n    response = llm.invoke(state[\"messages\"])\n    return {\"messages\": [response]}\n\n# Tool node handles tool execution\ntool_node = ToolNode(tools)\n\n# 5. Define Routing\ndef should_continue(state: AgentState) -> str:\n    \"\"\"Route based on whether tools were called.\"\"\"\n    last_message = state[\"messages\"][-1]\n    if last_message.tool_calls:\n        return \"tools\"\n    return END\n\n# 6. Build Graph\ngraph = StateGraph(AgentState)\n\n# Add nodes\ngraph.add_node(\"agent\", agent)\ngraph.add_node(\"tools\", tool_node)\n\n# Add edges\ngraph.add_edge(START, \"agent\")\ngraph.add_conditional_edges(\"agent\", should_continue, [\"tools\", END])\ngraph.add_edge(\"tools\", \"agent\")  # Loop back\n\n# Compile\napp = graph.compile()\n\n# 7. Run\nresult = app.invoke({\n    \"messages\": [(\"user\", \"What is 25 * 4?\")]\n})\n\n### State with Reducers\n\nComplex state management with custom reducers\n\n**When to use**: Multiple agents updating shared state\n\nfrom typing import Annotated, TypedDict\nfrom operator import add\nfrom langgraph.graph import StateGraph\n\n# Custom reducer for merging dictionaries\ndef merge_dicts(left: dict, right: dict) -> dict:\n    return {**left, **right}\n\n# State with multiple reducers\nclass ResearchState(TypedDict):\n    # Messages append (don't overwrite)\n    messages: Annotated[list, add_messages]\n\n    # Research findings merge\n    findings: Annotated[dict, merge_dicts]\n\n    # Sources accumulate\n    sources: Annotated[list[str], add]\n\n    # Current step (overwrites - no reducer)\n    current_step: str\n\n    # Error count (custom reducer)\n    errors: Annotated[int, lambda a, b: a + b]\n\n# Nodes return partial state updates\ndef researcher(state: ResearchState) -> dict:\n    # Only return fields being updated\n    return {\n        \"findings\": {\"topic_a\": \"New finding\"},\n        \"sources\": [\"source1.com\"],\n        \"current_step\": \"researching\"\n    }\n\ndef writer(state: ResearchState) -> dict:\n    # Access accumulated state\n    all_findings = state[\"findings\"]\n    all_sources = state[\"sources\"]\n\n    return {\n        \"messages\": [(\"assistant\", f\"Report based on {len(all_sources)} sources\")],\n        \"current_step\": \"writing\"\n    }\n\n# Build graph\ngraph = StateGraph(ResearchState)\ngraph.add_node(\"researcher\", researcher)\ngraph.add_node(\"writer\", writer)\n# ... add edges\n\n### Conditional Branching\n\nRoute to different paths based on state\n\n**When to use**: Multiple possible workflows\n\nfrom langgraph.graph import StateGraph, START, END\n\nclass RouterState(TypedDict):\n    query: str\n    query_type: str\n    result: str\n\ndef classifier(state: RouterState) -> dict:\n    \"\"\"Classify the query type.\"\"\"\n    query = state[\"query\"].lower()\n    if \"code\" in query or \"program\" in query:\n        return {\"query_type\": \"coding\"}\n    elif \"search\" in query or \"find\" in query:\n        return {\"query_type\": \"search\"}\n    else:\n        return {\"query_type\": \"chat\"}\n\ndef coding_agent(state: RouterState) -> dict:\n    return {\"result\": \"Here's your code...\"}\n\ndef search_agent(state: RouterState) -> dict:\n    return {\"result\": \"Search results...\"}\n\ndef chat_agent(state: RouterState) -> dict:\n    return {\"result\": \"Let me help...\"}\n\n# Routing function\ndef route_query(state: RouterState) -> str:\n    \"\"\"Route to appropriate agent.\"\"\"\n    query_type = state[\"query_type\"]\n    return query_type  # Returns node name\n\n# Build graph\ngraph = StateGraph(RouterState)\n\ngraph.add_node(\"classifier\", classifier)\ngraph.add_node(\"coding\", coding_agent)\ngraph.add_node(\"search\", search_agent)\ngraph.add_node(\"chat\", chat_agent)\n\ngraph.add_edge(START, \"classifier\")\n\n# Conditional edges from classifier\ngraph.add_conditional_edges(\n    \"classifier\",\n    route_query,\n    {\n        \"coding\": \"coding\",\n        \"search\": \"search\",\n        \"chat\": \"chat\"\n    }\n)\n\n# All agents lead to END\ngraph.add_edge(\"coding\", END)\ngraph.add_edge(\"search\", END)\ngraph.add_edge(\"chat\", END)\n\napp = graph.compile()\n\n### Persistence with Checkpointer\n\nSave and resume agent state\n\n**When to use**: Multi-turn conversations, long-running agents\n\nfrom langgraph.graph import StateGraph\nfrom langgraph.checkpoint.sqlite import SqliteSaver\nfrom langgraph.checkpoint.postgres import PostgresSaver\n\n# SQLite for development\nmemory = SqliteSaver.from_conn_string(\":memory:\")\n# Or persistent file\nmemory = SqliteSaver.from_conn_string(\"agent_state.db\")\n\n# PostgreSQL for production\n# memory = PostgresSaver.from_conn_string(DATABASE_URL)\n\n# Compile with checkpointer\napp = graph.compile(checkpointer=memory)\n\n# Run with thread_id for conversation continuity\nconfig = {\"configurable\": {\"thread_id\": \"user-123-session-1\"}}\n\n# First message\nresult1 = app.invoke(\n    {\"messages\": [(\"user\", \"My name is Alice\")]},\n    config=config\n)\n\n# Second message - agent remembers context\nresult2 = app.invoke(\n    {\"messages\": [(\"user\", \"What's my name?\")]},\n    config=config\n)\n# Agent knows name is Alice!\n\n# Get conversation history\nstate = app.get_state(config)\nprint(state.values[\"messages\"])\n\n# List all checkpoints\nfor checkpoint in app.get_state_history(config):\n    print(checkpoint.config, checkpoint.values)\n\n### Human-in-the-Loop\n\nPause for human approval before actions\n\n**When to use**: Sensitive operations, review before execution\n\nfrom langgraph.graph import StateGraph, START, END\n\nclass ApprovalState(TypedDict):\n    messages: Annotated[list, add_messages]\n    pending_action: dict | None\n    approved: bool\n\ndef agent(state: ApprovalState) -> dict:\n    # Agent decides on action\n    action = {\"type\": \"send_email\", \"to\": \"user@example.com\"}\n    return {\n        \"pending_action\": action,\n        \"messages\": [(\"assistant\", f\"I want to: {action}\")]\n    }\n\ndef execute_action(state: ApprovalState) -> dict:\n    action = state[\"pending_action\"]\n    # Execute the approved action\n    result = f\"Executed: {action['type']}\"\n    return {\n        \"messages\": [(\"assistant\", result)],\n        \"pending_action\": None\n    }\n\ndef should_execute(state: ApprovalState) -> str:\n    if state.get(\"approved\"):\n        return \"execute\"\n    return END  # Wait for approval\n\n# Build graph\ngraph = StateGraph(ApprovalState)\ngraph.add_node(\"agent\", agent)\ngraph.add_node(\"execute\", execute_action)\n\ngraph.add_edge(START, \"agent\")\ngraph.add_conditional_edges(\"agent\", should_execute, [\"execute\", END])\ngraph.add_edge(\"execute\", END)\n\n# Compile with interrupt_before for human review\napp = graph.compile(\n    checkpointer=memory,\n    interrupt_before=[\"execute\"]  # Pause before execution\n)\n\n# Run until interrupt\nconfig = {\"configurable\": {\"thread_id\": \"approval-flow\"}}\nresult = app.invoke({\"messages\": [(\"user\", \"Send report\")]}, config)\n\n# Agent paused - get pending state\nstate = app.get_state(config)\npending = state.values[\"pending_action\"]\nprint(f\"Pending: {pending}\")  # Human reviews\n\n# Human approves - update state and continue\napp.update_state(config, {\"approved\": True})\nresult = app.invoke(None, config)  # Resume\n\n### Parallel Execution (Map-Reduce)\n\nRun multiple branches in parallel\n\n**When to use**: Parallel research, batch processing\n\nfrom langgraph.graph import StateGraph, START, END, Send\nfrom langgraph.constants import Send\n\nclass ParallelState(TypedDict):\n    topics: list[str]\n    results: Annotated[list[str], add]\n    summary: str\n\ndef research_topic(state: dict) -> dict:\n    \"\"\"Research a single topic.\"\"\"\n    topic = state[\"topic\"]\n    result = f\"Research on {topic}...\"\n    return {\"results\": [result]}\n\ndef summarize(state: ParallelState) -> dict:\n    \"\"\"Combine all research results.\"\"\"\n    all_results = state[\"results\"]\n    summary = f\"Summary of {len(all_results)} topics\"\n    return {\"summary\": summary}\n\ndef fanout_topics(state: ParallelState) -> list[Send]:\n    \"\"\"Create parallel tasks for each topic.\"\"\"\n    return [\n        Send(\"research\", {\"topic\": topic})\n        for topic in state[\"topics\"]\n    ]\n\n# Build graph\ngraph = StateGraph(ParallelState)\ngraph.add_node(\"research\", research_topic)\ngraph.add_node(\"summarize\", summarize)\n\n# Fan out to parallel research\ngraph.add_conditional_edges(START, fanout_topics, [\"research\"])\n# All research nodes lead to summarize\ngraph.add_edge(\"research\", \"summarize\")\ngraph.add_edge(\"summarize\", END)\n\napp = graph.compile()\n\nresult = app.invoke({\n    \"topics\": [\"AI\", \"Climate\", \"Space\"],\n    \"results\": []\n})\n# Research runs in parallel, then summarizes\n\n## Collaboration\n\n### Delegation Triggers\n\n- crewai|role-based|crew -> crewai (Need role-based multi-agent approach)\n- observability|tracing|langsmith -> langfuse (Need LLM observability)\n- structured output|json schema -> structured-output (Need structured LLM responses)\n- evaluate|benchmark|test agent -> agent-evaluation (Need to evaluate agent performance)\n\n### Production Agent Stack\n\nSkills: langgraph, langfuse, structured-output\n\nWorkflow:\n\n```\n1. Design agent graph with LangGraph\n2. Add structured outputs for tool responses\n3. Integrate Langfuse for observability\n4. Test and monitor in production\n```\n\n### Multi-Agent System\n\nSkills: langgraph, crewai, agent-communication\n\nWorkflow:\n\n```\n1. Design agent roles (CrewAI patterns)\n2. Implement as LangGraph with subgraphs\n3. Add inter-agent communication\n4. Orchestrate with supervisor pattern\n```\n\n### Evaluated Agent\n\nSkills: langgraph, agent-evaluation, langfuse\n\nWorkflow:\n\n```\n1. Build agent with LangGraph\n2. Create evaluation suite\n3. Monitor with Langfuse\n4. Iterate based on metrics\n```\n\n## Related Skills\n\nWorks well with: `crewai`, `autonomous-agents`, `langfuse`, `structured-output`\n\n## When to Use\n- User mentions or implies: langgraph\n- User mentions or implies: langchain agent\n- User mentions or implies: stateful agent\n- User mentions or implies: agent graph\n- User mentions or implies: react agent\n- User mentions or implies: agent workflow\n- User mentions or implies: multi-step agent\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["langgraph","antigravity","awesome","skills","sickn33"],"capabilities":["skill","source-sickn33","category-antigravity-awesome-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/langgraph","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"install_from":"skills.sh"}},"qualityScore":"0.300","qualityRationale":"deterministic score 0.30 from registry signals: · indexed on skills.sh · published under sickn33/antigravity-awesome-skills","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill:v1","enrichmentVersion":1,"enrichedAt":"2026-04-25T09:40:44.985Z","embedding":null,"createdAt":"2026-04-18T20:36:27.954Z","updatedAt":"2026-04-25T09:40:44.985Z","lastSeenAt":"2026-04-25T09:40:44.985Z","tsv":"'-1':422,918 '-123':916 '0':173,205 '1':176,213,303,1401,1436,1468 '2':180,219,321,1407,1442,1473 '25':478 '3':184,223,359,1414,1448,1477 '3.9':191 '4':373,479,1419,1454,1481 '400':54 '4o':369 '5':402 '6':430 '7':470 'access':196,609 'accumul':552,610 'action':984,1008,1021,1022,1030,1031,1038,1041,1045,1048,1052,1056,1063,1094,1157 'actor':22 'add':288,312,314,436,447,505,541,557,647,1005,1218,1408,1449 'agent':45,64,67,79,85,257,263,270,377,382,440,441,452,456,464,493,724,736,746,766,791,796,801,823,847,859,933,946,1014,1018,1088,1089,1098,1102,1145,1359,1382,1384,1389,1392,1403,1427,1433,1438,1452,1460,1464,1470,1494,1512,1518,1523,1530,1535,1544 'agent-commun':1432 'agent-evalu':1383,1463 'agent_state.db':887 'agentst':307,379,409,435 'ai':23,78,1334 'alic':928,950 'alway':104 'annot':277,310,500,539,547,554,571,1003,1215 'anthrop':198,237 'antigrav':2 'api':178,195 'app':468,839,900,1118,1329 'app.get':955,967,1151 'app.invoke':473,922,937,1139,1176,1332 'app.update':1170 'append':317,534 'applic':24,249 'approach':61,1360 'appropri':102,765 'approv':982,1011,1051,1073,1080,1136,1165,1173 'approval-flow':1135 'approvalst':1000,1016,1043,1069,1085 'architect':68 'ask':1578 'assist':622,1033,1060 'async':170,181 'autonom':1493 'autonomous-ag':1492 'awesom':3 'b':575,577 'back':466 'backend':252 'base':412,625,655,1350,1356,1483 'basic':179,256 'batch':1195 'benchmark':1380 'bind':370 'bool':1012 'boundari':1586 'branch':32,129,650,1187 'build':18,63,74,431,634,778,1081,1289,1469 'calcul':344,358 'call':273,384,417,425 'capabl':143 'care':99 'category-antigravity-awesome-skills' 'challeng':227 'chat':721,745,799,800,820,821,837 'chatopenai':298,365 'checkpoint':35,157,843,899,902,963,965,1120 'checkpoint.config':972 'checkpoint.values':973 'clarif':1580 'class':306,530,670,999,1208 'classifi':681,685,785,786,805,809,813 'clear':1553 'climat':1335 'cloud':253 'code':694,704,723,733,789,790,816,817,829 'collabor':1344 'combin':1247 'common':234 'communic':1434,1453 'compani':55 'compil':467,897,1111 'complex':222,483 'concept':183,203,218 'condit':128,155,454,649,806,811,1100,1309 'config':911,929,930,944,945,957,970,1131,1144,1153,1172,1178 'configur':912,1132 'conn':877,885,893 'consid':105 'construct':27,145 'context':935 'continu':407,458,910,1169 'convers':855,909,952 'count':567 'cover':25 'creat':360,1273,1474 'crew':1351 'crewai':1347,1352,1431,1440,1491 'criteria':1589 'current':558,563,601,631 'curv':215 'custom':487,510,568 'cycl':30,112 'databas':895 'debug':224 'debugg':95 'decid':1019 'def':325,343,376,405,515,583,604,680,722,734,744,757,1013,1039,1065,1221,1242,1266 'defin':304,322,374,403 'definit':154 'deleg':1345 'deploy':254 'describ':1557 'design':97,124,1402,1437 'develop':874 'dict':380,517,519,521,522,548,550,587,608,684,727,739,749,1009,1017,1044,1225,1226,1246 'dictionari':514 'differ':653 'doesn':318 'earli':211 'ecosystem':228 'edg':153,448,450,455,462,648,803,807,812,828,832,836,1096,1101,1108,1310,1322,1326 'elif':705 'els':717 'email':1025 'end':284,429,460,669,826,830,834,838,998,1077,1106,1110,1202,1328 'environ':1569 'environment-specif':1568 'error':139,566,570 'etc':199 'eval':354 'evalu':348,1379,1385,1388,1459,1465,1475 'execut':171,397,992,1040,1049,1055,1067,1075,1092,1093,1104,1105,1109,1124,1127,1181 'expert':9,72,1574 'expertis':121 'explicit':87 'express':345,351,355 'f':338,623,1034,1054,1159,1235,1256 'fan':1303 'fanout':1267,1312 'fastapi':250 'field':590 'file':882 'find':544,546,594,598,613,615,710 'first':919 'flask':251 'flow':92,1137 'framework':16 'function':756 'fundament':187 'get':951,1147 'googl':238 'gpt':368 'gpt-4o':367 'grade':15,77 'graph':26,89,122,144,185,202,217,258,432,433,635,636,779,780,1082,1083,1290,1291,1404,1524 'graph.add':438,442,449,453,461,639,643,783,787,792,797,802,810,827,831,835,1086,1090,1095,1099,1107,1294,1299,1308,1321,1325 'graph.compile':469,840,901,1119,1330 'handl':140,395 'help':754 'histori':953,969 'human':37,133,161,975,981,1116,1162,1164 'human-in-the-loop':36,132,160,974 'id':907,914,1134 'implement':335,1443 'impli':1505,1510,1516,1522,1528,1534,1540 'import':276,281,287,292,297,301,499,504,508,666,862,866,870,995,1199,1206 'infinit':119 'inform':334 'input':1583 'int':572 'integr':138,167,235,1415 'inter':1451 'inter-ag':1450 'interrupt':1113,1122,1130 'iter':1482 'json':1370 'know':110,947 'lambda':573 'langchain':58,231,295,1511 'langchain_core.tools':300 'langfus':1364,1396,1416,1466,1480,1495 'langgraph':1,8,11,66,81,192,230,1395,1406,1430,1445,1462,1472,1506 'langgraph.checkpoint.postgres':869 'langgraph.checkpoint.sqlite':865 'langgraph.constants':1205 'langgraph.graph':280,507,665,861,994,1198 'langgraph.graph.message':286 'langgraph.prebuilt':291 'langsmith':232,1363 'last':418 'last_message.tool':424 'lead':824,1318 'learn':214 'left':518,524 'len':627,1259 'let':752 'limit':1545 'linkedin':51 'list':311,540,555,961,1004,1212,1216,1271 'llm':177,194,361,364,385,1366,1377 'llm.invoke':387 'long':857 'long-run':856 'loop':40,120,136,164,465,978 'lower':692 'make':90 'manag':29,148,221,485 'map':1183 'map-reduc':1182 'match':1554 'math':350 'memori':875,879,883,891,903,1121 'mention':1503,1508,1514,1520,1526,1532,1538 'merg':513,516,545,549 'messag':289,309,313,315,389,391,419,421,474,533,538,542,621,920,923,932,938,960,1002,1006,1032,1059,1140 'metric':1485 'miss':1591 'model':366 'monitor':1422,1478 'multi':21,853,1358,1426,1542 'multi-actor':20 'multi-ag':1357,1425 'multi-step':1541 'multi-turn':852 'multipl':492,528,661,1186 'name':777,926,943,948 'need':86,114,1353,1365,1375,1386 'new':597 'node':151,375,383,394,399,437,439,443,446,578,640,644,776,784,788,793,798,1087,1091,1295,1300,1317 'none':1010,1064,1177 'observ':233,1361,1367,1418 'openai':197,236,296 'oper':503,989 'orchestr':1455 'output':1369,1374,1399,1410,1498,1563 'overwrit':320,537,560 'packag':193 'parallel':1180,1189,1193,1274,1306,1341 'parallelst':1209,1245,1270,1293 'partial':580 'path':654 'pattern':41,46,127,165,255,1441,1458 'paus':979,1125,1146 'pend':1007,1029,1047,1062,1148,1154,1156,1160,1161 'perform':1390 'permiss':1584 'persist':33,106,130,159,243,841,881 'platform':247 'possibl':662 'postgresql':242,888 'postgressav':871 'postgressaver.from':892 'prerequisit':172 'prevent':118 'primari':229 'print':958,971,1158 'process':1196 'product':14,49,76,108,890,1391,1424 'production-grad':13,75 'profici':175 'program':182,698 'python':174,190,207,248 'python-on':206 'queri':327,341,673,675,687,689,691,696,700,702,708,712,714,719,759,767,770,773,815 'react':44,261,1529 'react-styl':260 'recommend':60 'recoveri':142 'redi':244 'reduc':101,150,316,482,488,511,529,562,569,1184 'relat':1486 'rememb':934 'report':624,1143 'requir':188,1582 'research':543,584,603,641,642,1194,1222,1227,1236,1249,1281,1296,1297,1307,1314,1316,1323,1338 'researchst':531,586,607,638 'respons':386,392,1378,1413 'result':339,472,678,729,741,743,751,1053,1061,1138,1175,1214,1234,1240,1241,1250,1252,1254,1261,1331,1337 'result1':921 'result2':936 'resum':846,1179 'return':337,352,390,426,428,523,579,589,593,620,701,713,718,728,740,750,772,775,1028,1058,1074,1076,1239,1263,1279 'review':990,1117,1163,1575 'right':520,525 'role':65,1349,1355,1439 'role-bas':1348,1354 'rout':156,404,411,651,755,758,763,814 'routerst':671,683,726,738,748,761,782 'run':471,858,904,1128,1185,1339 'safeti':1585 'save':844 'schema':126,1371 'scope':204,1556 'search':240,326,330,357,706,716,735,742,794,795,818,819,833 'second':931 'send':1024,1142,1203,1207,1272,1280 'sensit':988 'session':917 'share':495 'sickn33':7 'simpl':259 'singl':269,1229 'skill':4,5,189,1394,1429,1461,1487,1548 'sourc':551,553,599,617,619,629,630 'source-sickn33' 'source1.com':600 'space':1336 'specif':1570 'sqlite':241,872 'sqlitesav':867 'sqlitesaver.from':876,884 'stack':1393 'stage':212 'start':283,451,668,804,997,1097,1201,1311 'state':19,28,98,125,147,220,245,305,378,388,408,420,480,484,496,526,581,585,606,611,614,618,657,682,690,725,737,747,760,769,848,954,956,968,1015,1042,1046,1068,1149,1150,1152,1167,1171,1224,1232,1244,1253,1269,1287,1517 'state.get':1072 'state.values':959,1155 'stategraph':146,282,434,509,637,667,781,863,996,1084,1200,1292 'step':559,564,602,632,1543 'stop':1576 'store':246 'str':328,329,346,347,353,410,556,565,674,677,679,762,1070,1213,1217,1220 'strategi':131 'stream':168 'string':878,886,894 'structur':88,1368,1373,1376,1398,1409,1497 'structured-output':1372,1397,1496 'style':262 'subgraph':1447 'substitut':1566 'success':1588 'suit':1476 'summar':1243,1301,1302,1320,1324,1327,1343 'summari':1219,1255,1257,1264,1265 'supervisor':1457 'system':1428 'task':1275,1552 'tavili':239 'test':1381,1420,1572 'theori':186 'thread':906,913,1133 'tool':137,166,265,272,302,323,324,342,356,363,371,372,393,396,398,401,415,427,444,445,459,463,1412 'toolnod':293,400 'topic':595,1211,1223,1230,1231,1233,1238,1262,1268,1278,1282,1283,1285,1288,1298,1313,1333 'topolog':123 'trace':1362 'treat':1561 'trigger':1346 'true':1174 'turn':854 'type':275,498,676,688,703,715,720,768,771,774,1023,1057 'typeddict':278,308,501,532,672,1001,1210 'typescript':209 'uber':52 'understand':83,200 'updat':494,582,592,1166 'url':896 'use':47,100,268,491,660,851,987,1192,1501,1546 'user':475,915,924,939,1141,1502,1507,1513,1519,1525,1531,1537 'user@example.com':1027 'valid':1571 'visibl':93 'wait':1078 'want':1036 'web':332 'well':1489 'whether':414 'work':1488 'workflow':663,1400,1435,1467,1536 'write':633 'writer':605,645,646","prices":[{"id":"95896b79-37c1-44c6-81ef-2ad07eabd633","listingId":"c868eacf-ff55-40f1-98fa-7d47ad09873d","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T20:36:27.954Z"}],"sources":[{"listingId":"c868eacf-ff55-40f1-98fa-7d47ad09873d","source":"github","sourceId":"sickn33/antigravity-awesome-skills/langgraph","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/langgraph","isPrimary":false,"firstSeenAt":"2026-04-18T21:39:41.223Z","lastSeenAt":"2026-04-25T06:51:24.968Z"},{"listingId":"c868eacf-ff55-40f1-98fa-7d47ad09873d","source":"skills_sh","sourceId":"sickn33/antigravity-awesome-skills/langgraph","sourceUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/langgraph","isPrimary":true,"firstSeenAt":"2026-04-18T20:36:27.954Z","lastSeenAt":"2026-04-25T09:40:44.985Z"}],"details":{"listingId":"c868eacf-ff55-40f1-98fa-7d47ad09873d","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"langgraph","source":"skills_sh","category":"antigravity-awesome-skills","skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/langgraph"},"updatedAt":"2026-04-25T09:40:44.985Z"}}