Empieza aquí 🌱
Dile a tu asistente: "siembra esta semilla 🌱"
Con eso basta. Tu asistente hace todo lo técnico por ti. Tú solo confirmas cuando te pregunte.
¿Otras formas de pedirlo? "instala esta semilla", "activa este hook", "pon esto a funcionar". Te entiende igual.
Esta semilla instala un hook (gancho de automatización): un pequeño vigilante que se activa solo, cada vez que tu asistente escribe código, y te avisa si detecta un error clásico de fechas antes de que te muerda.
Para el asistente que siembra
Eres el asistente. Sigue estos pasos con precisión. Es un hook PostToolUse (posterior al uso de herramientas) que corre después de cada Write/Edit y avisa cuando el archivo recién tocado contiene el patrón new Date('AAAA-MM-DD').
Paso 1 · Copiar el archivo del kernel
El kernel es un solo archivo: kernel/detect-timezone-bug.sh. Cópialo a la carpeta de hooks del usuario según su plataforma.
-
macOS / Linux (Claude Code o Cowork):
mkdir -p ~/.claude/hooks cp kernel/detect-timezone-bug.sh ~/.claude/hooks/detect-timezone-bug.sh chmod +x ~/.claude/hooks/detect-timezone-bug.sh -
Windows (Claude Code o Cowork, con Git Bash disponible):
mkdir -p "$USERPROFILE/.claude/hooks" cp kernel/detect-timezone-bug.sh "$USERPROFILE/.claude/hooks/detect-timezone-bug.sh"En Windows no hace falta
chmod. El hook corre a través debash(Git Bash), que Claude Code ya usa para ejecutar comandos de hooks. Si el usuario no tiene Git Bash, instálalo antes (viene con "Git para Windows").
Paso 2 · Cablear el hook en settings.json
Abre ~/.claude/settings.json (en Windows: %USERPROFILE%\.claude\settings.json). Si no existe, créalo. Fusiona este bloque con lo que ya haya — no sobrescribas el archivo. Si el usuario ya tiene una sección hooks o un PostToolUse, agrega solo la entrada nueva dentro.
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit|MultiEdit",
"hooks": [
{
"type": "command",
"command": "bash ~/.claude/hooks/detect-timezone-bug.sh"
}
]
}
]
}
}
matcherlimita el hook a las herramientas que escriben archivos (Write,Edit,MultiEdit). El propio script vuelve a filtrar para actuar solo sobre archivos.ts .tsx .js .jsx .mjs .cjs, así que no molesta con otros lenguajes.
Paso 3 · Verificación post-siembra (obligatoria)
No declares "listo" sin correr esto. Crea un archivo de prueba con el patrón riesgoso y aliméntale al hook un payload (carga de datos) simulado. Debe imprimir el aviso.
printf 'const fecha = new Date("2026-01-15");\n' > ~/tz-test.js
printf '%s' "{\"tool_input\":{\"file_path\":\"$HOME/tz-test.js\"}}" | bash ~/.claude/hooks/detect-timezone-bug.sh
rm ~/tz-test.js
Salida esperada (algo así):
[DETECTOR-BUG-ZONA-HORARIA] Patrón new Date('AAAA-MM-DD') encontrado en /Users/<usuario>/tz-test.js:
1:const fecha = new Date("2026-01-15");
Este patrón parsea la fecha como medianoche en UTC (hora universal). Al mostrarla
en la hora local de una zona al oeste de UTC (casi toda América), se convierte en
el DÍA ANTERIOR: un bug silencioso y difícil de rastrear en cálculos de fechas.
Fix sugerido: construye la fecha en hora local con new Date(anio, mes - 1, dia),
o usa una función tipo parseLocalDate(str) que separe año, mes y día a mano.
Si ves ese texto, el hook quedó bien. Si no imprime nada, revisa: (a) que el archivo se copió a ~/.claude/hooks/, (b) que hay un Python instalado (python3 --version), (c) que el JSON del comando de prueba quedó bien formado.
Placeholders y configuración
Esta semilla no usa rutas personales — no hay <TU-RUTA>, <TU-REPO> ni <TU-ARCHIVO-DE-MEMORIA> que rellenar. La única ruta que adaptas es la carpeta estándar de hooks (~/.claude/hooks/), igual en toda instalación.
Ajustes opcionales que el usuario puede pedirte más adelante (edítalos dentro del .sh):
- Extensiones que vigila — la línea
case "$file_path" in *.ts|*.tsx|.... Agrega o quita extensiones ahí. - Carpetas que ignora — la línea
*/node_modules/*|*/.git/*|*/dist/*|*/build/*. Suma carpetas auto-generadas propias del proyecto.
¿Cómo sé que funcionó?
Cuando tu asistente termine, pídele que corra la verificación de arriba y te muestre el resultado. Si aparece el mensaje [DETECTOR-BUG-ZONA-HORARIA], ya quedó.
De ahí en adelante es invisible y automático: la próxima vez que tu asistente escriba código con una fecha escrita como new Date("2026-01-15"), verás el aviso al instante, sin que tengas que hacer nada. Puedes olvidarte de que existe; él te cuida solo.
