Claude Code — Reglas, Skills, Hooks y más para nuestro Claudio

RSN

¡Bienvenidos al hilo sobre Herramientas CLI y Agentes de IA! En este espacio vamos a hablar de cómo potenciar nuestro flujo de trabajo directamente desde la terminal, abordando conceptos clave como los archivos CLAUDE.md, las Skills, los Hooks, los Subagentes y otras utilidades que están revolucionando la forma en que interactuamos con nuestros proyectos.

Empezaremos por lo más fundamental, cómo darle memoria y contexto a tu agente, y desde ahí iremos escalando hacia capacidades cada vez más potentes.


CLAUDE.md — La memoria del proyecto

Claude Code tiene dos sistemas de memoria complementarios que se cargan al inicio de cada conversación. Ambos son tratados como contexto (no como configuración forzada): cuanto más específicas y concisas sean las instrucciones, más consistentemente las seguirá Claude.

Documentación oficial: https://code.claude.com/docs/en/memory

1. Archivos CLAUDE.md (instrucciones manuales)

Son archivos markdown que tú escribes para darle a Claude contexto persistente sobre tu proyecto. Se cargan automáticamente en la ventana de contexto al inicio de cada sesión.

Jerarquía y alcance

Claude Code busca y carga archivos CLAUDE.md de varias ubicaciones, con una jerarquía clara:

UbicaciónAlcanceUso típico
~/.claude/CLAUDE.mdGlobal (usuario): Aplica a todos tus proyectos.Preferencias personales de estilo, idioma, herramientas favoritas.
CLAUDE.md (raíz del proyecto)Proyecto: Aplica a todo el equipo si se commitea.Stack, convenciones, arquitectura, comandos de build/test.
.claude/CLAUDE.mdProyecto (alternativa): Igual que el anterior pero dentro de .claude/.Misma función, diferente ubicación.
.claude/rules/*.mdReglas modulares: Se descubren recursivamente.Una regla por tema (testing.md, api-design.md, etc.).

Las configuraciones de niveles superiores (Managed > User > Project) prevalecen sobre las inferiores.

Reglas por ruta con .claude/rules/

Para proyectos grandes, puedes organizar las instrucciones en archivos modulares dentro de .claude/rules/. Cada archivo cubre un tema, y puedes incluso acotar reglas a rutas específicas con frontmatter paths:, de modo que solo se cargan cuando Claude trabaja con archivos que coinciden con el patrón:

tu-proyecto/
├── .claude/
│   ├── CLAUDE.md
│   └── rules/
│       ├── testing.md          # Se carga siempre
│       ├── api-design.md       # Se carga siempre
│       └── frontend/
│           └── components.md   # Se carga siempre (o con paths: para acotar)
Importar archivos adicionales con @path

Puedes referenciar archivos externos desde tu CLAUDE.md para mantenerlo corto:

# Proyecto: Mi App
 
## Convenciones generales
- TypeScript estricto, sin `any`.
- Conventional Commits.
 
@docs/architecture.md
@docs/api-conventions.md

Tip: Los comentarios HTML (<!-- ... -->) se ocultan automáticamente a Claude cuando el CLAUDE.md se inyecta al inicio de sesión, así que puedes dejar notas para humanos sin gastar tokens.

Inicialización rápida con /init

El comando /init analiza tu codebase y genera un CLAUDE.md inicial como punto de partida.

2. Auto memory (memoria automática)

Además de los CLAUDE.md que tú escribes, Claude genera automáticamente un archivo MEMORY.md basado en tus correcciones y preferencias. Si corriges a Claude varias veces diciendo "en este proyecto usamos pnpm, no npm", guardará esa preferencia automáticamente. Se cargan las primeras 200 líneas o 25KB al inicio de cada sesión.

Gestiona la memoria con /memory (navegar, editar, eliminar) o pídele a Claude directamente que "recuerde" algo.

Buenas prácticas

  • < 200 líneas por CLAUDE.md. Si crece, divide con @path imports o .claude/rules/.
  • Sé específico y verificable: En lugar de "escribe buen código", di "no uses any en TypeScript, cada función pública con JSDoc".
  • No repitas lo obvio: Solo incluye lo que Claude no pueda inferir del código.
  • Compactación: Pon las reglas persistentes en CLAUDE.md (no solo en el chat). Añade una sección "Compact Instructions" para controlar qué se preserva al compactar.

🛠️ ¿Qué son las Skills?

En el ecosistema de agentes de IA por terminal, las Skills son extensiones basadas en prompts que amplían lo que la IA puede hacer. Al ejecutarse, la IA puede generar subagentes en paralelo, navegar y analizar archivos, y adaptarse al contexto de tu codebase.

Las skills de Claude Code siguen el estándar abierto "Agent Skills", extrapolable a Cursor, Codex CLI, Gemini CLI, etc.

Documentación oficial: https://code.claude.com/docs/en/skills

Estructura de una skill

Toda skill nace de un archivo SKILL.md con dos partes: un YAML frontmatter (entre ---) que configura name, description y opciones, y el contenido markdown con las instrucciones que la IA sigue al activarse.

Ejemplo de estructura básica:

---
name: explain-code
description: Explica el código usando diagramas visuales y analogías. Úsala cuando el usuario pregunte "¿cómo funciona esto?".
---
 
Cuando expliques código, incluye siempre:
 
1. **Una analogía:** Compara el código con algo de la vida cotidiana.
2. **Un diagrama:** Usa arte ASCII para mostrar el flujo o estructura.
3. **Paso a paso:** Explica qué ocurre de forma conversacional.
4. **Un "gotcha":** Señala errores comunes o malentendidos típicos.

Estructura de carpetas de una skill

Una skill puede ser solo un archivo, o un directorio completo con recursos adicionales:

.claude/skills/
└── mi-skill/
    ├── SKILL.md              # (obligatorio) Instrucciones principales
    ├── scripts/              # Scripts ejecutables para tareas deterministas
    │   └── validate.py
    ├── references/           # Documentación de referencia (se carga bajo demanda)
    │   └── api-spec.md
    └── assets/               # Plantillas, fuentes, iconos...
        └── template.html

La clave aquí es el concepto de Progressive Disclosure (revelación progresiva): al inicio, el agente solo carga el name y la description de cada skill en el prompt del sistema. Son metadatos ligeros. Solo cuando una skill se activa, el agente lee el SKILL.md completo y, si las instrucciones hacen referencia a otros archivos (como references/api-spec.md), los lee también bajo demanda. Esto mantiene la ventana de contexto limpia.

¿Dónde se guardan las skills?

UbicaciónAlcance
~/.claude/skills/Global (usuario): Disponibles en todos tus proyectos.
.claude/skills/Proyecto: Disponibles solo en ese proyecto. Se pueden commitear al repo.
PluginsLas skills también pueden instalarse como plugins de terceros.

Opciones avanzadas del frontmatter

Más allá de name y description, hay opciones útiles:

  • allowed-tools: Restringe las herramientas que la IA puede usar al ejecutar la skill (ej: [Read, Grep, Glob] para una skill de solo lectura).
  • disable-model-invocation: true: Solo tú puedes invocar esta skill (la IA no la activará sola). Útil para skills con efectos secundarios como despliegues.
  • user-invocable: false: Solo la IA puede invocarla. Ideal para convenciones y guías que el agente debe aplicar automáticamente.
  • context: fork: Ejecuta la skill en un subagente aislado para no contaminar el contexto de tu conversación principal.
  • argument-hint: Muestra una pista del argumento esperado, ej: "[nombre-del-archivo]".

¿Qué son los Hooks?

Si las Skills son "el qué", los Hooks son "el cuándo". Son disparadores que ejecutan comandos, prompts o subagentes en puntos específicos del ciclo de vida del agente. A diferencia de las instrucciones en CLAUDE.md (que son sugerencias), los hooks proporcionan control determinista: una acción garantizada que se ejecuta siempre.

Documentación oficial: https://code.claude.com/docs/en/hooks

El ciclo de vida de un hook

Ejecución del agente → Evento específico se dispara → Matcher lo evalúa → Hook se ejecuta

Los hooks se disparan en momentos concretos de la sesión. Los eventos principales son:

Evento¿Cuándo se dispara?Uso típico
PreToolUseAntes de ejecutar una herramientaBloquear comandos peligrosos, validar inputs
PostToolUseDespués de ejecutar una herramientaAuto-formatear archivos, ejecutar linters
UserPromptSubmitCuando el usuario envía un promptValidar o enriquecer prompts antes de que Claude los procese
StopCuando el agente termina de responderNotificaciones de escritorio, commits automáticos
SessionStartAl iniciar una sesiónInyectar variables de entorno, cargar contexto
SessionEndAl terminar la sesiónLogging, limpieza
NotificationCuando se muestra una notificaciónAlertas en Slack/escritorio
SubagentStartCuando arranca un subagentePreparar entorno para agentes específicos
SetupAl inicializar el repositorioConfiguración inicial del proyecto

Hay más eventos (como PermissionRequest, Elicitation, ConfigChange...), pero estos cubren los casos más comunes.

¿Dónde se configuran?

Los hooks se definen en archivos settings.json, que pueden estar en tres lugares:

  • ~/.claude/settings.jsonUsuario: Se aplican a todos tus proyectos.
  • .claude/settings.jsonProyecto: Específicos del repo, se commitean para compartir con el equipo.
  • .claude/settings.local.jsonProyecto local: Solo para ti, no se commitean.

Claude Code busca hooks en los tres archivos y dispara todos los que coincidan.

Tipos de handlers

Cuando un hook se dispara, ¿qué ejecuta? Hay cuatro tipos:

  1. command (Comando shell): Ejecuta un script que recibe JSON por stdin y comunica resultados mediante exit codes y stdout. Es el tipo más directo.

  2. http: Envía el JSON del evento como POST a una URL. El endpoint responde con el mismo formato JSON que los hooks de comando.

  3. prompt: Envía un prompt a un modelo de Claude para evaluación de una sola vez (sí/no). Ideal para validaciones semánticas.

  4. agent: Lanza un subagente con acceso a herramientas como Read, Grep y Glob para verificaciones más profundas antes de tomar una decisión.

Ejemplo práctico: Bloquear comandos destructivos

Un hook PreToolUse que impide que Claude ejecute rm -rf o DROP TABLE:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "echo \"$CLAUDE_TOOL_INPUT\" | grep -qE 'rm -rf|DROP TABLE' && exit 2 || exit 0"
          }
        ]
      }
    ]
  }
}

La magia está en los exit codes:

  • Exit 0: Todo OK, la acción procede. Claude Code parsea stdout buscando JSON.
  • Exit 2: Error bloqueante. La acción se cancela y stderr se envía a Claude como mensaje de error.
  • Cualquier otro código: Error no bloqueante (se registra pero no detiene la ejecución).

Modificar inputs (desde v2.0.10)

Los hooks PreToolUse también pueden modificar los inputs antes de que se ejecuten, no solo bloquearlos. El script intercepta, modifica el JSON, y la ejecución continúa con los parámetros corregidos (normalizar rutas, inyectar variables, forzar dry-run, etc.).

Condicionales con if: Filtrado granular

El matcher filtra solo por nombre de herramienta. Pero ¿y si quieres que un hook se ejecute solo para git push, no para cualquier comando Bash? Ahí entra el campo if, que se establece a nivel del handler y usa la sintaxis de reglas de permisos para matchear herramienta y argumentos:

  • "Bash(git *)" → Solo comandos git.
  • "Edit(*.ts)" → Solo archivos TypeScript.
  • "Write(src/api/*)" → Solo escrituras en src/api/.
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "npm run lint",
            "if": "Bash(git push*)"
          }
        ]
      }
    ]
  }
}

Sin el if, el lint se ejecutaría con cada ls o pwd. Con él, solo se dispara en git push.

Para combinar condiciones distintas, usa handlers separados cada uno con su propio if dentro del mismo matcher group (ej: uno con "if": "Edit(*.ts)", otro con "if": "Write(.env*)", etc.).

Restricciones: El if solo funciona en PreToolUse, PostToolUse, PostToolUseFailure y PermissionRequest — añadirlo a otro evento impide que el hook se ejecute. No soporta pipe dentro del if; para eso usa handlers separados o alternación en el matcher.


Subagentes

Los subagentes son asistentes de IA especializados que operan dentro de su propia ventana de contexto. Cuando Claude encuentra una tarea que encaja con la descripción de un subagente, le delega el trabajo. El subagente trabaja de forma independiente y devuelve los resultados.

¿Por qué usar subagentes?

El principal beneficio es preservar el contexto. Si le pides a Claude que haga una investigación profunda de tu repositorio, esa exploración puede consumir gran parte de tu ventana de contexto. Con un subagente, ese trabajo se hace en una ventana aparte y solo los resultados vuelven a tu conversación principal.

Subagentes incorporados

Claude Code incluye subagentes de fábrica que usa automáticamente:

  • Explore: Para exploración y lectura del repositorio. Ideal en modo plan.
  • Plan: Para diseñar estrategias de implementación sin hacer cambios.
  • General-purpose: Para tareas diversas delegadas.

Creando subagentes personalizados

Se definen como archivos markdown en .claude/agents/:

.claude/agents/
└── code-reviewer/
    └── AGENT.md
---
name: code-reviewer
description: Revisor de código experto. Úsalo proactivamente después de cambios de código.
tools: Read, Grep, Glob, Bash
model: sonnet
---
 
Eres un revisor de código senior. Cuando revises código:
 
- Busca vulnerabilidades de seguridad (SQL injection, XSS, etc.)
- Verifica que se siguen las convenciones del proyecto.
- Señala problemas de rendimiento.
- Sugiere mejoras concretas con ejemplos.

El campo tools restringe qué herramientas puede usar (en este caso, solo lectura y búsqueda). El campo model permite usar un modelo más barato (como Haiku) para tareas sencillas y así controlar costes.

Subagentes con memoria

Los subagentes pueden tener su propio archivo MEMORY.md que persiste entre sesiones. Puedes pedirle al subagente que consulte su memoria antes de empezar ("revisa tu memoria por patrones que hayas visto antes") y que la actualice al terminar ("guarda lo que has aprendido en tu memoria"). Con el tiempo, esto construye una base de conocimiento que hace al subagente cada vez más efectivo.

Foreground vs Background

Los subagentes pueden ejecutarse en primer plano (bloquean la conversación hasta que terminan) o en segundo plano (trabajan concurrentemente). Los de segundo plano son ideales para tareas que no necesitan interacción, como análisis de logs o ejecución de tests.

Documentación oficial de Subagentes: https://code.claude.com/docs/en/sub-agents


Slash Commands (Comandos con /)

Los slash commands son atajos que se ejecutan escribiendo /nombre en la terminal del agente. Históricamente existían como sistema separado (archivos .md en .claude/commands/), pero actualmente se han fusionado con las skills: ambos crean el mismo tipo de /comando. El formato de skills (.claude/skills/) es el recomendado porque soporta archivos complementarios, frontmatter avanzado y activación autónoma.

La diferencia clave: manual vs automático

  • Slash commands: Requieren que tú los invoques manualmente con /nombre.
  • Skills: Pueden ser invocadas tanto manualmente como automáticamente por Claude cuando detecta que son relevantes.

Comandos incorporados útiles

Claude Code trae más de 55 comandos incorporados. Algunos de los más útiles:

  • /compact — Comprime el historial de la conversación. Esencial para sesiones largas.
  • /clear — Limpia el contexto entre tareas no relacionadas.
  • /diff — Visor interactivo de todos los cambios que Claude ha hecho.
  • /plan — Entra en modo plan (también se puede alternar con Shift+Tab).
  • /memory — Ver y editar la memoria persistente del proyecto.
  • /context — Muestra una cuadrícula de cómo se está usando la ventana de contexto.
  • /loop [intervalo] [tarea] — Ejecuta una tarea en bucle (ej: /loop 5m check if deploy is done).
  • /batch — Aplica cambios en múltiples archivos en paralelo.

🔌 MCP (Model Context Protocol) — El adaptador universal

El Model Context Protocol es un protocolo abierto que conecta a los agentes de IA con herramientas y fuentes de datos externas. Piensa en MCP como un "USB-C" para la IA: una interfaz estándar para conectarse a GitHub, bases de datos, APIs, Slack, Google Drive y cualquier servicio que tenga un servidor MCP.

Cómo funciona en la práctica

# Instalar un servidor MCP
claude mcp add playwright npx @playwright/mcp@latest
 
# Usarlo como comando
/mcp__playwright__create-test [args]

Al conectar un servidor MCP, obtienes acceso a sus herramientas, recursos y prompts como slash commands dentro de tu sesión.

MCP vs Skills vs Hooks

ConceptoFunciónInvocación
MCPConecta sistemas externos (APIs, DBs, servicios)Automática o manual
SkillsAmplía las capacidades de la IA con instrucciones especializadasAutomática o manual (/skill)
HooksEjecuta acciones deterministas en eventos del ciclo de vidaAutomática (por eventos)
SubagentesDelega tareas a agentes especializados con contexto aisladoAutomática o manual (@agente)
CLAUDE.mdProporciona contexto persistente y convencionesAutomática (siempre cargado)

Scripts personalizados — El pegamento del workflow

Las docs oficiales cubren CLAUDE.md, Skills, Hooks y Subagentes, pero hay una pieza que queda fuera: los scripts propios que conectan todo. Los hooks disparan acciones, pero esas acciones necesitan lógica real — y ahí es donde entran tus scripts.

Un buen ejemplo de referencia es steipete/agent-scripts de Peter Steinberger — un repo público con guardrails compartidos entre proyectos: committer, políticas git, gestión de docs, trash como reemplazo de rm, y más. Muchos de los patrones que se describen a continuación siguen el mismo enfoque.

A continuación, un ejemplo real de cómo un workflow completo puede orquestarse con scripts que los hooks ejecutan. No es una receta única; es un patrón que puedes adaptar.

Estructura de ejemplo que uso yo

~/.claude/workflow/
├── scripts/
│   ├── committer              # Único camino permitido para commits
│   ├── git-policy.ts          # Política de seguridad git
│   ├── fetch-docs.ts          # Descarga docs de URLs a markdown
│   ├── chunk-docs.ts          # Divide docs grandes en chunks
│   ├── trash.ts               # Mover a papelera (nunca rm)
│   └── kill-stale-claude.sh   # Limpia sesiones Claude viejas
├── global/
│   ├── CLAUDE.md              # Protocolo global
│   └── bin/git                # Git shim (intercepta todo git)
└── templates/
    └── CLAUDE.md              # Template para proyectos nuevos

Patrón 1: Commit seguro con committer + git-policy.ts

La idea: git add y git commit directos están bloqueados. El único camino para commitear es un script committer que:

  • Solo hace staged de archivos listados explícitamente (nunca git add .)
  • Bloquea si el path es "." o el mensaje está vacío
  • Valida formato Conventional Commits
  • Genera un token temporal que autoriza al git shim a ejecutar las operaciones

¿Y quién bloquea los comandos git directos? Un script git-policy.ts que el git shim ejecuta antes de cada operación:

Comando git entra
  └─> git-policy.ts clasifica:
      ├── safe (status, log, diff, branch) → pasa siempre
      ├── blocked (add, commit) → solo con token de committer
      ├── guarded (push, pull, merge) → requiere consentimiento explícito
      └── destructive (reset --hard, push --force) → requiere consentimiento explícito

Esto convierte a Claude en un agente que no puede saltarse tu política de commits, sin importar cómo formule el comando.

Patrón 2: Quality gates con markers

Un paso más allá: no solo controlar cómo se commitea, sino exigir que se hayan completado pasos de revisión previos. Cada paso deja un marker (un archivo temporal), y el siguiente paso lo requiere:

PasoAcciónResultado
1. /code-reviewRevisa el códigoCrea marker ✅
2. /simplifySimplifica (requiere marker de paso 1)Crea marker ✅
3. /verifyVerifica (requiere marker de paso 2)Crea marker ✅
4. committerCommitea (requiere los 3 markers)Commit + limpia markers

Si Claude intenta commitear sin haber pasado los tres pasos, el script lo bloquea. Los markers se limpian automáticamente con un hook PostToolUse tras cada commit exitoso.

Patrón 3: Supervivencia a la compactación

Cuando la ventana de contexto se llena y Claude compacta, se pierde estado. Dos scripts resuelven esto:

  • pre-compact-handoff.sh — Antes de compactar: guarda working tree, archivos sin commit, commits recientes y plan activo en un archivo temporal.
  • post-compact-pickup.sh — Después de compactar: lee ese archivo y lo inyecta al contexto, incluyendo recordatorios del workflow.

Enganchados a los hooks correspondientes, hacen que Claude "recuerde" lo esencial tras cada compactación.

Patrón 4: Pipeline de documentación

Para mantener docs de referencia actualizadas y optimizadas para LLMs:

  • fetch-docs.ts — Descarga documentación desde URLs usando Chrome headless + Readability.js + Turndown. Soporta crawling con profundidad configurable y deduplica contenido repetido (navbars, footers).
  • chunk-docs.ts — Divide documentos grandes en chunks de 40K tokens respetando límites naturales de página, y genera un archivo índice.
  • trash.ts — Reemplaza rm en todo el workflow. Mueve a papelera (~/.Trash en macOS, ~/.local/share/Trash/files en Linux). Borrado permanente prohibido.

Patrón 5: Hooks de sesión

Dos hooks que acotan el inicio y fin de cada sesión:

  • session-snapshot.sh (SessionStart) — Captura qué archivos ya estaban dirty al inicio para que el stop gate no los cuente como pendientes.
  • stop-gate.sh (Stop) — Bloquea terminar la sesión si hay cambios source sin commitear. Ignora archivos que ya estaban dirty y archivos de config (.md, .json, .yaml).

El flujo completo

Sesión inicia
  └─> session-snapshot.sh (captura estado inicial)
 
Edición de archivos
  └─> PostToolUse: auto-lint / auto-typecheck
 
Quiero commitear
  └─> /code-review  → /simplify  → /verify  → committer
       └─> git-policy.ts valida el token
       └─> git add + git commit ejecutan
       └─> PostToolUse limpia markers
 
Compactación de contexto
  └─> pre-compact-handoff.sh → post-compact-pickup.sh
 
Fin de sesión
  └─> stop-gate.sh (bloquea si hay cambios sin commitear)

La clave es que ninguna de estas piezas funciona sola: los hooks disparan los scripts, los scripts aplican las políticas, el CLAUDE.md le dice a Claude que use committer en lugar de git commit, y las skills orquestan los quality gates. Es el stack completo en acción.


Cómo encaja todo

Cada pieza cubre un rol distinto: CLAUDE.md da contexto, Skills dan instrucciones especializadas, Hooks garantizan acciones, Scripts implementan la lógica, Subagentes aíslan trabajo pesado, MCP conecta servicios externos, y los slash commands dan control manual. Veámoslo en un flujo real:

Tú escribes: "Implementa la feature de autenticación con JWT"
 
1. Claude lee CLAUDE.md → sabe que usas Express + TypeScript + Prisma
2. Claude activa la skill "api-conventions" → sigue tus patrones de API
3. Claude delega exploración al subagente Explore → escanea el repo sin gastar tu contexto
4. Claude implementa el código
5. Hook PostToolUse → script de auto-lint formatea cada archivo
6. Hook PreToolUse → git-policy.ts bloquea si intenta git add/commit directo
7. Quality gates: /code-review → /simplify → /verify
8. committer "feat(auth): add JWT authentication" "src/auth.ts" "src/middleware.ts"
9. Claude termina → Hook Stop → stop-gate.sh verifica que no queda nada pendiente

¿Y ahora qué?

La idea de este hilo es que podamos construir entre todos en Mediavida una biblioteca compartida: skills que os funcionen, configuraciones de hooks que hayáis probado, normas para CLAUDE.md (tanto globales como específicas de stack), scripts, workflows... Todo lo que os haya ahorrado tiempo o dolores de cabeza.

Compartid lo que tengáis, preguntad lo que necesitéis, y vamos montando algo útil para todos.


Recursos y enlaces

46
RSN

Pillo sitio

Os dejo algunas skills que tengo creadas:

Revisión de código pre-commit:

spoiler

Verificador pre-commit:

spoiler

Testeo extremo extraído de la filosofía de testing de Antirez, el creador de Redis (Salvatore Sanfilippo, tiene canal de Youtube).

spoiler
Zireael

Sitio para leer detenida y pausadamente.

RSN

Le he pedido a GPT 5.4 high que iterara de forma minuciosa por el source code leakeado de cierta empresa famosa y me ha dado ciertos patrones que siguen:

spoiler

He añadido a #1 https://llm.codes/ es una página bastante interesante que adapta la documentación y la formatea de una forma para que sea consumida por los LLM. Esto en mi caso por ejemplo elimina por completo la necesidad de tener a context7 MCP. Dentro de los proyectos en la carpeta docs/ meto todos los docs del stack que se usa y con el script solo se leen cuando es necesario o se indica de forma manual.

1
isvidal

Te pareceria convertirlo en el hilo oficial de Claude Code?

2 respuestas
RSN

#5 Claro! Como quieras. Adapta el título a tu gusto.

1
Jastro

#5 me sorprende que no lo hayas abierto tu, solo tenias que copiar el otro.

Vuelta al inicio \o/

1
TripyLSD

Like & subscribe 👍 mis dieses por la guia

Inertia

A favoritos, tremendo curro, tocará pasarse a menudo por aquí, esto va a ser el vademécum de Claude.

Muchas gracias por compartirlo!

OrahOrahORAH

Hilo Excelente

draz1c

Que bestialidad de guia! muchas gracias :exploding_head:

1
RSN

Invoco a @desu para que pase a dejar su conocimiento. Seguro que tiene algo chulo que decir.

Runig666

¿Por qué usar subagentes?
El principal beneficio es preservar el contexto. Si le pides a Claude que haga una investigación profunda de tu repositorio, esa exploración puede consumir gran parte de tu ventana de contexto. Con un subagente, ese trabajo se hace en una ventana aparte y solo los resultados vuelven a tu conversación principal.

Ok...la idea bien.

Pero porque llamarlo subagente, cuando no deja de ser una tool, pero que llama a otra LLM por debajo?

Lo de las Skills lo entiendo, son promts a trozos. Pero lo del subagente es algo que no termino de entender porque se le considera otro concepto

PD: MCP, el protocolo, soporta tambien prompts y skills que recuerde. Lo que yo estoy montando es que directamente no tiene ni tools, va todo a MCP aunque sea local

1 respuesta
BaRtoZ

Muy top. Enhorabuena. Llevo tiempo trasteando con los CLI y claude es simplemente brutal. A ver si Google se la saca compitiendo con esta gente..

Zh3RoX

Pero qué habéis borrado el otro hilo de Claude del subforo de desarrollo? Tenía mucha info interesante, podíais haber movido ese aquí y haber renombrado el título.

1 respuesta
covaga

#15 hace meses que se le cambio el nombre.

añado un poco de como funciona los agentes en claude


Modo de trabajo básico.

Cadenas de prompts

Cuándo utilizar este flujo de trabajo: Este flujo de trabajo es ideal para situaciones en las que la tarea se puede desglosar de forma sencilla y clara en subtareas fijas. El objetivo principal es sacrificar la latencia a cambio de una mayor precisión, al convertir cada llamada al LLM en una tarea más sencilla.

Ejemplos en los que resulta útil el encadenamiento de prompts:
Generar textos de marketing y, a continuación, traducirlos a otro idioma.
Redactar un esquema de un documento, comprobar que el esquema cumple ciertos criterios y, a continuación, redactar el documento basándose en el esquema.

Workflow: Routing


Cuándo utilizar este flujo de trabajo: El enrutamiento funciona bien para tareas complejas en las que existen categorías diferenciadas que es mejor gestionar por separado, y en las que la clasificación puede realizarse con precisión, ya sea mediante un modelo de lenguaje grande (LLM) o un modelo o algoritmo de clasificación más tradicional.

Ejemplos en los que el enrutamiento resulta útil:

Dirigir diferentes tipos de consultas de atención al cliente (preguntas generales, solicitudes de reembolso, asistencia técnica) hacia distintos procesos, indicaciones y herramientas posteriores.
Dirigir las preguntas fáciles o comunes a modelos más pequeños y rentables, como Claude Haiku 4.5, y las preguntas difíciles o inusuales a modelos más potentes, como Claude Sonnet 4.5, para optimizar el rendimiento.

Workflow: Parallelization

Cuándo utilizar este flujo de trabajo: La paralelización resulta eficaz cuando las subtareas divididas pueden procesarse en paralelo para ganar velocidad, o cuando se necesitan múltiples perspectivas o intentos para obtener resultados más fiables. En el caso de tareas complejas con múltiples consideraciones, los modelos de lenguaje grande (LLM) suelen ofrecer un mejor rendimiento cuando cada consideración se gestiona mediante una llamada LLM independiente, lo que permite centrar la atención en cada aspecto específico.

Ejemplos en los que la paralelización resulta útil:

Seccionamiento:
Implementación de medidas de seguridad en las que una instancia del modelo procesa las consultas de los usuarios, mientras que otra las filtra en busca de contenido o solicitudes inapropiadas. Esto suele funcionar mejor que hacer que la misma llamada al LLM se encargue tanto de las medidas de seguridad como de la respuesta principal.
Automatización de evaluaciones para valorar el rendimiento de los LLM, en las que cada llamada a un LLM evalúa un aspecto diferente del rendimiento del modelo ante una solicitud determinada.
Votación:
Revisión de un fragmento de código en busca de vulnerabilidades, en la que varias solicitudes diferentes revisan y marcan el código si encuentran un problema.
Evaluación de si un contenido determinado es inapropiado, con múltiples solicitudes que evalúan diferentes aspectos o que requieren distintos umbrales de votación para equilibrar los falsos positivos y los falsos negativos.

Workflow: Orchestrator-workers

Cuándo utilizar este flujo de trabajo: Este flujo de trabajo resulta ideal para tareas complejas en las que no es posible predecir las subtareas necesarias (por ejemplo, en programación, el número de archivos que hay que modificar y la naturaleza del cambio en cada archivo suelen depender de la tarea). Aunque es similar desde el punto de vista topográfico, la diferencia clave con respecto a la paralelización es su flexibilidad: las subtareas no están predefinidas, sino que las determina el orquestador en función de la entrada específica.

Ejemplo en el que resulta útil el modelo «orquestador-trabajadores»:

Codificación de productos que realizan cambios complejos en varios archivos cada vez.
Tareas de búsqueda que implican recopilar y analizar información de múltiples fuentes en busca de posible información relevante.

Workflow: Evaluator-optimizer

Cuándo utilizar este flujo de trabajo: Este flujo de trabajo resulta especialmente eficaz cuando contamos con criterios de evaluación claros y cuando el perfeccionamiento iterativo aporta un valor cuantificable. Los dos indicios de que es adecuado son, en primer lugar, que las respuestas del LLM puedan mejorarse de forma demostrable cuando un humano formula sus comentarios; y, en segundo lugar, que el LLM pueda recibir dichos comentarios. Esto es análogo al proceso de redacción iterativo por el que puede pasar un escritor humano al elaborar un documento pulido.

Ejemplos en los que el evaluador-optimizador resulta útil:

Traducción literaria, donde hay matices que el LLM traductor podría no captar inicialmente, pero en la que un LLM evaluador puede aportar críticas útiles.
Tareas de búsqueda complejas que requieren múltiples rondas de búsqueda y análisis para recopilar información exhaustiva, en las que el evaluador decide si se justifican más búsquedas.

5
RSN

#13 Lo llaman subagente en sus docs yo diría que porque actúan en una ventana de contexto limpia y porque además pueden tener comportamientos determinados.

Lo que hace el comando /simplify por ejemplo es lanzar 3 subagentes que trabajan en paralelo con objetivos distintos. Es decir, tienen un contexto limpio, lo único que les llega es el git diff...

Pero sí, en el fondo es como si abrieras más terminales y lanzaras claude de nuevo.

1 1 respuesta
Runig666

#17 Claro, pero como una tool.

Quiero decir, yo tengo una tool que "resume texto", por decirte algo.

Que esa Tool vaya por una LLM, o sea un chino leyendo al primer agente se la bufa, la tool solo tiene el parámetro del texto.

Por eso me choca tanto qjr tengan otro nombre.


Tengo que ver, en mi invento se PHP, a ver si puedo lanzar peticiones MCPs en paralelo. Ojala hacerlo código abierto.

1 respuesta
RSN

#18 De hecho Claude Code para explorar archivos usa sub-agentes para no contaminar la ventana de contexto. Es algo que introdujeron hace ya algunas versiones.

laZAr0

Buen curro, enhorabuena.

privet

like y subscribe

RSN

Os cuento un sistema de memoria externa que monté (un RAG) aunque en el fondo con el tiempo he visto que no tiene tanto sentido como pensaba.

spoiler

Hay muchísimas ideas como esta que leyendo 3-4 docs y viendo proyectos similares, dándole ese contexto a la IA en la carpeta docs/ que tengo siempre en mis proyectos, los oneshotea que da gusto en 2-3 iteraciones.

De hecho al RAG le añadí una ingesta de PR/issues de repos como Open Claw y Prometheus con Qwen de por medio para procesar esos datos y resumirlos antes de meterlos en el RAG.

1 respuesta
RSN
RSN
1
Cna

#22 Una de las primeras cosas que intenté hacer con un LLM fue crear un RAG que hiciera embedding y vectorización estructurada con metadatos de todas las filas de una base de datos pequeña.
Todo en local, con ollama, levantando un MCP para consumir externamente las respuestas y hacer peticiones desde un front etcétera.
El resultado fue bastante malo. Todo lo que implica un RAG para que mi modelo local tuviera contexto de datos internos reventaba el rendimiento por falta de memoria. Para algo muy pequeño no tenía problemas pero para que transformara las filas de la BBDD a texto, las vectorizara y generara las relaciones semánticas necesitaba tanto espacio en memoria que la mayoría de respuestas se quedaban a medias porque solo era capaz de recuperar un 10% de las coincidencias.

Como era bueno para resolver casos contextuales (una pregunta donde con una sola coincidencia ya pudiera responder por contexto), pero horrible para cuestiones cuantitativas (una pregunta como "¿Cuantas veces pasó esta cosa?"), desarrolle otra pata entera centrada en herramientas particulares para preguntas cuantitativas tirando de consultas SQL estructuradas dependiendo de lo que el usuario pidiera.
Al hacer esto último tenía dos tipos de respuesta: la cuantitativa rápida definida que iba como un tiro (generaba su propia consulta SQL, la ejecutaba y daba una respuesta) en 2 segundos y la contextual por relaciones semánticas que consultaba los índices y formaba la respuesta con una ventana de contexto máximo. La última tardaba 1 minuto por respuesta. Si de alguna forma le pedía que hiciera las dos cosas, se rayaba mucho. Ah! y todo esto no sin antes estar 5-6 minutos para generar los vectores con cabeceras que de primeras, para que fuera potable, cachee en el servidor tras una primera generación pero después tenía el problema de que si en algún momento ese sistema se convertía en un producto, si quería datos actualizados, tendría que hacerlo cada vez que hubiera un cambio en la BBDD y esto podía pasar en cualquier momento. Eso o que cacheara todo una vez al día y las respuestas estuvieran basadas en información que ya no estaba totalmente actualizada.

Era un mierdón. Eso si, el ejercicio heurístico estuvo bien. Si no me hubiera puesto las limitaciones de que fuera 100% local con una 3060 y 16gb de RAM igual saco algo más potable.

3 respuestas
RSN

#25 Guapísimo jajaja.

Una cosa que he visto por ahí de un creador de contenido es https://github.com/Gentleman-Programming/engram?tab=readme-ov-file

Agent (Claude Code / OpenCode / Gemini CLI / Codex / VS Code / Antigravity / ...)
↓ MCP stdio
Engram (single Go binary)

SQLite + FTS5 (/.engram/engram.db)

Y lo que me pasó ayer @covaga que aún no he podido mirar: https://github.com/covagashi/Eplan_2026_IA_MCP_scripts/tree/main/cloudflare_rag

D10X

#25 Para uso personal, ¿no tiene más sentido usar un RAG externo y delegar toda esa carga?

Yo había pensado en montarlo en cloudflare o mongo que tienen capa gratuita. Pero a lo mejor me estoy liando. Si no es para algo a largo plazo, no le veo sentido al RAG.

2 respuestas
RSN

https://github.com/ArkNill/claude-code-cache-analysis/blob/main/BENCHMARK.md

Después de leerme esto en diagonal + pedirle ayuda a Claude las dos posibles "mejoras" para el problema en el consumo de tokens parecen ser.

  1. Hacer downgrade a la versión 2.1.68 e instalar siempre via npm.
  2. Instalar la nueva version 2.1.90 via npm y deshabilitar las actualizaciones automáticas por si las moscas.

Está todo bastante bien documentado en el link de arriba.

covaga

#27 cloudfare te lo deja muy facil. yo lo tenia en local con chroma pero al final decidí dejarlo como mcp por comodidad.

lo que me hizo claude fue pasar mi llama index de chroma al vectorize de cloudfare y hacer la puesta en marcha ligando el repositorio de github al worker en cloudfare.

en cloudfare lo tengo solo como top k3 con el bge1.5. Pero dentro de cloudfare puedes tener un segundo worker que tenga una llm grande como qwen o gemma para que haga la busqueda y de el restado mascado.

si quereis podria poner imagenes

TripyLSD

#25 No me he metido con las nuevas capacidades de IA en BBDD a fondo, pero justo estoy empezando a ver cositas nuevas que vienen en Oracle 26ai y creo que básicamente vienen a solucionar lo que probaste a hacer.
​En esta última versión Oracle ha metido de forma nativa vectores como un nuevo datatype con los índices dentro y consultas SQL en lenguaje natural (select AI) y ella misma genera y ejecuta el SQL.
​Me suena que hay una versión free que corre en contenedores con límites de 2GB de RAM, por lo que podrías hacer esos RAG en local sin que el equipo te reviente. Si un día te da por probarlo coméntame

Edit ; this https://www.oracle.com/database/free/?hl=es-ES