[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6X79VMKRBTV2PJS357Q88SF":3,"skill-same:01M6X79VMKRBTV2PJS357Q88SF":73},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":54,"repositoryHtmlUrl":55,"repositoryHomepageUrl":56,"ownerHtmlUrl":57,"ownerBlogUrl":56,"ownerDescription":58,"updatedAt":59,"install":60,"resources":72},"01M6X79VMKRBTV2PJS357Q88SF","nextjs-patterns",null,"Writes Next.js App Router code — Server Components, Server Actions, RSC boundaries, route handlers, caching, and streaming — matching framework conventions and project architecture.","event4u-app\u002Fagent-config","event4u-app","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F199339632?v=4","01M6X5TWBNCQCE1VDKT4E9KF7N","event4u.app","01M6X5TWF4HRM266RG2Q5VVH1X",19,"MIT","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fnextjs-patterns\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"nextjs","patterns","nextjs patterns","rsc","components","Server Components","project architecture","professional","false","app","project","caching","next","route","router","actions","server","streaming","code","architecture","2026-11-10 10:12:30",false,"---\nmodel_tier: medium\nname: nextjs-patterns\ndescription: \"Writes Next.js App Router code — Server Components, Server Actions, RSC boundaries, route handlers, caching, and streaming — matching framework conventions and project architecture.\"\ndomain: engineering\nworkspaces:\n  - engineering\npacks:\n  - nextjs\ntrust:\n  level: professional\ninstall:\n  default: false\n  removable: true\n---\n\n# nextjs-patterns\n\n## Compatibility\n\n- **Tested against:** Next.js `14.x` and `15.x` (App Router), React `18+` \u002F `19+`.\n- Pages Router is **out of scope**. On a Pages-Router project (no `app\u002F`),\n  fall back to plain React skills; ask before introducing App Router.\n\n## When to use\n\nUse this skill for Next.js-specific code generation and editing on the App Router:\n\n- Server Components (RSC) and Client Components (`\"use client\"`)\n- Server Actions (`\"use server\"`)\n- Route Handlers (`app\u002Fapi\u002F**\u002Froute.ts`)\n- Layouts, templates, loading \u002F error \u002F not-found boundaries\n- Data fetching with `fetch` + cache directives\n- `revalidatePath` \u002F `revalidateTag` invalidation\n- Streaming and `\u003CSuspense>` boundaries\n- Middleware (`middleware.ts`)\n- Metadata API (static + dynamic)\n- Route Groups, Parallel Routes, Intercepting Routes\n\n## When to use the analysis sibling\n\nWhen the task is **understanding** how a Next.js app boots, where the\nserver\u002Fclient boundary lives, what is cached vs streamed, or why a\nhydration mismatch fires — defer to `project-analysis-nextjs` first,\nthen return here for the edit.\n\n## Procedure: write Next.js code\n\n1. **Confirm App Router** — `app\u002F` directory exists; `next.config.{js,ts,mjs}` present.\n2. **Confirm version** — `package.json` major for `next`. 14.x vs 15.x differs in\n   default caching (15.x is uncached by default for `fetch`) and in `cookies()` \u002F\n   `headers()` being async.\n3. **Inspect routing layout** — flat `app\u002F` vs grouped (`app\u002F(marketing)\u002F`,\n   `app\u002F(app)\u002F`); identify shared layouts and parallel routes.\n4. **Inspect data layer** — Server Actions vs route handlers vs external API;\n   ORM (Prisma, Drizzle) or fetch-based.\n5. **Inspect styling** — Tailwind, CSS Modules, or styled engine; respect the\n   chosen stack, do not mix.\n6. **Check test conventions** — Vitest \u002F Jest + RTL for components; Playwright\n   for E2E; route-handler tests via `node` runtime.\n\n## Server vs Client boundary\n\n- **Server Components are the default.** Add `\"use client\"` only when a leaf\n  component needs state, effects, browser APIs, or event handlers.\n- The `\"use client\"` boundary is **viral upward at the import graph**, but you\n  can keep a Server Component **rendered as a child** of a Client Component\n  by passing it as a prop \u002F `children` — that pattern keeps server logic out\n  of the client bundle.\n- Never put database access, secrets, or server-only modules inside a Client\n  Component or a file imported by one. Use `import \"server-only\"` at the top\n  of a server module to make leaks fail at build time.\n- Symmetric guard: `import \"client-only\"` for code that must never run on the\n  server (e.g. browser-only SDKs).\n- Props passed from Server → Client must be serializable. No functions, no\n  Dates with custom prototypes, no `Map` \u002F `Set` — use plain JSON.\n\n## Server Actions\n\n- Declare with `\"use server\"` at the top of the file or per-function.\n- Server Actions are **server-only RPC**; never call them from `useEffect` for\n  pure data fetching — that is what Server Components are for.\n- Always **validate input** (zod or equivalent) at the entry of the action —\n  the caller is the client; treat it as hostile.\n- Always **re-authorize** inside the action; do not trust client-side guards.\n- After a mutation: call `revalidatePath()` \u002F `revalidateTag()` or `redirect()`.\n- Return shape: a `{ ok: true, data }` \u002F `{ ok: false, error }` discriminated\n  union — never throw across the action boundary for expected errors.\n- Use `useActionState` (15.x) \u002F `useFormState` (14.x) on the client for\n  progressive enhancement; the form must work without JS.\n\n## Route Handlers\n\n- `app\u002Fapi\u002F**\u002Froute.ts` exports `GET`, `POST`, etc.\n- Handlers run on the **node runtime by default**; opt into `edge` only when\n  the dependency set supports it.\n- Read request body once: `await req.json()` or `await req.formData()`.\n- Return `Response` \u002F `NextResponse`. Use `NextResponse.json` for JSON +\n  consistent status codes.\n- Authentication and rate limiting happen **inside** the handler or via\n  `middleware.ts`; do not assume any framework default.\n- Cache behavior: route handlers are dynamic by default in 15.x. Add\n  `export const dynamic = 'force-static'` \u002F `revalidate = N` explicitly.\n\n## Caching and revalidation (14.x vs 15.x)\n\n- **14.x**: `fetch` is cached by default (force-cache); opt out with\n  `{ cache: 'no-store' }` or segment-level `export const dynamic = 'force-dynamic'`.\n- **15.x**: `fetch` is **not cached by default**; opt in with\n  `{ cache: 'force-cache' }` or `{ next: { revalidate: N } }`.\n- Use **tag-based revalidation** for shared invalidation surface:\n  `fetch(url, { next: { tags: ['posts'] } })` then `revalidateTag('posts')`.\n- Use `revalidatePath('\u002Fblog\u002F[slug]', 'page')` for targeted page invalidation.\n- Never call `revalidate*` from a Client Component — wrap it in a Server Action.\n- `unstable_cache` \u002F `cache` (React) wrap pure server functions for memoization\n  within a request; respect the difference between request-scoped and\n  cross-request caching.\n\n## Data fetching patterns\n\n- Prefer fetching in **the Server Component that uses the data**, not in a\n  layout, to allow per-route streaming.\n- Parallel fetching: declare independent promises and `await` together —\n  avoid sequential `await` chains that block streaming.\n- `\u003CSuspense>` boundaries make slow data non-blocking; wrap each independent\n  data dependency in its own Suspense, not the whole page.\n- `loading.tsx` is a default Suspense fallback for the segment; do not use it\n  as a global spinner.\n- Avoid `useEffect` for initial data load in Client Components — fetch on the\n  server and pass props.\n\n## Layouts, templates, error and not-found\n\n- `layout.tsx` is a **persistent** wrapper across navigations; do not put\n  per-page logic there.\n- `template.tsx` re-renders on every navigation; use only when a layout\n  cannot.\n- `loading.tsx`, `error.tsx`, `not-found.tsx` are **per-segment**; nest them\n  to localize fallbacks.\n- `error.tsx` must be a Client Component (`\"use client\"`); accept `error` and\n  `reset` props.\n\n## Middleware\n\n- `middleware.ts` at the project root runs on the **edge runtime** before a\n  request hits a route — use for auth redirects, locale negotiation, A\u002FB.\n- No database access from middleware; the edge runtime cannot run most node\n  drivers. Use a session cookie + lightweight verification.\n- `matcher` config narrows which paths invoke it — never let middleware run\n  on every asset.\n\n## Metadata, performance, env\n\n- Metadata: static `export const metadata`; dynamic `generateMetadata()`.\n  `generateStaticParams` for static dynamic-segment generation.\n- `next\u002Fimage`, `next\u002Ffont`, `next\u002Fdynamic` for images, fonts, code-split\n  Client Components — never bare `\u003Cimg>`, CSS `@import` Google Fonts, or\n  unguarded heavy imports.\n- A single `\"use client\"` near the top of a tree pulls the subtree into the\n  client bundle — keep the boundary at the leaf.\n- Env: server-only `DATABASE_URL` etc.; client-exposed must be prefixed\n  `NEXT_PUBLIC_*` and is NOT secret. Validate env at boot (zod) and import\n  the validated object — never `process.env` ad hoc.\n\n## Output format\n\n1. Next.js code following App Router conventions and the project's existing layout.\n2. All related files (page, layout, server action, route handler, schema, test) as needed.\n3. When a cache surface changes — point at the invalidation call (`revalidateTag` \u002F `revalidatePath`).\n\n## Do NOT\n\n- Do NOT add `\"use client\"` to a file that does not need it — it pulls the\n  subtree into the client bundle.\n- Do NOT import server modules (db client, secrets) from a Client Component\n  file — even transitively. Guard with `import \"server-only\"`.\n- Do NOT call Server Actions from `useEffect` to fetch data — fetch on the server.\n- Do NOT throw across a Server Action boundary for expected errors — return a\n  result union.\n- Do NOT trust client-side authorization in a Server Action or route handler —\n  re-check.\n- Do NOT mutate without revalidating — stale UI is a class of bug, not a design.\n- Do NOT mix Pages Router and App Router patterns in one feature — pick one.\n- Do NOT assume 14.x caching defaults on 15.x; verify the major before reasoning about cache.\n\n## Gotcha\n\n- **15.x async APIs**: `cookies()`, `headers()`, `params`, `searchParams` are\n  **async** in 15.x. Code that ran on 14.x will silently misbehave (Promise\n  rendered as an object) until awaited.\n- **Hydration mismatch**: rendering `Date.now()`, `Math.random()`, or\n  locale-dependent strings without `suppressHydrationWarning` or a Client\n  boundary causes a hydration error.\n- **`\"use client\"` is not opt-in for hooks**: it is required for any file\n  using `useState`, `useEffect`, `useRef`, or browser globals.\n- **Server Actions and forms**: a Server Action used as a form action must\n  accept `FormData`. Mixing `FormData` and typed args breaks progressive\n  enhancement.\n- **Cache lies during dev**: dev mode ignores most cache directives. Verify\n  caching behavior in a production build (`next build && next start`).\n- **`revalidatePath` requires the route group syntax** for parallel\u002Fdynamic\n  segments — bare paths silently miss.\n- **Edge runtime ≠ Node**: most npm packages with native deps or Node-only\n  APIs (`fs`, `crypto.createHash`) fail at the edge. Pin runtime per route.\n\n## Auto-trigger keywords\n\n- Next.js \u002F App Router · Server Component (RSC) · Client Component (`\"use client\"`)\n- Server Action (`\"use server\"`) · Route Handler (`app\u002Fapi`) · `middleware.ts`\n- `revalidatePath` \u002F `revalidateTag` \u002F `unstable_cache`\n- `next\u002Fimage` \u002F `next\u002Ffont` \u002F `next\u002Fdynamic`\n- `layout.tsx` \u002F `loading.tsx` \u002F `error.tsx` \u002F `not-found.tsx`\n","# nextjs-patterns\n\n## Compatibility\n\n- **Tested against:** Next.js `14.x` and `15.x` (App Router), React `18+` \u002F `19+`.\n- Pages Router is **out of scope**. On a Pages-Router project (no `app\u002F`),\n  fall back to plain React skills; ask before introducing App Router.\n\n## When to use\n\nUse this skill for Next.js-specific code generation and editing on the App Router:\n\n- Server Components (RSC) and Client Components (`\"use client\"`)\n- Server Actions (`\"use server\"`)\n- Route Handlers (`app\u002Fapi\u002F**\u002Froute.ts`)\n- Layouts, templates, loading \u002F error \u002F not-found boundaries\n- Data fetching with `fetch` + cache directives\n- `revalidatePath` \u002F `revalidateTag` invalidation\n- Streaming and `\u003CSuspense>` boundaries\n- Middleware (`middleware.ts`)\n- Metadata API (static + dynamic)\n- Route Groups, Parallel Routes, Intercepting Routes\n\n## When to use the analysis sibling\n\nWhen the task is **understanding** how a Next.js app boots, where the\nserver\u002Fclient boundary lives, what is cached vs streamed, or why a\nhydration mismatch fires — defer to `project-analysis-nextjs` first,\nthen return here for the edit.\n\n## Procedure: write Next.js code\n\n1. **Confirm App Router** — `app\u002F` directory exists; `next.config.{js,ts,mjs}` present.\n2. **Confirm version** — `package.json` major for `next`. 14.x vs 15.x differs in\n   default caching (15.x is uncached by default for `fetch`) and in `cookies()` \u002F\n   `headers()` being async.\n3. **Inspect routing layout** — flat `app\u002F` vs grouped (`app\u002F(marketing)\u002F`,\n   `app\u002F(app)\u002F`); identify shared layouts and parallel routes.\n4. **Inspect data layer** — Server Actions vs route handlers vs external API;\n   ORM (Prisma, Drizzle) or fetch-based.\n5. **Inspect styling** — Tailwind, CSS Modules, or styled engine; respect the\n   chosen stack, do not mix.\n6. **Check test conventions** — Vitest \u002F Jest + RTL for components; Playwright\n   for E2E; route-handler tests via `node` runtime.\n\n## Server vs Client boundary\n\n- **Server Components are the default.** Add `\"use client\"` only when a leaf\n  component needs state, effects, browser APIs, or event handlers.\n- The `\"use client\"` boundary is **viral upward at the import graph**, but you\n  can keep a Server Component **rendered as a child** of a Client Component\n  by passing it as a prop \u002F `children` — that pattern keeps server logic out\n  of the client bundle.\n- Never put database access, secrets, or server-only modules inside a Client\n  Component or a file imported by one. Use `import \"server-only\"` at the top\n  of a server module to make leaks fail at build time.\n- Symmetric guard: `import \"client-only\"` for code that must never run on the\n  server (e.g. browser-only SDKs).\n- Props passed from Server → Client must be serializable. No functions, no\n  Dates with custom prototypes, no `Map` \u002F `Set` — use plain JSON.\n\n## Server Actions\n\n- Declare with `\"use server\"` at the top of the file or per-function.\n- Server Actions are **server-only RPC**; never call them from `useEffect` for\n  pure data fetching — that is what Server Components are for.\n- Always **validate input** (zod or equivalent) at the entry of the action —\n  the caller is the client; treat it as hostile.\n- Always **re-authorize** inside the action; do not trust client-side guards.\n- After a mutation: call `revalidatePath()` \u002F `revalidateTag()` or `redirect()`.\n- Return shape: a `{ ok: true, data }` \u002F `{ ok: false, error }` discriminated\n  union — never throw across the action boundary for expected errors.\n- Use `useActionState` (15.x) \u002F `useFormState` (14.x) on the client for\n  progressive enhancement; the form must work without JS.\n\n## Route Handlers\n\n- `app\u002Fapi\u002F**\u002Froute.ts` exports `GET`, `POST`, etc.\n- Handlers run on the **node runtime by default**; opt into `edge` only when\n  the dependency set supports it.\n- Read request body once: `await req.json()` or `await req.formData()`.\n- Return `Response` \u002F `NextResponse`. Use `NextResponse.json` for JSON +\n  consistent status codes.\n- Authentication and rate limiting happen **inside** the handler or via\n  `middleware.ts`; do not assume any framework default.\n- Cache behavior: route handlers are dynamic by default in 15.x. Add\n  `export const dynamic = 'force-static'` \u002F `revalidate = N` explicitly.\n\n## Caching and revalidation (14.x vs 15.x)\n\n- **14.x**: `fetch` is cached by default (force-cache); opt out with\n  `{ cache: 'no-store' }` or segment-level `export const dynamic = 'force-dynamic'`.\n- **15.x**: `fetch` is **not cached by default**; opt in with\n  `{ cache: 'force-cache' }` or `{ next: { revalidate: N } }`.\n- Use **tag-based revalidation** for shared invalidation surface:\n  `fetch(url, { next: { tags: ['posts'] } })` then `revalidateTag('posts')`.\n- Use `revalidatePath('\u002Fblog\u002F[slug]', 'page')` for targeted page invalidation.\n- Never call `revalidate*` from a Client Component — wrap it in a Server Action.\n- `unstable_cache` \u002F `cache` (React) wrap pure server functions for memoization\n  within a request; respect the difference between request-scoped and\n  cross-request caching.\n\n## Data fetching patterns\n\n- Prefer fetching in **the Server Component that uses the data**, not in a\n  layout, to allow per-route streaming.\n- Parallel fetching: declare independent promises and `await` together —\n  avoid sequential `await` chains that block streaming.\n- `\u003CSuspense>` boundaries make slow data non-blocking; wrap each independent\n  data dependency in its own Suspense, not the whole page.\n- `loading.tsx` is a default Suspense fallback for the segment; do not use it\n  as a global spinner.\n- Avoid `useEffect` for initial data load in Client Components — fetch on the\n  server and pass props.\n\n## Layouts, templates, error and not-found\n\n- `layout.tsx` is a **persistent** wrapper across navigations; do not put\n  per-page logic there.\n- `template.tsx` re-renders on every navigation; use only when a layout\n  cannot.\n- `loading.tsx`, `error.tsx`, `not-found.tsx` are **per-segment**; nest them\n  to localize fallbacks.\n- `error.tsx` must be a Client Component (`\"use client\"`); accept `error` and\n  `reset` props.\n\n## Middleware\n\n- `middleware.ts` at the project root runs on the **edge runtime** before a\n  request hits a route — use for auth redirects, locale negotiation, A\u002FB.\n- No database access from middleware; the edge runtime cannot run most node\n  drivers. Use a session cookie + lightweight verification.\n- `matcher` config narrows which paths invoke it — never let middleware run\n  on every asset.\n\n## Metadata, performance, env\n\n- Metadata: static `export const metadata`; dynamic `generateMetadata()`.\n  `generateStaticParams` for static dynamic-segment generation.\n- `next\u002Fimage`, `next\u002Ffont`, `next\u002Fdynamic` for images, fonts, code-split\n  Client Components — never bare `\u003Cimg>`, CSS `@import` Google Fonts, or\n  unguarded heavy imports.\n- A single `\"use client\"` near the top of a tree pulls the subtree into the\n  client bundle — keep the boundary at the leaf.\n- Env: server-only `DATABASE_URL` etc.; client-exposed must be prefixed\n  `NEXT_PUBLIC_*` and is NOT secret. Validate env at boot (zod) and import\n  the validated object — never `process.env` ad hoc.\n\n## Output format\n\n1. Next.js code following App Router conventions and the project's existing layout.\n2. All related files (page, layout, server action, route handler, schema, test) as needed.\n3. When a cache surface changes — point at the invalidation call (`revalidateTag` \u002F `revalidatePath`).\n\n## Do NOT\n\n- Do NOT add `\"use client\"` to a file that does not need it — it pulls the\n  subtree into the client bundle.\n- Do NOT import server modules (db client, secrets) from a Client Component\n  file — even transitively. Guard with `import \"server-only\"`.\n- Do NOT call Server Actions from `useEffect` to fetch data — fetch on the server.\n- Do NOT throw across a Server Action boundary for expected errors — return a\n  result union.\n- Do NOT trust client-side authorization in a Server Action or route handler —\n  re-check.\n- Do NOT mutate without revalidating — stale UI is a class of bug, not a design.\n- Do NOT mix Pages Router and App Router patterns in one feature — pick one.\n- Do NOT assume 14.x caching defaults on 15.x; verify the major before reasoning about cache.\n\n## Gotcha\n\n- **15.x async APIs**: `cookies()`, `headers()`, `params`, `searchParams` are\n  **async** in 15.x. Code that ran on 14.x will silently misbehave (Promise\n  rendered as an object) until awaited.\n- **Hydration mismatch**: rendering `Date.now()`, `Math.random()`, or\n  locale-dependent strings without `suppressHydrationWarning` or a Client\n  boundary causes a hydration error.\n- **`\"use client\"` is not opt-in for hooks**: it is required for any file\n  using `useState`, `useEffect`, `useRef`, or browser globals.\n- **Server Actions and forms**: a Server Action used as a form action must\n  accept `FormData`. Mixing `FormData` and typed args breaks progressive\n  enhancement.\n- **Cache lies during dev**: dev mode ignores most cache directives. Verify\n  caching behavior in a production build (`next build && next start`).\n- **`revalidatePath` requires the route group syntax** for parallel\u002Fdynamic\n  segments — bare paths silently miss.\n- **Edge runtime ≠ Node**: most npm packages with native deps or Node-only\n  APIs (`fs`, `crypto.createHash`) fail at the edge. Pin runtime per route.\n\n## Auto-trigger keywords\n\n- Next.js \u002F App Router · Server Component (RSC) · Client Component (`\"use client\"`)\n- Server Action (`\"use server\"`) · Route Handler (`app\u002Fapi`) · `middleware.ts`\n- `revalidatePath` \u002F `revalidateTag` \u002F `unstable_cache`\n- `next\u002Fimage` \u002F `next\u002Ffont` \u002F `next\u002Fdynamic`\n- `layout.tsx` \u002F `loading.tsx` \u002F `error.tsx` \u002F `not-found.tsx`\n",{"name":5,"packs":44,"trust":45,"domain":46,"install":47,"model_tier":49,"workspaces":50,"description":7},[19],{"level":26},"engineering",{"default":40,"removable":48},true,"medium",[46],"main","12bd765ce1d800501d45dfb8232102793af01290","src\u002Fskills\u002Fnextjs-patterns",1,"https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config","https:\u002F\u002Fevent4u.app","https:\u002F\u002Fgithub.com\u002Fevent4u-app","Your events in your hand","2026-11-11 06:19:40",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":48},[62,65,68],{"tool":63,"command":64},"npx","npx skills add event4u-app\u002Fagent-config --skill nextjs-patterns",{"tool":66,"command":67},"bunx","bunx skills add event4u-app\u002Fagent-config --skill nextjs-patterns",{"tool":69,"command":70},"pnpm","pnpm dlx skills add event4u-app\u002Fagent-config --skill nextjs-patterns","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fnextjs-patterns\u002FSKILL.md",[],[74,92,105,117,129,139],{"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":85,"publishedAt":39},"01M6X84PK96XBPENXH66JCTSD1","unknown-key-fixture","Declares a key the schema does not know.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Fscripts\u002Ffixtures\u002Fbody-portable\u002Funknown-key\u002FSKILL.md",[80],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[86,87,88,89,90,91],"unknown key fixture","Unknown key","fixture","unknown","schema","package",{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":99,"publishedAt":39},"01M6X84HW7NAHZ7GZMQ9RXK1XJ","portable-fixture","Declares only semantics the MCP-lite carrier transports whole.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Fscripts\u002Ffixtures\u002Fbody-portable\u002Fportable\u002FSKILL.md",[98],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},[88,100,101,102,103,91,104],"portable","portable fixture","engineer","only","MCP",{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":112,"publishedAt":39},"01M6X84F29FE0RGGZ1ZTFGZTX2","non-portable-fixture","Declares a runtime semantic the carrier drops.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Fscripts\u002Ffixtures\u002Fbody-portable\u002Fnon-portable\u002FSKILL.md",[111],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},[101,113,100,88,114,115,116,91],"non portable fixture","semantic","high","runtime",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":124,"publishedAt":39},"01M6X848F706PT9MDCX75JKJ6B","candidate-zero-width","A candidate whose prose carries an invisible joiner.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskill-scout-candidates\u002Fzero-width-injection\u002FSKILL.md",[123],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},[125,126,127,128],"candidate zero width","candidate","ZeRO","prose",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":136,"publishedAt":39},"01M6X841SSC2T31VDF41SA6DG1","candidate-disclosure-suppression","A candidate whose prose tells the agent to withhold from the user.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskill-scout-candidates\u002Fdisclosure-suppression\u002FSKILL.md",[135],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},[137,126,128,138],"candidate disclosure suppression","user",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":146,"publishedAt":39},"01M6X83TFS5AGPBPVTQNWP0BB3","candidate-dangerous-frontmatter","A candidate claiming an unscoped tool grant and a permission bypass.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskill-scout-candidates\u002Fdangerous-frontmatter\u002FSKILL.md",[145],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},[147,126,148,149,150,151],"candidate dangerous frontmatter","frontmatter","shell","permission","tool"]