grahama1970/anonymize-data

Anonimiza archivos CSV, JSON, texto UTF-8 y SQLite utilizando una política explícita a través del proyecto oai-trial. Ideal para anonimizar datos, seudonimizar exportaciones, redactar literales de políticas o descubrir y aprobar explícitamente alias de nombres aproximados. Esta habilidad es una interfaz CLI/Docker ligera, no un motor adicional.

¿Qué es anonymize-data?

Esta habilidad proporciona una envoltura CLI/Docker ligera para el proyecto canónico `oai-trial`, permitiendo la anonimización de archivos CSV, JSON, texto UTF-8 y SQLite basada en una política explícita. Está diseñada para desarrolladores y agentes de IA que necesitan proteger datos sensibles en exportaciones, cumpliendo con políticas de privacidad, o para realizar descubrimiento de alias de nombres aproximados (fuzzy name aliases) de forma controlada y revisada. La habilidad no duplica la lógica de coincidencia (matcher), adaptadores de formato, verificador, esquemas o manejo de errores del proyecto subyacente; simplemente expone una interfaz simplificada para operaciones de línea de comandos y Docker. Su utilidad principal recae en la anonimización determinista: se proporciona un archivo de política con los valores sensibles (nombres, números de teléfono, etc.), y la herramienta reemplaza esos valores en los archivos de entrada. El flujo de trabajo incluye la preparación del entorno, la ejecución de la anonimización, y la verificación del resultado. Además, incorpora un paso opcional de descubrimiento de alias mediante RapidFuzz, que compara valores contra entradas de tipo `name` en la política, permitiendo al operador aprobar candidatos de forma explícita, evitando reemplazos automáticos no supervisados. La habilidad es compatible con cualquier sistema que pueda ejecutar un script Bash y Docker. No requiere memoria persistente, credenciales de proveedor, modelos de lenguaje, red ni servicios de base de datos externos, lo que la hace segura y autónoma para entornos aislados. La documentación de SKILL.md incluye reglas críticas de representación, lecciones de endurecimiento (hardening) y procedimientos de verificación para asegurar que la anonimización es completa y no deja filtrar información sensible en diferentes representaciones. En resumen, esta habilidad es una interfaz de alta calidad para un proyecto de anonimización robusto, que enfatiza la corrección y la verificación independiente, evitando errores comunes como la coincidencia solo de cadenas que pueden pasar por alto datos numéricos o representaciones Unicode alternativas.

Compatible con~Claude Code~Codex CLI~Cursor✓Antigravity
npx skills add https://github.com/grahama1970/agent-skills/tree/main/skills/anonymize-data

Installed? Explore more Investigación y análisis de datos skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Anonimizar datos

Opera el proyecto canónico oai-trial. No dupliques su motor de coincidencia, adaptadores de formato, verificador, esquemas o manejo de errores en esta habilidad. La CLI argparse existente del proyecto se conserva intencionalmente; este envoltorio no añade una CLI de Python ni un servicio.

Configuración y operación principal

ANONYMIZE_DATA_ROOT anula el checkout primario predeterminado anterior. La configuración necesita uv e instala las dependencias de desarrollo/descubrimiento declaradas del proyecto. Las operaciones en tiempo de ejecución no necesitan Memoria, credenciales de proveedor, LLM, red ni servicio de base de datos.

./run.sh setup
./run.sh --input /data/exports --policy /data/policy.json --output /data/release
./run.sh anonymize --input /data/export.sqlite --policy /data/policy.json --output /data/release

La entrada es un archivo .csv, .json, .txt o .sqlite, o un directorio de esos archivos. La política debe ser un archivo regular separado. Utiliza un directorio de salida vacío dedicado, fuera de los directorios de entrada. Los originales se copian en una instantánea temporal privada; la salida exitosa contiene solo corpus/ y report.json.

La interfaz de paquete (bundle) existente permanece disponible:

./run.sh run --input /data/bundle --output /data/release
./run.sh verify --input /data/bundle --output /data/release
./run.sh inspect /data/release

Un paquete contiene policy.json y corpus/. La política, la identidad canónica, las reglas de valores protegidos, los fallos tipificados y el esquema del informe son propiedad del proyecto. Lee su README.md, docs/ANONYMIZATION_SEMANTICS.md y schemas/report.schema.json al interpretarlos. No declares el éxito solo por un código de salida: lee el informe real, valida sus campos de estado de preparación e inspecciona la salida para el formato solicitado. Los informes corruptos o faltantes no están LISTOS (READY).

Descubrimiento opcional con RapidFuzz: nunca reemplazo automático

./run.sh discover --input /data/exports --policy /data/policy.json --output /data/work/review.json
./run.sh approve-discovery --input /data/exports --policy /data/policy.json \
  --review /data/work/review.json --approve CANDIDATE_ID --output /data/work/approved-policy.json
./run.sh --input /data/exports --policy /data/work/approved-policy.json --output /data/release

El descubrimiento compara valores completos de cadenas estructuradas y líneas de texto completas contra las entradas de política de tipo name. No es una extracción de tramos NLP ni un escáner general de PII. Valores predeterminados: umbral de similitud 90, margen de separación 5; configurables con --threshold y --margin. No se proponen empates, casi empates, valores protegidos, valores que contienen dígitos o puntuación de identificadores como @, /, _, y literales ya conocidos. Se permiten apóstrofes, guiones y puntos en texto con forma de nombre; la similitud nunca es prueba de que dos personas sean la misma.

Pide al operador que apruebe IDs de candidatos específicos. Nunca apruebes solo por la puntuación de similitud. La aprobación vuelve a derivar las propuestas contra la política/el corpus actual, rechaza revisiones obsoletas/editadas y compila una política de coincidencia exacta. Las propuestas no aprobadas nunca afectan la anonimización. release_ready: false es obligatorio en los recibos de descubrimiento/aprobación.

Los archivos de revisión y política aprobada contienen nombres sin procesar: mantenlos fuera de los lanzamientos, registros e informes compartidos. Se crean con modo 0600 y nunca sobrescriben un archivo existente. Las instantáneas temporales se ubican por defecto en la unidad de artefactos; anula con ANONYMIZE_DATA_WORK_DIR cuando sea necesario.

Docker sigue siendo la interfaz independiente

Desde el checkout del proyecto:

docker build -t anonymization-trial .
docker run --rm anonymization-trial
# Imagen opcional con descubrimiento habilitado; la imagen por defecto mantiene la dependencia del motor exacto libre.
docker build --build-arg INCLUDE_DISCOVERY=1 -t anonymization-trial:discovery .

Monta solo la entrada/política solicitada en modo solo lectura y un directorio de salida dedicado. La misma CLI del proyecto se ejecuta dentro de la imagen; el evaluador no necesita esta habilidad. Consulta docs/DISCOVERY.md del proyecto para ejemplos completos de comandos montados.

Límite de fallos y prueba

El envoltorio conserva los códigos de salida del proyecto y los códigos de error saneados. La falta del proyecto/configuración y las rutas de paquetes instalados incorrectas fallan antes del procesamiento. Usa --help para el contrato real de argumentos. El descubrimiento es material de revisión, no un lanzamiento, garantía de anonimato, probabilidad de confianza o autorización humana.

./sanity.sh ejecuta comprobaciones CLI reales positivas, negativas y adversarias. El fixtures/agentic_eval.json retenido las repite y requiere la relectura del artefacto. La calificación previa de prueba no califica automáticamente estas extensiones posteriores a la prueba.

Regla de representación (operador 2026-09-11)

El PII debe coincidir con el valor, no con la cadena: antes de que cualquier escalar JSON/SQLite se pase sin cambios, conviértelo a cadena canónicamente (números con forma de teléfono en formato E.164) y ejecuta la coincidencia de política en la forma convertida a cadena. Los fixtures deben incluir cada clase de PII en cada tipo escalar JSON. Un número de teléfono almacenado como entero es el mismo número de teléfono, incluso cuando la política lo escribe como una cadena formateada como 555-123-4567 y el corpus almacena 5551234567. Las conversiones numéricas con pérdida de precisión de cero a la izquierda o de punto flotante deben fallar de forma cerrada a menos que una regla canónica específica de tipo demuestre una equivalencia segura. Consulta $best-practices-skills "Matriz de representación de valores".

Lecciones de endurecimiento (no las reaprendas por las malas)

La prueba fue descalificada porque un teléfono almacenado como entero JSON/SQLite pasó el matcher de solo cadenas. La causa raíz fue un error de proceso: la comprobación de aceptación se redactó a partir de lo que el código hacía, no de la especificación entregada. Estas reglas existen para que ese tipo de error no pueda repetirse.

  1. Deriva la comprobación de la especificación, no del código. policy.json lista los valores sensibles exactos. La comprobación de aceptación correcta es "ninguno de esos valores aparece en la salida decodificada, en ninguna representación" — lee los valores del archivo de política, nunca de una lista escrita a mano. Prueba que la comprobación depende de la especificación con una sonda de dependencia (cambia un valor de política → el resultado debe cambiar). Implementación de referencia: scripts/spec_derived_check.py del proyecto, integrado en scripts/verify.sh.

  2. El verificador independiente no debe compartir ninguna suposición con la transformación. El verificador original tenía el mismo punto ciego de solo cadenas que el productor, por lo que nada falló de forma cerrada. El oráculo de verificación debe ser consciente de la representación e independiente: analizar JSON (decodificar \uXXXX), expandir escalares numéricos a formas entero/decimal, normalizar ambos lados en NFC/NFD, escanear celdas de tablas+ vistas DE SQLite Y el DDL de sqlite_master Y cada entero de cabecera, y escanear todo el límite del lanzamiento, incluido report.json, no solo corpus/.

  3. La clase de representación completa es una lista de verificación, no un solo error. Cada uno de estos puede transportar un valor sensible más allá de un matcher ingenuo; el proyecto corrige y retiene un guardia para cada uno: escalares numéricos tipificados (int/float, notación científica), BLOB de SQLite (fallo cerrado), Unicode NFC/NFD, reconstrucción de vistas, residuo de freelist, esquema DB hostil (índices de expresión/parciales, vistas no deterministas, DEFAULTs computados), literales de esquema DDL y enteros de cabecera persistentes. Consulta docs/SECURITY_REMEDIATION.md del proyecto para la tabla completa.

  4. Pruébalo a través de la ruta real de Docker, de forma determinista. La verificación debe ser un script comprometido que construya la imagen, ejecute los comandos exactos del briefing y lea los bytes lanzados con salidas PASS/FAIL duras, no con prosa de agente. Referencia: security/docker_brief_contract.py (construcción + ambos comandos del briefing + escaneo de fugas consciente de representación + precondición de entrada) y security/docker_hardening_matrix.py (agujeros adversarios a través de docker run). Registra el commit de git y el id de la imagen construida.

  5. Alcance honestamente. Los seudónimos deterministas de espacio de nombres público revelan igualdad/frecuencia y no ofrecen resistencia a enlaces externos; el informe de ejecución lo indica en key_mode y does_not_establish. Un valor de política igual a una constante de formato SQLite obligatoria es una entrada degenerada, no PII real; la tubería falla de forma cerrada sobre ella y ese residuo se documenta como limitado.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

grahama1970/acceptance-contract

Turn a client brief, zip bundle, directory, or single requirements file into a typed acceptance-contract bundle with extracted requirements, acceptance checks, open questions, an immutable-goal draft, and a create-report-backed decision report. Use when users say acceptance contract, brief to requirements, freeze the goal, create immutable goal, amend immutable goal, build a Battle requirements bundle, or extract requirements from this bundle.

grahama1970/agent-ecosystem

Canonical map and shared contracts for the agent-governance ecosystem: the pi.receipt_envelope.v1 boundary envelope, the component graph, and the rules for which component owns which schema. Use when wiring a skill or extension into the shared receipt world, when asking how shame, triage-error, tau, ask, project-watchdog, ops-herdr, ponytail, and Memory fit together, or when validating an envelope.

grahama1970/agentic-evals

Agentic evaluation of skills using multi-trial fixtures, deterministic command assertions, trajectory checks, safety constraints, and evidence-backed readiness scoring. Use when users ask for agentic evals, multi-trial skill evaluation, skill trajectory validation, or readiness scoring for a skill workflow.

grahama1970/agent-inbox

File-based inter-agent messaging with headless dispatch. Check inbox, send bugs/requests to other projects, automatically spawn headless agents to fix bugs, and track progress via task-monitor.

grahama1970/agents-registry

Generate and query the centralized agent identity registry. Scans .pi/agents/*/AGENTS.md, parses frontmatter, outputs agents-registry.json and optionally syncs to /memory for semantic search.

grahama1970/agent-status

Artifact-driven status surfaces for long-running project-agent work. Maintains status.json, events.jsonl, proof manifests, and a stale-aware STATUS.html so humans can tell where the agent is, what passed, what is still unproven, and what decision or action is next — without dashboard theater.

grahama1970/align

Round-based context alignment before execution. Use when the human, project agent, WebGPT, scillm, ask, dogpile, memory, or project-knowledge may each hold different facts about a task; especially before ambiguous design, infographic, product workflow, high-stakes implementation, plan-iterate, project-infographic, or multi-review work.

grahama1970/analytics

Flexible data science analytics for any dataset. Auto-discovers schema, recommends charts, exports to create-figure. Works with JSONL, JSON, CSV from any source.

grahama1970/analyze-chatterbox-emotions

Evaluate generated Chatterbox voice files as voice-quality artifacts: affect match, arousal/valence proxies, pause placement, intelligibility inputs, clipping, loudness, and discontinuity flags. Use when reviewing Chatterbox emotional tags, pauses, Turbo/base affect delivery, Persona Dream utterance renders, or whether generated speech matches an intended product-facing affect.

grahama1970/analyze-elf

Reverse-engineer features from ELF binaries. Extracts CLI commands, state machines, protocols, Zod schemas, and data models. Automatically generates a /create-walkthrough prosecution brief with Mermaid diagrams. Uses /treesitter for AST analysis of bundled JS/TS source.

grahama1970/animation-vocabulary

Reverse-lookup glossary that turns a vague description of a web animation or motion effect into its exact term ("the bouncy thing when a popover opens" → Pop in; "the iOS rubber-band scroll" → Rubber-banding). Use when the user asks "what's it called when…", or describes a motion effect without knowing its name and wants the right word to prompt an AI or designer with. For naming an effect, not designing or building one.

grahama1970/anvil

Heavy-duty "No-Vibes" debugging and hardening orchestrator. Use this for complex, stubborn bugs where `review-code` has failed, or for "Red Teaming" (hardening) a codebase. Runs multiple agents in parallel (Thunderdome) using git worktree isolation.

grahama1970/apple-design

Apple's approach to interface design and fluid, physical motion, translated for the web. Use when building or reviewing gesture-driven UI, spring animations, drag/swipe/sheet interactions, momentum and interruptible transitions, translucent materials and depth, typography (optical sizing, tracking, leading), reduced-motion, or the design foundations (feedback, spatial consistency, restraint) behind Apple-style interfaces.

grahama1970/argue

Multi-persona structured debate orchestrator. Personas research via /dogpile, consult colleagues via /ask, and argue toward nuanced synthesis on complex questions.

grahama1970/arxiv

Search arXiv for papers and extract knowledge into memory. Use `search` to find papers, `learn` to extract knowledge.

grahama1970/ask

Use when the user asks to query project memory, ask an oracle, use supported browser-backed reviewers, run Tau roundtable/single-handler workflows, ask Pi-native subagents from within Pi, run persona/deep-review workflows, generate image prompts, check OS/project health through composed skills, or run an ask DAG. This skill is the executable /ask runtime; do not replace it with an informal subagent, plain web search, or hand-written review; inside Pi, explicit Pi-native subagent targets are routed through the pi-subagents tool as an Ask target type.

grahama1970/assess

Step back and critically reassess project state. Use when asked to "assess", "step back", "fresh eyes", "check alignment", "sanity check", "health check", "prune documentation", or "evaluate what's working". Offers documentation pruning and doc-code alignment analysis. Offer to run after major changes (don't auto-run).

grahama1970/assistant

Shared GPT + classifier inference gateway for persona monitor tasks. Routes validation and classification through a 4-tier cascade: heuristic → classifier → local GPT → scillm.

grahama1970/assistant-lab

Self-improvement workbench for /assistant. All the tools needed to diagnose, train, evaluate, and promote models in a continuous loop. The "warm pond" where /assistant evolves its own inference stack.

grahama1970/batch-quality

Pre-flight validation and quality gates for batch LLM operations. ACTUALLY tests samples through LLM before burning tokens. Uses SPARTA contracts for DuckDB validation queries. Integrates with task-monitor for enforced quality gates.

Skills relacionados