Arquitectura del Sistema de Archivos
5.1 El Directorio .claude/
Todo tu sistema agéntico vive en dos lugares: CLAUDE.md en la raíz del proyecto y el directorio .claude/. Juntos definen todo lo que Claude Code sabe sobre cómo comportarse en este proyecto.
your-project/
├── CLAUDE.md ← siempre cargado, en cada sesión
└── .claude/
├── commands/ ← workflows (wor-*) + commands (com-*)
│ ├── wor-content-pipeline.md ← orquestación multi-etapa
│ └── com-publish-article.md ← acción atómica del usuario
├── agents/ ← specialist (age-spe-*) + supervisor (age-sup-*)
│ ├── age-spe-researcher.md ← especialista de dominio
│ ├── age-spe-writer.md
│ └── age-sup-editor.md ← valida calidad del output
├── skills/ ← capacidades reutilizables (ski-*)
│ ├── ski-format-output/
│ │ └── SKILL.md ← punto de entrada del skill
│ └── ski-weekly-report/
│ └── SKILL.md
├── rules/ ← restricciones de comportamiento (rul-*)
│ └── rul-citation-standards.md ← estructurado: Contexto + Restricciones Fuertes/Suaves
├── knowledge-base/ ← material de referencia (kno-*)
│ ├── kno-style-guide.md
│ └── kno-api-reference.md
├── resources/ ← docs de soporte que extienden entidades (res-*)
│ └── res-api-full-reference.md ← cargado condicionalmente por agentes
├── scripts/ ← automatización ejecutable (scp-*)
│ └── scp-lint-check.sh ← .sh o .py en Claude Code
├── hooks/ ← documentación de hooks (hok-*)
│ └── hok-auto-lint.md ← qué hace el hook y por qué
├── settings.json ← configuración de hooks, permisos, restricciones de herramientas
└── settings.local.json ← overrides de permisos exclusivos de CC Claude descubre todo en esta estructura automáticamente al abrir la carpeta — ningún archivo de configuración apunta a ella. La convención es la configuración.
wor-*) como los Commands (com-*) viven en .claude/commands/. El prefijo distingue su rol, no el directorio. De igual forma, tanto los Specialist (age-spe-*) como los Supervisor (age-sup-*) comparten .claude/agents/.5.2 CLAUDE.md — El Cerebro de Tu Sistema
CLAUDE.md se carga al inicio de cada sesión. Es el único archivo que siempre está en contexto — todo lo demás se carga bajo demanda.
Qué va en CLAUDE.md
| Incluir | No incluir |
|---|---|
| Propósito y alcance del proyecto | Pasos específicos de workflow (→ Skills) |
| Reglas y convenciones activas | Contenido de referencia extenso (→ archivos KB) |
| Registro de agentes (qué agentes existen y cuándo usarlos) | Instrucciones de agentes (→ archivos de agente) |
| Límites de módulo (qué posee cada agente/carpeta) | Contenido que cambia por tarea |
Un CLAUDE.md bien estructurado
# Project: Content Pipeline
## Purpose
Automated system for researching, writing, and publishing articles.
Output language: English. Audience: senior professionals.
## Active Agents
| Agent | Trigger | Owns |
|---|---|---|
| @age-spe-researcher | Any research or fact-finding task | /research/ |
| @age-spe-writer | Draft creation from research | /drafts/ |
| @age-sup-editor | Review, scoring, final approval | /output/ |
## Rules
- Never modify files outside the agent's own directory
- All drafts must include a source citation for every factual claim
- Instead of deleting files, move them to /archive/ with today's date
- For detailed citation rules, see `.claude/rules/rul-citation-standards.md`
## Conventions
- Entity names: prefixed by type (age-spe-, ski-, rul-, etc.)
- File names: kebab-case, no spaces
- Dates: ISO 8601 (YYYY-MM-DD) Consejos para producción
- Mantenlo por debajo de 5KB — se carga en cada sesión y consume contexto
- Usa tablas para los límites de módulo — fáciles de escanear de un vistazo
- Siempre proporciona alternativas en las reglas: "En vez de X, haz Y"
- Si te encuentras escribiendo instrucciones de varios párrafos → muévelas a un Skill
5.3 El Contrato del Frontmatter
Cada archivo de agente y skill comienza con frontmatter YAML entre delimitadores ---. Así es como Claude Code descubre, identifica y enruta hacia tus componentes.
---
name: age-spe-researcher
description: Researches topics using web search and synthesizes structured
summaries with citations. Use for any information gathering, fact-checking,
competitive analysis, or background research task.
model: sonnet
tools: WebSearch, Read, Grep
permissionMode: default
memory: project
--- | Campo | Tipo | Qué hace |
|---|---|---|
name | string | Identificador usado en menciones @agent-name y comandos /skill-name |
description | string ≤250 chars | Impulsa el auto-descubrimiento — Claude lo compara con la solicitud del usuario |
model | sonnet / opus / haiku | Modelo usado cuando este agente/skill se ejecuta |
tools | list | Lista blanca de herramientas permitidas (Read, Write, Bash, WebSearch, etc.) |
disallowedTools | list | Enfoque de lista negra — permite todo excepto estas |
permissionMode | string | default, acceptEdits, o plan |
memory | string | user, project, o local — habilita memoria persistente |
El presupuesto de 250 caracteres para la descripción
El campo description es una regla de enrutamiento, no una etiqueta. Claude lo lee para decidir si delegar una solicitud a este agente. Prioriza las situaciones y frases específicas que deberían activar la invocación.
| Descripción débil | Descripción fuerte |
|---|---|
| "An agent that does research." | "Researches topics using web search and returns structured summaries with citations. Use for information gathering, fact-checking, competitive analysis, or any task requiring current external data." |
| "Writes content." | "Drafts long-form articles and blog posts from a research brief. Use after the researcher agent has completed its report. Applies the project style guide automatically." |
5.4 Alcance: Proyecto vs. Usuario
Claude Code resuelve agentes y skills desde múltiples ubicaciones. Entender el alcance determina dónde colocar cada archivo.
| Alcance | Ubicación | Visible para | Usar para |
|---|---|---|---|
| Proyecto | .claude/agents/ | Cualquiera con la carpeta del proyecto | Agentes específicos del proyecto — haz commit en Git |
| Usuario (global) | ~/.claude/agents/ | Solo tú, en todos los proyectos | Utilidades personales que usas en todas partes |
| Plugin | Instalado vía /plugin | Tú, en todos los proyectos | Agentes y skills de la comunidad |
Prioridad de resolución cuando hay colisión de nombres: nivel de sesión → proyecto → usuario → plugin. La definición más local gana.
age-spe-git-helper que conoce tus convenciones de mensajes de commit, o un age-spe-meeting-notes que formatea notas en tu plantilla preferida — disponible en cada proyecto sin copiar archivos.Calidad de la descripción: el patrón "qué + cuándo"
Cada campo description debería responder dos preguntas: (1) Qué hace esta entidad — acción específica, en tercera persona; (2) Cuándo debería usarse — contexto de activación, condiciones específicas.
| Débil | Fuerte ("qué + cuándo") |
|---|---|
| "An agent that does research." | "Researches topics using web search and returns structured summaries with citations. Use for information gathering, fact-checking, or any task requiring current external data." |
| "Validates output." | "Reviews agent output for accuracy, completeness, and style guide compliance. Use after a specialist agent completes its task and before results are returned to the user." |
Diseño de Subagentes
6.1 ¿Qué hace a un buen subagente?
Un subagente es la unidad atómica de tu sistema agéntico. Existen dos tipos:
| Tipo | Prefijo | Rol | Ejemplo |
|---|---|---|---|
| Especialista | age-spe- | Ejecuta un dominio de responsabilidad específico — produce el trabajo principal | age-spe-researcher, age-spe-writer |
| Supervisor | age-sup- | Revisa o valida el output de los especialistas — actúa como puerta de calidad | age-sup-editor, age-sup-compliance-check |
Ambos tipos comparten el mismo formato de archivo y residen en .claude/agents/. Tres principios determinan si cualquier tipo será confiable:
| Principio | Qué significa | Señal de alerta |
|---|---|---|
| Responsabilidad única | Un dominio. Un trabajo. Si te cuesta nombrarlo en dos palabras, hace demasiado. | Nombres de agente como "general-assistant" o "do-everything" |
| Contrato claro de entrada/salida | El agente sabe exactamente qué recibe y qué devuelve. Entrada ambigua = salida impredecible. | Instrucciones que dicen "maneja lo que llegue" |
| Descripción como regla de enrutamiento | La descripción sigue el patrón "qué + cuándo": qué hace + cuándo invocarlo. Escríbela como si fuera un if-statement. | Descripciones que explican qué es el agente en vez de cuándo invocarlo |
6.2 Anatomía de un archivo de subagente
Cada subagente es un único archivo markdown en .claude/agents/, nombrado con el prefijo apropiado (age-spe-* o age-sup-*). Aquí tienes un ejemplo completo y anotado de un Supervisor:
---
name: age-sup-code-reviewer # prefix: age-sup- (supervisor)
description: Reviews pull request diffs for correctness, security issues,
test coverage, and style guide compliance. Use when a PR is ready for
review or when asked to check code quality on any file.
model: sonnet # fast enough for review tasks
tools: Read, Grep, Glob # read-only — never modifies files
permissionMode: default # asks before any action
memory: project # remembers team preferences across sessions
---
You are a senior code reviewer. Your job is to catch bugs, security
vulnerabilities, and style violations — not to rewrite working code.
## Review Process
1. Read the diff or files provided
2. Check for: logic errors, security issues, missing error handling,
test coverage gaps, style guide violations
3. For each issue found, state: file + line, severity (critical/major/minor),
explanation, suggested fix
## Output Format
### Summary
[One paragraph: overall quality assessment]
### Issues Found
| Severity | File | Line | Issue | Suggestion |
|---|---|---|---|---|
### Approved?
[Yes / No / Yes with minor issues]
## Rules
- Never suggest rewriting code that works correctly
- Flag security issues as critical regardless of other quality
- If no issues found, say so explicitly — don't manufacture concerns Frontmatter en detalle
| Campo | Valor en el ejemplo | Por qué esta elección |
|---|---|---|
model | sonnet | Las tareas de revisión no necesitan razonamiento profundo — Sonnet es más rápido y económico |
tools | Read, Grep, Glob | Whitelist de solo lectura — este agente nunca puede modificar archivos accidentalmente |
permissionMode | default | Siempre pregunta antes de actuar — apropiado para un agente de revisión |
memory | project | Recuerda las decisiones de estilo del equipo entre sesiones, compartido vía Git |
6.3 Invocación de subagentes
| Método | Cómo | Cuándo usarlo |
|---|---|---|
| Automático | Claude compara la solicitud con las descripciones de todos los agentes y delega | Flujo normal — funciona cuando las descripciones son precisas |
| Mención explícita | @age-sup-code-reviewer please review this PR | Cuando quieres un agente específico sin depender del matching de descripciones |
| Sesión como agente | claude --agent age-sup-code-reviewer (CLI) | Iniciar una sesión completa ejecutándose como un agente específico |
| Desde un Skill | Referenciar al agente dentro de las instrucciones de un skill | Workflows de múltiples pasos donde un skill delega a varios agentes |
6.4 Restricciones de herramientas: el límite de permisos
Las restricciones de herramientas son la palanca de seguridad más importante en el diseño de subagentes. Sé explícito — no confíes solo en las instrucciones para evitar modificaciones de archivos.
| Tipo de agente | Herramientas recomendadas | permissionMode |
|---|---|---|
Especialista: investigación (age-spe-) | Read, Grep, Glob, WebSearch | default |
Especialista: escritor (age-spe-) | Read, Write, Edit | acceptEdits |
Especialista: implementador (age-spe-) | Read, Write, Edit, Bash | default |
Supervisor: revisor (age-sup-) | Read, Grep, Glob | plan |
Valores de permissionMode:
default— Claude pregunta antes de cualquier acción significativaacceptEdits— acepta automáticamente ediciones de archivos, pregunta para otras accionesplan— solo produce un plan, nunca ejecuta
6.5 Memoria persistente para subagentes
Los subagentes pueden mantener memoria entre sesiones mediante un archivo MEMORY.md. Las primeras 200 líneas se cargan automáticamente en cada sesión con ese agente.
| Alcance de memoria | Ubicación | ¿Compartido vía Git? | Usar para |
|---|---|---|---|
user | ~/.claude/agent-memory/ | No | Preferencias personales en todos los proyectos |
project | .claude/agent-memory/ | Sí | Contexto compartido del equipo — decisiones de estilo, patrones conocidos |
local | .claude/agent-memory/ | No (gitignored) | Estado local de la máquina — datos temporales, trabajo en progreso |
6.6 Ejemplos reales
Especialista: Analista de investigación competitiva (no-código)
---
name: age-spe-competitive-analyst
description: Analyzes competitors using public web sources and returns
structured reports. Use for market research, competitive positioning,
feature comparison, or pricing intelligence tasks.
model: opus
tools: WebSearch, Read
permissionMode: default
memory: project
---
You are a competitive intelligence specialist. Your outputs are
structured for executive review — factual, sourced, and actionable.
## Analysis Framework
For each competitor requested:
1. Company overview (size, funding, positioning)
2. Product features vs. ours (table format)
3. Pricing model and tiers
4. Recent news and strategic moves (last 6 months)
5. Threat level: Low / Medium / High — with justification
## Rules
- Only cite verifiable public sources — no speculation
- Always include the URL and date for every claim
- If data is unavailable, say so — don't estimate Especialista: Escritor de documentación
---
name: age-spe-doc-writer
description: Generates technical documentation from code, comments,
and specifications. Use for README files, API docs, changelog entries,
or any documentation task.
model: sonnet
tools: Read, Write, Grep, Glob
permissionMode: acceptEdits
---
You are a technical writer specializing in developer documentation.
## Principles
- Clarity over completeness — one clear sentence beats three vague ones
- Show, don't tell — every concept gets a code example
- Audience: developers who are busy. Front-load the most important info.
## Output
- Write in active voice
- Use second person ("you", "your")
- Code examples must be runnable, not pseudocode Skills y Commands
7.1 Skills vs. Subagentes vs. CLAUDE.md
Las tres capas de configuración sirven para propósitos diferentes. Elegir la incorrecta genera sobredimensionamiento, duplicación o agentes que hacen demasiado.
| CLAUDE.md | Skill | Subagente | |
|---|---|---|---|
| Qué es | Contexto siempre activo | Workflow nombrado, bajo demanda | Worker aislado con su propio contexto |
| Se carga cuando | Cada sesión, automáticamente | Cuando se invoca por nombre o coincidencia de descripción | Cuando se le delega por nombre o descripción |
| Se ejecuta en | Ventana de contexto principal | Ventana principal (o ventana forked) | Ventana de contexto aislada |
| Usar para | Convenciones, reglas, registro de agentes | Workflows repetibles, plantillas, procedimientos | Trabajo especializado de dominio, ejecución paralela |
| Ejemplo | "Usar siempre inglés británico" | "Ejecutar nuestro checklist de revisión de PR" | "Agente de investigación que busca y sintetiza" |
7.2 Anatomía de un Skill
Los skills residen en .claude/skills/<skill-name>/SKILL.md. Un directorio de skill puede contener archivos de apoyo — plantillas, scripts, ejemplos — que el skill referencia.
.claude/skills/
└── ski-pr-review/
├── SKILL.md ← punto de entrada
├── checklist.md ← plantilla referenciada
└── examples/
└── good-pr.md ← ejemplo para que Claude aprenda ---
name: ski-pr-review
description: Runs the team PR review checklist on the current branch diff.
Checks correctness, security, test coverage, and style. Invoke with
/ski-pr-review or when asked to review a pull request.
user-invocable: true
allowed-tools: Read, Grep, Bash
---
# PR Review Skill
Run our standard PR review process on the provided diff or branch.
## Steps
1. Read the diff: `!git diff main...HEAD`
2. Load the review checklist from `checklist.md`
3. Evaluate each checklist item against the diff
4. Generate a structured review report
## Output Format
Use the template in `checklist.md`. Return the completed checklist
plus a Summary and Verdict (Approve / Request Changes / Needs Discussion). Campos clave del frontmatter para skills
| Campo | Valores | Efecto |
|---|---|---|
user-invocable | true / false | Si es true, crea un slash command /skill-name. Si es false, solo invocación por Claude. |
allowed-tools | lista de herramientas | Herramientas disponibles cuando se ejecuta este skill |
context | fork | Ejecuta el skill en una ventana de contexto aislada — mantiene limpia la sesión principal |
agent | Explore / Plan | Se usa con el modo fork para definir el tipo de agente en el contexto forked |
7.3 Modos de invocación
| Modo | Cómo | Cuándo usarlo |
|---|---|---|
| Slash command del usuario | /pr-review | Explícito, activado por humano. Configurar user-invocable: true. |
| Automático (invocado por Claude) | Coincidencia de descripción | Claude lo selecciona automáticamente cuando la tarea coincide. Configurar user-invocable: false. |
| Con argumentos | /pr-review #123 | El usuario pasa input. Usar el placeholder $ARGUMENTS en SKILL.md. |
| Modo fork | context: fork | Exploración pesada que saturaría el contexto principal. Se ejecuta en aislamiento. |
| Inyección dinámica | !git status en el cuerpo del skill | Ejecutar comandos de shell e inyectar su output en el contexto del skill. |
Uso de $ARGUMENTS
---
name: summarize
description: Summarizes a document or URL into key points.
user-invocable: true
---
Summarize the following: $ARGUMENTS
Return:
- 3-sentence overview
- 5 key points as bullets
- Any action items or decisions El usuario escribe /summarize https://example.com/article y la URL se inyecta en $ARGUMENTS.
7.4 Ejemplos reales
Generador de reporte semanal (no-código)
---
name: weekly-report
description: Generates the team's weekly status report from Git history,
Jira tickets, and notes. Run every Friday. Invoke with /weekly-report.
user-invocable: true
allowed-tools: Read, Bash, Grep
---
# Weekly Report Skill
Generate this week's team status report.
## Data Collection
1. Pull this week's commits: `!git log --since="7 days ago" --oneline`
2. Read any notes in `/notes/this-week.md` if it exists
3. Check `/projects/` for files modified this week: `!find projects/ -newer projects/ -name "*.md"`
## Report Structure
Generate a Markdown report with:
### This Week
[What shipped, what was completed]
### Next Week
[What's planned]
### Blockers
[Anything blocking progress]
### Metrics
[Any numbers worth tracking]
Save the report to `/reports/YYYY-MM-DD-weekly.md` Skill de investigación competitiva (modo fork)
---
name: competitor-scan
description: Deep research on a competitor. Forks into Explore mode
to avoid polluting the main session context.
user-invocable: true
context: fork
agent: Explore
allowed-tools: WebSearch, Read
---
Research $ARGUMENTS as a competitor. Cover:
1. Product overview and positioning
2. Pricing tiers
3. Key differentiators vs. our product
4. Recent news (last 3 months)
5. User sentiment (reviews, social)
Return a structured report saved to `/research/competitors/$ARGUMENTS.md` 7.5 Workflows, Commands y Skills
En Claude Code, tres tipos de entidades invocables comparten espacio. Entender cuándo usar cada una es crítico:
Workflow (wor-) | Command (com-) | Skill (ski-) | |
|---|---|---|---|
| Qué es | Orquestación de múltiples pasos entre agentes | Acción directa y atómica | Procedimiento reutilizable |
| Quién lo invoca | Usuario (/wor-name) | Usuario (/com-name) | Usuario (/ski-name) o Claude (auto-match) |
| Reside en | .claude/commands/wor-*.md | .claude/commands/com-*.md | .claude/skills/ski-*/SKILL.md |
| Reutilizable por agentes | No — solo iniciado por usuario | No — solo iniciado por usuario | Sí — los agentes lo descubren vía descripción |
| Forma del output | Compleja — coordina agentes, produce output de múltiples pasos | Determinista — mismo comportamiento cada vez | Varía según input y contexto |
| Usar cuando | Pipeline de extremo a extremo: investigar → diseñar → implementar | Acción única: exportar, publicar, desplegar | Procedimiento necesario en múltiples contextos |
.claude/commands/. El prefijo (wor- vs com-) distingue su rol. Los Workflows orquestan procesos de múltiples pasos entre agentes; los Commands son acciones atómicas.wor-). ¿Acción única, siempre igual? → Command (com-). ¿Reutilizable por agentes? → Skill (ski-).7.6 Anatomía de un Command
Los commands residen como archivos markdown planos en .claude/commands/, con el prefijo com-. Los Workflows (wor-) comparten el mismo directorio. Sin estructura de subdirectorios — cada archivo es una entidad.
.claude/commands/
├── wor-content-pipeline.md ← workflow (orquestación de múltiples pasos)
├── com-deploy-staging.md ← command (acción atómica)
├── com-export-system.md
└── com-publish-version.md ---
description: Deploys the current branch to the staging environment.
Runs tests, builds, and pushes to staging via the deploy script.
Use with /deploy-staging before requesting a production review.
---
# Command: Deploy to Staging
Run the full staging deployment pipeline for the current branch.
## Behavior
1. Run the test suite: `!npm test`
2. Build the project: `!npm run build`
3. Execute the deploy script: `!bash scripts/deploy-staging.sh`
4. Report the deployed URL and any warnings
## Expected Output
A confirmation message with:
- Deployed URL
- Build duration
- Any test warnings
## Constraints
- Never deploy if tests fail — stop and report the failures
- Never deploy the `main` branch to staging — staging is for feature branches only
- If the deploy script exits non-zero, report the error verbatim Diferencias clave con archivos de Skill
| Propiedad | Skill | Command |
|---|---|---|
| Ubicación | .claude/skills/<name>/SKILL.md | .claude/commands/<name>.md |
| Frontmatter | Rico: name, description, user-invocable, allowed-tools, context, agent | Mínimo: solo description |
| Archivos de apoyo | Puede incluir plantillas, ejemplos en subdirectorio | Archivo plano único — sin subdirectorio |
| Estructura del cuerpo | Pasos y plantillas de forma libre | Objetivo → Comportamiento → Output esperado → Restricciones |
com- (ej., com-export-system.md). Los Workflows usan wor- (ej., wor-content-pipeline.md). Los Skills usan ski- como nombre de directorio (ej., ski-pr-review/SKILL.md).7.7 Ejemplos de Commands
Exportar sistema (delega a un script)
---
description: Exports the current project as a standalone git repository.
Initializes version tracking, creates initial commit, and optionally
pushes to GitHub. Use with /export-system after completing a build.
---
# Command: Export System
Initialize this project as its own independent Git repository.
## Behavior
1. Validate that the project directory contains the expected structure
2. Initialize a Git repo if one doesn't exist
3. Create a `.gitignore` for temporary and sensitive files
4. Create a `VERSION` file set to `0.1.0`
5. Make an initial commit and tag it `v0.1.0`
6. If `gh` CLI is available, offer to create a private GitHub repo
## Expected Output
Confirmation with:
- Repository path
- Initial version tag
- GitHub URL (if created)
## Constraints
- Never overwrite an existing Git repository — if `.git/` exists, stop and warn
- Never commit files matching `.env*` or `*credentials*` Traducción rápida (ligero, autocontenido)
---
description: Translates the content of a file or selection to a target
language while preserving formatting and code blocks. Use with
/quick-translate <language> to translate the current selection.
---
# Command: Quick Translate
Translate the provided content to $ARGUMENTS while preserving:
- All Markdown formatting
- Code blocks (leave code untranslated)
- Links and references
## Behavior
1. Identify the target language from `$ARGUMENTS`
2. Translate all human-readable text
3. Preserve technical terms, proper nouns, and code snippets
4. Return the translated content in the same format
## Expected Output
The full translated content, ready to paste or save.
## Constraints
- Never translate code, variable names, or file paths
- If no target language is specified, ask the user before proceeding
- Maintain the original document structure exactly Rules, Knowledge Bases y Hooks
8.1 Rules: Restringir el comportamiento
Una rule es una restricción o convención que moldea el comportamiento sin ejecutar nada. Las rules no hacen trabajo — restringen el trabajo.
Dónde residen las rules
| Ubicación | Comportamiento | Usar para |
|---|---|---|
CLAUDE.md sección | Siempre activa — cada sesión, cada agente | Convenciones universales del proyecto (breves) |
.claude/rules/rul-*.md | Bajo demanda — se carga cuando es referenciada o coincide | Reglas detalladas y específicas de dominio (seguridad, compliance, estilo) |
Archivos de rules independientes
Para rules que necesitan más estructura que un punto en CLAUDE.md, crea archivos independientes en .claude/rules/ con el prefijo rul-. Usa este formato estructurado:
## Context
This rule ensures that all generated output follows the organization's
brand guidelines. Without it, agents produce inconsistent formatting
that requires manual correction.
## Hard Constraints
- Never use first person in customer-facing content.
- Never exceed 80 characters per line in code comments.
- Never commit files without running the linter first.
## Soft Constraints
- Prefer active voice over passive voice.
- Use tables for structured comparisons instead of bullet lists.
- Keep function names under 30 characters when possible. Hard Constraints son obligatorias — los agentes nunca deben violarlas. Soft Constraints son comportamientos preferidos que pueden ser anulados por el contexto. Esta distinción da a los agentes una guía clara sobre qué es negociable y qué no.
Escribir rules efectivas
Las rules que solo dicen lo que no hacer fallan — los agentes no saben qué hacer en su lugar. Siempre proporciona la alternativa:
| Rule débil | Rule efectiva |
|---|---|
Nunca usar rm -rf | En vez de rm -rf, usar trash (más seguro, recuperable) |
| No escribir funciones largas | Mantener funciones bajo 40 líneas. Si es más larga, extraer un helper con nombre descriptivo. |
| No hacer queries directos a la base de datos | Todo acceso a BD va a través de la capa repository en /lib/db/ |
| No commitear secretos | Usar variables de entorno para credenciales. Agregar nuevas claves secretas a .env.example con un placeholder. |
Sección de rules en CLAUDE.md
## Rules
### File Modifications
- Never modify files outside the agent's designated directory
- Instead of deleting, move to /archive/YYYY-MM-DD/
- All new files go in the appropriate module directory — never at project root
### Code Style
- Functions: under 40 lines. Extract helpers rather than growing functions.
- Variable names: descriptive, no single letters except loop counters
- Instead of comments explaining what, write code that explains itself
### Output
- All agent outputs in Markdown unless the user requests another format
- Tables preferred over bullet lists for structured comparisons 8.2 Knowledge Bases: Referencia bajo demanda
Una knowledge base es un archivo (o conjunto de archivos) que los agentes consultan cuando necesitan información de referencia — no instrucciones, sino hechos, definiciones y contexto.
KB vs. CLAUDE.md: cuándo usar cuál
| Poner en CLAUDE.md | Poner en un archivo KB |
|---|---|
| Cosas que los agentes necesitan saber en cada sesión | Contenido de referencia que solo se necesita a veces |
| Convenciones y reglas breves | Material de referencia extenso (docs de API, glosarios) |
| Registro de agentes | Conocimiento específico de dominio que un agente usa para una tarea |
La clave para una KB útil: decir a los agentes cuándo leerla, no solo qué contiene.
.claude/knowledge-base/
├── kno-style-guide.md ← voz de marca, tono, reglas de formato
├── kno-api-reference.md ← endpoints y parámetros de API interna
├── kno-error-codes.md ← errores conocidos y pasos de resolución
└── kno-domain-glossary.md ← terminología de producto e industria Referencia archivos KB en las instrucciones del agente así:
When writing any customer-facing content, read `kno-style-guide.md`
for tone, vocabulary, and formatting requirements.
If you encounter an API error, check `kno-error-codes.md` before
attempting a workaround. docs/api.md para endpoints complejos" funciona mejor que "Los docs de API están en docs/api.md".8.3 Resources: Documentos de apoyo (res-)
Los resources son un tipo de entidad de primera clase — no solo un patrón. Extienden otras entidades cuando su contenido es demasiado extenso o detallado para el archivo principal. Los resources residen en .claude/resources/ con el prefijo res-.
.claude/resources/
├── res-api-full-reference.md ← specs detalladas de API (cargadas condicionalmente)
├── res-deployment-checklist.md ← procedimientos extendidos de despliegue
└── res-interview-questions.md ← árboles de preguntas para descubrimiento KB vs. Resource: cuándo usar cuál
Usar una Knowledge Base (kno-) | Usar un Resource (res-) |
|---|---|
| Referencia independiente que cualquier agente puede consultar | Documento de apoyo que extiende una entidad específica |
| Longitud moderada — se carga completo cuando se necesita | Denso o extenso — cargado condicionalmente por un agente |
| Autocontenido: guía de estilo, glosario, códigos de error | Complementario: spec completa de API, plantillas detalladas, árboles de preguntas |
Referencia resources condicionalmente desde las instrucciones del agente:
# Agent instructions (in the agent .md file)
For standard tasks, use the short API summary below.
For complex API usage or if you encounter a FooBarError,
read `res-api-full-reference.md` in `.claude/resources/`.
## Quick API Reference
POST /items — create item (body: {name, type})
GET /items/{id} — get item by ID
DELETE /items/{id} — delete item (requires admin role) El agente carga el resource completo solo cuando lo necesita — manteniendo el camino normal ligero y rápido.
8.4 Hooks: Automatización orientada a eventos
Los hooks se disparan automáticamente cuando ocurren eventos del sistema — no en respuesta a comandos del usuario. Son automatización, no agentes.
Eventos de hooks
| Evento | Se dispara cuando | Uso común |
|---|---|---|
PreToolUse | Antes de que Claude use una herramienta | Bloquear operaciones peligrosas, validar antes de escrituras |
PostToolUse | Después de que una herramienta completa | Auto-lint después de guardar archivo, registrar cambios |
Stop | Claude termina su respuesta | Notificar cuando una tarea larga se completa |
SessionStart | Comienza una nueva sesión | Cargar contexto, restaurar estado, saludar |
Notification | Claude envía una notificación | Enrutar notificaciones a Slack, email, etc. |
Configuración de hooks en settings.json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "./scripts/lint.sh",
"timeout": 30
}
]
}
],
"Stop": [
{
"matcher": ".*",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude finished\" with title \"Claude Code\"'"
}
]
}
]
}
} Tipos de handler
| Tipo | Qué hace | Usar para |
|---|---|---|
command | Ejecuta un comando de shell o script | Linting, validación, operaciones de archivos, notificaciones |
prompt | Inyecta un prompt en el contexto de Claude | Verificaciones ligeras que requieren comprensión contextual |
agent | Lanza un subagente (hasta 50 turnos de herramientas) | Tareas automatizadas complejas disparadas por eventos |
http | Hace una solicitud HTTP | Webhooks, integraciones externas, servicios de logging |
/hooks para configurar hooks interactivamente — Claude te guiará en la configuración y escribirá la entrada de settings.json por ti.Archivos de documentación de hooks
Mientras que los hooks se configuran en settings.json, puedes documentarlos en .claude/hooks/hok-*.md. Estos archivos explican qué hace cada hook y por qué — útil para onboarding del equipo y depuración:
.claude/hooks/
├── hok-auto-lint.md ← documenta el hook PostToolUse de lint
└── hok-safety-check.md ← documenta el hook PreToolUse de seguridad Tres hooks que vale la pena tener en todo proyecto
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [{
"type": "prompt",
"prompt": "Before running this command, confirm it won't cause irreversible changes. If it could delete data or modify production, stop and ask the user."
}]
}
],
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [{
"type": "command",
"command": "npx prettier --check $CLAUDE_FILE_PATH 2>/dev/null || true",
"timeout": 10
}]
}
],
"Stop": [
{
"matcher": ".*",
"hooks": [{
"type": "command",
"command": "echo 'Task complete' | terminal-notifier -title 'Claude Code'",
"timeout": 5
}]
}
]
}
} 8.5 Scripts: Automatización ejecutable (scp-)
Los scripts son procedimientos automatizados ejecutables — validación, despliegue, procesamiento de datos, o cualquier tarea que se ejecuta como comando de shell o script Python. Residen en .claude/scripts/ con el prefijo scp-.
.claude/scripts/
├── scp-lint-check.sh ← script de shell para linting
├── scp-validate-schema.py ← script Python de validación
└── scp-deploy-staging.sh ← automatización de despliegue En Claude Code, los scripts son siempre archivos ejecutables (.sh o .py), no descripciones en markdown. Son ejecutados por agentes, hooks o workflows — no invocados directamente por usuarios.
Script vs. Hook vs. Command
Script (scp-) | Hook (hok-) | Command (com-) | |
|---|---|---|---|
| Disparado por | Invocación de agente o hook | Evento del sistema (automático) | Usuario (/com-name) |
| Formato | Ejecutable .sh / .py | Configuración en settings.json | Archivo .md con instrucciones |
| Usar cuando | Procedimiento automatizado que los agentes invocan | Reacción orientada a eventos | El usuario quiere un atajo |
Ejemplo: Script de validación
#!/bin/bash
# scp-validate-structure.sh
# Validates that the project follows the expected directory structure
REQUIRED_DIRS=("agents" "skills" "rules" "knowledge-base")
MISSING=()
for dir in "${REQUIRED_DIRS[@]}"; do
if [ ! -d ".claude/$dir" ]; then
MISSING+=("$dir")
fi
done
if [ ${#MISSING[@]} -gt 0 ]; then
echo "Missing directories: ${MISSING[*]}"
exit 1
fi
echo "Structure valid."
exit 0 Un agente o hook puede referenciar este script: bash .claude/scripts/scp-validate-structure.sh