milestone
Milestone v2 — Persistent Development Context
Storage: two-tier cache
~/.claude/projects/<project>/memory/milestone_<slug>.md ← HOT (~100 tok, auto-loaded vía MEMORY.md)
<project-root>/.milestones/<slug>.md ← AUTHORITATIVE (historial completo)
Regla de lectura: Snapshot de memoria primero. Solo .milestones/ si necesitas historial completo o la memoria no existe. Nunca leer ambos si la memoria tiene la información suficiente.
Regla de escritura: Cada write a .milestones/<slug>.md → actualizar también el snapshot. Ruta: ~/.claude/projects/$(pwd | sed 's|/|-|g; s|^-||')/memory/.
Por qué esto importa: Leer un archivo de milestone de 70 líneas cuesta ~1.500 tok. El snapshot cuesta ~100 tok. En una conversación de 40 mensajes, cada tool call reenvía TODO el historial — el contexto acumulado invisible multiplica el coste real 5-10x. Un snapshot en memoria elimina lecturas y mantiene el contexto mínimo.
When to use milestone vs alternatives
Antes de crear un milestone, pregúntate:
- ¿Abarca múltiples sesiones? → No: usar TodoWrite o Plan mode
- ¿Necesito contexto para retomar? → No: la tarea es autocontenida
- ¿Hay decisiones arquitectónicas que recordar? → Sí: milestone captura el "por qué"
- ¿Sesiones futuras tocarán esto? → Sí: milestone es el briefing para la siguiente
Todas "no" → TodoWrite/Plan. Al menos una "sí" → milestone.
Complexity classification
| Nivel | Criterio | Acción |
|---|---|---|
[simple] |
1 archivo, cambio claro, sin dependencias | Ejecutar directamente |
[complejo] |
2+ archivos, nuevo servicio, refactor, integración, lógica nueva | BLOQUEANTE: plan antes de ejecutar |
Plan para [complejo]: Plan mode o /gepetto → guardar en .milestones/plans/<slug>-<subtask>.md → añadir referencia en el milestone. Previene el ciclo caro de prueba-error (6+ edits iterativos en el mismo archivo).
Before starting any subtask
Antes de escribir código, pregúntate:
- ¿Cuántos archivos toca? → >2 =
[complejo], necesita plan - ¿Puedo describir el cambio en una frase? → No: el alcance no está definido, planificar primero
- ¿Hay dependencias con otras subtareas? → Documentar en el plan
- ¿He hecho algo similar en este milestone? → Buscar en el contexto antes de repetir trabajo
- ¿Necesito leer archivos grandes? → Usar
offset/limitsi solo necesito una sección
Reference loading guide
| Comando | Cargar | Do NOT load |
|---|---|---|
/milestone (list) |
Nada — solo frontmatter limit:8 |
templates.md, errors.md, qa-validation.md, .milestones/ completos |
/milestone <name> |
Solo snapshot de memoria | templates.md, errors.md, qa-validation.md, .milestones/ si memoria suficiente |
/milestone init |
templates.md (MANDATORY), project-audit.md (si hay doc técnico) | errors.md, qa-validation.md |
/milestone sync |
project-audit.md (MANDATORY) | templates.md, errors.md |
/milestone done |
qa-validation.md (MANDATORY) | templates.md, errors.md |
/milestone update |
Nada — contenido ya en contexto | templates.md, errors.md, qa-validation.md |
| Corrupción detectada | errors.md (MANDATORY) | templates.md, qa-validation.md |
Commands
Phase 1 — Discovery
/milestone — Listar todos
Si .milestones/ no existe → sugerir /milestone init <nombre>.
Leer solo frontmatter (primeras 8 líneas) de cada archivo con limit:8. Mostrar tabla:
| Estado | Hito | Progreso | Actualizado |
| 🟡 | Dashboard Propietario | 3/7 | 2026-04-09 |
🟢 completado · 🟡 en progreso · 🔴 no iniciado · ⚠️ sin actividad >30 días.
Checkpoint: si hay >3 milestones en progreso → advertir al usuario que la dispersión reduce calidad. Sugerir priorizar.
/milestone <name> — Cargar contexto
Fuzzy match: "dash" → "dashboard-propietario". Ambiguo → opciones numeradas. Sin match → listar disponibles.
- Leer snapshot de memoria (ya en contexto vía MEMORY.md — zero reads)
- Si no hay snapshot o está desactualizado: leer
.milestones/<slug>.md - Mostrar: objetivo, progreso, subtareas pendientes, último contexto, siguiente acción sugerida
- Para subtareas
[complejo]pendientes: indicar si tienen plan o si hay que crearlo
Checkpoint: antes de sugerir siguiente acción, verificar si hay dependencias entre subtareas pendientes.
Phase 2 — Planning
/milestone sync — Auditoría del proyecto vs milestones
MANDATORY — LEER COMPLETO: Cargar references/project-audit.md.
Cruza documento técnico + codebase + milestones existentes para detectar:
- Milestones desactualizados (subtareas completadas sin marcar, código nuevo sin reflejar)
- Funcionalidades descritas en el doc técnico sin milestone
- Deuda técnica no trackeada
Presenta informe con tabla de cobertura (✅/🟡/🔴/⚠️), propone actualizaciones y nuevos milestones con subtareas. Espera confirmación antes de crear o modificar nada.
Trigger automático: al ejecutar /milestone (listar) si hace >14 días de la última auditoría → sugerir ejecutar sync.
/milestone init <name> — Crear nuevo
Verificar que no existe uno similar (por nombre o por objetivo) → si existe, sugerir añadir subtareas al existente.
Cargar references/templates.md (MANDATORY).
Si el proyecto tiene documento técnico (CLAUDE.md, docs/, spec): antes de crear, cargar references/project-audit.md y verificar si hay otras funcionalidades sin milestone. Ofrecer crear todos los milestones necesarios de una vez, no solo el solicitado — el usuario decide cuáles confirmar.
- Extraer objetivo o preguntar
- Analizar el codebase para estado actual relevante
- Proponer subtareas con
[simple]o[complejo]y definición clara de "done" - Para
[complejo]: proponer crear plan antes de confirmar - Esperar confirmación antes de guardar subtareas pendientes
- Crear
.milestones/<slug>.md+ snapshot de memoria + pointer enMEMORY.md
Checkpoint: repasar las subtareas propuestas — ¿cada una tiene una definición de "done" verificable? Si no, refinar antes de guardar.
Phase 3 — Execution
/milestone start <name> — Nueva sesión limpia
Solo cuando el usuario lo pide explícitamente. Nunca sugerir.
Script en references/milestone-new-session.sh. Auto-install:
- Si
~/.claude/milestone-new-session.shno existe → copiar desde references +chmod +x bash ~/.claude/milestone-new-session.sh "$(pwd)" "<slug>"
macOS: abre iTerm2/Terminal.app. Linux: muestra comando para copiar.
/milestone done <name> <subtask> — Completar subtarea
Fuzzy match en milestone y subtarea. Si subtarea ya [x] → advertir, no duplicar.
MANDATORY — LEER COMPLETO: Antes de marcar [x], cargar y seguir references/qa-validation.md (3 fases: backend + frontend + diseño/Figma).
NUNCA marcar [x] sin completar la validación QA. Si cualquier criterio falla, la subtarea queda pendiente.
Edit mínimo: old_string = solo la línea del checkbox. No incluir contexto circundante.
Añadir entrada en ## Contexto con resumen QA. Actualizar snapshot de memoria.
Phase 4 — Review
/milestone update <name> — Actualizar tras sesión
Antes de actualizar, pregúntate:
- ¿Hay cambios sin commitear? →
git status— si hay, el trabajo está en curso, no completado - ¿El usuario ha dicho qué hizo? → Sí: usar su input. No: inferir de git log + archivos en contexto
- ¿Alguna subtarea se completó? → Si hay evidencia clara (código existe, tests pasan): marcar
[x]con QA. Si no hay certeza: preguntar antes de marcar
| Señal | Acción |
|---|---|
| Subtarea tiene código nuevo que cumple su "done" | Cargar references/qa-validation.md, ejecutar QA, marcar [x] solo si pasa |
| Código parcial, subtarea a medias | Añadir nota en ## Contexto, NO marcar [x] |
| Se tomó una decisión arquitectónica | Añadir en ## Decisiones con fecha + razón |
| Se descubrió un problema nuevo | Añadir subtarea pendiente (pedir confirmación) |
| Se modificaron archivos no referenciados | Añadir en ## Referencias |
Marcar [x], añadir ## Contexto, actualizar ## Referencias. Sync memoria.
Sync de memoria tras cada write
Regenerar snapshot compacto tras cualquier write/edit a .milestones/:
**<Nombre>** | <status> | <done>/<total> | <fecha>
Objetivo: <primera línea>
Pendiente: <lista [ ] o "(ninguna)">
Último avance: <primera línea del Contexto más reciente>
Archivos clave: <basenames, máx 6>
Destino: ~/.claude/projects/$(pwd | sed 's|/|-|g; s|^-||')/memory/milestone_<slug>.md.
Crear pointer en MEMORY.md si es milestone nuevo.
Si falla: mkdir -p del directorio → reintentar → si persiste: advertir al usuario (milestone funciona sin memoria, solo más lento).
Auto-status
Recalcular en cada write: todos [x] → completed, algunos → in-progress, ninguno → not-started. Actualizar frontmatter status y updated. Errores de formato → references/errors.md.
Freedom calibration
| Operación | Libertad | Motivo |
|---|---|---|
| init (definir subtareas) | Alta | Múltiples descomposiciones válidas, creatividad en estructura |
| sync (auditoría proyecto) | Media | Juicio necesario para clasificar cobertura, pero confirmación obligatoria antes de modificar |
| load (mostrar estado) | Media | Formato definido pero juicio en qué destacar al usuario |
| done (marcar checkbox) | Baja | QA obligatoria → Edit exacto si pasa, bloquear si falla |
| update (registrar trabajo) | Media-baja | Inferir con evidencia (git, contexto), preguntar ante duda, nunca inventar |
| start (nueva sesión) | Baja | Script exacto, sin interpretación |
Edge cases
| Situación | Acción |
|---|---|
.milestones/ no existe |
Sugerir /milestone init <nombre> |
| Fuzzy match ambiguo (2+ resultados) | Mostrar opciones numeradas, pedir elección |
| Fuzzy match sin resultado | Listar todos los milestones disponibles |
Subtarea ya [x] en /milestone done |
Advertir, no marcar de nuevo |
| Path con espacios o acentos | Escapar con comillas en comandos bash |
| Milestone con >20 subtareas | Sugerir dividir en sub-milestones |
## Contexto con >10 entradas |
Las más antiguas pierden relevancia — sugerir archivar a ## Contexto archivado |
| Snapshot de memoria con fecha < milestone | Regenerar desde archivo authoritative |
Milestone stale (>30 días sin updated) |
Flag ⚠️ en listing, preguntar si cerrar o retomar |
| Usuario quiere cerrar/cancelar/archivar con subtareas pendientes | Preguntar motivo. Marcar subtareas pendientes como [-] (cancelada) o dejar [ ]. Cambiar status a completed o cancelled. Añadir nota en Contexto con razón del cierre |
| QA falla pero usuario insiste en marcar done | Explicar qué falló, ofrecer fix. Si insiste: marcar [x] con ⚠️ QA parcial en contexto |
| Subtarea depende de otra no completada | Advertir de la dependencia, sugerir completar la otra primero |
NEVER
- NUNCA leer
.milestones/si el snapshot de memoria tiene la información suficiente — duplica tokens sin aportar nada. - NUNCA leer
.milestones/+ snapshot en la misma operación — el coste acumulado en 40 mensajes es 10x lo visible. - NUNCA ejecutar subtarea
[complejo]sin plan — la experiencia muestra que produce 6+ edits iterativos al mismo archivo, cada uno más caro que un plan previo. - NUNCA leer
references/templates.mden load/done/update — solo se necesita en init; cargarlo en otros comandos desperdicia ~900 tok. - NUNCA usar
old_stringgrande en Edit de checkbox — incluir contexto circundante causa fallos de unicidad y edits fallidos. - NUNCA hacer 3+ Edits al mismo archivo — Write es 6x más barato cuando hay múltiples cambios (Edit reenvía el archivo entero en cada call).
- NUNCA crear milestone para trabajo de <1 hora — TodoWrite existe para eso; un milestone vacío ensucia el listing y nadie lo mantiene.
- NUNCA crear milestone sin verificar que no existe uno similar — dos milestones para lo mismo causan split-brain: el trabajo se trackea en uno pero no en otro.
- NUNCA guardar subtareas pendientes sin confirmación del usuario — las subtareas
[x]son hechos verificables, pero las[ ]son el plan del usuario, no el tuyo. - NUNCA marcar
[x]sin pasar la validación QA — código "que debería funcionar" es la fuente #1 de bugs que el usuario descubre después. - NUNCA dejar snapshot de memoria desactualizado tras write — la siguiente sesión arrancará con datos obsoletos y tomará decisiones equivocadas.
- NUNCA exceder 10 milestones activos simultáneos — más de 10 significa que ninguno recibe atención suficiente y todos se quedan stale.
- NUNCA borrar entradas de
## Contexto— es append-only porque las sesiones futuras necesitan entender qué se intentó y por qué, incluyendo los errores.
More from j4rk0r/claude-skills
skill-advisor
Pre-execution assistant that builds a full execution plan with installed skills (✅) AND uninstalled gaps (❌) the task needs, then offers to install missing skills one by one. Use BEFORE starting any multi-step task. Triggers: 'recommend skills', 'what skill should I use', 'advise', 'suggest', 'help me with', or any work instruction involving code, design, planning, debugging, docs, testing, commits, PRs, strategy.
9skill-guard
Security auditor for Claude Code skills. Analyzes skills BEFORE installation using a 9-layer threat detection engine (permissions, static patterns, LLM semantic analysis, bundled scripts, data flow, MCP abuse, supply chain, reputation, anti-evasion) with scoring 0-100 and community audit registry. MUST be used whenever the user is about to install a skill — via npx skills add, /find-skills recommendation, /skill-advisor suggestion, or manual request. Also use when user says 'is this skill safe', 'audit this skill', 'check this skill', 'security scan', 'review before installing', or any mention of skill safety/trust/security. Intercept ALL skill installations proactively.
8skill-learner
>
6lint-drupal-module
Lint review completo de un módulo Drupal 11 combinando 4 fuentes en paralelo — PHPStan level 5 + phpstan-drupal, PHPCS Drupal/DrupalPractice, agente drupal-qa (estándares) y agente drupal-security (OWASP). Dos modos — completo (todo el módulo) y diff (solo archivos cambiados vs develop). Genera informe markdown estructurado en la carpeta del IDE con resumen ejecutivo, hallazgos clasificados por severidad, acciones P0/P1/P2 y comandos de verificación. Úsalo siempre que el usuario quiera auditar calidad o seguridad de un módulo Drupal custom, aunque no diga "lint". Triggers — "lint review", "lint del módulo", "auditar módulo Drupal", "revisar módulo custom", "phpstan del módulo", "validar módulo", "qa del módulo", o cuando el usuario pregunta "¿está bien este módulo?", "¿hay errores?", "¿es seguro?". También antes de un release, antes de un PR a develop, o al validar un módulo recién creado.
6usage-tracker
Track and report local Claude Code usage per request: tokens consumed, estimated cost in €, sessions, projects, and tool breakdown. Use when the user asks about consumption, credits, usage, cost per request, wants to see a report, asks why a specific request was expensive, suspects a process is consuming tokens, wants to optimize their Claude Code usage, or wants to audit tool usage by request. Also triggers on Spanish phrases: 'cuánto me está costando', 'cuántos tokens', 'consumo de hoy', 'qué petición fue cara', 'está consumiendo mucho', 'optimizar consumo', 'reporte de uso', 'ver uso', 'instalar tracker', 'hook no registra'. Commands: /usage-tracker report [hoy|semana|mes|all] [proyecto], /usage-tracker top-requests [hoy|semana], /usage-tracker install, /usage-tracker status
5codex-pr-review
Revisa pull requests en proyectos Drupal 11 (u otro) siguiendo la metodología Codex (lógica de negocio, edge cases de hooks/queries, seguridad, performance, completitud). Genera un informe .md en la carpeta del IDE detectado (.antigravity/, .cursor/, .vscode/ o docs/) con hallazgos por severidad y soluciones accionables. Usar cuando el usuario pida "revisión Codex", "revisión de PR", "revisar PR", "revisar PR #N", "revisión tipo Codex" o indique un número de PR con ramas (ej. develop ← feature/alejandro). Triggers: revisión PR, revisar PR, codex PR, revisión Codex, lint PR.
4