[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C5VXNDNPE7ZJM35DCTGDRA":3,"skill-same:01M6C5VXNDNPE7ZJM35DCTGDRA":56},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":30,"linkOnly":31,"markdownContent":32,"markdownBody":33,"frontMatter":34,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":14,"repositoryHtmlUrl":38,"repositoryHomepageUrl":6,"ownerHtmlUrl":39,"ownerBlogUrl":40,"ownerDescription":6,"updatedAt":41,"install":42,"resources":55},"01M6C5VXNDNPE7ZJM35DCTGDRA","langchain-middleware",null,"INVOKE THIS SKILL when you need human-in-the-loop approval, custom middleware, or structured output. Covers HumanInTheLoopMiddleware for human approval of dangerous tool calls, creating custom middleware with hooks, Command resume patterns, and structured output with Pydantic\u002FZod.","CoralShades\u002Facm-ai","CoralShades","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F220297585?v=4","01M6C5211QSJHZ8HXSDDWCR507","Coral Shades AI Agency","01M6C52161FNQDRQ0FRR8DAA9D",0,"MIT","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.continue\u002Fskills\u002Flangchain-middleware\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29],"langchain","langchain middleware","Pydantic","human-in-the-loop","loop","tool","zod","command","approval","hooks","resume","2026-11-10 10:12:30",false,"---\nname: langchain-middleware\ndescription: \"INVOKE THIS SKILL when you need human-in-the-loop approval, custom middleware, or structured output. Covers HumanInTheLoopMiddleware for human approval of dangerous tool calls, creating custom middleware with hooks, Command resume patterns, and structured output with Pydantic\u002FZod.\"\n---\n\n\u003Coverview>\nMiddleware patterns for production LangChain agents:\n\n- **HumanInTheLoopMiddleware** \u002F **humanInTheLoopMiddleware**: Pause before dangerous tool calls for human approval\n- **Custom middleware**: Intercept tool calls for error handling, logging, retry logic\n- **Command resume**: Continue execution after human decisions (approve, edit, reject)\n\n**Requirements:** Checkpointer + thread_id config for all HITL workflows.\n\u003C\u002Foverview>\n\n---\n\n## Human-in-the-Loop\n\n\u003Cex-basic-hitl-setup>\n\u003Cpython>\nSet up an agent with HITL middleware that pauses before sending emails for approval.\n```python\nfrom langchain.agents import create_agent\nfrom langchain.agents.middleware import HumanInTheLoopMiddleware\nfrom langgraph.checkpoint.memory import MemorySaver\nfrom langchain.tools import tool\n\n@tool\ndef send_email(to: str, subject: str, body: str) -> str:\n    \"\"\"Send an email.\"\"\"\n    return f\"Email sent to {to}\"\n\nagent = create_agent(\n    model=\"gpt-4.1\",\n    tools=[send_email],\n    checkpointer=MemorySaver(),  # Required for HITL\n    middleware=[\n        HumanInTheLoopMiddleware(\n            interrupt_on={\n                \"send_email\": {\"allowed_decisions\": [\"approve\", \"edit\", \"reject\"]},\n            }\n        )\n    ],\n)\n```\n\u003C\u002Fpython>\n\u003Ctypescript>\nSet up an agent with HITL that pauses before sending emails for human approval.\n```typescript\nimport { createAgent, humanInTheLoopMiddleware } from \"langchain\";\nimport { MemorySaver } from \"@langchain\u002Flanggraph\";\nimport { tool } from \"@langchain\u002Fcore\u002Ftools\";\nimport { z } from \"zod\";\n\nconst sendEmail = tool(\n  async ({ to, subject, body }) => `Email sent to ${to}`,\n  {\n    name: \"send_email\",\n    description: \"Send an email\",\n    schema: z.object({ to: z.string(), subject: z.string(), body: z.string() }),\n  }\n);\n\nconst agent = createAgent({\n  model: \"anthropic:claude-sonnet-4-5\",\n  tools: [sendEmail],\n  checkpointer: new MemorySaver(),\n  middleware: [\n    humanInTheLoopMiddleware({\n      interruptOn: { send_email: { allowedDecisions: [\"approve\", \"edit\", \"reject\"] } },\n    }),\n  ],\n});\n```\n\u003C\u002Ftypescript>\n\u003C\u002Fex-basic-hitl-setup>\n\n\u003Cex-running-with-interrupts>\n\u003Cpython>\nRun the agent, detect an interrupt, then resume execution after human approval.\n```python\nfrom langgraph.types import Command\n\nconfig = {\"configurable\": {\"thread_id\": \"session-1\"}}\n\n# Step 1: Agent runs until it needs to call tool\nresult1 = agent.invoke({\n    \"messages\": [{\"role\": \"user\", \"content\": \"Send email to john@example.com\"}]\n}, config=config)\n\n# Check for interrupt\nif \"__interrupt__\" in result1:\n    print(f\"Waiting for approval: {result1['__interrupt__']}\")\n\n# Step 2: Human approves\nresult2 = agent.invoke(\n    Command(resume={\"decisions\": [{\"type\": \"approve\"}]}),\n    config=config\n)\n```\n\u003C\u002Fpython>\n\u003Ctypescript>\nRun the agent, detect an interrupt, then resume execution after human approval.\n```typescript\nimport { Command } from \"@langchain\u002Flanggraph\";\n\nconst config = { configurable: { thread_id: \"session-1\" } };\n\n\u002F\u002F Step 1: Agent runs until it needs to call tool\nconst result1 = await agent.invoke({\n  messages: [{ role: \"user\", content: \"Send email to john@example.com\" }]\n}, config);\n\n\u002F\u002F Check for interrupt\nif (result1.__interrupt__) {\n  console.log(`Waiting for approval: ${result1.__interrupt__}`);\n}\n\n\u002F\u002F Step 2: Human approves\nconst result2 = await agent.invoke(\n  new Command({ resume: { decisions: [{ type: \"approve\" }] } }),\n  config\n);\n```\n\u003C\u002Ftypescript>\n\u003C\u002Fex-running-with-interrupts>\n\n\u003Cex-editing-tool-arguments>\n\u003Cpython>\nEdit the tool arguments before approving when the original values need correction.\n```python\n# Human edits the arguments — edited_action must include name + args\nresult2 = agent.invoke(\n    Command(resume={\n        \"decisions\": [{\n            \"type\": \"edit\",\n            \"edited_action\": {\n                \"name\": \"send_email\",\n                \"args\": {\n                    \"to\": \"alice@company.com\",  # Fixed email\n                    \"subject\": \"Project Meeting - Updated\",\n                    \"body\": \"...\",\n                },\n            },\n        }]\n    }),\n    config=config\n)\n```\n\u003C\u002Fpython>\n\u003Ctypescript>\nEdit the tool arguments before approving when the original values need correction.\n```typescript\n\u002F\u002F Human edits the arguments — editedAction must include name + args\nconst result2 = await agent.invoke(\n  new Command({\n    resume: {\n      decisions: [{\n        type: \"edit\",\n        editedAction: {\n          name: \"send_email\",\n          args: {\n            to: \"alice@company.com\",  \u002F\u002F Fixed email\n            subject: \"Project Meeting - Updated\",\n            body: \"...\",\n          },\n        },\n      }]\n    }\n  }),\n  config\n);\n```\n\u003C\u002Ftypescript>\n\u003C\u002Fex-editing-tool-arguments>\n\n\u003Cex-rejecting-with-feedback>\n\u003Cpython>\nReject a tool call and provide feedback explaining why it was rejected.\n```python\n# Human rejects\nresult2 = agent.invoke(\n    Command(resume={\n        \"decisions\": [{\n            \"type\": \"reject\",\n            \"feedback\": \"Cannot delete customer data without manager approval\",\n        }]\n    }),\n    config=config\n)\n```\n\u003C\u002Fpython>\n\u003C\u002Fex-rejecting-with-feedback>\n\n\u003Cex-multiple-tools-different-policies>\n\u003Cpython>\nConfigure different HITL policies for each tool based on risk level.\n```python\nagent = create_agent(\n    model=\"gpt-4.1\",\n    tools=[send_email, read_email, delete_email],\n    checkpointer=MemorySaver(),\n    middleware=[\n        HumanInTheLoopMiddleware(\n            interrupt_on={\n                \"send_email\": {\"allowed_decisions\": [\"approve\", \"edit\", \"reject\"]},\n                \"delete_email\": {\"allowed_decisions\": [\"approve\", \"reject\"]},  # No edit\n                \"read_email\": False,  # No HITL for reading\n            }\n        )\n    ],\n)\n```\n\u003C\u002Fpython>\n\u003C\u002Fex-multiple-tools-different-policies>\n\n\u003Cboundaries>\n### What You CAN Configure\n\n- Which tools require approval (per-tool policies)\n- Allowed decisions per tool (approve, edit, reject)\n- Custom middleware hooks: `before_model`, `after_model`, `wrap_tool_call`, `before_agent`, `after_agent`\n- Tool-specific middleware (apply only to certain tools)\n\n### What You CANNOT Configure\n\n- Interrupt after tool execution (must be before)\n- Skip checkpointer requirement for HITL\n\u003C\u002Fboundaries>\n\n\u003Cfix-missing-checkpointer>\n\u003Cpython>\nHITL middleware requires a checkpointer to persist state.\n```python\n# WRONG\nagent = create_agent(model=\"gpt-4.1\", tools=[send_email], middleware=[HumanInTheLoopMiddleware({...})])\n\n# CORRECT\nagent = create_agent(\n    model=\"gpt-4.1\", tools=[send_email],\n    checkpointer=MemorySaver(),  # Required\n    middleware=[HumanInTheLoopMiddleware({...})]\n)\n```\n\u003C\u002Fpython>\n\u003Ctypescript>\nHITL requires a checkpointer to persist state.\n```typescript\n\u002F\u002F WRONG: No checkpointer\nconst agent = createAgent({\n  model: \"anthropic:claude-sonnet-4-5\", tools: [sendEmail],\n  middleware: [humanInTheLoopMiddleware({ interruptOn: { send_email: true } })],\n});\n\n\u002F\u002F CORRECT: Add checkpointer\nconst agent = createAgent({\n  model: \"anthropic:claude-sonnet-4-5\", tools: [sendEmail],\n  checkpointer: new MemorySaver(),\n  middleware: [humanInTheLoopMiddleware({ interruptOn: { send_email: true } })],\n});\n```\n\u003C\u002Ftypescript>\n\u003C\u002Ffix-missing-checkpointer>\n\n\u003Cfix-no-thread-id>\n\u003Cpython>\nAlways provide thread_id when using HITL to track conversation state.\n```python\n# WRONG\nagent.invoke(input)  # No config!\n\n# CORRECT\nagent.invoke(input, config={\"configurable\": {\"thread_id\": \"user-123\"}})\n```\n\u003C\u002Fpython>\n\u003C\u002Ffix-no-thread-id>\n\n\u003Cfix-wrong-resume-syntax>\n\u003Cpython>\nUse Command class to resume execution after an interrupt.\n```python\n# WRONG\nagent.invoke({\"resume\": {\"decisions\": [...]}})\n\n# CORRECT\nfrom langgraph.types import Command\nagent.invoke(Command(resume={\"decisions\": [{\"type\": \"approve\"}]}), config=config)\n```\n\u003C\u002Fpython>\n\u003Ctypescript>\nUse Command class to resume execution after an interrupt.\n```typescript\n\u002F\u002F WRONG\nawait agent.invoke({ resume: { decisions: [...] } });\n\n\u002F\u002F CORRECT\nimport { Command } from \"@langchain\u002Flanggraph\";\nawait agent.invoke(new Command({ resume: { decisions: [{ type: \"approve\" }] } }), config);\n```\n\u003C\u002Ftypescript>\n\u003C\u002Ffix-wrong-resume-syntax>\n","\u003Coverview>\nMiddleware patterns for production LangChain agents:\n\n- **HumanInTheLoopMiddleware** \u002F **humanInTheLoopMiddleware**: Pause before dangerous tool calls for human approval\n- **Custom middleware**: Intercept tool calls for error handling, logging, retry logic\n- **Command resume**: Continue execution after human decisions (approve, edit, reject)\n\n**Requirements:** Checkpointer + thread_id config for all HITL workflows.\n\u003C\u002Foverview>\n\n---\n\n## Human-in-the-Loop\n\n\u003Cex-basic-hitl-setup>\n\u003Cpython>\nSet up an agent with HITL middleware that pauses before sending emails for approval.\n```python\nfrom langchain.agents import create_agent\nfrom langchain.agents.middleware import HumanInTheLoopMiddleware\nfrom langgraph.checkpoint.memory import MemorySaver\nfrom langchain.tools import tool\n\n@tool\ndef send_email(to: str, subject: str, body: str) -> str:\n    \"\"\"Send an email.\"\"\"\n    return f\"Email sent to {to}\"\n\nagent = create_agent(\n    model=\"gpt-4.1\",\n    tools=[send_email],\n    checkpointer=MemorySaver(),  # Required for HITL\n    middleware=[\n        HumanInTheLoopMiddleware(\n            interrupt_on={\n                \"send_email\": {\"allowed_decisions\": [\"approve\", \"edit\", \"reject\"]},\n            }\n        )\n    ],\n)\n```\n\u003C\u002Fpython>\n\u003Ctypescript>\nSet up an agent with HITL that pauses before sending emails for human approval.\n```typescript\nimport { createAgent, humanInTheLoopMiddleware } from \"langchain\";\nimport { MemorySaver } from \"@langchain\u002Flanggraph\";\nimport { tool } from \"@langchain\u002Fcore\u002Ftools\";\nimport { z } from \"zod\";\n\nconst sendEmail = tool(\n  async ({ to, subject, body }) => `Email sent to ${to}`,\n  {\n    name: \"send_email\",\n    description: \"Send an email\",\n    schema: z.object({ to: z.string(), subject: z.string(), body: z.string() }),\n  }\n);\n\nconst agent = createAgent({\n  model: \"anthropic:claude-sonnet-4-5\",\n  tools: [sendEmail],\n  checkpointer: new MemorySaver(),\n  middleware: [\n    humanInTheLoopMiddleware({\n      interruptOn: { send_email: { allowedDecisions: [\"approve\", \"edit\", \"reject\"] } },\n    }),\n  ],\n});\n```\n\u003C\u002Ftypescript>\n\u003C\u002Fex-basic-hitl-setup>\n\n\u003Cex-running-with-interrupts>\n\u003Cpython>\nRun the agent, detect an interrupt, then resume execution after human approval.\n```python\nfrom langgraph.types import Command\n\nconfig = {\"configurable\": {\"thread_id\": \"session-1\"}}\n\n# Step 1: Agent runs until it needs to call tool\nresult1 = agent.invoke({\n    \"messages\": [{\"role\": \"user\", \"content\": \"Send email to john@example.com\"}]\n}, config=config)\n\n# Check for interrupt\nif \"__interrupt__\" in result1:\n    print(f\"Waiting for approval: {result1['__interrupt__']}\")\n\n# Step 2: Human approves\nresult2 = agent.invoke(\n    Command(resume={\"decisions\": [{\"type\": \"approve\"}]}),\n    config=config\n)\n```\n\u003C\u002Fpython>\n\u003Ctypescript>\nRun the agent, detect an interrupt, then resume execution after human approval.\n```typescript\nimport { Command } from \"@langchain\u002Flanggraph\";\n\nconst config = { configurable: { thread_id: \"session-1\" } };\n\n\u002F\u002F Step 1: Agent runs until it needs to call tool\nconst result1 = await agent.invoke({\n  messages: [{ role: \"user\", content: \"Send email to john@example.com\" }]\n}, config);\n\n\u002F\u002F Check for interrupt\nif (result1.__interrupt__) {\n  console.log(`Waiting for approval: ${result1.__interrupt__}`);\n}\n\n\u002F\u002F Step 2: Human approves\nconst result2 = await agent.invoke(\n  new Command({ resume: { decisions: [{ type: \"approve\" }] } }),\n  config\n);\n```\n\u003C\u002Ftypescript>\n\u003C\u002Fex-running-with-interrupts>\n\n\u003Cex-editing-tool-arguments>\n\u003Cpython>\nEdit the tool arguments before approving when the original values need correction.\n```python\n# Human edits the arguments — edited_action must include name + args\nresult2 = agent.invoke(\n    Command(resume={\n        \"decisions\": [{\n            \"type\": \"edit\",\n            \"edited_action\": {\n                \"name\": \"send_email\",\n                \"args\": {\n                    \"to\": \"alice@company.com\",  # Fixed email\n                    \"subject\": \"Project Meeting - Updated\",\n                    \"body\": \"...\",\n                },\n            },\n        }]\n    }),\n    config=config\n)\n```\n\u003C\u002Fpython>\n\u003Ctypescript>\nEdit the tool arguments before approving when the original values need correction.\n```typescript\n\u002F\u002F Human edits the arguments — editedAction must include name + args\nconst result2 = await agent.invoke(\n  new Command({\n    resume: {\n      decisions: [{\n        type: \"edit\",\n        editedAction: {\n          name: \"send_email\",\n          args: {\n            to: \"alice@company.com\",  \u002F\u002F Fixed email\n            subject: \"Project Meeting - Updated\",\n            body: \"...\",\n          },\n        },\n      }]\n    }\n  }),\n  config\n);\n```\n\u003C\u002Ftypescript>\n\u003C\u002Fex-editing-tool-arguments>\n\n\u003Cex-rejecting-with-feedback>\n\u003Cpython>\nReject a tool call and provide feedback explaining why it was rejected.\n```python\n# Human rejects\nresult2 = agent.invoke(\n    Command(resume={\n        \"decisions\": [{\n            \"type\": \"reject\",\n            \"feedback\": \"Cannot delete customer data without manager approval\",\n        }]\n    }),\n    config=config\n)\n```\n\u003C\u002Fpython>\n\u003C\u002Fex-rejecting-with-feedback>\n\n\u003Cex-multiple-tools-different-policies>\n\u003Cpython>\nConfigure different HITL policies for each tool based on risk level.\n```python\nagent = create_agent(\n    model=\"gpt-4.1\",\n    tools=[send_email, read_email, delete_email],\n    checkpointer=MemorySaver(),\n    middleware=[\n        HumanInTheLoopMiddleware(\n            interrupt_on={\n                \"send_email\": {\"allowed_decisions\": [\"approve\", \"edit\", \"reject\"]},\n                \"delete_email\": {\"allowed_decisions\": [\"approve\", \"reject\"]},  # No edit\n                \"read_email\": False,  # No HITL for reading\n            }\n        )\n    ],\n)\n```\n\u003C\u002Fpython>\n\u003C\u002Fex-multiple-tools-different-policies>\n\n\u003Cboundaries>\n### What You CAN Configure\n\n- Which tools require approval (per-tool policies)\n- Allowed decisions per tool (approve, edit, reject)\n- Custom middleware hooks: `before_model`, `after_model`, `wrap_tool_call`, `before_agent`, `after_agent`\n- Tool-specific middleware (apply only to certain tools)\n\n### What You CANNOT Configure\n\n- Interrupt after tool execution (must be before)\n- Skip checkpointer requirement for HITL\n\u003C\u002Fboundaries>\n\n\u003Cfix-missing-checkpointer>\n\u003Cpython>\nHITL middleware requires a checkpointer to persist state.\n```python\n# WRONG\nagent = create_agent(model=\"gpt-4.1\", tools=[send_email], middleware=[HumanInTheLoopMiddleware({...})])\n\n# CORRECT\nagent = create_agent(\n    model=\"gpt-4.1\", tools=[send_email],\n    checkpointer=MemorySaver(),  # Required\n    middleware=[HumanInTheLoopMiddleware({...})]\n)\n```\n\u003C\u002Fpython>\n\u003Ctypescript>\nHITL requires a checkpointer to persist state.\n```typescript\n\u002F\u002F WRONG: No checkpointer\nconst agent = createAgent({\n  model: \"anthropic:claude-sonnet-4-5\", tools: [sendEmail],\n  middleware: [humanInTheLoopMiddleware({ interruptOn: { send_email: true } })],\n});\n\n\u002F\u002F CORRECT: Add checkpointer\nconst agent = createAgent({\n  model: \"anthropic:claude-sonnet-4-5\", tools: [sendEmail],\n  checkpointer: new MemorySaver(),\n  middleware: [humanInTheLoopMiddleware({ interruptOn: { send_email: true } })],\n});\n```\n\u003C\u002Ftypescript>\n\u003C\u002Ffix-missing-checkpointer>\n\n\u003Cfix-no-thread-id>\n\u003Cpython>\nAlways provide thread_id when using HITL to track conversation state.\n```python\n# WRONG\nagent.invoke(input)  # No config!\n\n# CORRECT\nagent.invoke(input, config={\"configurable\": {\"thread_id\": \"user-123\"}})\n```\n\u003C\u002Fpython>\n\u003C\u002Ffix-no-thread-id>\n\n\u003Cfix-wrong-resume-syntax>\n\u003Cpython>\nUse Command class to resume execution after an interrupt.\n```python\n# WRONG\nagent.invoke({\"resume\": {\"decisions\": [...]}})\n\n# CORRECT\nfrom langgraph.types import Command\nagent.invoke(Command(resume={\"decisions\": [{\"type\": \"approve\"}]}), config=config)\n```\n\u003C\u002Fpython>\n\u003Ctypescript>\nUse Command class to resume execution after an interrupt.\n```typescript\n\u002F\u002F WRONG\nawait agent.invoke({ resume: { decisions: [...] } });\n\n\u002F\u002F CORRECT\nimport { Command } from \"@langchain\u002Flanggraph\";\nawait agent.invoke(new Command({ resume: { decisions: [{ type: \"approve\" }] } }), config);\n```\n\u003C\u002Ftypescript>\n\u003C\u002Ffix-wrong-resume-syntax>\n",{"name":5,"description":7},"main","1ca81b0a7de199942400f965edd4d7544077ac5d",".continue\u002Fskills\u002Flangchain-middleware","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai","https:\u002F\u002Fgithub.com\u002FCoralShades","coralshades.com.au","2026-04-18 00:45:07",{"source":8,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add CoralShades\u002Facm-ai --skill langchain-middleware",{"tool":48,"command":49},"bunx","bunx skills add CoralShades\u002Facm-ai --skill langchain-middleware",{"tool":51,"command":52},"pnpm","pnpm dlx skills add CoralShades\u002Facm-ai --skill langchain-middleware","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.continue\u002Fskills\u002Flangchain-middleware\u002FSKILL.md",true,[],[57,81,94,110,127,137],{"skillNo":58,"name":59,"nameZh":6,"description":60,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":61,"categories":62,"keywords":68,"publishedAt":30},"01M6C63HKXA890HHV47WBAX0TB","uncodixfy","Prevents generic AI\u002FCodex UI patterns when generating frontend code. Use this skill whenever generating HTML, CSS, React, Vue, Svelte, or any frontend UI code to enforce clean, human-designed aesthetics inspired by Linear, Raycast, Stripe, and GitHub instead of typical AI-generated UI.","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Funcodixfy\u002FSKILL.md",[63],{"categoryNo":64,"categoryName":65,"taxonomyType":66,"taxonomyTypeDesc":67},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[59,69,70,71,72,73,74,75,76,77,78,79,80],"github","frontend","css","codex","react","code","linear","ui","vue","generated","use","html",{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":85,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":30},"01M6C63FJ2GEBBGZ5XSMV40KXB","runpodctl","Runpod CLI to manage your GPU workloads.","Apache-2.0","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Frunpodctl\u002FSKILL.md",[],[83,89,90,91,92,93],"macos","cli","linux","gpu","Bash",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":30},"01M6C63DPAV46TFVQ01SFYPJ7X","langgraph-persistence","INVOKE THIS SKILL when your LangGraph needs to persist state, remember conversations, travel through history, or configure subgraph checkpointer scoping. Covers checkpointers, thread_id, time travel, Store, and subgraph persistence modes.","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Flanggraph-persistence\u002FSKILL.md",[],[101,102,103,104,105,106,107,108,109],"langgraph persistence","langgraph","persistence","travel","history","scoping","remember","state","configure",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":121,"publishedAt":30},"01M6C63BNS9CQEBTB8RNSSBFPA","langgraph-human-in-the-loop","INVOKE THIS SKILL when implementing human-in-the-loop patterns, pausing for approval, or handling errors in LangGraph. Covers interrupt(), Command(resume=...), approval\u002Fvalidation workflows, and the 4-tier error handling strategy.","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Flanggraph-human-in-the-loop\u002FSKILL.md",[116],{"categoryNo":117,"categoryName":118,"taxonomyType":119,"taxonomyTypeDesc":120},"01JBSEEDCAT000000000000038","人力资源","PROFESSION","适用职业",[122,23,102,123,124,125,22,26,126,27,29],"langgraph human in the loop","workflows","error handling","validation","strategy",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":30},"01M6C639GVYZFX3NFPV5FBDR4F","langgraph-fundamentals","INVOKE THIS SKILL when writing ANY LangGraph code. Covers StateGraph, state schemas, nodes, edges, Command, Send, invoke, streaming, and error handling.","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Flanggraph-fundamentals\u002FSKILL.md",[],[134,102,124,108,135,136,26,74],"langgraph fundamentals","streaming","writing",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":30},"01M6C6375N34YX2GZ3SD3R7XR2","langchain-rag","INVOKE THIS SKILL when building ANY retrieval-augmented generation (RAG) system. Covers document loaders, RecursiveCharacterTextSplitter, embeddings (OpenAI), and vector stores (Chroma, FAISS, Pinecone).","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Flangchain-rag\u002FSKILL.md",[],[144,145,19,146,147,148,149,150,151,152],"rag","langchain rag","embeddings","vector","openai","chroma","faiss","vector stores","system"]