ReleaseGuard
Escanea conjuntos de datos/modelos en busca de PII/secretos, redacta y empaqueta un paquete de publicación pública a través de MCP.
Documentación
ReleaseGuard
Instalación • Inicio rápido • Referencia de CLI • API de librería • Comparación • FAQ
Escanea un directorio de dataset o modelo en busca de PII y secretos con Presidio, redacta lo que encuentres y genera un paquete de publicación pública, una tarjeta de dataset/modelo de Hugging Face y un resumen de datos de entrenamiento conforme al Art. 53(1)(d) de la Ley de IA de la UE, todo con un solo comando.
ReleaseGuard no es un detector de PII. Es el pegamento entre "tengo un dataset que quiero publicar" y "tengo un paquete saneado con la documentación ya redactada". La detección es enteramente de Presidio, un proyecto de código abierto activamente mantenido con más de 10,000 estrellas en GitHub. ReleaseGuard encadena el escaneo de Presidio directamente con la redacción y con los dos documentos que casi cualquier publicación pública de dataset/modelo realmente necesita, en lugar de que escribas un script para hacerlo tú mismo.
Instalación
pip install releaseguard-cli
python -m spacy download en_core_web_sm # Presidio's default NLP model (~13 MB, one-time)
# npm launcher (thin wrapper around the PyPI package, see "Why two registries" in FAQ)
npx releaseguard-cli --help
en_core_web_sm es el modelo pequeño de inglés de spaCy y el predeterminado de inicio rápido de Presidio. Para una detección más precisa, instala el modelo más grande y pasa --spacy-model:
python -m spacy download en_core_web_lg # ~400 MB, Presidio's recommendation for production
releaseguard scan ./data --spacy-model en_core_web_lg
Inicio rápido
Esta es una ejecución real y sin editar contra un CSV de muestra de dos filas, no una simulación:
$ releaseguard scan dataset --score-threshold 0.4
Scanned 1 file(s) under dataset
Total findings: 7
entity type count
URL 3
PERSON 2
EMAIL_ADDRESS 2
Esa línea de URL: 3 es una peculiaridad real de Presidio que vale la pena señalar en lugar de ocultar: su reconocedor de URLs basado en expresiones regulares también se activa con la parte de dominio de una dirección de correo (example.com dentro de alice.rivera@example.com), por lo que el texto con muchos correos se cuenta dos veces como EMAIL_ADDRESS y URL. Este es el comportamiento del reconocedor de Presidio, sin modificar, y vale la pena notar que los conteos de entidades pueden variar ligeramente entre versiones de Presidio/spaCy, ya que la detección se basa en PLN, no en una tabla de búsqueda fija (esta ejecución usó presidio-analyzer 2.2.364 con en_core_web_sm 3.8.0). Fíltralo con --entities si solo te interesan las direcciones de correo:
releaseguard scan dataset --entities EMAIL_ADDRESS,PERSON,PHONE_NUMBER

Redacta y luego empaqueta un paquete de publicación con un solo comando:
$ releaseguard package dataset --output bundle --score-threshold 0.4
Release bundle written to bundle
dataset card: bundle/README-dataset-card.md
EU AI Act Art. 53(1)(d) summary: bundle/eu-ai-act-training-summary.md
redacted source: bundle-redacted-source
bundle/eu-ai-act-training-summary.md se abre así, con los conteos reales del escaneo completados y todo lo demás dejado como un marcador de posición explícito para que una persona lo complete:
# Training Data Summary (EU AI Act Art. 53(1)(d))
_Draft generated by ReleaseGuard... Based on the European Commission's
training-data-summary template, published 2025-07-24. This covers the
narrow, currently-binding categorical-summary requirement only -- it is
not a claim of full training-data disclosure._
## 4. Personal Data and PII Handling (from ReleaseGuard scan)
A Presidio-backed scan (detector: `presidio`) covered 1 file(s) under `dataset`.
| PII/secret category detected | Occurrences |
| --- | --- |
| `EMAIL_ADDRESS` | 2 |
| `PERSON` | 2 |
| `URL` | 3 |
--json en cada comando cambia a salida legible por máquina para scripts y agentes.
Resumen rápido
- Úsalo para: convertir un escaneo de Presidio en una copia redactada más una tarjeta de dataset/modelo y un resumen de datos de entrenamiento conforme al Art. 53(1)(d) de la Ley de IA de la UE, con un solo comando en lugar de tres herramientas separadas y una plantilla escrita a mano
- Lo que no es: un detector de PII propio, ni una afirmación de "transparencia total"/cumplimiento completo de divulgación de datos de entrenamiento. Ver Lo que ReleaseGuard no es
- Se ejecuta completamente en local. Ningún contenido de dataset, resultado de escaneo o salida redactada se envía jamás a un servicio remoto.
Referencia de CLI

$ releaseguard --help
Usage: releaseguard [OPTIONS] COMMAND [ARGS]...
Scan, redact, and package a dataset/model directory for public release.
ReleaseGuard is a packaging layer on top of Presidio (originally a Microsoft
project, now maintained by data-privacy-stack) -- it does not detect PII
independently of Presidio. See the README's "What ReleaseGuard is not"
section.
Options:
--version Show the version and exit.
--help Show this message and exit.
Commands:
mcp Start an MCP server exposing scan/redact/package as agent tools.
package Scan PATH, optionally redact it, and generate a release bundle...
redact Scan PATH and write a redacted copy to --output.
scan Scan PATH (a file or directory) for PII and secrets using...
| Comando | Propósito |
|---|---|
scan PATH | Escanea un archivo o directorio (CSV, JSON/JSONL, texto plano) con Presidio. --entities, --score-threshold, --spacy-model, --json. |
redact PATH --output DIR | Escanea y luego escribe una copia redactada en DIR. Nunca toca PATH. --strategy mask|hash|remove, --overwrite. |
package PATH --output DIR | Escanea (y por defecto redacta primero), luego escribe una tarjeta de dataset/modelo de Hugging Face más el resumen del Art. 53(1)(d) de la Ley de IA de la UE en DIR. --kind dataset|model|both, --redact-first/--no-redact-first. |
mcp | Inicia un servidor MCP (stdio) que expone scan_directory_tool, redact_directory_tool, package_release_tool. Requiere pip install "releaseguard-cli[mcp]" en Python 3.10+. |
Cada comando admite --json. Referencia completa de flags: releaseguard <command> --help.
API de librería
from releaseguard.detectors import get_detector
from releaseguard.scanner import scan_directory
from releaseguard.redactor import redact_directory
from releaseguard.packager import build_release_bundle
from releaseguard.types import RedactionStrategy
detector = get_detector("presidio", score_threshold=0.4)
scan_result = scan_directory("dataset/", detector)
redaction_result = redact_directory(
scan_result, "dataset-redacted/", strategy=RedactionStrategy.MASK
)
bundle = build_release_bundle(
scan_result, "bundle/", redaction_result=redaction_result, source_kind="dataset"
)
print(bundle.eu_ai_act_summary_path)
PIIDetector (releaseguard.detectors.base) y FileReader (releaseguard.readers.base) son los dos puntos de extensión. Presidio es actualmente el único detector incluido; CSV, JSON/JSONL y texto plano son actualmente los tres lectores incluidos. Ambos son registros, no llamadas codificadas, precisamente para que un nuevo formato o un segundo backend de detección sea una adición acotada más adelante. Ver CONTRIBUTING.md.
Servidor MCP
ReleaseGuard incluye un servidor de Model Context Protocol para que un agente de IA (Claude, Cursor o cualquier cliente compatible con MCP) pueda escanear, redactar y empaquetar un dataset o directorio de modelo directamente, sin que una persona invoque la CLI manualmente.
Instala el extra:
pip install "releaseguard-cli[mcp]"
Inícialo directamente con el subcomando mcp:
releaseguard mcp
Agrégalo a la configuración de tu cliente MCP (para Claude Desktop, claude_desktop_config.json). El servidor
se inicia mediante un subcomando del script de consola publicado releaseguard, no mediante un
script de consola separado propio:
{
"mcpServers": {
"releaseguard": {
"command": "uvx",
"args": ["--from", "releaseguard-cli", "releaseguard", "mcp"]
}
}
}
El transporte es stdio, por lo que no hay nada que alojar: el cliente MCP inicia el servidor como un
subproceso local. Fuente: src/releaseguard/mcp_server.py.
El servidor expone tres herramientas, cada una devolviendo la misma estructura JSON que la salida --json
de la CLI correspondiente:
| Herramienta | Propósito |
|---|---|
scan_directory_tool(path, spacy_model=None, score_threshold=0.35) | Escanea un directorio en busca de PII y secretos con Presidio. |
redact_directory_tool(path, output, strategy="mask", overwrite=False) | Escanea y luego escribe una copia redactada en output. Nunca muta path. strategy es "mask", "hash" o "remove". |
package_release_tool(path, output, kind="dataset", redact_first=True, strategy="mask") | Escanea, opcionalmente redacta, y escribe un paquete de publicación (tarjeta de dataset/modelo más el resumen del Art. 53(1)(d) de la Ley de IA de la UE) en output. |
Un ejemplo de llamada real:
scan_directory_tool(path="./dataset", score_threshold=0.4)
-> {"files_scanned": 1, "root_path": "./dataset", "findings": [...], "entity_counts": {"URL": 3, "PERSON": 2, "EMAIL_ADDRESS": 2}}
Cada herramienta verifica que path exista antes de hacer cualquier otra cosa y devuelve un error estructurado,
{"error": "Path '<path>' does not exist.", "error_type": "PathNotFound"}, en lugar de un resultado exitoso silencioso y engañoso de "0 archivos escaneados". Las versiones anteriores
de este servidor omitían esa verificación y dejaban que una ruta incorrecta pasara directamente a scan_directory, lo que devolvía
un falso éxito en lugar de un error; además, ahora cada manejador de herramienta está envuelto para que una excepción inesperada
vuelva como {"error": ..., "error_type": ...} en lugar de provocar el cierre del servidor. Se incluye un manifiesto .well-known/agent.json
en la raíz del repositorio para el descubrimiento estilo A2A, que enumera tanto las interfaces CLI como MCP y los paquetes que las proporcionan.
Comparación
| ReleaseGuard | Presidio | Herramientas de tarjetas de huggingface_hub | pii-lib | |
|---|---|---|---|---|
| Detecta PII/secretos | No, envuelve a Presidio | Sí (su propio trabajo) | No | Sí (regex + NER, acotado a datos de entrenamiento de código) |
| Redacta entidades detectadas | Sí (a través de presidio-anonymizer) | Sí (a nivel de librería) | No | Sí |
| Genera una tarjeta de dataset/modelo de Hugging Face | Sí, a partir de resultados reales de escaneo | No | Sí (campos manuales, sin integración de escaneo) | No |
| Genera un resumen del Art. 53(1)(d) de la Ley de IA de la UE | Sí, a partir de resultados reales de escaneo | No | No | No |
| Un comando, del escaneo al paquete de publicación | Sí | No (solo librería, tú escribes el pegamento) | No (solo librería) | No |
| Estrellas de GitHub (verificado 2026-08) | Nuevo en 2026 | ~10,300 | ~3,800 | 16 |
Conteos de estrellas verificados en vivo contra la API de GitHub el 2026-08-03: data-privacy-stack/presidio (originalmente microsoft/presidio; el proyecto cambió de organización, mismo código base), huggingface/huggingface_hub, bigcode-project/pii-lib. El bajo conteo de estrellas de pii-lib es en sí mismo informativo: es el intento previo más cercano de redacción de PII acotado a un flujo de trabajo de publicación de datos de entrenamiento, y no ha logrado una adopción significativa. ReleaseGuard no asume que el resultado será diferente aquí; ver la entrada de FAQ sobre la demanda.
Las plataformas empresariales de gobernanza de datos (Databricks Unity Catalog, Credo AI, BigID y otras) ya ofrecen clasificación y redacción de PII como parte de plataformas de pago más amplias dirigidas a grandes organizaciones. ReleaseGuard es una alternativa gratuita, de propósito único y código abierto para un equipo que solo quiere el flujo de trabajo escanear-redactar-empaquetar para una publicación, no una suite de gobernanza.
Qué es ReleaseGuard y por qué existe
ReleaseGuard es una CLI de código abierto, una librería de Python y un servidor MCP que encadena tres pasos —detección de PII/secretos (a través de Presidio), redacción y documentación de publicación pública— en un solo comando. Cada paso ya existe como herramienta separada: Presidio detecta, presidio-anonymizer redacta, huggingface_hub tiene ayudantes de generación de tarjetas, y la Comisión Europea publica una plantilla de resumen de datos de entrenamiento como un documento que completas a mano. Nada antes de ReleaseGuard encadenaba un escaneo real directamente con una plantilla completada.
Existe porque publicar un dataset o modelo de manera responsable implica ejecutar un escaneo de PII, redactar lo que encuentra y luego redactar dos documentos casi a mano: una tarjeta y (para proveedores de modelos de IA de propósito general) un resumen de datos de entrenamiento según la Ley de IA de la UE. ReleaseGuard automatiza la segunda mitad de ese flujo de trabajo para que los documentos resultantes reflejen lo que realmente se escaneó, no lo que alguien recordó escribir después.
Art. 53(1)(d) de la Ley de IA de la UE, enunciado con precisión: este artículo exige que los proveedores de modelos de IA de propósito general (GPAI) publiquen un "resumen suficientemente detallado" del contenido de entrenamiento, utilizando la plantilla que la Oficina de IA de la Comisión Europea publicó el 2025-07-24 (en vigor para modelos nuevos desde el 2025-08-02, plazo transitorio hasta el 2027-08-02 para modelos ya en el mercado, con verificaciones de cumplimiento de la Oficina de IA a partir del 2026-08-02). Exige un resumen categórico de las fuentes y modalidades de datos. No exige muestras de entrenamiento en bruto, recetas completas de entrenamiento ni pesos de modelo, y se aplica específicamente a proveedores de modelos GPAI, no a todos los publicadores de datasets. El resumen generado por ReleaseGuard es un borrador inicial para ese requisito estrecho y real, nunca una afirmación de cumplimiento más amplio de "transparencia total".
Lo que ReleaseGuard no es
- No es un detector de PII. Cada tipo de entidad, puntuación de confianza y decisión de detección proviene de Presidio. ReleaseGuard no añade ningún modelo de PLN, ningún reconocedor ni ninguna afirmación de precisión propia. Si Presidio omite algo o cuenta de más (ver la superposición de
URL/correo en el Inicio rápido anterior), ReleaseGuard hereda ese comportamiento sin modificar. - No es un servicio alojado. Todo se ejecuta en local. Ningún objetivo de escaneo, resultado de escaneo o salida redactada se transmite a ningún lugar. Ver la sección de alcance de SECURITY.md.
- No es prueba de cumplimiento legal. El resumen generado de la Ley de IA de la UE es un borrador que aún necesita que una persona complete las secciones de licencias, fuentes de datos y derechos de autor que ReleaseGuard no puede inferir de un escaneo. Ejecutar
releaseguard packageno satisface, por sí mismo, el Art. 53(1)(d) ni ninguna otra regulación. - No es evidencia de demanda más allá de lo citado anteriormente. El intento previo más cercano de este mismo flujo de trabajo,
pii-lib, tiene 16 estrellas en GitHub. ReleaseGuard no afirma haber resuelto el problema de adopción con el que ese proyecto se encontró; afirma llenar una brecha real, estrecha e independientemente verificada (ninguna herramienta de código abierto existente encadena un escaneo de Presidio directamente con una plantilla del Art. 53(1)(d)), y deja que el uso real decida el resto.
FAQ
¿Detecta ReleaseGuard PII con más precisión que Presidio?
No. No puede, ya que llama al propio AnalyzerEngine de Presidio para cada decisión de detección. Cualquier pregunta sobre precisión es una pregunta sobre Presidio; ver la documentación propia de Presidio y presidio-research para su metodología de evaluación.
¿Por qué scan necesita una descarga del modelo spaCy?
El AnalyzerEngine de Presidio requiere un modelo de lenguaje spaCy para la detección sensible al contexto (reconocer que "John Smith" es un nombre a partir del texto circundante, no solo una palabra capitalizada). Los modelos spaCy se distribuyen como paquetes instalables propios, no como una dependencia de pip, por lo que python -m spacy download en_core_web_sm es un paso único obligatorio, igual que para cualquiera que use Presidio directamente.
¿Funciona ReleaseGuard en Windows, macOS y Linux?
Es Python puro sin rutas de código específicas del sistema operativo, y el shim lanzador de npm selecciona where o which según la plataforma para ubicar la CLI instalada (npm-shim/bin/releaseguard-cli.js). El CI actualmente se ejecuta solo en ubuntu-latest, con Python 3.10 y 3.12, por lo que macOS y Windows aún no están cubiertos por una matriz de pruebas automatizadas. Considérelos como esperados a funcionar, no verificados por CI, hasta que esa matriz se amplíe.
¿Es el resumen del Art. 53(1)(d) de la Ley de IA de la UE jurídicamente suficiente por sí solo? No. Es un borrador inicial estructuralmente correcto, poblado con datos reales de escaneo donde ReleaseGuard puede verificarlo (la sección de PII/secretos) y con un marcador de posición explícito donde no puede (fuentes de datos, licencias, estado de derechos de autor). Una persona, idealmente con revisión legal, debe completar los marcadores de posición antes de publicarlo como un artefacto de cumplimiento.
¿Esto solo aplica si estoy entrenando un modelo GPAI?
El resumen del Art. 53(1)(d) se dirige específicamente a los proveedores de modelos de IA de propósito general bajo la Ley de IA de la UE, un conjunto de compradores reducido. Las partes de scan, redact y la generación de tarjetas de Hugging Face de ReleaseGuard son útiles para cualquier publicación de conjuntos de datos o modelos, independientemente de si el Art. 53(1)(d) le aplica o no.
¿Por qué dos registros?
La implementación de ReleaseGuard es en Python, ya que Presidio mismo es Python (presidio-analyzer/presidio-anonymizer); envolverlo en otro idioma significaría volver a hacer llamadas externas o reimplementar los enlaces. El paquete npm (releaseguard-cli) es un lanzador delgado, no una reimplementación. Localiza y ejecuta el binario real de releaseguard instalado desde PyPI, por lo que npx releaseguard-cli funciona para herramientas de agentes que priorizan npm sin duplicar la lógica de detección de Presidio en dos idiomas.
¿Bajo qué licencia está ReleaseGuard y puedo usarlo comercialmente? Apache 2.0, la misma licencia que usa Presidio. Permite uso comercial, modificación y redistribución, incluso dentro de un producto propietario, sujeto a los términos estándar de Apache 2.0: conservar el aviso de licencia y derechos de autor, e indicar cualquier cambio realizado al código fuente. Consulte LICENSE para el texto completo.
¿Alguien realmente necesita esto, o es "código de pegamento que nadie pidió"? Dicho con honestidad: no había surgido ninguna señal orgánica de demanda (un hilo de HN/Reddit que describiera este flujo de trabajo exacto como un punto de dolor real) al momento de la investigación inicial de este proyecto. El hecho verificable de forma independiente es más acotado y más defendible: ninguna herramienta de código abierto existente encadena un escaneo de Presidio directamente a una plantilla del Art. 53(1)(d) o a una tarjeta HF combinada, en un solo comando, desde un solo escaneo. Si esa brecha se convierte en uso real es una pregunta abierta y falseable que este proyecto rastrea en lugar de asumir la respuesta.
¿Qué sucede con los archivos que ReleaseGuard no puede analizar (imágenes, archivos de pesos de modelo, Parquet sin el extra)?
scan y redact los omiten (enumerados bajo files_skipped en la salida de --json); redact los copia al directorio de salida sin cambios, en lugar de descartarlos silenciosamente del paquete de publicación. No se escanean en busca de PII, así que revíselos por separado antes de publicar.
Contribuciones
Consulte CONTRIBUTING.md. Problemas de seguridad: consulte SECURITY.md.