Hooks y guards

Todo lo de esta página está apagado hasta que tú lo enciendas, y la mayor parte aconseja en lugar de denegar.

Qué es#

Los guards son chequeos que puedes correr a mano, desde un hook de git o desde un hook de IDE:

Comando Qué deniega
orch guard dup <file> Un archivo que duplica un símbolo compartido; además reporta cuerpos de función copiados
orch guard code-lang [root] Identificadores y cadenas visibles que no corresponden a workspace.code_lang
orch guard lang [root] Documentos que no corresponden a workspace.locale
orch guard ddl [files...] Una migración o CREATE TABLE sin su seeder o repositorio acompañante
orch guard tracker [path] Una tabla de estado TRACKER que rompe T1–T4: status inválido, SPEC sin .md, VERIFIED sin evidencia, volcado narrativo

Hay más: comment, lock, add-all, shared-brand, control-bytes, artifacts, encoding.

Los hooks son dos puntos de entrada a tu harness, cada uno con su propia clave de consentimiento en orch.yaml:

Clave Dispara en Qué hace
context.hooks.post_tool PostToolUse de Claude Code, tool.execute.after de OpenCode Encoge el resultado de una herramienta antes de que caiga en la ventana de contexto
context.hooks.pre_compact PreCompact de Claude Code Corre el condensador de orch memory condense sobre la memoria del taller antes de que el harness compacte

Ambos son false por defecto. Copilot CLI y Cursor exponen la misma capacidad pero orch todavía no tiene ruta de conexión para ninguno, así que no se instala nada; Codex CLI directamente no puede reemplazar la salida de una herramienta.

Conexión:

orch guard wire            # desde guard.profile, o --git / --claude / --cursor
orch guard unwire          # agrega --git para quitar también los hooks de git
orch guard hooks install   # pre-commit + pre-push de git, marcados por orch
orch guard hooks status
orch guard profile         # muestra, o fija: lite | shared | strict | bring | none

Consultivo o bloqueante#

La distinción es por guard.

  • Consultivo — el escaneo de clones, por defecto. guard.dup.mode: advisory reporta lo que encontró y lo inyecta como contexto; la escritura sigue. Pon block y ese mismo hallazgo hace fallar la llamada con clone guard denied N duplicated block(s); pon off y ni mira.
  • Bloqueante — todos los demás guards. Un hallazgo se imprime en stderr y el comando sale con código distinto de cero, así que un hook de pre-commit detiene el commit.
  • Omisión suave — fuera de un taller vinculado, o cuando la configuración correspondiente no está fijada. orch guard lang sin workspace.locale se omite en vez de adivinar.

Por qué existe#

Lecciones de campo, baratas de enunciar y caras de aprender. git add -A sobre una capa compartida se roba el trabajo en curso de otra sesión. Conversar con un modelo en un idioma mete ese idioma en identificadores y mensajes de error. Una migración sin seeder pasa la revisión y falla en producción. Nada de esto necesita un motor de políticas: necesita un chequeo en el momento en que se comete el error.

Son opt-in porque el taller es tuyo: orch init llama al kit inicial recommendations, not mandates.

Cómo se relaciona con el resto#

  • La misma batería de guardrails corre dos veces: desde el hook de pre-commit que instalaste, y otra vez al cerrar una sesión, sobre exactamente los archivos que esa sesión tocó. Esa segunda corrida es la mitad observada del reporte de verificación.
  • orch harness scan reporta qué herramientas de IA y superficies de doctrina alcanza a ver, antes de que decidas qué conectar.
  • Los perfiles de guard controlan qué conecta orch init: lite siembra documentos y skills sin hooks, none omite del todo las siembras de doctrina.

Aquí no hay nada que ejecutar#

Nada de esto corre si no lo conectas. Corre los guards a mano si eso es todo lo que quieres; orch guard wire es el interruptor que los hace valer.