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

CI PyPI npm License: Apache 2.0 Python 3.10+

InstalaçãoInício rápidoReferência da CLIAPI da bibliotecaComparaçãoPerguntas 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.

Terminal recording of releaseguard scan finding PII in a sample CSV, then releaseguard package writing a redacted copy plus a Hugging Face dataset card and an EU AI Act training-data summary

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

ReleaseGuard scan filtered to specific entity types with --entities and --json for structured output

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 output listing the scan, redact, package, and mcp subcommands

$ 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...
ComandoFinalidade
scan PATHDigitaliza um arquivo ou diretório (CSV, JSON/JSONL, texto simples) com o Presidio. --entities, --score-threshold, --spacy-model, --json.
redact PATH --output DIRDigitaliza e depois grava uma cópia com dados removidos em DIR. Nunca toca em PATH. --strategy mask|hash|remove, --overwrite.
package PATH --output DIRDigitaliza (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.
mcpInicia 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:

FerramentaFinalidade
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

ReleaseGuardPresidioFerramentas de card do huggingface_hubpii-lib
Detecta PII/segredosNão, envolve o PresidioSim (é o trabalho dele)NãoSim (regex + NER, escopo de dados de treinamento de código)
Remove entidades detectadasSim (via presidio-anonymizer)Sim (em nível de biblioteca)NãoSim
Gera um card de dataset/modelo do Hugging FaceSim, a partir de resultados reais de digitalizaçãoNãoSim (campos manuais, sem integração com digitalização)Não
Gera um resumo do Art. 53(1)(d) da Lei de IA da UESim, a partir de resultados reais de digitalizaçãoNãoNãoNão
Um comando, da digitalização ao pacote de liberaçãoSimNã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.80016

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 package nã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.

Licença

Apache 2.0