clerk-nuxt-patterns — скилл для Claude Code: что делает и как ставить
Скилл подсказывает агенту паттерны авторизации @clerk/nuxt для Nuxt 3. Пригодится при настройке серверных роутов Nitro, SSR-гидратации и защите страниц.
npx skills add clerk/skills --skill clerk-nuxt-patterns -a claude-codeЧто делает clerk-nuxt-patterns
Скилл даёт готовые паттерны интеграции @clerk/nuxt в проекты на Nuxt 3. Он объясняет модели работы с definePageMeta({ middleware: 'auth' }), реактивными композаблами useAuth и серверным контекстом Nitro. Агент перестаёт путать клиентские вызовы с серверными API.
Внутри собраны правила для серверных роутов через event.context.auth и серверный клиент @clerk/nuxt/server. Отдельное внимание уделено предотвращению hydration mismatch при серверном рендеринге. Важная деталь: Nuxt требует префикс NUXT_PUBLIC_ для публичного ключа, иначе переменные окружения просто не подтянутся в рантайме.
Какие задачи решает
- закрыть маршруты Nuxt 3 встроенным middleware auth
- настроить аутентификацию в серверных обработчиках Nitro через event.context.auth
- устранить ошибки гидратации SSR при рендеринге профиля пользователя
- разграничить роли организации через useAuth
Примеры запросов агенту
- Покажи, как закрыть страницу dashboard через middleware auth в Nuxt 3 с помощью Clerk
- Как получить userId и данные сессии внутри Nitro server route в Clerk?
- Настрой проверку роли org:admin в компоненте с помощью useAuth
Как установить clerk-nuxt-patterns
1Через Skills CLI (Vercel)
npx skills add clerk/skills --skill clerk-nuxt-patterns -a claude-code2Вручную: положить файлы
~/.claude/skills/clerk-nuxt-patterns/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/clerk-nuxt-patterns/
1Через Skills CLI (Vercel)
npx skills add clerk/skills --skill clerk-nuxt-patterns -a codex2Вручную: положить файлы
.agents/skills/clerk-nuxt-patterns/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add clerk/skills --skill clerk-nuxt-patterns -a cursor2Вручную: положить файлы
.cursor/skills/clerk-nuxt-patterns/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install clerk/skills clerk-nuxt-patterns2Вручную: положить файлы
.github/skills/clerk-nuxt-patterns/SKILL.md1Через Skills CLI (Vercel)
npx skills add clerk/skills --skill clerk-nuxt-patterns -a gemini-cli2Командой платформы
gemini skills install https://github.com/clerk/skills --path skills/clerk-nuxt-patternsВручную: положить файлы
.devin/skills/clerk-nuxt-patterns/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add clerk/skills --skill clerk-nuxt-patterns -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о clerk-nuxt-patterns
Как установить clerk-nuxt-patterns в Claude Code?
Выполните команду npx skills add clerk/skills --skill clerk-nuxt-patterns -a claude-code.
Что делает clerk-nuxt-patterns?
Скилл содержит паттерны и правила интеграции @clerk/nuxt, включая настройку middleware, вызовы useAuth и получение сессии в Nitro.
Почему useAuth возвращает undefined на сервере?
Композабл useAuth работает только на клиенте. В серверных роутах Nitro данные авторизации нужно брать из event.context.auth.
Исходный текст
SKILL.md · MIT
---
name: clerk-nuxt-patterns
description: 'Nuxt 3 auth patterns with @clerk/nuxt - middleware, composables, server
API routes, SSR. Triggers on: Nuxt auth, useAuth composable, clerkMiddleware Nuxt,
server API Clerk, Nuxt route protection.'
license: MIT
allowed-tools: WebFetch
metadata:
author: clerk
version: 1.0.0
---
# Nuxt Patterns
## What Do You Need?
| Task | Reference |
|------|-----------|
| Protect routes with middleware | references/nuxt-middleware.md |
| Auth in server API routes (Nitro) | references/server-api-routes.md |
| useAuth / useUser in components | references/composables.md |
| SSR-safe auth patterns | references/ssr-auth.md |
## References
| Reference | Description |
|-----------|-------------|
| `references/nuxt-middleware.md` | Route protection, clerkMiddleware() |
| `references/server-api-routes.md` | Nitro server route auth |
| `references/composables.md` | useAuth, useUser, useClerk |
| `references/ssr-auth.md` | SSR hydration, server vs client |
## Setup
```
npm install @clerk/nuxt
```
`.env`:
```
NUXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_...
NUXT_CLERK_SECRET_KEY=sk_...
```
`nuxt.config.ts`:
```typescript
export default defineNuxtConfig({
modules: ['@clerk/nuxt'],
})
```
This single line auto-configures middleware, plugins, and component auto-imports.
## Mental Model
`@clerk/nuxt` auto-imports all Clerk components and composables — no explicit imports needed in `<script setup>`.
- **Composables** (`useAuth`, `useUser`) — client-side reactive, inside `<script setup>`
- **Server routes** (`clerkClient`) — Nitro server routes, `event.context.auth`
- **Middleware** (`clerkMiddleware`) — auto-registered, use `auth().protect()` to lock routes
## Minimal Pattern
```vue
<!-- pages/dashboard.vue -->
<script setup lang="ts">
definePageMeta({ middleware: 'auth' })
const { userId } = useAuth()
</script>
<template>
<Show when="signed-in">
<p>Hello {{ userId }}</p>
</Show>
</template>
```
> `definePageMeta({ middleware: 'auth' })` uses the built-in auth middleware from `@clerk/nuxt`.
## Common Pitfalls
| Symptom | Cause | Fix |
|---------|-------|-----|
| Composables return `undefined` on server | useAuth is client-only | Use `event.context.auth` in server routes |
| Route not protected | Missing `middleware: 'auth'` meta | Add `definePageMeta({ middleware: 'auth' })` |
| `clerkClient` not available | Wrong import path | Import from `@clerk/nuxt/server` |
| Hydration mismatch | Rendering auth state before mounted | Wrap in `<ClientOnly>` or check `isLoaded` |
| Env vars not picked up | Wrong prefix | Nuxt requires `NUXT_PUBLIC_` for public, `NUXT_` for server |
## Org-Aware Pattern
```vue
<script setup lang="ts">
const { orgId, orgRole } = useAuth()
</script>
<template>
<div v-if="orgId">
<p>Org: {{ orgId }}</p>
<p v-if="orgRole === 'org:admin'">Admin panel</p>
</div>
<div v-else>
<OrganizationSwitcher />
</div>
</template>
```
## See Also
- `clerk-setup` - Initial Clerk install
- `clerk-custom-ui` - Custom flows & appearance
- `clerk-orgs` - B2B organizations
## Docs
[Nuxt SDK](https://clerk.com/docs/nuxt/getting-started/quickstart)
© clerk · MIT · clerk/skills