becwright

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

ComandoDescripción
becwright demoMuestra a becwright frenando un commit malo de ejemplo (sin configurar nada, sin git)
becwright initGenera un .bec/rules.yaml de arranque e instala el hook
becwright listLista los checks incluidos
becwright checkCorre las reglas sobre los archivos en staging
becwright check --allCorre las reglas sobre todo el repo (git ls-files)
becwright installInstala el hook pre-commit
becwright uninstallQuita 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 check mira solo esos por defecto (justo lo que el commit va a crear), por eso es rápido. Usa --all para 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

CampoRequeridoSignificado
idId único de la regla
pathsGlobs (ver abajo)
checkComando de shell a correr (el check ejecutable)
intentnoQué hace cumplir la regla
why_it_mattersnoPor qué importa; se imprime cuando la regla falla
rejected_alternativesnoContexto: enfoques descartados
severitynoblocking (por defecto) o warning

Globs

  • * matchea cualquier cosa menos /.
  • ** matchea a través de directorios.
  • p.ej. src/**/*.py matchea src/a.py y src/x/y/z.py; src/*.py matchea 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