Archivo de configuración

licit usa un archivo YAML llamado .licit.yaml en la raíz del proyecto. Se genera automáticamente con licit init pero puede editarse manualmente.

Resolución de configuración

Cuando licit carga la configuración, sigue este orden de prioridad:

  1. Path explícito: licit --config /ruta/a/config.yaml <comando>
  2. Archivo en directorio actual: .licit.yaml en el cwd
  3. Defaults: Si no existe archivo, usa valores por defecto

Si el archivo existe pero tiene errores de sintaxis YAML o validación, licit registra un warning y usa los defaults.


Ejemplo completo

# .licit.yaml — Configuración de licit
# Todos los campos son opcionales. Se muestran los valores por defecto.

provenance:
  enabled: true
  methods:
    - git-infer          # Métodos: git-infer, session-log, git-ai
  session_dirs: []       # Directorios con logs de sesión de agentes
  sign: false            # Firmar registros con HMAC-SHA256
  sign_key_path: null    # Ruta a clave de firmado
  confidence_threshold: 0.6  # Umbral mínimo para clasificar como IA
  store_path: .licit/provenance.jsonl

changelog:
  enabled: true
  watch_files:           # Archivos de config de agentes a monitorear
    - CLAUDE.md
    - .cursorrules
    - .cursor/rules
    - AGENTS.md
    - .github/copilot-instructions.md
    - .github/agents/*.md
    - .architect/config.yaml
    - architect.yaml
  output_path: .licit/changelog.md

frameworks:
  eu_ai_act: true        # Habilitar evaluación EU AI Act
  owasp_agentic: true    # Habilitar evaluación OWASP Agentic Top 10
  nist_ai_rmf: false     # Futuro (V1)
  iso_42001: false       # Futuro (V1)

connectors:
  architect:
    enabled: false
    reports_dir: .architect/reports
    audit_log: null
    config_path: null
  vigil:
    enabled: false
    sarif_path: null
    sbom_path: null

fria:
  output_path: .licit/fria-report.md
  data_path: .licit/fria-data.json
  organization: ""
  system_name: ""
  system_description: ""

annex_iv:
  output_path: .licit/annex-iv.md
  organization: ""
  product_name: ""
  product_version: ""

reports:
  output_dir: .licit/reports
  default_format: markdown   # markdown, json, html
  include_evidence: true
  include_recommendations: true

Secciones detalladas

provenance — Trazabilidad de código

Controla cómo licit rastrea el origen del código (IA vs humano).

CampoTipoDefaultDescripción
enabledbooltrueHabilitar trazabilidad
methodslist[str]["git-infer"]Métodos de detección
session_dirslist[str][]Dirs con logs de sesión
signboolfalseFirmar registros con HMAC
sign_key_pathstr?nullRuta a clave de firmado
confidence_thresholdfloat0.6Umbral de confianza (0.0-1.0)
store_pathstr.licit/provenance.jsonlRuta al store de provenance

Métodos disponibles:

Ejemplo — Habilitar firmado:

provenance:
  sign: true
  sign_key_path: ~/.licit/signing-key

Ejemplo — Múltiples métodos:

provenance:
  methods:
    - git-infer
    - session-log
  session_dirs:
    - ~/.claude/projects/

changelog — Monitoreo de configs de agentes

Estado: Funcional desde v0.3.0. Ejecuta con licit changelog.

Rastrea cambios en archivos de configuración de agentes IA a través del historial git, produciendo diffs semánticos con clasificación de severidad (MAJOR/MINOR/PATCH).

CampoTipoDefaultDescripción
enabledbooltrueHabilitar monitoreo
watch_fileslist[str](ver ejemplo)Archivos/globs a monitorear
output_pathstr.licit/changelog.mdRuta del changelog generado

Archivos monitoreados por defecto:

ArchivoAgente
CLAUDE.mdClaude Code
.cursorrulesCursor
.cursor/rulesCursor (nuevo formato)
AGENTS.mdGitHub Agents
.github/copilot-instructions.mdGitHub Copilot
.github/agents/*.mdGitHub Agents (configs individuales)
.architect/config.yamlArchitect
architect.yamlArchitect (alternativo)

Los patrones con * se resuelven usando Path.glob(). Los nombres exactos verifican existencia en git history.

Pipeline de procesamiento:

ConfigWatcher → Semantic Differ → ChangeClassifier → ChangelogRenderer
  (git log)     (YAML/JSON/MD)   (MAJOR/MINOR/PATCH)   (MD/JSON)

Formatos de diff: YAML y JSON producen diffs a nivel de campo (model, llm.provider). Markdown produce diffs por sección (section:Rules). Texto plano produce diff del contenido completo.

Formatos de salida: markdown (default) agrupa por archivo y ordena por severidad. json produce un objeto {"changes": [...]}.

Ejemplo — Añadir archivo custom:

changelog:
  watch_files:
    - CLAUDE.md
    - .cursorrules
    - mi-agente-custom.yaml       # archivo adicional
    - .prompts/**/*.md             # glob recursivo

Ejemplo — JSON output:

licit changelog --format json --since 2026-01-01

Para documentación detallada, ver Sistema de Changelog.

frameworks — Marcos regulatorios

Controla qué marcos regulatorios se evalúan.

CampoTipoDefaultDescripción
eu_ai_actbooltrueEU AI Act (Regulamento UE 2024/1689)
owasp_agenticbooltrueOWASP Agentic Top 10
nist_ai_rmfboolfalseNIST AI Risk Management Framework (futuro)
iso_42001boolfalseISO/IEC 42001 (futuro)

Ejemplo — Solo EU AI Act:

frameworks:
  eu_ai_act: true
  owasp_agentic: false

connectors — Integraciones externas

connectors.architect

Integración con Architect para leer reports de auditoría y configuración de guardrails.

CampoTipoDefaultDescripción
enabledboolfalseHabilitar conector
reports_dirstr.architect/reportsDir de reports
audit_logstr?nullRuta al log de auditoría JSONL
config_pathstr?nullRuta al config de architect

Ejemplo:

connectors:
  architect:
    enabled: true
    config_path: .architect/config.yaml
    audit_log: .architect/audit.jsonl

connectors.vigil

Integración con Vigil para leer hallazgos de seguridad en formato SARIF.

CampoTipoDefaultDescripción
enabledboolfalseHabilitar conector
sarif_pathstr?nullRuta al archivo SARIF
sbom_pathstr?nullRuta al SBOM

Ejemplo:

connectors:
  vigil:
    enabled: true
    sarif_path: reports/vigil-results.sarif

fria — Evaluación de Impacto en Derechos Fundamentales

Configuración para el FRIA (EU AI Act Artículo 27).

CampoTipoDefaultDescripción
output_pathstr.licit/fria-report.mdRuta del reporte
data_pathstr.licit/fria-data.jsonRuta de datos raw
organizationstr""Nombre de la organización
system_namestr""Nombre del sistema
system_descriptionstr""Descripción del sistema

annex_iv — Documentación Técnica Anexo IV

CampoTipoDefaultDescripción
output_pathstr.licit/annex-iv.mdRuta del documento
organizationstr""Nombre de la organización
product_namestr""Nombre del producto
product_versionstr""Versión del producto

reports — Generación de reportes

CampoTipoDefaultDescripción
output_dirstr.licit/reportsDirectorio de salida
default_formatstrmarkdownFormato: markdown, json, html
include_evidencebooltrueIncluir evidencia en reportes
include_recommendationsbooltrueIncluir recomendaciones

Directorio de datos (.licit/)

licit almacena toda su data interna en el directorio .licit/ dentro de la raíz del proyecto.

.licit/
├── .signing-key        # Clave HMAC-SHA256 (auto-generada si sign=true)
├── provenance.jsonl    # Store de trazabilidad (JSONL append-only)
├── changelog.md        # Changelog de configs de agentes
├── fria-data.json      # Datos raw del FRIA
├── fria-report.md      # Reporte FRIA legible
├── annex-iv.md         # Documentación técnica Anexo IV
└── reports/            # Reportes generados
    ├── provenance.md          # Reporte de proveniencia
    ├── compliance-report.md
    ├── compliance-report.json
    └── compliance-report.html

Recomendación de .gitignore:

# licit — datos internos (pueden contener información sensible)
.licit/provenance.jsonl
.licit/fria-data.json

# licit — reportes generados (commit si se desea)
# .licit/reports/

Se recomienda hacer commit de .licit.yaml y los reportes generados, pero no del store de provenance ni los datos raw del FRIA, ya que pueden contener información sensible del equipo.


Uso programático

La configuración puede cargarse y manipularse desde Python:

from licit.config.loader import load_config, save_config

# Cargar
config = load_config()  # Busca .licit.yaml automáticamente
config = load_config("/ruta/explícita/.licit.yaml")

# Modificar
config.frameworks.owasp_agentic = False
config.connectors.architect.enabled = True

# Guardar
save_config(config)  # Guarda en .licit.yaml
save_config(config, "/otra/ruta/config.yaml")