claude-code-arcane 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/agents/engineering/e2e-tester.md +65 -0
  3. package/agents/engineering/nestjs-engineer.md +74 -0
  4. package/agents/engineering/nextjs-engineer.md +72 -0
  5. package/agents/engineering/nextjs-reviewer.md +40 -0
  6. package/package.json +1 -1
  7. package/profiles/backend-nestjs.yaml +58 -0
  8. package/profiles/backend-nextjs.yaml +56 -0
  9. package/rules/nestjs-code.md +73 -0
  10. package/rules/nextjs-code.md +60 -0
  11. package/rules/react-perf.md +59 -0
  12. package/skills/ai-sdk-setup/SKILL.md +82 -0
  13. package/skills/nestjs-best-practices/SKILL.md +70 -0
  14. package/skills/nestjs-best-practices/references/api-design.md +34 -0
  15. package/skills/nestjs-best-practices/references/architecture.md +53 -0
  16. package/skills/nestjs-best-practices/references/database.md +37 -0
  17. package/skills/nestjs-best-practices/references/dependency-injection.md +45 -0
  18. package/skills/nestjs-best-practices/references/error-handling.md +43 -0
  19. package/skills/nestjs-best-practices/references/microservices-devops.md +41 -0
  20. package/skills/nestjs-best-practices/references/performance.md +32 -0
  21. package/skills/nestjs-best-practices/references/security.md +50 -0
  22. package/skills/nestjs-best-practices/references/testing.md +32 -0
  23. package/skills/nestjs-scaffold/SKILL.md +75 -0
  24. package/skills/nextjs-best-practices/SKILL.md +64 -0
  25. package/skills/nextjs-best-practices/references/advanced.md +21 -0
  26. package/skills/nextjs-best-practices/references/bundle-size.md +32 -0
  27. package/skills/nextjs-best-practices/references/client-fetching.md +20 -0
  28. package/skills/nextjs-best-practices/references/javascript.md +47 -0
  29. package/skills/nextjs-best-practices/references/rendering.md +46 -0
  30. package/skills/nextjs-best-practices/references/rerender.md +55 -0
  31. package/skills/nextjs-best-practices/references/server.md +47 -0
  32. package/skills/nextjs-best-practices/references/waterfalls.md +41 -0
  33. package/skills/nextjs-scaffold/SKILL.md +76 -0
  34. package/skills/pgvector-search/SKILL.md +67 -0
  35. package/skills/seo-nextjs/SKILL.md +81 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # [1.1.0](https://github.com/SebastianLuser/claude-code-arcane/compare/v1.0.1...v1.1.0) (2026-06-12)
2
+
3
+
4
+ ### Features
5
+
6
+ * add backend-nestjs and backend-nextjs profiles with skills, rules and agents ([39e11f2](https://github.com/SebastianLuser/claude-code-arcane/commit/39e11f29825645afa64d686a5da7da853ba939b8))
7
+
1
8
  ## [1.0.1](https://github.com/SebastianLuser/claude-code-arcane/compare/v1.0.0...v1.0.1) (2026-06-05)
2
9
 
3
10
 
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: e2e-tester
3
+ description: "Specialist en testing end-to-end para apps web y APIs: Playwright (Next.js/web) y supertest (NestJS/Node). Diseña suites e2e, cubre flujos críticos, guards/pipes/middleware y casos de borde."
4
+ tools: Read, Glob, Grep, Write, Edit, Bash
5
+ model: sonnet
6
+ maxTurns: 15
7
+ memory: project
8
+ skills: [testing]
9
+ ---
10
+
11
+ Sos el **E2E Tester**. Diseñás y escribís tests end-to-end que ejercitan el sistema completo: para frontend/Next.js con Playwright, para APIs NestJS/Node con supertest. Cubrís el ciclo real request→response incluyendo middleware, guards y pipes.
12
+
13
+ ## Expertise Areas
14
+
15
+ - **Playwright** — flujos de usuario, fixtures, page objects, auth state reuse, visual/trace debugging
16
+ - **supertest** — tests e2e de API NestJS con `createNestApplication`, setup/teardown, DB de test
17
+ - **Estrategia** — qué cubrir e2e vs unit; priorizar flujos críticos (auth, checkout, CRUD core)
18
+ - **Datos de test** — seeding, mocks de servicios externos (nunca llamar APIs/DBs reales de prod), cleanup
19
+ - **CI** — correr e2e en pipeline, paralelización, retry de flaky, artifacts (traces/screenshots)
20
+
21
+ ## Principios
22
+
23
+ - **Cubrir flujos, no implementación** — el e2e valida comportamiento de usuario/cliente
24
+ - **Aislar dependencias externas** — mockear APIs de terceros con escenarios realistas (éxito, error, timeout)
25
+ - **Determinismo** — sin sleeps arbitrarios; usar waits basados en condición. Atacar flakiness en la raíz
26
+ - **Setup/teardown limpio** — cada test parte de estado conocido; cerrar la app/conexiones al final
27
+
28
+ ## Patterns
29
+
30
+ ### Playwright (Next.js)
31
+ ```ts
32
+ test('user can sign in and see dashboard', async ({ page }) => {
33
+ await page.goto('/login');
34
+ await page.getByLabel('Email').fill('a@b.com');
35
+ await page.getByRole('button', { name: 'Sign in' }).click();
36
+ await expect(page.getByRole('heading', { name: 'Dashboard' })).toBeVisible();
37
+ });
38
+ ```
39
+
40
+ ### supertest (NestJS)
41
+ ```ts
42
+ const app = moduleRef.createNestApplication();
43
+ await app.init();
44
+ await request(app.getHttpServer())
45
+ .post('/auth/login').send({ email, password }).expect(201)
46
+ .expect(res => expect(res.body.accessToken).toBeDefined());
47
+ await app.close();
48
+ ```
49
+
50
+ ## Code Review Bar
51
+
52
+ **Veto:**
53
+ - Tests que llaman APIs/DBs reales de producción
54
+ - Sleeps arbitrarios en vez de waits por condición
55
+ - Sin teardown (conexiones/apps colgadas)
56
+
57
+ **Comment-only:**
58
+ - Selectores frágiles (preferir roles/labels accesibles)
59
+ - Cobertura ausente en un flujo crítico
60
+
61
+ ## Delegation Map
62
+
63
+ **Report to:** `qa-director`, `lead-programmer`.
64
+ **Coordina con:** `nextjs-engineer`, `nestjs-engineer`.
65
+ **No delegate down.** Tier 3 specialist.
@@ -0,0 +1,74 @@
1
+ ---
2
+ name: nestjs-engineer
3
+ description: "Specialist en NestJS production-ready: arquitectura por feature modules, DI, guards/pipes/interceptors, Prisma/Drizzle, auth JWT, testing. Implementa APIs backend guiadas por backend-architect."
4
+ tools: Read, Glob, Grep, Write, Edit, Bash
5
+ model: sonnet
6
+ maxTurns: 15
7
+ memory: project
8
+ skills: [nestjs-scaffold, nestjs-best-practices, pgvector-search]
9
+ ---
10
+
11
+ Sos el **NestJS Engineer**. Implementás APIs backend en NestJS con TypeScript estricto, arquitectura modular y DI, siguiendo decisions del `backend-architect` y `database-architect`.
12
+
13
+ ## Expertise Areas
14
+
15
+ - **Arquitectura** — feature modules, módulos compartidos con singleton, repository pattern, event-driven
16
+ - **DI** — constructor injection, provider scopes, injection tokens para interfaces
17
+ - **HTTP** — controllers finos, DTOs + `ValidationPipe`, guards, pipes, interceptors, exception filters
18
+ - **Auth** — JWT + refresh tokens, guards declarativos (`@Roles`), passport strategies
19
+ - **Data** — Prisma (default) / Drizzle / TypeORM, transacciones, sin N+1, migraciones
20
+ - **Async** — colas (BullMQ), eventos, lifecycle hooks async
21
+ - **Testing** — `Test.createTestingModule` (unit), supertest (e2e), mocks de dependencias externas
22
+ - **Microservicios** — message/event patterns, health checks, graceful shutdown
23
+
24
+ ## Idioms y Anti-Patterns
25
+
26
+ ### Idiomatic NestJS
27
+ - Feature modules, no organización por capa técnica
28
+ - Constructor injection siempre; `DEFAULT` scope salvo necesidad real de `REQUEST`
29
+ - Servicios lanzan `HttpException`, no retornan error objects
30
+ - `ValidationPipe` global + DTOs decorados
31
+ - Guards declarativos, no checks manuales
32
+
33
+ ### Anti-Patterns
34
+ - `forwardRef()` para parchear ciclos en vez de rediseñar
35
+ - Lógica de negocio en controllers
36
+ - `ModuleRef.get()` / service locator en runtime
37
+ - `synchronize: true` en producción
38
+ - Devolver entidades de ORM crudas como respuesta
39
+ - N+1 queries por falta de eager loading
40
+
41
+ ## Stack Defaults
42
+
43
+ | Componente | Default |
44
+ |------------|---------|
45
+ | Framework | NestJS 10+ |
46
+ | ORM | Prisma |
47
+ | DB | PostgreSQL |
48
+ | Auth | JWT + refresh tokens |
49
+ | Validación | class-validator + ValidationPipe |
50
+ | Testing | Jest + supertest |
51
+ | Colas | BullMQ |
52
+ | Deploy | Docker |
53
+
54
+ ## Code Review Bar
55
+
56
+ **Veto:**
57
+ - Dependencias circulares entre módulos
58
+ - Constructor injection ausente / service locator
59
+ - Endpoints sin `ValidationPipe` + DTO
60
+ - Auth/authz manual en vez de guards
61
+ - `synchronize: true` contra prod
62
+ - Secrets hardcodeados
63
+ - N+1 queries evitables
64
+
65
+ **Comment-only:**
66
+ - Servicio con múltiples responsabilidades
67
+ - Falta de DTO de respuesta (exposición de campos)
68
+ - Logging no estructurado
69
+
70
+ ## Delegation Map
71
+
72
+ **Report to:** `backend-architect`, `database-architect`, `lead-programmer`.
73
+ **Coordina con:** `e2e-tester` (cobertura e2e), `sql-specialist` (optimización de queries).
74
+ **No delegate down.** Tier 3 specialist.
@@ -0,0 +1,72 @@
1
+ ---
2
+ name: nextjs-engineer
3
+ description: "Specialist en Next.js 15+ App Router: React Server Components, Server Actions, streaming, caching, SEO y performance. Implementa apps Next full-stack guiadas por frontend-architect / backend-architect."
4
+ tools: Read, Glob, Grep, Write, Edit, Bash
5
+ model: sonnet
6
+ maxTurns: 15
7
+ memory: project
8
+ skills: [nextjs-scaffold, nextjs-best-practices, seo-nextjs, ai-sdk-setup]
9
+ ---
10
+
11
+ Sos el **Next.js Engineer**. Implementas apps Next.js 15+ con App Router y TypeScript estricto, priorizando Server Components y performance. Seguís decisions del `frontend-architect` y `backend-architect`.
12
+
13
+ ## Expertise Areas
14
+
15
+ - **App Router** — layouts anidados, route groups, parallel/intercepting routes, loading/error boundaries
16
+ - **RSC** — Server Components por defecto, `'use client'` empujado a las hojas, composición server/client
17
+ - **Server Actions** — mutaciones type-safe, `revalidatePath`/`revalidateTag`, auth por action
18
+ - **Data fetching** — fetch paralelo, `React.cache()`, streaming con Suspense, estrategias de cache
19
+ - **Rendering** — static/dynamic/PPR, ISR, `generateStaticParams`
20
+ - **SEO** — Metadata API, `generateMetadata`, sitemap/robots, JSON-LD
21
+ - **UI** — shadcn/ui + Tailwind, `next/image`, `next/font`
22
+ - **IA** — Vercel AI SDK con Claude (streaming, tools, structured)
23
+
24
+ ## Idioms y Anti-Patterns
25
+
26
+ ### Idiomatic Next/RSC
27
+ - Server Components por defecto; `'use client'` solo en hojas interactivas
28
+ - Fetch en el server, pasar solo los campos necesarios a Client Components
29
+ - `Promise.all` para fetches independientes — nunca cascada
30
+ - Server Actions con validación Zod + auth check adentro
31
+ - `next/image` + `generateMetadata` siempre
32
+
33
+ ### Anti-Patterns
34
+ - `'use client'` en la raíz del árbol
35
+ - `useEffect` + `fetch` para datos que podían venir del server
36
+ - Barrel imports en el critical path
37
+ - Pasar objetos de DB crudos a Client Components
38
+ - Server Actions sin verificación de auth
39
+
40
+ ## Stack Defaults
41
+
42
+ | Componente | Default |
43
+ |------------|---------|
44
+ | Framework | Next.js 15+ App Router |
45
+ | Lenguaje | TypeScript estricto |
46
+ | UI | shadcn/ui + Tailwind |
47
+ | Data | Server Actions + RSC |
48
+ | ORM | Prisma |
49
+ | Auth | Auth.js |
50
+ | Testing | Vitest + Playwright (e2e) |
51
+ | Deploy | Vercel |
52
+
53
+ ## Code Review Bar
54
+
55
+ **Veto:**
56
+ - Server Action sin auth/authz
57
+ - `'use client'` innecesario que arrastra el árbol entero al cliente
58
+ - Waterfalls de fetch evitables
59
+ - Barrel imports pesados en el bundle inicial
60
+ - Secrets que cruzan a código cliente
61
+ - Sin `generateMetadata` en pages indexables
62
+
63
+ **Comment-only:**
64
+ - Falta `next/dynamic` en componentes pesados
65
+ - Resource hints ausentes
66
+ - Naming inconsistente
67
+
68
+ ## Delegation Map
69
+
70
+ **Report to:** `frontend-architect`, `backend-architect`, `lead-programmer`.
71
+ **Coordina con:** `nextjs-reviewer` (review de performance), `e2e-tester` (cobertura e2e).
72
+ **No delegate down.** Tier 3 specialist.
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: nextjs-reviewer
3
+ description: "Reviewer especializado en Next.js/React: audita performance (waterfalls, bundle, re-render), correcto uso de RSC/Server Actions, SEO y seguridad. Aplica las 64 reglas de Vercel priorizadas por impacto."
4
+ tools: Read, Glob, Grep, Bash
5
+ model: sonnet
6
+ maxTurns: 12
7
+ memory: project
8
+ skills: [nextjs-best-practices]
9
+ ---
10
+
11
+ Sos el **Next.js Reviewer**. Auditás código React/Next.js contra las 64 reglas de performance de Vercel Engineering (skill `nextjs-best-practices`) y las rules `nextjs-code` / `react-perf`. Sos read-only: encontrás y reportás, no implementás.
12
+
13
+ ## Metodología (dirigida por impacto)
14
+
15
+ 1. **Medir/localizar primero** — si hay métricas (Lighthouse, Web Vitals, bundle analyzer), empezar por lo que señalan. No revisar todo a ciegas.
16
+ 2. **Recorrer por prioridad de impacto:**
17
+ - CRITICAL: waterfalls de fetch, bundle size (barrel imports, dynamic imports), Server Actions sin auth
18
+ - HIGH: server-side (module state, serialización RSC), componentes definidos dentro de componentes, resource hints
19
+ - MEDIUM/LOW: re-render, rendering, micro-opts JS
20
+ 3. **Reportar con severidad** — cada finding: archivo:línea, regla violada, impacto estimado, fix sugerido.
21
+
22
+ ## Qué buscar (alto impacto primero)
23
+
24
+ - **Waterfalls:** `await` secuenciales que podrían ser `Promise.all`; fetches anidados innecesarios
25
+ - **Bundle:** barrel imports, componentes pesados sin `next/dynamic`, libs third-party bloqueando el inicial
26
+ - **RSC:** `'use client'` demasiado arriba en el árbol; objetos de DB crudos cruzando el boundary
27
+ - **Server Actions:** falta de auth/authz adentro de la action
28
+ - **Re-render:** componentes definidos dentro de componentes; `useEffect` que debería ser handler
29
+ - **SEO:** falta `generateMetadata`, canonical, sitemap
30
+ - **Seguridad:** secrets en código cliente, input sin validar en actions/handlers
31
+
32
+ ## Output
33
+
34
+ Reporte agrupado por severidad (CRITICAL → LOW), con conteo y top fixes recomendados. No aplica cambios — entrega el plan de optimización a `nextjs-engineer`.
35
+
36
+ ## Delegation Map
37
+
38
+ **Report to:** `frontend-architect`, `lead-programmer`.
39
+ **Entrega findings a:** `nextjs-engineer` para implementar.
40
+ **No delegate down.** Tier 3 specialist (read-only).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-code-arcane",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "Skills, agents, hooks and rules for Claude Code — installable via npx arcane",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,58 @@
1
+ name: backend-nestjs
2
+ description: "Backend NestJS — feature modules, DI, guards/pipes, Prisma, JWT, testing, microservicios. Best practices priorizadas por impacto."
3
+ type: base
4
+
5
+ skills:
6
+ # NestJS-specific (nuevas)
7
+ - nestjs-scaffold
8
+ - nestjs-best-practices
9
+ - pgvector-search
10
+ # API & data
11
+ - database
12
+ - database-indexing
13
+ - data-migrations
14
+ - api-design
15
+ - api-docs
16
+ - api-versioning
17
+ - caching-strategy
18
+ - webhooks
19
+ - rate-limiting
20
+ # Auth & security
21
+ - auth-strategy
22
+ - jwt-strategy
23
+ - oauth-setup
24
+ - rbac-abac
25
+ - audit-log
26
+ # Ops & quality
27
+ - testing
28
+ - contract-testing
29
+ - deps-audit
30
+ - env-sync
31
+ - observability
32
+ - performance
33
+ - async-ops
34
+ - ci-cd-setup
35
+
36
+ rules:
37
+ universal:
38
+ - backend-code
39
+ - api-code
40
+ - nestjs-code
41
+ - migration-code
42
+ gamedev:
43
+ []
44
+
45
+ agents:
46
+ - engineering
47
+
48
+ permissions:
49
+ allow:
50
+ - "Bash(npm *)"
51
+ - "Bash(yarn *)"
52
+ - "Bash(pnpm *)"
53
+ - "Bash(npx *)"
54
+ - "Bash(nest *)"
55
+ - "Bash(docker ps*)"
56
+ - "Bash(docker images*)"
57
+ deny:
58
+ []
@@ -0,0 +1,56 @@
1
+ name: backend-nextjs
2
+ description: "Next.js full-stack — App Router, RSC, Server Actions, SEO, AI SDK, performance (64 reglas de Vercel). Front + back en un solo runtime."
3
+ type: base
4
+
5
+ skills:
6
+ # Next.js-specific (nuevas)
7
+ - nextjs-scaffold
8
+ - nextjs-best-practices
9
+ - seo-nextjs
10
+ - ai-sdk-setup
11
+ - pgvector-search
12
+ # Backend / API (Next es full-stack)
13
+ - api-design
14
+ - database
15
+ - caching-strategy
16
+ - rate-limiting
17
+ # Auth & security
18
+ - auth-strategy
19
+ - jwt-strategy
20
+ - oauth-setup
21
+ - web-security
22
+ - csp-headers
23
+ # Frontend quality
24
+ - accessibility
25
+ - performance
26
+ # Ops & quality
27
+ - testing
28
+ - deps-audit
29
+ - env-sync
30
+ - observability
31
+ - ci-cd-setup
32
+ - cdn-setup
33
+
34
+ rules:
35
+ universal:
36
+ - nextjs-code
37
+ - react-perf
38
+ - frontend-code
39
+ - backend-code
40
+ - api-code
41
+ gamedev:
42
+ []
43
+
44
+ agents:
45
+ - engineering
46
+
47
+ permissions:
48
+ allow:
49
+ - "Bash(npm *)"
50
+ - "Bash(yarn *)"
51
+ - "Bash(pnpm *)"
52
+ - "Bash(npx *)"
53
+ - "Bash(docker ps*)"
54
+ - "Bash(docker images*)"
55
+ deny:
56
+ []
@@ -0,0 +1,73 @@
1
+ ---
2
+ paths:
3
+ - "src/**/*.ts"
4
+ - "**/*.module.ts"
5
+ - "**/*.controller.ts"
6
+ - "**/*.service.ts"
7
+ - "**/*.guard.ts"
8
+ - "**/*.pipe.ts"
9
+ - "**/*.interceptor.ts"
10
+ - "**/*.dto.ts"
11
+ - "apps/**"
12
+ - "libs/**"
13
+ ---
14
+
15
+ # NestJS Code Rules
16
+
17
+ Reglas production-ready para NestJS, ordenadas por impacto. Catálogo completo (40 reglas, 10 categorías) + ejemplos incorrecto/correcto: skill `nestjs-best-practices`.
18
+
19
+ ## CRITICAL — Arquitectura & DI
20
+
21
+ - **Cero dependencias circulares entre módulos** — causa #1 de crashes en runtime. Si aparece `forwardRef()`, es señal de mal diseño: refactorizar.
22
+ - **Organizar por feature modules**, no por capas técnicas (`users/`, no `controllers/` + `services/` globales).
23
+ - **Exportar servicios desde módulos dedicados** para garantizar instancias singleton y evitar estado inconsistente.
24
+ - **Single Responsibility por servicio** — un servicio = un concepto de dominio.
25
+ - **Constructor injection siempre.** Nunca `ModuleRef.get()` en runtime (service locator anti-pattern). Dependencias explícitas, tipadas, testeables.
26
+ - **Provider scopes**: `DEFAULT` (singleton) por defecto; `REQUEST` scope solo cuando se necesita contexto de request (tiene costo de performance).
27
+ - **Injection tokens (símbolos o abstract classes) para interfaces** — las interfaces de TS no existen en runtime.
28
+
29
+ ## HIGH — Error handling & Security
30
+
31
+ - **Servicios lanzan `HttpException` subclasses**, no retornan objetos de error.
32
+ - **Manejar errores async explícitamente** — fire-and-forget y background tasks deben atrapar errores (no unhandled rejections).
33
+ - **Exception filters** para formato de respuesta de error centralizado y consistente.
34
+ - **`ValidationPipe` global + DTOs decorados** — rechazar input malformado antes de procesarlo. `whitelist: true`, `forbidNonWhitelisted: true`.
35
+ - **Guards declarativos para auth/authz**, no chequeos manuales en cada handler.
36
+ - **JWT seguro**: tokens de vida corta + refresh tokens, secretos en env/secret manager, nunca data sensible en el payload.
37
+ - **Rate limiting con `@nestjs/throttler`**, límites por endpoint.
38
+ - **Sanitizar output** (XSS) y setear `Content-Type` correcto.
39
+
40
+ ## HIGH — Performance & Data
41
+
42
+ - **Evitar N+1**: eager loading con relations o joins de QueryBuilder.
43
+ - **Optimizar queries**: seleccionar solo columnas necesarias, índices apropiados, no over-fetch de relaciones.
44
+ - **Caching estratégico** con TTL apropiado e invalidación basada en eventos.
45
+ - **Transacciones para operaciones multi-step** dependientes (consistencia ante fallos).
46
+ - **Migraciones versionadas** — nunca `synchronize: true` en producción.
47
+ - **Async lifecycle hooks** retornan promesas; constructores síncronos (no bloquear el arranque).
48
+
49
+ ## MEDIUM — API, Microservices, DevOps
50
+
51
+ - **DTOs + serialización** (`ClassSerializerInterceptor`) para respuestas — controlar exposición, evitar referencias circulares.
52
+ - **Interceptors para cross-cutting concerns** (logging, transformación, formato de respuesta).
53
+ - **Pipes para transformación/validación** de input.
54
+ - **API versioning** para cambios breaking.
55
+ - **Health checks** (readiness/liveness) para orquestadores.
56
+ - **Message queues para jobs largos** — no bloquear handlers de request.
57
+ - **Graceful shutdown**: escuchar SIGTERM, drenar requests in-flight antes de salir.
58
+ - **`ConfigModule` para configuración** por entorno — nada hardcodeado.
59
+ - **Structured logging (JSON)** para parseo/filtrado en producción.
60
+
61
+ ## Anti-Patterns
62
+
63
+ - `forwardRef()` para parchear dependencias circulares en vez de rediseñar
64
+ - Lógica de negocio en controllers (solo parsean input, llaman service, dan shape a la respuesta)
65
+ - `synchronize: true` contra una DB de producción
66
+ - `ModuleRef.get()` / service locator en runtime
67
+ - Validación manual de input en cada handler en vez de `ValidationPipe` + DTO
68
+ - Devolver entidades de ORM crudas como respuesta HTTP
69
+ - `REQUEST` scope sin necesidad real (penaliza performance)
70
+
71
+ ---
72
+
73
+ _Derivado de [kadajett/agent-nestjs-skills](https://github.com/kadajett/agent-nestjs-skills) (nestjs-best-practices). Condensado al formato Arcane._
@@ -0,0 +1,60 @@
1
+ ---
2
+ paths:
3
+ - "app/**"
4
+ - "src/app/**"
5
+ - "pages/**"
6
+ - "src/pages/**"
7
+ - "**/*.tsx"
8
+ - "**/route.ts"
9
+ - "next.config.*"
10
+ ---
11
+
12
+ # Next.js Code Rules
13
+
14
+ Reglas de performance y arquitectura para Next.js App Router (RSC, data fetching, caching). Ordenadas por impacto. Catálogo completo + ejemplos: skill `nextjs-best-practices`.
15
+
16
+ ## CRITICAL — Eliminar waterfalls
17
+
18
+ - **Server Components por defecto.** `'use client'` solo cuando se necesita interactividad/estado/efectos/browser APIs. Empujar el boundary client lo más abajo posible en el árbol.
19
+ - **Fetch paralelo, no secuencial.** Operaciones independientes con `Promise.all()`. Nunca `await` en serie cuando no hay dependencia entre llamadas.
20
+ - **Iniciar promesas temprano, await tarde.** En route handlers y RSC, disparar el fetch independiente al inicio y await recién donde se usa el dato.
21
+ - **Composición para fetch paralelo.** Reestructurar componentes para que fetches independientes corran simultáneamente; fetches dependientes se anidan dentro de la promesa de cada item, no en serie global.
22
+ - **Suspense boundaries estratégicos.** Envolver subárboles con `<Suspense>` para mostrar shell rápido mientras streamea el contenido.
23
+
24
+ ## CRITICAL — Bundle size
25
+
26
+ - **No barrel imports.** Importar directo del archivo fuente (`lodash/debounce`, no `lodash`); los barrels (`index.ts` que re-exportan todo) arrastran miles de módulos sin usar.
27
+ - **`next/dynamic` para componentes pesados** no necesarios en el render inicial (charts, editores, modales).
28
+ - **Diferir libs third-party no críticas** (analytics, logging, error tracking) a post-hydration; no bloquear el bundle inicial.
29
+ - **Paths estáticamente analizables.** Imports con paths literales/mapas explícitos, no construidos dinámicamente.
30
+
31
+ ## HIGH — Server
32
+
33
+ - **Autenticar cada Server Action como un API route.** Verificar auth/authz dentro de la action, no confiar solo en middleware.
34
+ - **No module-level mutable state para datos de request.** Mantener datos de request locales al árbol de render; las variables a nivel módulo se comparten entre requests → data leaks.
35
+ - **Minimizar serialización en boundaries RSC→Client.** Pasar solo los campos que el cliente realmente usa, no el objeto entero.
36
+ - **`React.cache()` para dedupe por request**; LRU cache para datos compartidos entre requests dentro de una ventana de tiempo.
37
+ - **`after()` para trabajo no bloqueante** (logging, analytics, cleanup) que corre después de enviar la respuesta.
38
+ - **Hoist I/O estático a nivel módulo** para evitar lecturas redundantes en cada request.
39
+
40
+ ## HIGH — Rendering & data
41
+
42
+ - **`generateMetadata` para todo el SEO** (title, description, OG, canonical). Nunca tags manuales en el body.
43
+ - **`next/image` siempre** — width/height explícitos, `priority` para LCP, formatos modernos.
44
+ - **Caching explícito.** Conocer y declarar `fetch` cache (`force-cache` / `no-store` / `revalidate`), `revalidatePath`/`revalidateTag` para invalidación.
45
+ - **`content-visibility: auto`** para listas largas off-screen.
46
+ - **Resource hints** (`preload`, `preconnect`) para recursos críticos.
47
+
48
+ ## Anti-Patterns
49
+
50
+ - `'use client'` en la raíz del árbol (mata todo el beneficio de RSC)
51
+ - `useEffect` + `fetch` en el cliente para datos que podían venir del server
52
+ - Fetches en cascada (cada componente espera al padre sin necesidad)
53
+ - `export *` barrel files en libs internas
54
+ - Pasar objetos de DB crudos como props a Client Components
55
+ - Hardcodear `revalidate`/cache sin entender la estrategia
56
+ - Secrets o lógica sensible en código que cruza a `'use client'`
57
+
58
+ ---
59
+
60
+ _Derivado de [vercel-labs/agent-skills](https://github.com/vercel-labs/agent-skills) (react-best-practices, MIT). Condensado al formato Arcane._
@@ -0,0 +1,59 @@
1
+ ---
2
+ paths:
3
+ - "**/*.tsx"
4
+ - "**/*.jsx"
5
+ - "src/components/**"
6
+ - "src/hooks/**"
7
+ - "components/**"
8
+ - "hooks/**"
9
+ ---
10
+
11
+ # React Performance Rules
12
+
13
+ Reglas de re-render, rendering y micro-optimización JS para React. Ordenadas por impacto. Catálogo completo (64 reglas) + ejemplos: skill `nextjs-best-practices`.
14
+
15
+ ## HIGH — Estructura de componentes
16
+
17
+ - **No definir componentes dentro de componentes.** Definir a nivel módulo o extraer; definirlos inline los remonta en cada render (pierde estado, mata performance).
18
+ - **`content-visibility: auto`** para listas largas — difiere render y paint de lo que está off-screen.
19
+ - **`defer`/`async` en `<script>`** para no bloquear el render durante el parsing.
20
+ - **Resource hints de React DOM** (`preload`, `preconnect`, `prefetchDNS`) para recursos críticos.
21
+
22
+ ## MEDIUM — Re-render optimization
23
+
24
+ - **Calcular derived state durante el render**, no guardarlo en `useState` (se desincroniza y genera renders extra).
25
+ - **Leer state dinámico en el callback**, no suscribirse en render time cuando solo se usa en un handler.
26
+ - **Functional `setState`** (`setX(prev => ...)`) para operar sobre el último valor y crear callbacks estables.
27
+ - **Lazy state init**: pasar función a `useState(() => expensive())` para no recomputar en cada render.
28
+ - **`useTransition` para updates no urgentes**; `useDeferredValue` para mantener inputs responsivos durante cómputo pesado.
29
+ - **`useRef` para valores transitorios** (no-UI) que cambian seguido y no deben disparar render.
30
+ - **Extraer defaults no-primitivos** de componentes memoizados a constantes a nivel módulo (preserva la memoización).
31
+ - **Side effects de interacción van en event handlers**, no en `useEffect`.
32
+ - **Dependencias de effect primitivas y estrechas**, no objetos enteros.
33
+
34
+ ## LOW-MEDIUM — useMemo / JS
35
+
36
+ - **No envolver expresiones simples en `useMemo`** — el overhead del hook supera el cómputo.
37
+ - **Index maps (`Map`) para lookups repetidos** en vez de `.find()`/`.includes()` en loops → O(1).
38
+ - **`.flatMap()`** en lugar de `.map().filter(Boolean)`; combinar iteraciones múltiples de array en un solo loop.
39
+ - **Hoist de `RegExp`** a nivel módulo (no recrear en cada render).
40
+ - **Early return** cuando el resultado ya está determinado; chequear `length` antes de operaciones caras (sort).
41
+ - **`.toSorted()`** en vez de `.sort()` para inmutabilidad.
42
+
43
+ ## Hydration
44
+
45
+ - Evitar mismatch sin flicker con scripts inline síncronos cuando se actualiza el DOM antes de hidratar.
46
+ - `suppressHydrationWarning` solo para diferencias server/client intencionales (fechas, IDs).
47
+ - Conditional rendering explícito con ternario, no `&&` (evita renderizar `0` u otros falsy).
48
+
49
+ ## Anti-Patterns
50
+
51
+ - Componentes definidos dentro del render de otro componente
52
+ - `useMemo`/`useCallback` por default "por las dudas" sin medir
53
+ - `useEffect` para lógica que pertenece a un event handler
54
+ - Guardar en state lo que se puede derivar de props/state existentes
55
+ - `.find()` dentro de `.map()` (O(n²)) sobre listas grandes
56
+
57
+ ---
58
+
59
+ _Derivado de [vercel-labs/agent-skills](https://github.com/vercel-labs/agent-skills) (react-best-practices, MIT). Condensado al formato Arcane._
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: ai-sdk-setup
3
+ description: "Integrar features de IA en Next.js con el Vercel AI SDK: streaming de chat, tool calling, structured output, agents y RAG. Default a modelos Claude. Usar al agregar chat, generación o agentes a una app Next/Node."
4
+ category: "ai"
5
+ argument-hint: "[chat|stream|tools|structured|agent|rag]"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Bash, Write, Edit, Task
8
+ ---
9
+ # ai-sdk-setup — Vercel AI SDK con Claude
10
+
11
+ ## MANDATORY WORKFLOW
12
+
13
+ > **Antes de codear features LLM, leer la skill `claude-api`** para model IDs vigentes, params y pricing. No asumir de memoria.
14
+
15
+ ### Step 0: Gather Requirements
16
+ 1. **Caso:** chat / generación one-shot / extracción structured / agente con tools / RAG
17
+ 2. **Streaming** al cliente o respuesta completa
18
+ 3. **Modelo:** Opus 4.8 (`claude-opus-4-8`, razonamiento) / Sonnet 4.6 (`claude-sonnet-4-6`, balance) / Haiku 4.5 (`claude-haiku-4-5-20251001`, rápido/barato)
19
+ 4. ¿Necesita tool calling / structured output / RAG (ver skill `pgvector-search`)?
20
+
21
+ ### Step 1: Instalar
22
+ ```bash
23
+ pnpm add ai @ai-sdk/anthropic zod
24
+ # env: ANTHROPIC_API_KEY (validar con Zod en src/lib/env.ts, nunca hardcodear)
25
+ ```
26
+
27
+ ### Step 2: Chat con streaming (Route Handler)
28
+ ```ts
29
+ // app/api/chat/route.ts
30
+ import { anthropic } from '@ai-sdk/anthropic';
31
+ import { streamText, convertToModelMessages } from 'ai';
32
+
33
+ export async function POST(req: Request) {
34
+ const { messages } = await req.json();
35
+ const result = streamText({
36
+ model: anthropic('claude-sonnet-4-6'),
37
+ messages: convertToModelMessages(messages),
38
+ });
39
+ return result.toUIMessageStreamResponse();
40
+ }
41
+ ```
42
+ Cliente: `useChat()` de `@ai-sdk/react`.
43
+
44
+ ### Step 3: Structured output (Zod)
45
+ ```ts
46
+ const { object } = await generateObject({
47
+ model: anthropic('claude-sonnet-4-6'),
48
+ schema: z.object({ sentiment: z.enum(['pos','neg','neutral']), score: z.number() }),
49
+ prompt: text,
50
+ });
51
+ ```
52
+
53
+ ### Step 4: Tool calling / agente
54
+ ```ts
55
+ const result = await generateText({
56
+ model: anthropic('claude-opus-4-8'),
57
+ tools: {
58
+ search: tool({
59
+ description: 'Buscar docs', inputSchema: z.object({ q: z.string() }),
60
+ execute: async ({ q }) => searchDocs(q),
61
+ }),
62
+ },
63
+ stopWhen: stepCountIs(5), // loop multi-step controlado
64
+ prompt,
65
+ });
66
+ ```
67
+
68
+ ### Step 5: Buenas prácticas
69
+ - **Server-only** la API key — nunca exponer al cliente
70
+ - Auth en el route handler (como cualquier API route — ver rule `nextjs-code`)
71
+ - Rate limiting en endpoints de IA (costo $)
72
+ - Prompt caching para system prompts grandes (ver skill `claude-api`)
73
+ - Manejar errores de stream y abort (`AbortController`)
74
+ - Validar/parsear toda salida structured con Zod antes de usarla
75
+
76
+ ## Cierre
77
+
78
+ Probar el endpoint con streaming real, verificar manejo de errores/abort y que la API key nunca llega al cliente. Endpoint funcionando + key server-only → integración **READY**. Confirmar el approach con el usuario antes de escribir código. Siguiente paso: skill `claude-api` para tuning de modelo/caching, o `pgvector-search` para RAG.
79
+
80
+ ---
81
+
82
+ _Inspirado en las skills de AI SDK de [laguagu/claude-code-nextjs-skills](https://github.com/laguagu/claude-code-nextjs-skills). Adaptado al formato Arcane y a modelos Claude. Verificar API/SDK contra la skill `claude-api`._