Bound (atada)
La regla nace ligada a la intención y a la decisión que la creó — el porqué. No es una regla suelta sin contexto.
Reglas que se ejecutan, no notas que se ignoran
becwright impone constraints sobre tu código de forma determinista. En vez de pedirle a un agente de IA que respete una regla —como hacen CLAUDE.md o .cursorrules—, verifica el resultado y frena el commit cuando la regla se rompe.
npm · pnpm · pipx — un binario autocontenido, sin necesidad de Python
$ git commit -m "feat: session logging"
▸ becwright check
✓ no-dangerous-eval pass
✓ no-debug-remnants pass
✗ no-token-in-logs BLOCKED
src/auth/session.py:42 — token filtrado a un log
commit abortado — 1 regla blocking falló
Una nota es una promesa. El commit sale igual.
Un agente de IA escribe código y deja una nota: «esto nunca debe loguear tokens de sesión». Esa nota es texto. Meses después, otro agente regenera el módulo, no la lee, y mete el token en los logs. Nadie se entera hasta que explota en producción.
Las notas son probabilísticas: dependen de que el agente lea, entienda y obedezca. becwright es determinista: la regla se ejecuta sobre el código real y da pasa/no-pasa, sin importar qué agente o modelo hizo el cambio.
// Las dos capas son complementarias: CLAUDE.md previene, así el 95% sale bien a la primera. becwright es la red de seguridad para el 5% que se escapa.
| Aspecto | Nota en CLAUDE.md | Regla becwright |
|---|---|---|
| Qué hace | Pide que se respete | Verifica que se respetó |
| Depende de | Que el agente la lea y obedezca | Nada — se ejecuta sobre el código |
| Resultado | Probable | Garantizado |
| Analogía | Un letrero de «velocidad máxima» | Un tope físico en la calle |
Tres propiedades que ningún artefacto actual tiene juntas. Cada una cierra un hueco que las otras dejan abierto.
La regla nace ligada a la intención y a la decisión que la creó — el porqué. No es una regla suelta sin contexto.
Lleva un chequeo que corre y devuelve pasa/no-pasa (código de salida 0 o 1). No es prosa que alguien promete respetar.
Puede exportarse de un repo e importarse en otro, como un paquete. Esto es lo que genera el efecto de red a futuro.
Elige tu ecosistema. Los paquetes de npm traen un binario autocontenido — sin necesidad de Python.
becwright init detecta tu lenguaje, escribe .bec/rules.yaml e instala el hook nativo de git.
Cada commit corre los checks sobre los archivos en stage. Si una regla blocking falla, el commit se detiene.
rules:
- id: no-token-in-logs
intent: >
Session tokens and credentials must
never reach any log.
why_it_matters: >
If a token shows up in the logs,
anyone with access can steal a session.
paths: ["src/**/*.py"]
check: "becwright run no_token_in_logs"
severity: blocking # stops the commit
Basados en texto/regex y conservadores por diseño. El valor está en atar cada regla a la razón por la que existe — y puedes escribir los tuyos en cualquier lenguaje.
forbid Cualquier regex que pases (--pattern) cualquiera blocking (por defecto) no_token_in_logs Tokens / credenciales en llamadas de log Python blocking hardcoded_secrets Claves AWS, claves privadas, literales password = "…" cualquiera blocking debug_remnants breakpoint(), pdb.set_trace(), import pdb olvidados Python blocking dangerous_eval Llamadas a eval() / exec() cualquiera blocking wildcard_imports from x import * Python warning redundant_comments Comentarios que repiten lo obvio del código (heurístico) Python warning El motor solo filtra archivos por sus globs de paths y corre el check como comando — nunca asume Python. Vigila JavaScript, Go, Rust o lo que sea con el check genérico forbid o tu propio script.
CLAUDE.md le pide al agente que se porte bien. becwright es el guardia que verifica — y el agente puede instalarlo y manejarlo por ti. Un plugin dedicado de Claude Code agrega una skill becwright y un comando /becwright; cualquier otro agente — Cursor, Windsurf, opencode — lo maneja vía el servidor MCP o la CLI directa.
Skill becwright
Se invoca sola cuando pides un guardrail. El agente sabe instalar, generar reglas y leer y arreglar la salida del check.
Comando /becwright
Un único punto de entrada: init · check · add · status — instala, ejecuta e importa BECs sin salir del chat.
check --json
Pasa/no-pasa legible por máquina con intención y porqué — sin parsear, funciona desde el binario autónomo.
Servidor MCP
Expone check y list_checks como herramientas a cualquier agente MCP — Claude, Cursor, Windsurf, opencode.
/plugin install becwright@becwright
/becwright init
▸ becwright check --all
✓ no-dangerous-eval pass
✗ no-token-in-logs BLOCKED
src/auth.py:42 — arreglando…
✓ commit desbloqueado
npx becwright demo Mira a becwright frenar un commit malo de ejemplo. Pruébalo primero — sin instalar, sin tocar nada
# 1. Instala el motor
npm install --save-dev becwright pnpm add -D becwright pipx install becwright # 2. Genera reglas + instala el hook
becwright init ✓# 3. Listo — cada commit corre los checks
Los paquetes de npm cubren linux-x64, linux-arm64, darwin-x64, darwin-arm64 y win32-x64. En cualquier otra plataforma usa pipx install becwright.
Abre un issue en segundos. Elige un tipo, descríbelo y te llevamos a GitHub con todo pre-rellenado.
becwright es open source y crece con el apoyo de las personas y empresas que lo usan.
becwright es gratis y open source. Las donaciones lo mantienen vivo — nuevos checks, releases más rápidos y documentación honesta y sin anuncios.
Pago seguro — con tecnología de Stripe
¿Prefieres patrocinar como empresa? Ser patrocinador
becwright instala un hook nativo de git pre-commit que corre checks deterministas sobre los archivos en stage. Si una regla como no-token-in-logs o hardcoded-secrets coincide, el commit se bloquea con código de salida 1 — sin importar qué agente o modelo de IA escribió el código.
CLAUDE.md y .cursorrules son probabilísticos: dependen de que el agente lea, entienda y obedezca la nota. becwright es determinista — la regla se ejecuta sobre el código real y devuelve pasa/no-pasa, así que atrapa los casos que el agente ignora o nunca lee.
Una BEC es una regla que está Atada (Bound) a la intención que la creó (el porqué), es Ejecutable (Executable, lleva un chequeo que corre y devuelve pasa/no-pasa) y es Portable (puede exportarse de un repo e importarse en otro como un paquete).
No. Los paquetes de npm y pnpm traen un binario autocontenido que cubre linux-x64, linux-arm64, darwin-x64, darwin-arm64 y win32-x64. También hay un install vía pipx para cualquier otra plataforma.
Cualquier lenguaje. El motor filtra archivos por sus globs de paths y corre cada check como un comando — nunca asume Python. Usa el check genérico forbid con regex o tu propio script para JavaScript, Go, Rust o lo que sea.
Sí. Un plugin dedicado de Claude Code agrega una skill becwright y un comando /becwright; cualquier otro agente — Cursor, Windsurf, opencode — lo maneja vía el servidor MCP o la salida CLI check --json.
becwright es open source y está verificado de punta a punta — desde el install hasta el commit bloqueado. Lleva guardrails deterministas a tu repo hoy.