ReleaseGuard
Examina conjuntos de dados/modelos em busca de PII/segredos, faz a redação e empacota um pacote de liberação pública via MCP.
Documentação
ReleaseGuard
Instalação • Início rápido • Referência da CLI • API da biblioteca • Comparação • Perguntas frequentes
Digitalize um diretório de dataset ou modelo em busca de PII e segredos com o Presidio, remova o que encontrar e gere um pacote de liberação pública, um card de dataset/modelo do Hugging Face e um resumo de dados de treinamento conforme o Art. 53(1)(d) da Lei de IA da UE, em um único comando.
O ReleaseGuard não é um detector de PII. Ele é a ponte entre "tenho um dataset que quero publicar" e "tenho um pacote sanitizado com a documentação já rascunhada". A detecção é inteiramente do Presidio, um projeto open-source ativamente mantido com mais de 10.000 estrelas no GitHub. O ReleaseGuard encadeia a digitalização do Presidio diretamente na remoção e nos dois documentos que quase toda liberação pública de dataset/modelo realmente precisa, em vez de você escrever um script para fazer isso sozinho.
Instalação
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 é o modelo pequeno de inglês do spaCy e o padrão de início rápido do próprio Presidio. Para maior precisão na detecção, instale o modelo maior e passe --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
Início rápido
Esta é uma execução real, sem edições, contra um CSV de exemplo com duas linhas, não uma simulação:
$ 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
Essa linha URL: 3 é uma peculiaridade real do Presidio que vale destacar em vez de esconder: o reconhecedor de URLs baseado em regex também dispara na parte de domínio de um endereço de e-mail (example.com dentro de alice.rivera@example.com), então textos com muitos e-mails são contados duas vezes, como EMAIL_ADDRESS e URL. Esse é o comportamento do próprio reconhecedor do Presidio, sem modificações, e vale notar que as contagens de entidades podem variar ligeiramente entre versões do Presidio/spaCy, já que a detecção é baseada em NLP, não em uma tabela fixa de consulta (esta execução usou presidio-analyzer 2.2.364 com en_core_web_sm 3.8.0). Filtre isso com --entities se você só se importa com endereços de e-mail:
releaseguard scan dataset --entities EMAIL_ADDRESS,PERSON,PHONE_NUMBER

Remova e depois empacote um pacote de liberação em um único 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 abre assim, com contagens reais da digitalização preenchidas e todo o resto deixado como um espaço reservado explícito para um humano completar:
# 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 em todos os comandos alterna para saída legível por máquina, para scripts e agentes.
Resumo rápido
- Use para: transformar uma digitalização do Presidio em uma cópia com dados removidos, além de um card de dataset/modelo e um resumo de dados de treinamento conforme o Art. 53(1)(d) da Lei de IA da UE, em um único comando em vez de três ferramentas separadas e um template escrito à mão
- O que não é: um detector de PII próprio, nem uma alegação de "transparência total"/conformidade plena com divulgação de dados de treinamento. Veja O que o ReleaseGuard não é
- Funciona inteiramente local. Nenhum conteúdo de dataset, resultado de digitalização ou saída com dados removidos é enviado a um serviço remoto.
Referência da 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 | Finalidade |
|---|---|
scan PATH | Digitaliza um arquivo ou diretório (CSV, JSON/JSONL, texto simples) com o Presidio. --entities, --score-threshold, --spacy-model, --json. |
redact PATH --output DIR | Digitaliza e depois grava uma cópia com dados removidos em DIR. Nunca toca em PATH. --strategy mask|hash|remove, --overwrite. |
package PATH --output DIR | Digitaliza (e por padrão remove primeiro) e depois grava um card de dataset/modelo do Hugging Face, além do resumo do Art. 53(1)(d) da Lei de IA da UE, em DIR. --kind dataset|model|both, --redact-first/--no-redact-first. |
mcp | Inicia um servidor MCP (stdio) expondo scan_directory_tool, redact_directory_tool, package_release_tool. Requer pip install "releaseguard-cli[mcp]" no Python 3.10+. |
Todo comando suporta --json. Referência completa de flags: releaseguard <command> --help.
API da biblioteca
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) e FileReader (releaseguard.readers.base) são os dois pontos de extensão. O Presidio é atualmente o único detector incluído; CSV, JSON/JSONL e texto simples são atualmente os três leitores incluídos. Ambos são registros, não chamadas fixas, justamente para que um novo formato ou um segundo backend de detecção seja uma adição escopada no futuro. Veja CONTRIBUTING.md.
Servidor MCP
O ReleaseGuard inclui um servidor Model Context Protocol para que um agente de IA (Claude, Cursor ou qualquer cliente compatível com MCP) possa digitalizar, remover e empacotar um diretório de dataset ou modelo diretamente, sem que um humano invoque a CLI manualmente.
Instale o extra:
pip install "releaseguard-cli[mcp]"
Inicie-o diretamente com o subcomando mcp:
releaseguard mcp
Adicione-o à configuração do seu cliente MCP (para o Claude Desktop, claude_desktop_config.json). O servidor é iniciado por meio de um subcomando do script de console publicado releaseguard, não um script de console separado próprio:
{
"mcpServers": {
"releaseguard": {
"command": "uvx",
"args": ["--from", "releaseguard-cli", "releaseguard", "mcp"]
}
}
}
O transporte é stdio, então não há nada para hospedar: o cliente MCP inicia o servidor como um subprocesso local. Fonte: src/releaseguard/mcp_server.py.
O servidor expõe três ferramentas, cada uma retornando o mesmo formato JSON da saída --json da CLI correspondente:
| Ferramenta | Finalidade |
|---|---|
scan_directory_tool(path, spacy_model=None, score_threshold=0.35) | Digitaliza um diretório em busca de PII e segredos com o Presidio. |
redact_directory_tool(path, output, strategy="mask", overwrite=False) | Digitaliza e depois grava uma cópia com dados removidos em output. Nunca modifica path. strategy é "mask", "hash" ou "remove". |
package_release_tool(path, output, kind="dataset", redact_first=True, strategy="mask") | Digitaliza, opcionalmente remove e grava um pacote de liberação (card de dataset/modelo mais o resumo do Art. 53(1)(d) da Lei de IA da UE) em output. |
Um exemplo real de chamada:
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}}
Toda ferramenta verifica se path existe antes de fazer qualquer outra coisa e retorna um erro estruturado, {"error": "Path '<path>' does not exist.", "error_type": "PathNotFound"}, em vez de um resultado de sucesso silencioso e enganoso de "0 arquivos digitalizados". Versões anteriores deste servidor pulavam essa verificação e deixavam um caminho inválido passar direto para scan_directory, que retornava um falso sucesso em vez de um erro; todo manipulador de ferramenta também agora é envolvido para que uma exceção inesperada retorne como {"error": ..., "error_type": ...} em vez de derrubar o servidor. Um manifesto .well-known/agent.json é incluído na raiz do repositório para descoberta no estilo A2A, listando tanto as interfaces CLI e MCP quanto os pacotes que as fornecem.
Comparação
| ReleaseGuard | Presidio | Ferramentas de card do huggingface_hub | pii-lib | |
|---|---|---|---|---|
| Detecta PII/segredos | Não, envolve o Presidio | Sim (é o trabalho dele) | Não | Sim (regex + NER, escopo de dados de treinamento de código) |
| Remove entidades detectadas | Sim (via presidio-anonymizer) | Sim (em nível de biblioteca) | Não | Sim |
| Gera um card de dataset/modelo do Hugging Face | Sim, a partir de resultados reais de digitalização | Não | Sim (campos manuais, sem integração com digitalização) | Não |
| Gera um resumo do Art. 53(1)(d) da Lei de IA da UE | Sim, a partir de resultados reais de digitalização | Não | Não | Não |
| Um comando, da digitalização ao pacote de liberação | Sim | Não (apenas biblioteca, você escreve a cola) | Não (apenas biblioteca) | Não |
| Estrelas no GitHub (verificado em 2026-08) | Novo em 2026 | ~10.300 | ~3.800 | 16 |
Contagens de estrelas verificadas ao vivo na API do GitHub em 2026-08-03: data-privacy-stack/presidio (originalmente microsoft/presidio; o projeto mudou de organização, mesmo código), huggingface/huggingface_hub, bigcode-project/pii-lib. A baixa contagem de estrelas do pii-lib é por si só informativa: é a tentativa anterior mais próxima de remoção de PII com escopo em um fluxo de trabalho de liberação de dados de treinamento, e não ganhou adoção significativa. O ReleaseGuard não assume que o resultado será diferente aqui; veja a entrada de FAQ sobre demanda.
Plataformas empresariais de governança de dados (Databricks Unity Catalog, Credo AI, BigID e outras) já oferecem classificação e remoção de PII como parte de plataformas pagas mais amplas voltadas a grandes organizações. O ReleaseGuard é uma alternativa gratuita, de propósito único e open-source para uma equipe que só quer o fluxo de digitalizar-remover-empacotar para uma liberação, não um conjunto de governança.
O que é o ReleaseGuard e por que ele existe
O ReleaseGuard é uma CLI open-source, biblioteca Python e servidor MCP que encadeia três etapas — detecção de PII/segredos (via Presidio), remoção e documentação de liberação pública — em um único comando. Cada etapa já existe como ferramenta separada: o Presidio detecta, presidio-anonymizer remove, huggingface_hub tem auxiliares de geração de cards, e a Comissão Europeia publica um template de resumo de dados de treinamento como um documento que você preenche à mão. Nada antes do ReleaseGuard encadeava uma digitalização real diretamente em um template preenchido.
Ele existe porque publicar um dataset ou modelo de forma responsável envolve executar uma digitalização de PII, remover o que ela encontra e depois redigir dois documentos quase à mão: um card e (para provedores de modelos de IA de propósito geral) um resumo de dados de treinamento conforme a Lei de IA da UE. O ReleaseGuard automatiza a segunda metade desse fluxo para que os documentos resultantes reflitam o que foi realmente digitalizado, não o que alguém lembrou de escrever depois.
Art. 53(1)(d) da Lei de IA da UE, declarado com precisão: este artigo exige que provedores de modelos de IA de propósito geral (GPAI) publiquem um "resumo suficientemente detalhado" do conteúdo de treinamento, usando o template que o Escritório de IA da Comissão Europeia publicou em 2025-07-24 (em vigor para novos modelos a partir de 2025-08-02, prazo transitório em 2027-08-02 para modelos já no mercado, verificações de aplicação pelo Escritório de IA a partir de 2026-08-02). Ele exige um resumo categórico das fontes e modalidades de dados. Não exige amostras brutas de treinamento, receitas completas de treinamento ou pesos de modelo, e se aplica especificamente a provedores de modelos GPAI, não a todo publicador de dataset. O resumo gerado pelo ReleaseGuard é um rascunho inicial para esse requisito estreito e real, nunca uma alegação de conformidade mais ampla de "transparência total".
O que o ReleaseGuard não é
- Não é um detector de PII. Cada tipo de entidade, pontuação de confiança e decisão de detecção vem do Presidio. O ReleaseGuard não adiciona modelo de NLP, reconhecedor ou alegação de precisão próprios. Se o Presidio deixar passar algo ou contar demais (veja a sobreposição
URL/e-mail no Início rápido acima), o ReleaseGuard herda esse comportamento sem modificações. - Não é um serviço hospedado. Tudo roda localmente. Nenhum alvo de digitalização, resultado de digitalização ou saída com dados removidos é transmitido a lugar algum. Veja a seção de escopo do SECURITY.md.
- Não é prova de conformidade legal. O resumo gerado da Lei de IA da UE é um rascunho que ainda precisa de um humano para preencher seções de licenciamento, fontes de dados e direitos autorais que o ReleaseGuard não pode inferir de uma digitalização. Executar
releaseguard packagenão satisfaz, por si só, o Art. 53(1)(d) ou qualquer outra regulamentação. - Não é evidência de demanda além do que foi citado acima. A tentativa anterior mais próxima deste mesmo fluxo,
pii-lib, tem 16 estrelas no GitHub. O ReleaseGuard não afirma ter resolvido o problema de adoção que esse projeto enfrentou; ele afirma preencher uma lacuna real, estreita e verificada de forma independente (nenhuma ferramenta open-source existente encadeia uma digitalização do Presidio diretamente em um template do Art. 53(1)(d)), e deixa o uso real decidir o resto.
Perguntas frequentes
O ReleaseGuard detecta PII com mais precisão que o Presidio?
Não. Ele não pode, já que chama o próprio AnalyzerEngine do Presidio para cada decisão de detecção. Qualquer questão de precisão é uma questão do Presidio; veja a documentação do próprio Presidio e o presidio-research para a metodologia de avaliação.
Por que o scan precisa de um download do modelo spaCy?
O AnalyzerEngine do Presidio requer um modelo de linguagem spaCy para detecção sensível ao contexto (reconhecer que "John Smith" é um nome a partir do texto ao redor, não apenas uma palavra capitalizada). Os modelos spaCy são distribuídos como pacotes instaláveis próprios, não como uma dependência do pip, então o python -m spacy download en_core_web_sm é uma etapa única obrigatória, assim como é para qualquer pessoa que use o Presidio diretamente.
O ReleaseGuard funciona no Windows, macOS e Linux?
É Python puro, sem caminho de código específico do sistema operacional, e o shim do lançador npm escolhe where ou which por plataforma para localizar o CLI instalado (npm-shim/bin/releaseguard-cli.js). O CI atualmente roda apenas no ubuntu-latest, nas versões Python 3.10 e 3.12, então macOS e Windows ainda não são cobertos por uma matriz de testes automatizada. Trate-os como esperados para funcionar, mas não verificados pelo CI, até que essa matriz seja expandida.
O resumo do Art. 53(1)(d) da Lei de IA da UE é legalmente suficiente por si só? Não. É um rascunho inicial estruturalmente correto, preenchido com dados reais de varredura onde o ReleaseGuard pode verificá-lo (a seção de PII/segredos) e um espaço reservado explícito onde não pode (fontes de dados, licenciamento, status de direitos autorais). Um humano, idealmente com revisão jurídica, precisa preencher os espaços reservados antes de publicá-lo como um artefato de conformidade.
Isso se aplica apenas se eu estiver treinando um modelo GPAI?
O resumo do Art. 53(1)(d) visa especificamente provedores de modelos de IA de propósito geral sob a Lei de IA da UE, um conjunto restrito de compradores. As partes de geração de cartões scan, redact e Hugging Face do ReleaseGuard são úteis para qualquer lançamento de conjunto de dados ou modelo, independentemente de o Art. 53(1)(d) se aplicar a você.
Por que dois registros?
A implementação do ReleaseGuard é em Python, já que o próprio Presidio é em Python (presidio-analyzer/presidio-anonymizer); envolvê-lo em outra linguagem significaria re-chamar processos externos ou reimplementar bindings. O pacote npm (releaseguard-cli) é um lançador fino, não uma reimplementação. Ele localiza e executa o binário real do releaseguard instalado do PyPI, então o npx releaseguard-cli funciona para ferramentas de agentes que priorizam npm sem duplicar a lógica de detecção do Presidio em duas linguagens.
Sob qual licença o ReleaseGuard está e posso usá-lo comercialmente? Apache 2.0, a mesma licença que o próprio Presidio usa. Ela permite uso comercial, modificação e redistribuição, inclusive dentro de um produto proprietário, sujeito aos termos padrão da Apache 2.0: mantenha o aviso de licença e direitos autorais e declare quaisquer alterações feitas no código-fonte. Veja LICENSE para o texto completo.
Alguém realmente precisa disso, ou é "código de cola que ninguém pediu"? Sendo honesto: nenhum sinal orgânico de demanda (um tópico no HN/Reddit descrevendo esse fluxo de trabalho exato como um ponto de dor vivido) havia surgido até a pesquisa inicial deste projeto. O fato verificável de forma independente é mais restrito e mais defensável: nenhuma ferramenta de código aberto existente encadeia uma varredura do Presidio diretamente em um modelo do Art. 53(1)(d) ou em um cartão HF combinado, em um único comando, a partir de uma única varredura. Se essa lacuna se transforma em uso real é uma questão aberta e falseável que este projeto acompanha, em vez de assumir a resposta.
O que acontece com arquivos que o ReleaseGuard não consegue analisar (imagens, arquivos de pesos de modelo, Parquet sem o extra)?
scan e redact os ignoram (listados sob files_skipped na saída do --json); o redact os copia para o diretório de saída inalterados, em vez de descartá-los silenciosamente do pacote de lançamento. Eles não são varridos em busca de PII, então revise-os separadamente antes de publicar.
Contribuindo
Veja CONTRIBUTING.md. Problemas de segurança: veja SECURITY.md.