Formato post-edit automático
El primer hook real, y el más satisfactorio: que cada fichero que Claude edita salga ya formateado, sin que tú ni el agente tengáis que acordaros. Es un caso de libro para PostToolUse.
El hook, entero
Añade esto a .claude/settings.json:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write" }
]
}
]
}
}
Desgranado con lo de la lección anterior:
PostToolUse— corre después de que la tool tenga éxito (el fichero ya está escrito; ahora lo formateamos).matcher: "Edit|Write"— solo tras tools que editan ficheros. No se dispara conBashni con lecturas.jq -r '.tool_input.file_path'— extrae del JSON de stdin la ruta del fichero que se acaba de tocar.xargs npx prettier --write— pasa esa ruta a Prettier, que la formatea in situ.
La clave: formatea solo lo tocado
Fíjate en que no formateamos todo el repo: extraemos file_path del input y formateamos ese fichero. Es rápido y no genera ruido en ficheros que nadie tocó. Ese tool_input.file_path es el mismo patrón que usarás para inspeccionar contenido en el hook de secrets.
Adáptalo a tu stack
Prettier es solo el ejemplo. La forma es idéntica:
- Python:
xargs black(oruff format). - Rust:
xargs rustfmt. - Go:
xargs gofmt -w.
Si tu repo es políglota, el comando puede mirar la extensión y elegir el formateador; cuando crece, muévelo a un script en .claude/hooks/format.sh y referéncialo (lo viste en la anatomía).
¿Por qué un hook y no pedírselo al agente? Porque "acuérdate de formatear" es justo el tipo de regla blanda que falla un viernes a las 23:42. Con el hook, el formato deja de ser una decisión: es una garantía.
Pruébalo
Pídele a Claude un cambio pequeño en un fichero desordenado. Al aceptarlo, el hook corre y el fichero queda formateado al instante. Si miras el diff, verás el cambio ya limpio.
Si falla
- Prettier no está disponible →
npx prettierintenta descargarlo al vuelo o falla si no hay red; instálalo en el proyecto (npm i -D prettier) o apunta el hook al formateador que ya tengas. - Sin
.prettierrc→ Prettier aplica sus defaults y puede reformatear más de lo que esperas; añade un fichero de config para acotar el estilo a lo que quieres. - El hook parece no hacer nada → recuerda que un
PostToolUseque falla no revierte la edición (el fichero ya está escrito); revisa que elmatchersea exactoEdit|Writey que el comando no dé error (pruébalo a mano pasándole unfile_path).
Qué llevas hasta aquí
- Un hook
PostToolUsecon matcherEdit|Writereacciona a cada edición. - Extraes la ruta con
jq -r '.tool_input.file_path'y formateas solo ese fichero. - La forma se adapta a cualquier formateador (Black, rustfmt, gofmt…).
En la siguiente lección pasamos de "reaccionar" a "impedir": un hook PreToolUse que bloquea secrets antes de que se escriban.
Fuente oficial: Hooks guide · Hooks reference
¿Quieres llevar la cuenta de las lecciones que has terminado?
Entrar para guardar progreso