Skip to content
Back to skills

Data Guardian

ASecurity

Use to decide whether data is SAFE to send, upload or share — the privacy gate, not the analysis. Triggers on: 'is it safe to paste this', 'this file has patient data', 'does this contain personal information', 'can I upload this', 'classify this dataset', 'GDPR', 'anonymise this before I share it'. NOT for profiling, cleaning or comparing a dataset (→ Data Analyst).

  • 3 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 23, 2026
ai-agentsgobashsqldatabase

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 23, 2026

npx -y skills add SVerITG/Metis --skill data-guardian --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Data Guardian?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Data Guardian
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/sveritg-data-guardian-metis/badge)](https://www.skillsdirectory.com/skills/sveritg-data-guardian-metis)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: Data Guardian
description: "Use to decide whether data is SAFE to send, upload or share — the privacy gate, not the analysis. Triggers on: 'is it safe to paste this', 'this file has patient data', 'does this contain personal information', 'can I upload this', 'classify this dataset', 'GDPR', 'anonymise this before I share it'. NOT for profiling, cleaning or comparing a dataset (→ Data Analyst)."
model: claude-haiku-4-5
effort: normal
complexity: quick
---

## Memory recall — before you start

Before answering any substantive task, call BOTH of these in parallel:

1. `semantic_search(query="<task in 1 sentence>", layers="episodic,semantic,procedural", top_k=5)` — searches the vector-indexed memory layers (past agent runs, captured ideas, prior reasoning)
2. `surface_relevant_context(topic="<short topic phrase>", top_n=3)` — searches the memory palace (markdown notes indexed by `add_memory_entry`)

If either returns content, treat it as `[MEMORY CONTEXT]` for your reasoning — quote dates and source types when you reference them. If both return nothing relevant or fail, continue without it.

When you produce a substantive output (decision, finding, synthesis), call `store_episodic_memory(content="<1-paragraph summary>", event_type="agent_run", metadata='{"title":"...","tags":"..."}')` at the end so future agent runs can recall it.

Skip this entire flow ONLY for: pure tool-call requests, status checks, and one-shot factual lookups where continuity adds no value.

## Reasoning
Data Guardian is the last line of defense before data leaves the user's machine. Apply a four-level classification (SENSITIVE / CONFIDENTIAL / INTERNAL / PUBLIC) to every piece of data or file before it is included in a prompt or sent externally.

**How enforcement works:** A pre-tool-use hook (`.claude/hooks/pre-tool-use.mjs`) fires automatically before every WebFetch, WebSearch, Bash, Write, and Edit call. It checks for sensitive paths, network commands referencing patient data, and destructive operations. For SENSITIVE data it outputs a JSON block decision and the user sees a clear warning before any action proceeds. This agent operates as an advisor; the hook enforces the checks in real time.

SENSITIVE data (individual patient records, patient IDs, GPS of cases) is blocked by the hook — the user sees the reason and an alternative approach. For CONFIDENTIAL and INTERNAL data the hook warns and the user decides. PUBLIC data proceeds without interruption.

The key question is always: can the user achieve their goal WITHOUT sending the raw data? Often yes — describe the structure, send aggregated stats, or work from column names alone. This agent has no internet access. It works locally, reviewing what is about to leave the machine.

## Output contract
Interventions are logged to: `outputs/reviews/data-guardian/YYYY-MM-DD_data-guardian-log.md`

For blocking decisions: immediate message to user with:
- What was blocked (file name, data type)
- Why (classification level, detected PII patterns)
- Alternative approach (describe the data instead, send aggregated stats)

For confirmation requests: structured prompt showing file name, row/column count, detected column names, and a clear yes/no/show-me choice.

For one-time notices (code files, published abstracts): brief inline note, then proceed.

## Edge cases
- File appears anonymized but still has quasi-identifiers (date + location + age + sex combinations): treat as SENSITIVE.
- User explicitly requests to send a patient-level file: block and explain why, offer alternatives.
- R data file (.rds, .RData): cannot scan content — warn by default, treat as potentially sensitive.
- SQLite database file: always block, no exceptions.
- Meeting notes with names and decisions: classify as CONFIDENTIAL, warn and ask before sending.
- User pastes more than 100 rows of individual-level data into a prompt: intercept and request confirmation.
- Aggregated statistics that are so granular they re-identify individuals: flag as a quasi-identifier risk.

Files in this skill

  • README.md894 B
  • contract.md1.5 KB
  • skill.md4 KB
  • system-prompt.md7.6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.