[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GDFKAPTNPAEWSCTXFHH3SQ":3,"skill-same:01M6GDFKAPTNPAEWSCTXFHH3SQ":75},{"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":26,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":53,"commitSha":54,"skillDirectory":55,"forksCount":56,"repositoryHtmlUrl":57,"repositoryHomepageUrl":57,"ownerHtmlUrl":58,"ownerBlogUrl":6,"ownerDescription":59,"updatedAt":60,"install":61,"resources":74},"01M6GDFKAPTNPAEWSCTXFHH3SQ","vercel-ai-sdk-expert",null,"Expert in the Vercel AI SDK. Covers Core API (generateText, streamText), UI hooks (useChat, useCompletion), tool calling, and streaming UI components with React and Next.js.","Sam-06060\u002Fjarvis-assistant","Sam-06060","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F208600848?v=4","01M6CRKT7C7FXD21V6HXF293S0","Samson Frank Ganta","01M6CRKTBEKYFD8YX5Z1GT99EE",6,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fvercel-ai-sdk-expert\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"vercel","vercel ai sdk expert","expert","vercel ai sdk","ai sdk","sdk","streaming","ui","core","api","tool","safe","hooks","react","components","community","calling","next","tool calling","ui components","2026-11-10 10:12:30",false,"---\nname: vercel-ai-sdk-expert\ndescription: \"Expert in the Vercel AI SDK. Covers Core API (generateText, streamText), UI hooks (useChat, useCompletion), tool calling, and streaming UI components with React and Next.js.\"\nrisk: safe\nsource: community\ndate_added: \"2026-03-06\"\n---\n\n# Vercel AI SDK Expert\n\nYou are a production-grade Vercel AI SDK expert. You help developers build AI-powered applications, chatbots, and generative UI experiences primarily using Next.js and React. You are an expert in both the `ai` (AI SDK Core) and `@ai-sdk\u002Freact` (AI SDK UI) packages. You understand streaming, language model integration, system prompts, tool calling (function calling), and structured data generation.\n\n## When to Use This Skill\n\n- Use when adding AI chat or text generation features to a React or Next.js app\n- Use when streaming LLM responses to a frontend UI\n- Use when implementing tool calling \u002F function calling with an LLM\n- Use when returning structured data (JSON) from an LLM using `generateObject`\n- Use when building AI-powered generative UIs (streaming React components)\n- Use when migrating from direct OpenAI\u002FAnthropic API calls to the unified AI SDK\n- Use when troubleshooting streaming issues with `useChat` or `streamText`\n\n## Core Concepts\n\n### Why Vercel AI SDK?\n\nThe Vercel AI SDK is a unified framework that abstracts away provider-specific APIs (OpenAI, Anthropic, Google Gemini, Mistral). It provides two main layers:\n1. **AI SDK Core (`ai`)**: Server-side functions to interact with LLMs (`generateText`, `streamText`, `generateObject`).\n2. **AI SDK UI (`@ai-sdk\u002Freact`)**: Frontend hooks to manage chat state and streaming (`useChat`, `useCompletion`).\n\n## Server-Side Generation (Core API)\n\n### Basic Text Generation\n\n```typescript\nimport { generateText } from \"ai\";\nimport { openai } from \"@ai-sdk\u002Fopenai\";\n\n\u002F\u002F Returns the full string once completion is done (no streaming)\nconst { text, usage } = await generateText({\n  model: openai(\"gpt-4o\"),\n  system: \"You are a helpful assistant evaluating code.\",\n  prompt: \"Review the following python code...\",\n});\n\nconsole.log(text);\nconsole.log(`Tokens used: ${usage.totalTokens}`);\n```\n\n### Streaming Text\n\n```typescript\n\u002F\u002F app\u002Fapi\u002Fchat\u002Froute.ts (Next.js App Router API Route)\nimport { streamText } from 'ai';\nimport { openai } from '@ai-sdk\u002Fopenai';\n\n\u002F\u002F Allow streaming responses up to 30 seconds\nexport const maxDuration = 30;\n\nexport async function POST(req: Request) {\n  const { messages } = await req.json();\n\n  const result = streamText({\n    model: openai('gpt-4o'),\n    system: 'You are a friendly customer support bot.',\n    messages,\n  });\n\n  \u002F\u002F Automatically converts the stream to a readable web stream\n  return result.toDataStreamResponse();\n}\n```\n\n### Structured Data (JSON) Generation\n\n```typescript\nimport { generateObject } from 'ai';\nimport { openai } from '@ai-sdk\u002Fopenai';\nimport { z } from 'zod';\n\nconst { object } = await generateObject({\n  model: openai('gpt-4o-2024-08-06'), \u002F\u002F Use models good at structured output\n  system: 'Extract information from the receipt text.',\n  prompt: receiptText,\n  \u002F\u002F Pass a Zod schema to enforce output structure\n  schema: z.object({\n    storeName: z.string(),\n    totalAmount: z.number(),\n    items: z.array(z.object({\n      name: z.string(),\n      price: z.number(),\n    })),\n    date: z.string().describe(\"ISO 8601 date format\"),\n  }),\n});\n\n\u002F\u002F `object` is automatically fully typed according to the Zod schema!\nconsole.log(object.totalAmount); \n```\n\n## Frontend UI Hooks\n\n### `useChat` (Conversational UI)\n\n```tsx\n\u002F\u002F app\u002Fpage.tsx (Next.js Client Component)\n\"use client\";\n\nimport { useChat } from \"ai\u002Freact\";\n\nexport default function Chat() {\n  const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat({\n    api: \"\u002Fapi\u002Fchat\", \u002F\u002F Points to the streamText route created above\n    \u002F\u002F Optional callbacks\n    onFinish: (message) => console.log(\"Done streaming:\", message),\n    onError: (error) => console.error(error)\n  });\n\n  return (\n    \u003Cdiv className=\"flex flex-col h-screen max-w-md mx-auto p-4\">\n      \u003Cdiv className=\"flex-1 overflow-y-auto mb-4\">\n        {messages.map((m) => (\n          \u003Cdiv key={m.id} className={`mb-4 ${m.role === 'user' ? 'text-right' : 'text-left'}`}>\n            \u003Cspan className={`p-2 rounded-lg inline-block ${m.role === 'user' ? 'bg-blue-500 text-white' : 'bg-gray-200'}`}>\n              {m.target || m.content}\n            \u003C\u002Fspan>\n          \u003C\u002Fdiv>\n        ))}\n      \u003C\u002Fdiv>\n      \n      \u003Cform onSubmit={handleSubmit} className=\"flex gap-2\">\n        \u003Cinput\n          value={input}\n          onChange={handleInputChange}\n          placeholder=\"Say something...\"\n          className=\"flex-1 p-2 border rounded\"\n          disabled={isLoading}\n        \u002F>\n        \u003Cbutton type=\"submit\" disabled={isLoading} className=\"bg-black text-white p-2 rounded\">\n          Send\n        \u003C\u002Fbutton>\n      \u003C\u002Fform>\n    \u003C\u002Fdiv>\n  );\n}\n```\n\n## Tool Calling (Function Calling)\n\nTools allow the LLM to interact with your code, fetching external data or performing actions before responding to the user.\n\n### Server-Side Tool Definition\n\n```typescript\n\u002F\u002F app\u002Fapi\u002Fchat\u002Froute.ts\nimport { streamText, tool } from 'ai';\nimport { openai } from '@ai-sdk\u002Fopenai';\nimport { z } from 'zod';\n\nexport async function POST(req: Request) {\n  const { messages } = await req.json();\n\n  const result = streamText({\n    model: openai('gpt-4o'),\n    messages,\n    tools: {\n      getWeather: tool({\n        description: 'Get the current weather in a given location',\n        parameters: z.object({\n          location: z.string().describe('The city and state, e.g. San Francisco, CA'),\n          unit: z.enum(['celsius', 'fahrenheit']).optional(),\n        }),\n        \u002F\u002F Execute runs when the LLM decides to call this tool\n        execute: async ({ location, unit = 'celsius' }) => {\n          \u002F\u002F Fetch from your actual weather API or database\n          const temp = location.includes(\"San Francisco\") ? 15 : 22;\n          return `The weather in ${location} is ${temp}° ${unit}.`;\n        },\n      }),\n    },\n    \u002F\u002F Allows the LLM to call tools automatically in a loop until it has the answer\n    maxSteps: 5, \n  });\n\n  return result.toDataStreamResponse();\n}\n```\n\n### UI for Multi-Step Tool Calls\n\nWhen using `maxSteps`, the `useChat` hook will display intermediate tool calls if you handle them in the UI.\n\n```tsx\n\u002F\u002F Inside the `useChat` messages.map loop\n{m.role === 'assistant' && m.toolInvocations?.map((toolInvocation) => (\n  \u003Cdiv key={toolInvocation.toolCallId} className=\"text-sm text-gray-500\">\n    {toolInvocation.state === 'result' ? (\n      \u003Cp>✅ Fetched weather for {toolInvocation.args.location}\u003C\u002Fp>\n    ) : (\n      \u003Cp>⏳ Fetching weather for {toolInvocation.args.location}...\u003C\u002Fp>\n    )}\n  \u003C\u002Fdiv>\n))}\n```\n\n## Best Practices\n\n- ✅ **Do:** Use `openai('gpt-4o')` or `anthropic('claude-3-5-sonnet-20240620')` format (from specific provider packages like `@ai-sdk\u002Fopenai`) instead of the older edge runtime wrappers.\n- ✅ **Do:** Provide a strict Zod `schema` and a clear `system` prompt when using `generateObject()`.\n- ✅ **Do:** Set `maxDuration = 30` (or higher if on Pro) in Next.js API routes that use `streamText`, as LLMs take time to stream responses and Vercel's default is 10-15s.\n- ✅ **Do:** Use `tool()` with comprehensive `description` tags on Zod parameters, as the LLM relies entirely on those strings to understand when and how to call the tool.\n- ✅ **Do:** Enable `maxSteps: 5` (or similar) when providing tools, otherwise the LLM won't be able to reply to the user *after* seeing the tool result!\n- ❌ **Don't:** Forget to return `result.toDataStreamResponse()` in Next.js App Router API routes when using `streamText`; standard JSON responses will break chunking.\n- ❌ **Don't:** Blindly trust the output of `generateObject` without validation, even though Zod forces the shape — always handle failure states using `try\u002Fcatch`.\n\n## Troubleshooting\n\n**Problem:** The streaming chat cuts off abruptly after 10-15 seconds.\n**Solution:** The serverless function timed out. Add `export const maxDuration = 30;` (or whatever your plan limit is) to the Next.js API route file.\n\n**Problem:** \"Tool execution failed\" or the LLM didn't return an answer after using a tool.\n**Solution:** `streamText` stops immediately after a tool call completes unless you provide `maxSteps`. Set `maxSteps: 2` (or higher) to let the LLM see the tool result and construct a final text response.\n","# Vercel AI SDK Expert\n\nYou are a production-grade Vercel AI SDK expert. You help developers build AI-powered applications, chatbots, and generative UI experiences primarily using Next.js and React. You are an expert in both the `ai` (AI SDK Core) and `@ai-sdk\u002Freact` (AI SDK UI) packages. You understand streaming, language model integration, system prompts, tool calling (function calling), and structured data generation.\n\n## When to Use This Skill\n\n- Use when adding AI chat or text generation features to a React or Next.js app\n- Use when streaming LLM responses to a frontend UI\n- Use when implementing tool calling \u002F function calling with an LLM\n- Use when returning structured data (JSON) from an LLM using `generateObject`\n- Use when building AI-powered generative UIs (streaming React components)\n- Use when migrating from direct OpenAI\u002FAnthropic API calls to the unified AI SDK\n- Use when troubleshooting streaming issues with `useChat` or `streamText`\n\n## Core Concepts\n\n### Why Vercel AI SDK?\n\nThe Vercel AI SDK is a unified framework that abstracts away provider-specific APIs (OpenAI, Anthropic, Google Gemini, Mistral). It provides two main layers:\n1. **AI SDK Core (`ai`)**: Server-side functions to interact with LLMs (`generateText`, `streamText`, `generateObject`).\n2. **AI SDK UI (`@ai-sdk\u002Freact`)**: Frontend hooks to manage chat state and streaming (`useChat`, `useCompletion`).\n\n## Server-Side Generation (Core API)\n\n### Basic Text Generation\n\n```typescript\nimport { generateText } from \"ai\";\nimport { openai } from \"@ai-sdk\u002Fopenai\";\n\n\u002F\u002F Returns the full string once completion is done (no streaming)\nconst { text, usage } = await generateText({\n  model: openai(\"gpt-4o\"),\n  system: \"You are a helpful assistant evaluating code.\",\n  prompt: \"Review the following python code...\",\n});\n\nconsole.log(text);\nconsole.log(`Tokens used: ${usage.totalTokens}`);\n```\n\n### Streaming Text\n\n```typescript\n\u002F\u002F app\u002Fapi\u002Fchat\u002Froute.ts (Next.js App Router API Route)\nimport { streamText } from 'ai';\nimport { openai } from '@ai-sdk\u002Fopenai';\n\n\u002F\u002F Allow streaming responses up to 30 seconds\nexport const maxDuration = 30;\n\nexport async function POST(req: Request) {\n  const { messages } = await req.json();\n\n  const result = streamText({\n    model: openai('gpt-4o'),\n    system: 'You are a friendly customer support bot.',\n    messages,\n  });\n\n  \u002F\u002F Automatically converts the stream to a readable web stream\n  return result.toDataStreamResponse();\n}\n```\n\n### Structured Data (JSON) Generation\n\n```typescript\nimport { generateObject } from 'ai';\nimport { openai } from '@ai-sdk\u002Fopenai';\nimport { z } from 'zod';\n\nconst { object } = await generateObject({\n  model: openai('gpt-4o-2024-08-06'), \u002F\u002F Use models good at structured output\n  system: 'Extract information from the receipt text.',\n  prompt: receiptText,\n  \u002F\u002F Pass a Zod schema to enforce output structure\n  schema: z.object({\n    storeName: z.string(),\n    totalAmount: z.number(),\n    items: z.array(z.object({\n      name: z.string(),\n      price: z.number(),\n    })),\n    date: z.string().describe(\"ISO 8601 date format\"),\n  }),\n});\n\n\u002F\u002F `object` is automatically fully typed according to the Zod schema!\nconsole.log(object.totalAmount); \n```\n\n## Frontend UI Hooks\n\n### `useChat` (Conversational UI)\n\n```tsx\n\u002F\u002F app\u002Fpage.tsx (Next.js Client Component)\n\"use client\";\n\nimport { useChat } from \"ai\u002Freact\";\n\nexport default function Chat() {\n  const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat({\n    api: \"\u002Fapi\u002Fchat\", \u002F\u002F Points to the streamText route created above\n    \u002F\u002F Optional callbacks\n    onFinish: (message) => console.log(\"Done streaming:\", message),\n    onError: (error) => console.error(error)\n  });\n\n  return (\n    \u003Cdiv className=\"flex flex-col h-screen max-w-md mx-auto p-4\">\n      \u003Cdiv className=\"flex-1 overflow-y-auto mb-4\">\n        {messages.map((m) => (\n          \u003Cdiv key={m.id} className={`mb-4 ${m.role === 'user' ? 'text-right' : 'text-left'}`}>\n            \u003Cspan className={`p-2 rounded-lg inline-block ${m.role === 'user' ? 'bg-blue-500 text-white' : 'bg-gray-200'}`}>\n              {m.target || m.content}\n            \u003C\u002Fspan>\n          \u003C\u002Fdiv>\n        ))}\n      \u003C\u002Fdiv>\n      \n      \u003Cform onSubmit={handleSubmit} className=\"flex gap-2\">\n        \u003Cinput\n          value={input}\n          onChange={handleInputChange}\n          placeholder=\"Say something...\"\n          className=\"flex-1 p-2 border rounded\"\n          disabled={isLoading}\n        \u002F>\n        \u003Cbutton type=\"submit\" disabled={isLoading} className=\"bg-black text-white p-2 rounded\">\n          Send\n        \u003C\u002Fbutton>\n      \u003C\u002Fform>\n    \u003C\u002Fdiv>\n  );\n}\n```\n\n## Tool Calling (Function Calling)\n\nTools allow the LLM to interact with your code, fetching external data or performing actions before responding to the user.\n\n### Server-Side Tool Definition\n\n```typescript\n\u002F\u002F app\u002Fapi\u002Fchat\u002Froute.ts\nimport { streamText, tool } from 'ai';\nimport { openai } from '@ai-sdk\u002Fopenai';\nimport { z } from 'zod';\n\nexport async function POST(req: Request) {\n  const { messages } = await req.json();\n\n  const result = streamText({\n    model: openai('gpt-4o'),\n    messages,\n    tools: {\n      getWeather: tool({\n        description: 'Get the current weather in a given location',\n        parameters: z.object({\n          location: z.string().describe('The city and state, e.g. San Francisco, CA'),\n          unit: z.enum(['celsius', 'fahrenheit']).optional(),\n        }),\n        \u002F\u002F Execute runs when the LLM decides to call this tool\n        execute: async ({ location, unit = 'celsius' }) => {\n          \u002F\u002F Fetch from your actual weather API or database\n          const temp = location.includes(\"San Francisco\") ? 15 : 22;\n          return `The weather in ${location} is ${temp}° ${unit}.`;\n        },\n      }),\n    },\n    \u002F\u002F Allows the LLM to call tools automatically in a loop until it has the answer\n    maxSteps: 5, \n  });\n\n  return result.toDataStreamResponse();\n}\n```\n\n### UI for Multi-Step Tool Calls\n\nWhen using `maxSteps`, the `useChat` hook will display intermediate tool calls if you handle them in the UI.\n\n```tsx\n\u002F\u002F Inside the `useChat` messages.map loop\n{m.role === 'assistant' && m.toolInvocations?.map((toolInvocation) => (\n  \u003Cdiv key={toolInvocation.toolCallId} className=\"text-sm text-gray-500\">\n    {toolInvocation.state === 'result' ? (\n      \u003Cp>✅ Fetched weather for {toolInvocation.args.location}\u003C\u002Fp>\n    ) : (\n      \u003Cp>⏳ Fetching weather for {toolInvocation.args.location}...\u003C\u002Fp>\n    )}\n  \u003C\u002Fdiv>\n))}\n```\n\n## Best Practices\n\n- ✅ **Do:** Use `openai('gpt-4o')` or `anthropic('claude-3-5-sonnet-20240620')` format (from specific provider packages like `@ai-sdk\u002Fopenai`) instead of the older edge runtime wrappers.\n- ✅ **Do:** Provide a strict Zod `schema` and a clear `system` prompt when using `generateObject()`.\n- ✅ **Do:** Set `maxDuration = 30` (or higher if on Pro) in Next.js API routes that use `streamText`, as LLMs take time to stream responses and Vercel's default is 10-15s.\n- ✅ **Do:** Use `tool()` with comprehensive `description` tags on Zod parameters, as the LLM relies entirely on those strings to understand when and how to call the tool.\n- ✅ **Do:** Enable `maxSteps: 5` (or similar) when providing tools, otherwise the LLM won't be able to reply to the user *after* seeing the tool result!\n- ❌ **Don't:** Forget to return `result.toDataStreamResponse()` in Next.js App Router API routes when using `streamText`; standard JSON responses will break chunking.\n- ❌ **Don't:** Blindly trust the output of `generateObject` without validation, even though Zod forces the shape — always handle failure states using `try\u002Fcatch`.\n\n## Troubleshooting\n\n**Problem:** The streaming chat cuts off abruptly after 10-15 seconds.\n**Solution:** The serverless function timed out. Add `export const maxDuration = 30;` (or whatever your plan limit is) to the Next.js API route file.\n\n**Problem:** \"Tool execution failed\" or the LLM didn't return an answer after using a tool.\n**Solution:** `streamText` stops immediately after a tool call completes unless you provide `maxSteps`. Set `maxSteps: 2` (or higher) to let the LLM see the tool result and construct a final text response.\n",{"name":5,"risk":38,"source":42,"date_added":52,"description":7},"2026-03-06","main","a50a3aa6b39fb0e1b7db88bef1bfc9c93606e126","modules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fvercel-ai-sdk-expert",0,"https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant","https:\u002F\u002Fgithub.com\u002FSam-06060","Mobile Application Developer | Kotlin | Flutter, KMP, Swfit, Android,Swift UI | Building at Saar It Resources | Creator of Jarvis (AI Assistant)","2026-06-23 05:13:38",{"source":8,"skillName":5,"commands":62,"prompt":72,"zipAvailable":73},[63,66,69],{"tool":64,"command":65},"npx","npx skills add Sam-06060\u002Fjarvis-assistant --skill vercel-ai-sdk-expert",{"tool":67,"command":68},"bunx","bunx skills add Sam-06060\u002Fjarvis-assistant --skill vercel-ai-sdk-expert",{"tool":70,"command":71},"pnpm","pnpm dlx skills add Sam-06060\u002Fjarvis-assistant --skill vercel-ai-sdk-expert","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fvercel-ai-sdk-expert\u002FSKILL.md",true,[],[76,87,103,130,149,170],{"skillNo":77,"name":78,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":84,"publishedAt":47},"01M6GDRVS6FXX3ESH0C9DW01C0","test_skill","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fscratch\u002Ftest_skill\u002FSKILL.md",[81],{"categoryNo":82,"categoryName":83,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[85,86],"Test Skill","test",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":47},"01M6GDRQ40HX22MA6XWC31RHHK","zustand-store-ts","Create Zustand stores following established patterns with proper TypeScript types and middleware.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzustand-store-ts\u002FSKILL.md",[],[94,95,96,97,98,99,100,42,101,102],"zustand store ts","zustand","store","with","types","middleware","patterns","create","typescript",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":112,"publishedAt":47},"01M6GDRKEA0WE670SPFWX5GKCN","zoom-automation","Automate Zoom meeting creation, management, recordings, webinars, and participant tracking via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoom-automation\u002FSKILL.md",[109],{"categoryNo":110,"categoryName":111,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[113,114,115,116,117,118,119,120,121,122,123,124,125,126,42,127,128,129],"automation","zoom automation","zoom","first","Tools","search","MCP","via","meeting","automate","critical","creation","webinars","composio","recordings","management","tracking",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":137,"publishedAt":47},"01M6GDRFS1452PC71JQ38S24HR","zoho-crm-automation","Automate Zoho CRM tasks via Rube MCP (Composio): create\u002Fupdate records, search contacts, manage leads, and convert leads. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoho-crm-automation\u002FSKILL.md",[136],{"categoryNo":110,"categoryName":111,"taxonomyType":21,"taxonomyTypeDesc":22},[138,113,139,140,141,142,143,42,118,144,126,145,123,122,117,146,101,147,119,148],"crm automation","zoho crm","crm","zoho crm automation","zoho","leads","contacts","records","update","tasks","manage",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":156,"publishedAt":47},"01M6GDRCKQBAVTGHX5XBH26KPZ","zod-validation-expert","Expert in Zod — TypeScript-first schema validation. Covers parsing, custom errors, refinements, type inference, and integration with React Hook Form, Next.js, and tRPC.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzod-validation-expert\u002FSKILL.md",[155],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[29,157,158,159,40,102,38,160,161,162,163,164,97,165,166,167,44,42,168,169],"zod","zod validation expert","validation","parsing","errors","schema validation","react hook form","hook","trpc","form","type","schema","Next.js",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":177,"publishedAt":47},"01M6GDR658B08K4MY0RWD4A6EH","zeroize-audit","Detects missing zeroization of sensitive data in source code and identifies zeroization removed by compiler optimizations, with assembly-level analysis, and control-flow verification. Use for auditing C\u002FC++\u002FRust code handling secrets, keys, passwords, or other sensitive data.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzeroize-audit\u002FSKILL.md",[176],{"categoryNo":110,"categoryName":111,"taxonomyType":21,"taxonomyTypeDesc":22},[178,179,180,181,182,183,184,185,42,186,187,188,189,190,191,192,193,194,195,119],"zeroize audit","audit","write","passwords","get","project","c++","activate","assembly","read","Bash","secrets","analysis","data","flow","verification","code","rust"]