Lesson completed!
-

Skills: Comportamientos Automaticos

Skills: Comportamientos Automaticos

Los Slash Commands se invocan manualmente. Las Skills se activan solas cuando Claude detecta que aplican.

Comandos vs Skills vs Hooks

FeatureInvocacionUso Ideal
ComandosManual (/commit)Tareas on-demand
SkillsAutomaticaComportamientos consistentes
HooksAutomatica (eventos)Acciones pre/post operacion

Cuando Usar Cada Uno

  • Comando: "Quiero crear un commit ahora" → /commit
  • Skill: "Siempre que trabaje con React, usa estos patterns" → Skill
  • Hook: "Despues de cada edit, corre el linter" → Hook

Anatomia de una Skill

Las skills viven en .claude/skills/:

mi-proyecto/
└── .claude/
    └── skills/
        ├── react-patterns.md
        ├── testing-strategy.md
        └── code-style.md

Estructura de un Archivo Skill

---
name: react-patterns
description: Patrones de React que debo seguir en este proyecto
---
 
# React Patterns
 
## Componentes
 
- Usa functional components, nunca class components
- Extrae logica compleja a custom hooks
- Mantene componentes bajo 150 lineas
 
## Estado
 
- Usa useState para estado local simple
- Usa useReducer para estado complejo
- Usa context solo para datos que realmente son globales
 
## Styling
 
- Usa Tailwind CSS
- Evita CSS inline excepto para valores dinamicos
- Sigue el patron de clase condicional con cn()
 
## Ejemplos
 
### Componente Simple
```tsx
export function UserCard({ user }: { user: User }) {
  return (
    <div className="p-4 border rounded">
      <h3>{user.name}</h3>
      <p>{user.email}</p>
    </div>
  )
}

Custom Hook

function useUser(id: string) {
  const [user, setUser] = useState<User | null>(null)
  const [loading, setLoading] = useState(true)
 
  useEffect(() => {
    fetchUser(id).then(setUser).finally(() => setLoading(false))
  }, [id])
 
  return { user, loading }
}

## La Magia: Activacion Automatica

Claude lee la `description` de cada skill y la activa cuando es relevante.

Por ejemplo, si tu skill tiene:

```yaml
---
name: react-patterns
description: Patrones de React que debo seguir en este proyecto
---

Cuando le pidas a Claude que cree un componente React, va a leer esta skill automaticamente y aplicar los patrones.

Mis Skills Mas Utiles

1. Code Style (Global)

---
name: code-style
description: Estilo de codigo y convenciones del proyecto
---
 
# Code Style
 
## TypeScript
- Usa tipos explicitos, no `any`
- Prefiere interfaces sobre types para objetos
- Exporta tipos junto con sus funciones
 
## Naming
- Componentes: PascalCase
- Funciones: camelCase
- Constantes: UPPER_SNAKE_CASE
- Archivos de componentes: PascalCase.tsx
- Archivos de utils: camelCase.ts
 
## Imports
- Absolutas primero, relativas despues
- Ordenar alfabeticamente dentro de cada grupo
- Una linea vacia entre grupos
 
## Comentarios
- Solo cuando el codigo no es auto-explicativo
- JSDoc para funciones publicas
- TODO: solo si hay un plan para resolverlo

2. Testing Strategy

---
name: testing-strategy
description: Estrategia de testing para este proyecto
---
 
# Testing Strategy
 
## Unit Tests
- Testea logica de negocio, no implementacion
- Un archivo de test por modulo
- Nombre: `[module].test.ts`
 
## Integration Tests
- Testea flujos completos
- Usa mocks solo para servicios externos
- Setup/teardown de base de datos
 
## E2E Tests
- Solo para user flows criticos
- Corre en CI antes de merge
- Usa Playwright
 
## Coverage
- Minimo 80% en codigo nuevo
- No testear: types, constants, config

3. API Patterns

---
name: api-patterns
description: Patrones para crear APIs REST
---
 
# API Patterns
 
## Response Format
```json
{
  "data": {},
  "meta": {},
  "error": null
}

Error Handling

  • 400: Bad request (validation)
  • 401: Unauthorized
  • 403: Forbidden
  • 404: Not found
  • 500: Server error

Validation

  • Usa Zod para validar inputs
  • Valida en el handler, no en el servicio
  • Devuelve errores detallados al cliente

Naming

  • GET /users - listar
  • GET /users/:id - obtener uno
  • POST /users - crear
  • PUT /users/:id - actualizar
  • DELETE /users/:id - eliminar

## Skills Globales vs Por Proyecto

### Globales (~/.claude/skills/)

Aplican a todos tus proyectos:

- `code-style.md` - Tu estilo personal de codigo
- `commit-messages.md` - Como escribis commits
- `documentation.md` - Como documentas

### Por Proyecto (.claude/skills/)

Aplican solo a este proyecto:

- `react-patterns.md` - Patterns de React especificos
- `api-patterns.md` - Convenciones del API
- `database-schema.md` - Estructura de la DB

## Tips para Skills Efectivas

### 1. Descripcion Clara = Activacion Correcta

**Malo:**
```yaml
---
description: Patrones de codigo
---

Bueno:

---
description: Patrones de React con hooks, styled-components y TypeScript para componentes de UI
---

2. Incluye Ejemplos Concretos

Claude aprende mejor con ejemplos que con reglas abstractas.

3. Mantene Skills Enfocadas

Una skill = un tema. No mezcles React patterns con API patterns.

4. Actualiza Regularmente

Cuando tomes una decision de arquitectura, agregala a la skill correspondiente.

Errores Que Me Costaron Horas

Error 1: Descripciones Muy Vagas

El error: Mi skill tenia description: Patterns del proyecto. Claude no la activaba casi nunca porque era muy generica.

El costo: Codigo inconsistente porque Claude no aplicaba los patterns.

La leccion: La descripcion es la clave. Hacela especifica.

Error 2: Skills Que Se Contradicen

El error: Tenia una skill global que decia "usa CSS modules" y una del proyecto que decia "usa Tailwind". Claude se confundia.

El costo: Tiempo arreglando estilos inconsistentes.

La leccion: Las skills del proyecto deben complementar, no contradecir las globales.

Diferencia Clave: Skills vs CLAUDE.md

CLAUDE.mdSkills
Informacion del proyectoComportamientos
Estructura, stack, comandosPatterns, estilos, reglas
Contexto estaticoGuias dinamicas
Una por proyectoMultiples por tema

Usa CLAUDE.md para "que es este proyecto" y Skills para "como trabajo en este proyecto".

Para Equipos: Skills Como Estandares

Las skills son perfectas para enforcar estandares de equipo sin micromanagement.

Estructura de Skills de Equipo

org-standards/              # Repo separado de standards
├── .claude/
│   └── skills/
│       ├── code-style.md   # Estilo de codigo de la org
│       ├── security.md     # Practicas de seguridad
│       ├── testing.md      # Standards de testing
│       └── documentation.md

# Cada proyecto importa las skills relevantes
proyecto/
├── .claude/
│   └── skills/
│       ├── code-style.md   # Symlink o copia de org-standards
│       └── react-ui.md     # Especifico de este proyecto

Skill de Seguridad Obligatoria

Toda organizacion deberia tener una skill de seguridad:

---
name: security-standards
description: Estandares de seguridad que aplican a todo el codigo
---
 
# Security Standards
 
## Secrets
- NUNCA hardcodear secrets en codigo
- Usar variables de entorno para API keys
- Usar .env.example con placeholders
 
## Input Validation
- Validar TODO input del usuario con Zod/Yup
- Sanitizar antes de guardar en DB
- Escapar antes de mostrar en HTML
 
## Authentication
- Usar bcrypt para passwords (min cost 12)
- JWT tokens con expiracion corta (1h access, 7d refresh)
- Rate limiting en endpoints de auth
 
## Lo Que NO Hacer
- NO usar eval() o Function()
- NO concatenar SQL (usar parametros)
- NO confiar en headers del cliente
- NO logear datos sensibles (passwords, tokens, PII)

Onboarding con Skills

Cuando un nuevo dev se une:

  1. Clona el proyecto
  2. Claude automaticamente lee las skills
  3. El codigo que genera ya sigue los standards
  4. Code review es mas rapido porque el codigo es consistente

Auditando Skills

Revisa periodicamente:

## Checklist de Auditoria de Skills
 
- [ ] Fecha de ultima actualizacion < 6 meses
- [ ] No hay contradicciones entre skills
- [ ] Ejemplos siguen funcionando
- [ ] Nuevos patterns estan documentados
- [ ] Skills deprecadas fueron removidas

Resolviendo Conflictos de Skills

Si dos skills se contradicen:

  1. Skill mas especifica gana (proyecto > org > global)
  2. Documenta la excepcion en la skill del proyecto
  3. Considera unificar si el conflicto es frecuente
---
name: react-patterns
description: Patterns de React (overrides org-standards para este proyecto)
---
 
# React Patterns
 
## Nota: Excepciones a Org Standards
 
Este proyecto usa styled-components en lugar de Tailwind
porque es un proyecto legacy. Ver decision ADR-023.
 
[...]

Desafio: Prueba Esto

Antes de pasar a la siguiente leccion:

  • Crea el directorio .claude/skills/
  • Crea una skill code-style.md con tus preferencias
  • Pide a Claude que genere codigo y verifica que aplica la skill
  • Crea una skill especifica para tu proyecto (ej: react-patterns.md)

Tiempo estimado: 10 minutos

Siguiente Paso

Ahora que sabes personalizar Claude con comandos y skills, vamos a ver como automatizar operaciones con sub-agentes.