[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C5WMP5G1EPKA28BA3BEC4V":3,"skill-same:01M6C5WMP5G1EPKA28BA3BEC4V":66},{"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},"01M6C5WMP5G1EPKA28BA3BEC4V","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.kiro\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",".kiro\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.kiro\u002Fskills\u002Flangchain-middleware\u002FSKILL.md",true,[56,62],{"path":57,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":60,"sourceHtmlUrl":61},"SOURCE.md","REFERENCE","参考文档",185,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fai-crypto\u002Fagent8\u002FSOURCE.md",{"path":63,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":64,"sourceHtmlUrl":65},"TRUST.auto.yaml",2217,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fai-crypto\u002Fagent8\u002FTRUST.auto.yaml",[67,91,104,120,137,147],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":78,"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",[73],{"categoryNo":74,"categoryName":75,"taxonomyType":76,"taxonomyTypeDesc":77},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[69,79,80,81,82,83,84,85,86,87,88,89,90],"github","frontend","css","codex","react","code","linear","ui","vue","generated","use","html",{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":95,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"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",[],[93,99,100,101,102,103],"macos","cli","linux","gpu","Bash",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"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",[],[111,112,113,114,115,116,117,118,119],"langgraph persistence","langgraph","persistence","travel","history","scoping","remember","state","configure",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":131,"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",[126],{"categoryNo":127,"categoryName":128,"taxonomyType":129,"taxonomyTypeDesc":130},"01JBSEEDCAT000000000000038","人力资源","PROFESSION","适用职业",[132,23,112,133,134,135,22,26,136,27,29],"langgraph human in the loop","workflows","error handling","validation","strategy",{"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},"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",[],[144,112,134,118,145,146,26,84],"langgraph fundamentals","streaming","writing",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":153,"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",[],[154,155,19,156,157,158,159,160,161,162],"rag","langchain rag","embeddings","vector","openai","chroma","faiss","vector stores","system"]