[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CV1C5FYY07DCVE6GC03SFT":3,"skill-same:01M6CV1C5FYY07DCVE6GC03SFT":60},{"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":38,"commitSha":39,"skillDirectory":40,"forksCount":41,"repositoryHtmlUrl":42,"repositoryHomepageUrl":42,"ownerHtmlUrl":43,"ownerBlogUrl":6,"ownerDescription":44,"updatedAt":45,"install":46,"resources":59},"01M6CV1C5FYY07DCVE6GC03SFT","nextjs-supabase-auth",null,"Expert integration of Supabase Auth with Next.js App Router","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\u002Fnextjs-supabase-auth\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29],"auth","supabase","nextjs","nextjs supabase auth","apache","integration","Next.js","js","router","expert","next","2026-11-10 10:12:30",false,"---\nname: nextjs-supabase-auth\ndescription: Expert integration of Supabase Auth with Next.js App Router\nrisk: none\nsource: vibeship-spawner-skills (Apache 2.0)\ndate_added: 2026-02-27\n---\n\n# Next.js + Supabase Auth\n\nExpert integration of Supabase Auth with Next.js App Router\n\n## Capabilities\n\n- nextjs-auth\n- supabase-auth-nextjs\n- auth-middleware\n- auth-callback\n\n## Prerequisites\n\n- Required skills: nextjs-app-router, supabase-backend\n\n## Patterns\n\n### Supabase Client Setup\n\nCreate properly configured Supabase clients for different contexts\n\n**When to use**: Setting up auth in a Next.js project\n\n\u002F\u002F lib\u002Fsupabase\u002Fclient.ts (Browser client)\n'use client'\nimport { createBrowserClient } from '@supabase\u002Fssr'\n\nexport function createClient() {\n  return createBrowserClient(\n    process.env.NEXT_PUBLIC_SUPABASE_URL!,\n    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!\n  )\n}\n\n\u002F\u002F lib\u002Fsupabase\u002Fserver.ts (Server client)\nimport { createServerClient } from '@supabase\u002Fssr'\nimport { cookies } from 'next\u002Fheaders'\n\nexport async function createClient() {\n  const cookieStore = await cookies()\n  return createServerClient(\n    process.env.NEXT_PUBLIC_SUPABASE_URL!,\n    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,\n    {\n      cookies: {\n        getAll() {\n          return cookieStore.getAll()\n        },\n        setAll(cookiesToSet) {\n          cookiesToSet.forEach(({ name, value, options }) => {\n            cookieStore.set(name, value, options)\n          })\n        },\n      },\n    }\n  )\n}\n\n### Auth Middleware\n\nProtect routes and refresh sessions in middleware\n\n**When to use**: You need route protection or session refresh\n\n\u002F\u002F middleware.ts\nimport { createServerClient } from '@supabase\u002Fssr'\nimport { NextResponse, type NextRequest } from 'next\u002Fserver'\n\nexport async function middleware(request: NextRequest) {\n  let response = NextResponse.next({ request })\n\n  const supabase = createServerClient(\n    process.env.NEXT_PUBLIC_SUPABASE_URL!,\n    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,\n    {\n      cookies: {\n        getAll() {\n          return request.cookies.getAll()\n        },\n        setAll(cookiesToSet) {\n          cookiesToSet.forEach(({ name, value, options }) => {\n            response.cookies.set(name, value, options)\n          })\n        },\n      },\n    }\n  )\n\n  \u002F\u002F Refresh session if expired\n  const { data: { user } } = await supabase.auth.getUser()\n\n  \u002F\u002F Protect dashboard routes\n  if (request.nextUrl.pathname.startsWith('\u002Fdashboard') && !user) {\n    return NextResponse.redirect(new URL('\u002Flogin', request.url))\n  }\n\n  return response\n}\n\nexport const config = {\n  matcher: ['\u002F((?!_next\u002Fstatic|_next\u002Fimage|favicon.ico).*)'],\n}\n\n### Auth Callback Route\n\nHandle OAuth callback and exchange code for session\n\n**When to use**: Using OAuth providers (Google, GitHub, etc.)\n\n\u002F\u002F app\u002Fauth\u002Fcallback\u002Froute.ts\nimport { createClient } from '@\u002Flib\u002Fsupabase\u002Fserver'\nimport { NextResponse } from 'next\u002Fserver'\n\nexport async function GET(request: Request) {\n  const { searchParams, origin } = new URL(request.url)\n  const code = searchParams.get('code')\n  const next = searchParams.get('next') ?? '\u002F'\n\n  if (code) {\n    const supabase = await createClient()\n    const { error } = await supabase.auth.exchangeCodeForSession(code)\n    if (!error) {\n      return NextResponse.redirect(`${origin}${next}`)\n    }\n  }\n\n  return NextResponse.redirect(`${origin}\u002Fauth\u002Ferror`)\n}\n\n### Server Action Auth\n\nHandle auth operations in Server Actions\n\n**When to use**: Login, logout, or signup from Server Components\n\n\u002F\u002F app\u002Factions\u002Fauth.ts\n'use server'\nimport { createClient } from '@\u002Flib\u002Fsupabase\u002Fserver'\nimport { redirect } from 'next\u002Fnavigation'\nimport { revalidatePath } from 'next\u002Fcache'\n\nexport async function signIn(formData: FormData) {\n  const supabase = await createClient()\n  const { error } = await supabase.auth.signInWithPassword({\n    email: formData.get('email') as string,\n    password: formData.get('password') as string,\n  })\n\n  if (error) {\n    return { error: error.message }\n  }\n\n  revalidatePath('\u002F', 'layout')\n  redirect('\u002Fdashboard')\n}\n\nexport async function signOut() {\n  const supabase = await createClient()\n  await supabase.auth.signOut()\n  revalidatePath('\u002F', 'layout')\n  redirect('\u002F')\n}\n\n### Get User in Server Component\n\nAccess the authenticated user in Server Components\n\n**When to use**: Rendering user-specific content server-side\n\n\u002F\u002F app\u002Fdashboard\u002Fpage.tsx\nimport { createClient } from '@\u002Flib\u002Fsupabase\u002Fserver'\nimport { redirect } from 'next\u002Fnavigation'\n\nexport default async function DashboardPage() {\n  const supabase = await createClient()\n  const { data: { user } } = await supabase.auth.getUser()\n\n  if (!user) {\n    redirect('\u002Flogin')\n  }\n\n  return (\n    \u003Cdiv>\n      \u003Ch1>Welcome, {user.email}\u003C\u002Fh1>\n    \u003C\u002Fdiv>\n  )\n}\n\n## Validation Checks\n\n### Using getSession() for Auth Checks\n\nSeverity: ERROR\n\nMessage: getSession() doesn't verify the JWT. Use getUser() for secure auth checks.\n\nFix action: Replace getSession() with getUser() for security-critical checks\n\n### OAuth Without Callback Route\n\nSeverity: ERROR\n\nMessage: Using OAuth but missing callback route at app\u002Fauth\u002Fcallback\u002Froute.ts\n\nFix action: Create app\u002Fauth\u002Fcallback\u002Froute.ts to handle OAuth redirects\n\n### Browser Client in Server Context\n\nSeverity: ERROR\n\nMessage: Browser client used in server context. Use createServerClient instead.\n\nFix action: Import and use createServerClient from @supabase\u002Fssr\n\n### Protected Routes Without Middleware\n\nSeverity: WARNING\n\nMessage: No middleware.ts found. Consider adding middleware for route protection.\n\nFix action: Create middleware.ts to protect routes and refresh sessions\n\n### Hardcoded Auth Redirect URL\n\nSeverity: WARNING\n\nMessage: Hardcoded localhost redirect. Use origin for environment flexibility.\n\nFix action: Use window.location.origin or process.env.NEXT_PUBLIC_SITE_URL\n\n### Auth Call Without Error Handling\n\nSeverity: WARNING\n\nMessage: Auth operation without error handling. Always check for errors.\n\nFix action: Destructure { data, error } and handle error case\n\n### Auth Action Without Revalidation\n\nSeverity: WARNING\n\nMessage: Auth action without revalidatePath. Cache may show stale auth state.\n\nFix action: Add revalidatePath('\u002F', 'layout') after auth operations\n\n### Client-Only Route Protection\n\nSeverity: WARNING\n\nMessage: Client-side route protection shows flash of content. Use middleware.\n\nFix action: Move protection to middleware.ts for better UX\n\n## Collaboration\n\n### Delegation Triggers\n\n- database|rls|queries|tables -> supabase-backend (Auth needs database layer)\n- route|page|component|layout -> nextjs-app-router (Auth needs Next.js patterns)\n- deploy|production|vercel -> vercel-deployment (Auth needs deployment config)\n- ui|form|button|design -> frontend (Auth needs UI components)\n\n### Full Auth Stack\n\nSkills: nextjs-supabase-auth, supabase-backend, nextjs-app-router, vercel-deployment\n\nWorkflow:\n\n```\n1. Database setup (supabase-backend)\n2. Auth implementation (nextjs-supabase-auth)\n3. Route protection (nextjs-app-router)\n4. Deployment config (vercel-deployment)\n```\n\n### Protected SaaS\n\nSkills: nextjs-supabase-auth, stripe-integration, supabase-backend\n\nWorkflow:\n\n```\n1. User authentication (nextjs-supabase-auth)\n2. Customer sync (stripe-integration)\n3. Subscription gating (supabase-backend)\n```\n\n## Related Skills\n\nWorks well with: `nextjs-app-router`, `supabase-backend`\n\n## When to Use\n\n- User mentions or implies: supabase auth next\n- User mentions or implies: authentication next.js\n- User mentions or implies: login supabase\n- User mentions or implies: auth middleware\n- User mentions or implies: protected route\n- User mentions or implies: auth callback\n- User mentions or implies: session management\n","# Next.js + Supabase Auth\n\nExpert integration of Supabase Auth with Next.js App Router\n\n## Capabilities\n\n- nextjs-auth\n- supabase-auth-nextjs\n- auth-middleware\n- auth-callback\n\n## Prerequisites\n\n- Required skills: nextjs-app-router, supabase-backend\n\n## Patterns\n\n### Supabase Client Setup\n\nCreate properly configured Supabase clients for different contexts\n\n**When to use**: Setting up auth in a Next.js project\n\n\u002F\u002F lib\u002Fsupabase\u002Fclient.ts (Browser client)\n'use client'\nimport { createBrowserClient } from '@supabase\u002Fssr'\n\nexport function createClient() {\n  return createBrowserClient(\n    process.env.NEXT_PUBLIC_SUPABASE_URL!,\n    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!\n  )\n}\n\n\u002F\u002F lib\u002Fsupabase\u002Fserver.ts (Server client)\nimport { createServerClient } from '@supabase\u002Fssr'\nimport { cookies } from 'next\u002Fheaders'\n\nexport async function createClient() {\n  const cookieStore = await cookies()\n  return createServerClient(\n    process.env.NEXT_PUBLIC_SUPABASE_URL!,\n    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,\n    {\n      cookies: {\n        getAll() {\n          return cookieStore.getAll()\n        },\n        setAll(cookiesToSet) {\n          cookiesToSet.forEach(({ name, value, options }) => {\n            cookieStore.set(name, value, options)\n          })\n        },\n      },\n    }\n  )\n}\n\n### Auth Middleware\n\nProtect routes and refresh sessions in middleware\n\n**When to use**: You need route protection or session refresh\n\n\u002F\u002F middleware.ts\nimport { createServerClient } from '@supabase\u002Fssr'\nimport { NextResponse, type NextRequest } from 'next\u002Fserver'\n\nexport async function middleware(request: NextRequest) {\n  let response = NextResponse.next({ request })\n\n  const supabase = createServerClient(\n    process.env.NEXT_PUBLIC_SUPABASE_URL!,\n    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,\n    {\n      cookies: {\n        getAll() {\n          return request.cookies.getAll()\n        },\n        setAll(cookiesToSet) {\n          cookiesToSet.forEach(({ name, value, options }) => {\n            response.cookies.set(name, value, options)\n          })\n        },\n      },\n    }\n  )\n\n  \u002F\u002F Refresh session if expired\n  const { data: { user } } = await supabase.auth.getUser()\n\n  \u002F\u002F Protect dashboard routes\n  if (request.nextUrl.pathname.startsWith('\u002Fdashboard') && !user) {\n    return NextResponse.redirect(new URL('\u002Flogin', request.url))\n  }\n\n  return response\n}\n\nexport const config = {\n  matcher: ['\u002F((?!_next\u002Fstatic|_next\u002Fimage|favicon.ico).*)'],\n}\n\n### Auth Callback Route\n\nHandle OAuth callback and exchange code for session\n\n**When to use**: Using OAuth providers (Google, GitHub, etc.)\n\n\u002F\u002F app\u002Fauth\u002Fcallback\u002Froute.ts\nimport { createClient } from '@\u002Flib\u002Fsupabase\u002Fserver'\nimport { NextResponse } from 'next\u002Fserver'\n\nexport async function GET(request: Request) {\n  const { searchParams, origin } = new URL(request.url)\n  const code = searchParams.get('code')\n  const next = searchParams.get('next') ?? '\u002F'\n\n  if (code) {\n    const supabase = await createClient()\n    const { error } = await supabase.auth.exchangeCodeForSession(code)\n    if (!error) {\n      return NextResponse.redirect(`${origin}${next}`)\n    }\n  }\n\n  return NextResponse.redirect(`${origin}\u002Fauth\u002Ferror`)\n}\n\n### Server Action Auth\n\nHandle auth operations in Server Actions\n\n**When to use**: Login, logout, or signup from Server Components\n\n\u002F\u002F app\u002Factions\u002Fauth.ts\n'use server'\nimport { createClient } from '@\u002Flib\u002Fsupabase\u002Fserver'\nimport { redirect } from 'next\u002Fnavigation'\nimport { revalidatePath } from 'next\u002Fcache'\n\nexport async function signIn(formData: FormData) {\n  const supabase = await createClient()\n  const { error } = await supabase.auth.signInWithPassword({\n    email: formData.get('email') as string,\n    password: formData.get('password') as string,\n  })\n\n  if (error) {\n    return { error: error.message }\n  }\n\n  revalidatePath('\u002F', 'layout')\n  redirect('\u002Fdashboard')\n}\n\nexport async function signOut() {\n  const supabase = await createClient()\n  await supabase.auth.signOut()\n  revalidatePath('\u002F', 'layout')\n  redirect('\u002F')\n}\n\n### Get User in Server Component\n\nAccess the authenticated user in Server Components\n\n**When to use**: Rendering user-specific content server-side\n\n\u002F\u002F app\u002Fdashboard\u002Fpage.tsx\nimport { createClient } from '@\u002Flib\u002Fsupabase\u002Fserver'\nimport { redirect } from 'next\u002Fnavigation'\n\nexport default async function DashboardPage() {\n  const supabase = await createClient()\n  const { data: { user } } = await supabase.auth.getUser()\n\n  if (!user) {\n    redirect('\u002Flogin')\n  }\n\n  return (\n    \u003Cdiv>\n      \u003Ch1>Welcome, {user.email}\u003C\u002Fh1>\n    \u003C\u002Fdiv>\n  )\n}\n\n## Validation Checks\n\n### Using getSession() for Auth Checks\n\nSeverity: ERROR\n\nMessage: getSession() doesn't verify the JWT. Use getUser() for secure auth checks.\n\nFix action: Replace getSession() with getUser() for security-critical checks\n\n### OAuth Without Callback Route\n\nSeverity: ERROR\n\nMessage: Using OAuth but missing callback route at app\u002Fauth\u002Fcallback\u002Froute.ts\n\nFix action: Create app\u002Fauth\u002Fcallback\u002Froute.ts to handle OAuth redirects\n\n### Browser Client in Server Context\n\nSeverity: ERROR\n\nMessage: Browser client used in server context. Use createServerClient instead.\n\nFix action: Import and use createServerClient from @supabase\u002Fssr\n\n### Protected Routes Without Middleware\n\nSeverity: WARNING\n\nMessage: No middleware.ts found. Consider adding middleware for route protection.\n\nFix action: Create middleware.ts to protect routes and refresh sessions\n\n### Hardcoded Auth Redirect URL\n\nSeverity: WARNING\n\nMessage: Hardcoded localhost redirect. Use origin for environment flexibility.\n\nFix action: Use window.location.origin or process.env.NEXT_PUBLIC_SITE_URL\n\n### Auth Call Without Error Handling\n\nSeverity: WARNING\n\nMessage: Auth operation without error handling. Always check for errors.\n\nFix action: Destructure { data, error } and handle error case\n\n### Auth Action Without Revalidation\n\nSeverity: WARNING\n\nMessage: Auth action without revalidatePath. Cache may show stale auth state.\n\nFix action: Add revalidatePath('\u002F', 'layout') after auth operations\n\n### Client-Only Route Protection\n\nSeverity: WARNING\n\nMessage: Client-side route protection shows flash of content. Use middleware.\n\nFix action: Move protection to middleware.ts for better UX\n\n## Collaboration\n\n### Delegation Triggers\n\n- database|rls|queries|tables -> supabase-backend (Auth needs database layer)\n- route|page|component|layout -> nextjs-app-router (Auth needs Next.js patterns)\n- deploy|production|vercel -> vercel-deployment (Auth needs deployment config)\n- ui|form|button|design -> frontend (Auth needs UI components)\n\n### Full Auth Stack\n\nSkills: nextjs-supabase-auth, supabase-backend, nextjs-app-router, vercel-deployment\n\nWorkflow:\n\n```\n1. Database setup (supabase-backend)\n2. Auth implementation (nextjs-supabase-auth)\n3. Route protection (nextjs-app-router)\n4. Deployment config (vercel-deployment)\n```\n\n### Protected SaaS\n\nSkills: nextjs-supabase-auth, stripe-integration, supabase-backend\n\nWorkflow:\n\n```\n1. User authentication (nextjs-supabase-auth)\n2. Customer sync (stripe-integration)\n3. Subscription gating (supabase-backend)\n```\n\n## Related Skills\n\nWorks well with: `nextjs-app-router`, `supabase-backend`\n\n## When to Use\n\n- User mentions or implies: supabase auth next\n- User mentions or implies: authentication next.js\n- User mentions or implies: login supabase\n- User mentions or implies: auth middleware\n- User mentions or implies: protected route\n- User mentions or implies: auth callback\n- User mentions or implies: session management\n",{"name":5,"risk":35,"source":36,"date_added":37,"description":7},"none","vibeship-spawner-skills (Apache 2.0)",1772150400000,"main","a50a3aa6b39fb0e1b7db88bef1bfc9c93606e126","modules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fnextjs-supabase-auth",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":47,"prompt":57,"zipAvailable":58},[48,51,54],{"tool":49,"command":50},"npx","npx skills add Sam-06060\u002Fjarvis-assistant --skill nextjs-supabase-auth",{"tool":52,"command":53},"bunx","bunx skills add Sam-06060\u002Fjarvis-assistant --skill nextjs-supabase-auth",{"tool":55,"command":56},"pnpm","pnpm dlx skills add Sam-06060\u002Fjarvis-assistant --skill nextjs-supabase-auth","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fnextjs-supabase-auth\u002FSKILL.md",true,[],[61,74,91,118,137,161],{"skillNo":62,"name":63,"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":64,"categories":65,"keywords":71,"publishedAt":30},"01M6GDRVS6FXX3ESH0C9DW01C0","test_skill","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fscratch\u002Ftest_skill\u002FSKILL.md",[66],{"categoryNo":67,"categoryName":68,"taxonomyType":69,"taxonomyTypeDesc":70},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[72,73],"Test Skill","test",{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":30},"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",[],[81,82,83,84,85,86,87,88,89,90],"zustand store ts","zustand","store","with","types","middleware","patterns","community","create","typescript",{"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":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":100,"publishedAt":30},"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",[97],{"categoryNo":98,"categoryName":99,"taxonomyType":69,"taxonomyTypeDesc":70},"01JBSEEDCAT000000000000023","Skill与智能体开发",[101,102,103,104,105,106,107,108,109,110,111,112,113,114,88,115,116,117],"automation","zoom automation","zoom","first","Tools","search","MCP","via","meeting","automate","critical","creation","webinars","composio","recordings","management","tracking",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":125,"publishedAt":30},"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",[124],{"categoryNo":98,"categoryName":99,"taxonomyType":69,"taxonomyTypeDesc":70},[126,101,127,128,129,130,131,88,106,132,114,133,111,110,105,134,89,135,107,136],"crm automation","zoho crm","crm","zoho crm automation","zoho","leads","contacts","records","update","tasks","manage",{"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":146,"publishedAt":30},"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",[143],{"categoryNo":144,"categoryName":145,"taxonomyType":69,"taxonomyTypeDesc":70},"01JBSEEDCAT000000000000009","前端开发",[28,147,148,149,150,90,151,152,153,154,155,156,84,157,158,159,29,88,160,25],"zod","zod validation expert","validation","react","safe","parsing","errors","schema validation","react hook form","hook","trpc","form","type","schema",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":168,"publishedAt":30},"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",[167],{"categoryNo":98,"categoryName":99,"taxonomyType":69,"taxonomyTypeDesc":70},[169,170,171,172,173,174,175,176,88,177,178,179,180,181,182,183,184,185,186,107],"zeroize audit","audit","write","passwords","get","project","c++","activate","assembly","read","Bash","secrets","analysis","data","flow","verification","code","rust"]