Saltar al contenido
CodeGuard Instalar

Agente local para Windows · sin permisos de administrador

El commit que no debe entrar,
no entra.

CodeGuard se mete en el gancho de pre-commit de git y revisa tu cambio antes de que llegue al repositorio. Corre motores deterministas en tu máquina y bloquea sólo lo que el CI también rechazaría. No es un linter más: es la promesa de que si el commit pasa aquí, pasa allá.

  • 16motores deterministas
  • 1compuerta fail-closed: los secretos
  • 130reglas propias en el rulepack fijado
  • =el mismo binario en tu máquina y en el CI
baja por la rama

El recorrido

Un commit, de arriba abajo

Esto es lo que pasa entre que escribes git commit y que el commit existe. Baja: el orbe hace el camino contigo y va cambiando de clima en cada nodo, igual que en tu escritorio.

Nodo 01 · Etapa 0

Escribes git commit

El hook se dispara antes de que el commit exista. Lo primero no es analizar: es decidir si hay algo que analizar. Un merge, un revert, un cambio que sólo toca rutas excluidas o un repo sin enrolar salen por aquí, y el motivo viaja como texto hasta la terminal.

Esa distinción tiene consecuencias visibles: una decisión de configuración del equipo no se anuncia igual que una avería, y el color del orbe y el tono del mensaje tienen que coincidir porque describen el mismo commit.

$git commit -m "cache de sesiones" CodeGuard de guardia

Cuatro motivos para saltarse el análisis, y los cuatro se dicen.

Nodo 02 · Etapa 1

Secretos, y sólo entonces lo demás

gitleaks corre en el proceso del hook y sin red, antes de que nada salga de tu máquina. Es la única capa fail-closed del producto: si no puede correr, el commit se detiene. Un análisis que no pudo mirar credenciales no está en condiciones de decir que no hay ninguna.

Un secreto encontrado aquí no se puede silenciar con la baseline ni degradar con el feedback del equipo. Un secreto viejo sigue siendo un secreto vivo.

CodeGuard secretos ✗ BLOQUEADO: 1 secreto(s) en el diff — NADA salió a la red CodeGuard src/config.ts:14 CodeGuard rota la credencial PRIMERO; borrarla del historial no la invalida

Salida real del hook cuando la compuerta encuentra algo.

Nodo 03 · Etapa 2

Dieciséis capas, a la vez

Aquí la rama se abre. Los motores que aplican al cambio corren en paralelo, y quién va a mirar se decide antes de lanzar a nadie: el denominador del progreso —«3 de 9»— tiene que existir desde el primer instante, o el orbe cuenta hacia un total que nunca llega.

Cada capa publica su estado en cuanto termina, no al final. Y un motor que falla no bloquea: degrada y lo dice. Esa diferencia entre «corrió y no encontró nada» y «no corrió» es la razón de que exista el vocabulario de capas.

    Los dieciséis motores más la compuerta de secretos. De un cambio concreto sólo se encienden los que aplican: el resto no falló, es que no tenía nada que mirar.

    Nodo 04 · Etapa 7

    El veredicto, y la rama que se corta

    Se deduplica por archivo, línea y regla; se ordena por severidad. Si queda un bloqueante, el hook sale con código 1 y el commit no llega a existir. Esa es la rama que muere aquí al lado.

    El veredicto se explica siempre: regla, archivo, línea, por qué importa y qué hacer. Un bloqueo sin explicación es una herramienta que se desinstala.

    CodeGuard secretos ✓ CodeGuard formato/lint/tipos/reglas/migraciones ✗ CodeGuard [cookie-sin-httponly] src/api.ts:3 Cookie de sesión sin httpOnly CodeGuard BLOQUEADO: 1 problema que el CI también rechazaría

    Un bloqueo con su regla, su archivo y su línea.

    Nodo 05 · Paridad

    Y en el CI corre exactamente lo mismo

    codeguard ci es el mismo binario, con el mismo rulepack fijado por versión. La paridad no es una promesa de la documentación: es que es el mismo programa leyendo las mismas reglas.

    Con dos endurecimientos propios del CI: los CVE críticos, que en tu máquina avisan, allí bloquean; y la compuerta de secretos escanea el historial del rango en vez del diff de árboles — porque una credencial añadida en un commit y borrada en el siguiente sigue estando en el historial.

    $codeguard ci --base origin/main \ --out cg.sarif codeguard: OK — 0 bloqueantes, 2 aviso(s) SARIF: cg.sarif (2 resultados)

    El SARIF alimenta la pestaña de seguridad de GitHub.

    Nodo 06 · Después

    El modelo llega tarde, y a propósito

    La capa de consejo corre después de responderle al hook, así que su latencia nunca toca tu commit. Y no bloquea nunca: no es una preferencia configurable, es un principio del producto.

    Es opcional y se elige. Habla el dialecto de OpenAI y el de Anthropic, con preajustes para Azure AI Foundry, OpenAI, Anthropic, OpenRouter, Groq, DeepSeek, Ollama y LM Studio. Los dos últimos corren en tu propia máquina: el código no sale de ahí.

    La clave nunca se escribe en un archivo de CodeGuard. La configuración guarda sólo el nombre de la variable de entorno que la contiene, y la clave vive en el Administrador de credenciales de Windows.

    Principio P5, y por eso la redacción ocurre antes de cualquier llamada.

    Verlo correr

    Un commit que no pasa

    Una reconstrucción del camino real de un commit bloqueado: la terminal, el orbe, las capas encendiéndose y el panel con el hallazgo. Arranca sola al entrar en pantalla.

    pwsh — ejemplo-web

    Reconstrucción animada en el navegador — no es un vídeo grabado. Los textos son los del producto.

    Las capas

    Qué te vigila, motor por motor

    Dieciséis motores deterministas más la compuerta de secretos. Cada uno con qué mira, cuándo bloquea, de dónde sale y por qué está — incluidas las razones por las que no hace algo que parecería obvio.

    Dieciséis motores no son dieciséis instalaciones: nueve los instala CodeGuard, uno va dentro del propio binario y seis usan la cadena de herramientas que ya tienes. Eso último no es una carencia — es lo que defiende la paridad.

    Y tres reglas que no miran el contenido, sino la forma del cambio

    No dependen de ningún binario de terceros ni de la red, así que corren siempre — incluso cuando el diff es tan grande que el análisis degrada a sólo-secretos.

      El emblema

      Un orbe que dice la verdad

      Vive en la esquina de tu pantalla y cambia de clima según el estado del análisis. Nunca abre un modal, nunca suena, nunca te roba el foco. Toca un estado para verlo.

      Y un vocabulario para cada capa

      Hasta que existió, el resultado sólo nombraba los motores que fallaron, así que «corrió y no encontró nada» y «no corrió» llegaban a la pantalla idénticos: el mismo silencio que este producto existe para no producir.

        Las reglas de la casa

        Cinco reglas que mandan sobre cualquier decisión

          Enrolar un repo en un comando

          codeguard init detecta los lenguajes, escribe la configuración, instala los hooks y genera la baseline para que lo que ya existía no bloquee. Versionas .codeguard/ y .githooks/, y el resto del equipo queda enrolado con un git pull. Nadie escribe YAML.