Empezar
Introducción
Qué es becwright, por qué existe y cómo configurarlo en tu repo.
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, que un agente puede leer e ignorar—, becwright verifica el
resultado y frena el commit cuando la regla se rompe.
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.
En corto: instala becwright una vez, corre becwright init dentro de tu
proyecto, y a partir de ahí cada vez que guardas tu trabajo (un commit) revisa
tu código contra tus reglas y frena el commit si se rompe una regla blocking. Ese
es todo el ciclo — el resto de esta página es el detalle.
Instalación
Elegí tu ecosistema. Los paquetes de npm traen un binario autocontenido, así que no se necesita Python:
npm install --save-dev becwright # o global: npm install -g becwright
pnpm add -D becwright
pipx install becwright # o: pip install becwright
Los paquetes de npm cubren linux-x64, linux-arm64, darwin-x64,
darwin-arm64 y win32-x64. En cualquier otra plataforma usá
pipx install becwright.
Configurar un repo
cd tu-repo
becwright init # genera .bec/rules.yaml (según el lenguaje) e instala el hook
init detecta si el repo tiene archivos Python o JS/TS y escribe un
.bec/rules.yaml de arranque con reglas acordes, y luego instala el hook
pre-commit. Revisá las reglas generadas y corré becwright check --all para ver
el estado actual.
A partir de ahí, cada git commit corre los checks. También podés configurarlo a
mano: becwright install más un .bec/rules.yaml que escribas vos.
Comandos
| Comando | Descripción |
|---|---|
becwright demo | Muestra a becwright frenando un commit malo de ejemplo (sin configurar nada, sin git) |
becwright init | Genera un .bec/rules.yaml de arranque e instala el hook |
becwright list | Lista los checks incluidos |
becwright check | Corre las reglas sobre los archivos en staging |
becwright check --all | Corre las reglas sobre todo el repo (git ls-files) |
becwright install | Instala el hook pre-commit |
becwright uninstall | Quita el hook |
becwright export <id> [-o archivo] | Exporta una regla a un bundle .bec.yaml |
becwright import <fuente> [--yes] | Importa una BEC de un archivo o URL http(s) |
¿“Archivos en staging”? Cuando corres
git add, los archivos que elegiste quedan en staging — en la fila para el próximo commit.becwright checkmira solo esos por defecto (justo lo que el commit va a crear), por eso es rápido. Usa--allpara escanear todo el proyecto.
Códigos de salida (el número que devuelve un comando al terminar; 0 significa
éxito): 0 pasa · 1 falló una regla blocking · 2 no es un repo git / error de uso.
El archivo de reglas: .bec/rules.yaml
rules:
- id: no-token-in-logs # identificador único
intent: > # qué pide la regla (la parte "bound")
Los tokens de sesión nunca deben llegar a ningún log.
why_it_matters: > # por qué existe (se muestra cuando la regla falla)
Un token en los logs deja que cualquiera robe una sesión.
rejected_alternatives: # opcional: enfoques considerados y descartados
- "Redactar al loguear -> demasiado fácil de saltarse"
paths: # globs de los archivos a los que aplica la regla
- "src/**/*.py"
check: "becwright run no_token_in_logs"
severity: blocking # blocking (frena el commit) | warning (solo avisa)
Campos
| Campo | Requerido | Significado |
|---|---|---|
id | sí | Id único de la regla |
paths | sí | Globs (ver abajo) |
check | sí | Comando de shell a correr (el check ejecutable) |
intent | no | Qué hace cumplir la regla |
why_it_matters | no | Por qué importa; se imprime cuando la regla falla |
rejected_alternatives | no | Contexto: enfoques descartados |
severity | no | blocking (por defecto) o warning |
Globs
*matchea cualquier cosa menos/.**matchea a través de directorios.- p.ej.
src/**/*.pymatcheasrc/a.pyysrc/x/y/z.py;src/*.pymatchea solo el nivel superior.
Reglas listas para usar (sin escribir nada)
¿No quieres escribir reglas tú mismo? Importa una del catálogo con un solo
comando — becwright te muestra la regla y la mete en tu .bec/rules.yaml:
# Python
becwright import https://raw.githubusercontent.com/DataDave-Dev/becwright/main/becs/no-token-in-logs.bec.yaml
becwright import https://raw.githubusercontent.com/DataDave-Dev/becwright/main/becs/no-debug-remnants.bec.yaml
# JavaScript / TypeScript
becwright import https://raw.githubusercontent.com/DataDave-Dev/becwright/main/becs/no-debugger-js.bec.yaml
becwright import https://raw.githubusercontent.com/DataDave-Dev/becwright/main/becs/no-console-log-js.bec.yaml
# Cualquier lenguaje
becwright import https://raw.githubusercontent.com/DataDave-Dev/becwright/main/becs/no-hardcoded-secrets.bec.yaml
La lista completa (Python, JS/TS, Go, Rust) está en el
catálogo becs/.
Próximos pasos
- Cómo decide pasa/no-pasa el motor en Arquitectura.
- Escribí tus propias reglas en Escribir checks.
- Compartí reglas entre repos con Portabilidad.