[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M73DYNFPPQANVPDYV0EP8SFE":3,"skill-same:01M73DYNFPPQANVPDYV0EP8SFE":49},{"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":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":28,"repositoryHtmlUrl":29,"repositoryHomepageUrl":30,"ownerHtmlUrl":31,"ownerBlogUrl":32,"ownerDescription":33,"updatedAt":34,"install":35,"resources":48},"01M73DYNFPPQANVPDYV0EP8SFE","nuxt4-patterns",null,"Nuxt 4 app patterns for hydration safety, performance, route rules, lazy loading, and SSR-safe data fetching with useFetch and useAsyncData.","Horonomos-laps\u002FYana-AI","Horonomos-laps","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F355299122?v=4","01M76B3QPXE88ET2SQPDPVATZT"," Horonomos-laps","01M72ZQRJPCYPSSWT4D00VJR2A",13,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fnuxt4-patterns\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: nuxt4-patterns\ndescription: Nuxt 4 app patterns for hydration safety, performance, route rules, lazy loading, and SSR-safe data fetching with useFetch and useAsyncData.\norigin: ECC\n---\n\n# Nuxt 4 Patterns\n\nUse when building or debugging Nuxt 4 apps with SSR, hybrid rendering, route rules, or page-level data fetching.\n\n## When to Activate\n\n- Hydration mismatches between server HTML and client state\n- Route-level rendering decisions such as prerender, SWR, ISR, or client-only sections\n- Performance work around lazy loading, lazy hydration, or payload size\n- Page or component data fetching with `useFetch`, `useAsyncData`, or `$fetch`\n- Nuxt routing issues tied to route params, middleware, or SSR\u002Fclient differences\n\n## Hydration Safety\n\n- Keep the first render deterministic. Do not put `Date.now()`, `Math.random()`, browser-only APIs, or storage reads directly into SSR-rendered template state.\n- Move browser-only logic behind `onMounted()`, `import.meta.client`, `ClientOnly`, or a `.client.vue` component when the server cannot produce the same markup.\n- Use Nuxt's `useRoute()` composable, not the one from `vue-router`.\n- Do not use `route.fullPath` to drive SSR-rendered markup. URL fragments are client-only, which can create hydration mismatches.\n- Treat `ssr: false` as an escape hatch for truly browser-only areas, not a default fix for mismatches.\n\n## Data Fetching\n\n- Prefer `await useFetch()` for SSR-safe API reads in pages and components. It forwards server-fetched data into the Nuxt payload and avoids a second fetch on hydration.\n- Use `useAsyncData()` when the fetcher is not a simple `$fetch()` call, when you need a custom key, or when you are composing multiple async sources.\n- Give `useAsyncData()` a stable key for cache reuse and predictable refresh behavior.\n- Keep `useAsyncData()` handlers side-effect free. They can run during SSR and hydration.\n- Use `$fetch()` for user-triggered writes or client-only actions, not top-level page data that should be hydrated from SSR.\n- Use `lazy: true`, `useLazyFetch()`, or `useLazyAsyncData()` for non-critical data that should not block navigation. Handle `status === 'pending'` in the UI.\n- Use `server: false` only for data that is not needed for SEO or the first paint.\n- Trim payload size with `pick` and prefer shallower payloads when deep reactivity is unnecessary.\n\n```ts\nconst route = useRoute()\n\nconst { data: article, status, error, refresh } = await useAsyncData(\n  () => `article:${route.params.slug}`,\n  () => $fetch(`\u002Fapi\u002Farticles\u002F${route.params.slug}`),\n)\n\nconst { data: comments } = await useFetch(`\u002Fapi\u002Farticles\u002F${route.params.slug}\u002Fcomments`, {\n  lazy: true,\n  server: false,\n})\n```\n\n## Route Rules\n\nPrefer `routeRules` in `nuxt.config.ts` for rendering and caching strategy:\n\n```ts\nexport default defineNuxtConfig({\n  routeRules: {\n    '\u002F': { prerender: true },\n    '\u002Fproducts\u002F**': { swr: 3600 },\n    '\u002Fblog\u002F**': { isr: true },\n    '\u002Fadmin\u002F**': { ssr: false },\n    '\u002Fapi\u002F**': { cache: { maxAge: 60 * 60 } },\n  },\n})\n```\n\n- `prerender`: static HTML at build time\n- `swr`: serve cached content and revalidate in the background\n- `isr`: incremental static regeneration on supported platforms\n- `ssr: false`: client-rendered route\n- `cache` or `redirect`: Nitro-level response behavior\n\nPick route rules per route group, not globally. Marketing pages, catalogs, dashboards, and APIs usually need different strategies.\n\n## Lazy Loading and Performance\n\n- Nuxt already code-splits pages by route. Keep route boundaries meaningful before micro-optimizing component splits.\n- Use the `Lazy` prefix to dynamically import non-critical components.\n- Conditionally render lazy components with `v-if` so the chunk is not loaded until the UI actually needs it.\n- Use lazy hydration for below-the-fold or non-critical interactive UI.\n\n```vue\n\u003Ctemplate>\n  \u003CLazyRecommendations v-if=\"showRecommendations\" \u002F>\n  \u003CLazyProductGallery hydrate-on-visible \u002F>\n\u003C\u002Ftemplate>\n```\n\n- For custom strategies, use `defineLazyHydrationComponent()` with a visibility or idle strategy.\n- Nuxt lazy hydration works on single-file components. Passing new props to a lazily hydrated component will trigger hydration immediately.\n- Use `NuxtLink` for internal navigation so Nuxt can prefetch route components and generated payloads.\n\n## Review Checklist\n\n- First SSR render and hydrated client render produce the same markup\n- Page data uses `useFetch` or `useAsyncData`, not top-level `$fetch`\n- Non-critical data is lazy and has explicit loading UI\n- Route rules match the page's SEO and freshness requirements\n- Heavy interactive islands are lazy-loaded or lazily hydrated\n","# Nuxt 4 Patterns\n\nUse when building or debugging Nuxt 4 apps with SSR, hybrid rendering, route rules, or page-level data fetching.\n\n## When to Activate\n\n- Hydration mismatches between server HTML and client state\n- Route-level rendering decisions such as prerender, SWR, ISR, or client-only sections\n- Performance work around lazy loading, lazy hydration, or payload size\n- Page or component data fetching with `useFetch`, `useAsyncData`, or `$fetch`\n- Nuxt routing issues tied to route params, middleware, or SSR\u002Fclient differences\n\n## Hydration Safety\n\n- Keep the first render deterministic. Do not put `Date.now()`, `Math.random()`, browser-only APIs, or storage reads directly into SSR-rendered template state.\n- Move browser-only logic behind `onMounted()`, `import.meta.client`, `ClientOnly`, or a `.client.vue` component when the server cannot produce the same markup.\n- Use Nuxt's `useRoute()` composable, not the one from `vue-router`.\n- Do not use `route.fullPath` to drive SSR-rendered markup. URL fragments are client-only, which can create hydration mismatches.\n- Treat `ssr: false` as an escape hatch for truly browser-only areas, not a default fix for mismatches.\n\n## Data Fetching\n\n- Prefer `await useFetch()` for SSR-safe API reads in pages and components. It forwards server-fetched data into the Nuxt payload and avoids a second fetch on hydration.\n- Use `useAsyncData()` when the fetcher is not a simple `$fetch()` call, when you need a custom key, or when you are composing multiple async sources.\n- Give `useAsyncData()` a stable key for cache reuse and predictable refresh behavior.\n- Keep `useAsyncData()` handlers side-effect free. They can run during SSR and hydration.\n- Use `$fetch()` for user-triggered writes or client-only actions, not top-level page data that should be hydrated from SSR.\n- Use `lazy: true`, `useLazyFetch()`, or `useLazyAsyncData()` for non-critical data that should not block navigation. Handle `status === 'pending'` in the UI.\n- Use `server: false` only for data that is not needed for SEO or the first paint.\n- Trim payload size with `pick` and prefer shallower payloads when deep reactivity is unnecessary.\n\n```ts\nconst route = useRoute()\n\nconst { data: article, status, error, refresh } = await useAsyncData(\n  () => `article:${route.params.slug}`,\n  () => $fetch(`\u002Fapi\u002Farticles\u002F${route.params.slug}`),\n)\n\nconst { data: comments } = await useFetch(`\u002Fapi\u002Farticles\u002F${route.params.slug}\u002Fcomments`, {\n  lazy: true,\n  server: false,\n})\n```\n\n## Route Rules\n\nPrefer `routeRules` in `nuxt.config.ts` for rendering and caching strategy:\n\n```ts\nexport default defineNuxtConfig({\n  routeRules: {\n    '\u002F': { prerender: true },\n    '\u002Fproducts\u002F**': { swr: 3600 },\n    '\u002Fblog\u002F**': { isr: true },\n    '\u002Fadmin\u002F**': { ssr: false },\n    '\u002Fapi\u002F**': { cache: { maxAge: 60 * 60 } },\n  },\n})\n```\n\n- `prerender`: static HTML at build time\n- `swr`: serve cached content and revalidate in the background\n- `isr`: incremental static regeneration on supported platforms\n- `ssr: false`: client-rendered route\n- `cache` or `redirect`: Nitro-level response behavior\n\nPick route rules per route group, not globally. Marketing pages, catalogs, dashboards, and APIs usually need different strategies.\n\n## Lazy Loading and Performance\n\n- Nuxt already code-splits pages by route. Keep route boundaries meaningful before micro-optimizing component splits.\n- Use the `Lazy` prefix to dynamically import non-critical components.\n- Conditionally render lazy components with `v-if` so the chunk is not loaded until the UI actually needs it.\n- Use lazy hydration for below-the-fold or non-critical interactive UI.\n\n```vue\n\u003Ctemplate>\n  \u003CLazyRecommendations v-if=\"showRecommendations\" \u002F>\n  \u003CLazyProductGallery hydrate-on-visible \u002F>\n\u003C\u002Ftemplate>\n```\n\n- For custom strategies, use `defineLazyHydrationComponent()` with a visibility or idle strategy.\n- Nuxt lazy hydration works on single-file components. Passing new props to a lazily hydrated component will trigger hydration immediately.\n- Use `NuxtLink` for internal navigation so Nuxt can prefetch route components and generated payloads.\n\n## Review Checklist\n\n- First SSR render and hydrated client render produce the same markup\n- Page data uses `useFetch` or `useAsyncData`, not top-level `$fetch`\n- Non-critical data is lazy and has explicit loading UI\n- Route rules match the page's SEO and freshness requirements\n- Heavy interactive islands are lazy-loaded or lazily hydrated\n",{"name":5,"origin":24,"description":7},"ECC","main","481dcd7dd2e288b9d627a2bd017db70e64e6c6fa","core\u002Fskills\u002Fnuxt4-patterns",2,"https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI","https:\u002F\u002Fyana.vutam.link\u002F","https:\u002F\u002Fgithub.com\u002FHoronomos-laps","https:\u002F\u002Fyana.vutam.link","An open-source governed runtime & execution environment for multi-agent AI systems.","2026-11-14 13:24:09",{"source":8,"skillName":5,"commands":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add Horonomos-laps\u002FYana-AI --skill nuxt4-patterns",{"tool":41,"command":42},"bunx","bunx skills add Horonomos-laps\u002FYana-AI --skill nuxt4-patterns",{"tool":44,"command":45},"pnpm","pnpm dlx skills add Horonomos-laps\u002FYana-AI --skill nuxt4-patterns","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fnuxt4-patterns\u002FSKILL.md",true,[],[50,58,65,73,81,89],{"skillNo":51,"name":52,"nameZh":6,"description":53,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":54,"licenseFileUrl":6,"sourceHtmlUrl":55,"categories":56,"keywords":57,"publishedAt":19},"01M735GKET5YVYKAY62W2P5YXB","openai--sentry--sentry","Use when the user asks to inspect Sentry issues or events, summarize recent production errors, or pull basic Sentry health data via the Sentry API; perform read-only queries with the bundled script and require `SENTRY_AUTH_TOKEN`.","MIT","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fopenai--sentry--sentry\u002FSKILL.md",[],[],{"skillNo":59,"name":60,"nameZh":6,"description":61,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":64,"publishedAt":19},"01M73DCAP83T17HY7SMGK7MGFE","ito-basket-compare","Compare Itô prediction-market baskets against a user's knowledge base, portfolio notes, financial context, watchlist, or research thesis. Use for read-only basket comparison and gap analysis without investment advice or live trading.","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fito-basket-compare\u002FSKILL.md",[],[],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":69,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":19},"01M734CYEMZFDR3KH6SW0JP8TD","implementing-network-traffic-baselining","Build network traffic baselines from NetFlow\u002FIPFIX data using Python pandas for statistical analysis, z-score anomaly detection, and hourly\u002Fdaily traffic pattern profiling","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-network-traffic-baselining\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-network-traffic-baselining\u002FSKILL.md",[],[],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":77,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":19},"01M73ASZ6NJRJM44Z2P84NGQ3Q","detecting-evasion-techniques-in-endpoint-logs","Detects defense evasion techniques used by adversaries in endpoint logs including log tampering, timestomping, process injection, and security tool disabling. Use when investigating suspicious endpoint behavior, building detection rules for evasion tactics, or conducting threat hunting for stealthy adversary activity. Activates for requests involving evasion detection, defense evasion analysis, log tampering detection, or MITRE ATT&CK TA0005.","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fdetecting-evasion-techniques-in-endpoint-logs\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fdetecting-evasion-techniques-in-endpoint-logs\u002FSKILL.md",[],[],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":85,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":19},"01M734AFNXD06Z78QRK0VKGT7Q","implementing-microsegmentation-with-guardicore","Implementing microsegmentation using Akamai Guardicore Segmentation to map application dependencies, create granular network policies, visualize east-west traffic flows, and enforce least-privilege communication between workloads across data centers and cloud.","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-microsegmentation-with-guardicore\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-microsegmentation-with-guardicore\u002FSKILL.md",[],[],{"skillNo":90,"name":91,"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":92,"categories":93,"keywords":94,"publishedAt":19},"01M736TK27QMCXK0DVCH25SJN5","ramdisk-tmpfs-patterns","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Framdisk-tmpfs-patterns\u002FSKILL.md",[],[]]