Install the "sentry-data-handling" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/sentry-data-handling into .claude/skills/sentry-data-handling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sentry-data-handling", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill sentry-data-handling -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "sentry-data-handling" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/sentry-data-handling into .agents/skills/sentry-data-handling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sentry-data-handling", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill sentry-data-handling -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "sentry-data-handling" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/sentry-data-handling into .cursor/skills/sentry-data-handling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sentry-data-handling", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill sentry-data-handling -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "sentry-data-handling" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/sentry-data-handling into .gemini/skills/sentry-data-handling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sentry-data-handling", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill sentry-data-handling -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "sentry-data-handling" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/sentry-data-handling into .github/skills/sentry-data-handling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sentry-data-handling", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill sentry-data-handling -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "sentry-data-handling" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/sentry-data-handling into .opencode/skills/sentry-data-handling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sentry-data-handling", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
sentry-data-handling
GitHub stars
2.8k
Token cost
~4.2k tokens
SKILL.md length
880 words
Files
7 (incl. references)
Skills in repo
3,342
Repo updated
First seen
Licence
MIT
At a glance
Configure GDPR-compliant data handling, PII scrubbing, and data retention policies in Sentry.
Works in 3 steps: Client-Side PII Scrubbing with beforeSend → Server-Side Data Scrubbing and IP… → GDPR Compliance and Data Subject Requests
Implementing beforeSend filters
SKILL.md covers Overview, Prerequisites, Instructions and Output, plus 4 more sections
Sentry Data Handling is an agent skill from jeremylongshore/tons-of-skills-marketplace. Configure GDPR-compliant data handling, PII scrubbing, and data retention policies in Sentry. Use when implementing beforeSend filters, server-side data scrubbing rules, IP anonymization, data subject deletion requests, or SOC 2 audit controls. Trigger with phrases like "sentry pii scrubbing", "sentry gdpr", "sentry data privacy", "scrub sensitive data sentry", "sentry data retention", "sentry compliance".
Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including reference files (for example `eval-spec.yaml`, `references/errors.md` and `references/examples.md`). Compatibility notes: Designed for Claude Code
It sits in Legal & Compliance, covering Privacy and GDPR, Backend development and SOC 2 and security compliance. It works with Sentry. The repository describes itself as: Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com. The licence is MIT.
When your agent uses it
Implementing beforeSend filters
Server-side data scrubbing rules
IP anonymization
Data subject deletion requests
Example prompts
“sentry pii scrubbing”
“sentry gdpr”
“sentry data privacy”
“/sentry-data-handling”
Requirements
Python 3
A credential in SENTRY_AUTH_TOKEN
Compatibility (from SKILL.md): Designed for Claude Code
Read from SKILL.md and the folder at commit cfae287. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves these tools, so the agent can use them without asking each time:
Read
Write
Edit
Grep
Bash(curl:*)
Bash(node:*)
From allowed-tools in the SKILL.md frontmatter.
Runs code
Shell commands in SKILL.md call:
curl
From the folder's file list and the shell code blocks in SKILL.md.
Network
Hosts in commands or code, which the agent is likely to contact:
sentry.io
Also links to:
docs.sentry.io
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names these keys or tokens, usually read from environment variables:
SENTRY_AUTH_TOKEN
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Compatibility
Designed for Claude Code
From compatibility in the SKILL.md frontmatter.
Context cost
Sentry Data Handling loads about 4.2k tokens when it runs, and up to ~5.4k if it reads all its reference files. Until then it costs about 108 tokens; SKILL.md has 880 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~108
When it runs· the whole SKILL.md, loaded when a task matches
~4.2k
With references· SKILL.md plus every file in references/, read only if the agent opens them
~5.4k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check passed
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
Download SKILL.mdSave it as .claude/skills/sentry-data-handling/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.
name
sentry-data-handling
description
Configure GDPR-compliant data handling, PII scrubbing, and data
retention policies in Sentry. Use when implementing beforeSend
filters, server-side data scrubbing rules, IP anonymization,
data subject deletion requests, or SOC 2 audit controls.
Trigger with phrases like "sentry pii scrubbing", "sentry gdpr",
"sentry data privacy", "scrub sensitive data sentry",
"sentry data retention", "sentry compliance".
Configure PII scrubbing, GDPR compliance, data retention, and audit controls for Sentry. This skill covers client-side filtering with beforeSend, server-side scrubbing rules, data subject erasure via API, and SOC 2 compliance patterns.
Overview
Sentry captures error context that often contains personally identifiable information (PII) — emails in stack traces, credit card numbers in request bodies, IP addresses in headers. Production deployments must scrub this data at two layers: client-side via beforeSend hooks (before data leaves the application) and server-side via Sentry's built-in Data Scrubber (defense in depth). GDPR requires additional controls: consent-based initialization, data subject deletion endpoints, and a signed Data Processing Agreement. This skill implements all three layers with TypeScript and Python examples, plus verification tests to prove scrubbing works end-to-end.
Prerequisites
Sentry SDK v8 installed and initialized (@sentry/node or sentry-sdk)
Sentry project with Admin or Owner role (required for Security & Privacy settings)
Compliance requirements documented (GDPR, HIPAA, PCI-DSS, or SOC 2)
Auth token with project:write and org:admin scopes for API operations
Step 1 — Client-Side PII Scrubbing with beforeSend
The first defense layer prevents PII from leaving your application. Configure beforeSend, beforeSendTransaction, and beforeBreadcrumb hooks during SDK initialization:
typescript
import * as Sentry from '@sentry/node';
Sentry.init({
dsn: process.env.SENTRY_DSN,
// CRITICAL: disable automatic PII collection
// When false, Sentry will NOT capture IP addresses, cookies, or user-agent
sendDefaultPii: false,
beforeSend(event) {
return scrubEvent(event);
},
beforeSendTransaction(event) {
return scrubEvent(event);
},
beforeBreadcrumb(breadcrumb) {
if (breadcrumb.data) {
const sensitiveKeys = ['password', 'token', 'secret', 'api_key', 'authorization'];
for (const key of sensitiveKeys) {
if (breadcrumb.data[key]) {
breadcrumb.data[key] = '[REDACTED]';
}
}
}
return breadcrumb;
},
});
Implement the scrubEvent function to strip PII from headers, request bodies, error messages, and user context:
typescript
function scrubEvent(event: Sentry.Event): Sentry.Event | null {
// Strip sensitive headers
if (event.request?.headers) {
const redactHeaders = ['Authorization', 'Cookie', 'X-Api-Key', 'X-Auth-Token'];
for (const header of redactHeaders) {
delete event.request.headers[header];
}
}
// Scrub request body fields
if (event.request?.data) {
const data = typeof event.request.data === 'string'
? safeJsonParse(event.request.data)
: event.request.data;
if (data && typeof data === 'object') {
scrubObject(data as Record<string, unknown>);
event.request.data = JSON.stringify(data);
}
}
// Scrub PII patterns from error messages
if (event.exception?.values) {
for (const exc of event.exception.values) {
if (exc.value) {
exc.value = scrubPiiPatterns(exc.value);
}
}
}
// Reduce user context to anonymous ID only
if (event.user) {
event.user = { id: event.user.id };
}
return event;
}
function scrubObject(obj: Record<string, unknown>): void {
const sensitiveKeys = [
'password', 'passwd', 'secret', 'token', 'api_key', 'apiKey',
'ssn', 'social_security', 'credit_card', 'cc_number', 'cvv',
'email', 'phone', 'address', 'dob', 'date_of_birth',
];
for (const key of Object.keys(obj)) {
if (sensitiveKeys.some(sk => key.toLowerCase().includes(sk))) {
obj[key] = '[REDACTED]';
} else if (typeof obj[key] === 'string') {
obj[key] = scrubPiiPatterns(obj[key] as string);
} else if (typeof obj[key] === 'object' && obj[key] !== null) {
scrubObject(obj[key] as Record<string, unknown>);
}
}
}
function scrubPiiPatterns(str: string): string {
return str
.replace(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g, '[EMAIL]')
.replace(/\b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{1,7}\b/g, '[CC_NUMBER]')
.replace(/\b\d{3}-\d{2}-\d{4}\b/g, '[SSN]')
.replace(/\b(\+1)?[\s-]?\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{4}\b/g, '[PHONE]');
}
function safeJsonParse(str: string): unknown {
try { return JSON.parse(str); } catch { return null; }
}
Python equivalent — use the same before_send pattern:
python
import sentry_sdk
import re
def scrub_event(event, hint):
"""Remove PII from Sentry events before transmission."""
# Strip sensitive headers
request = event.get("request", {})
headers = request.get("headers", {})
for key in ["Authorization", "Cookie", "X-Api-Key"]:
headers.pop(key, None)
# Scrub user context to anonymous ID
user = event.get("user")
if user:
event["user"] = {"id": user.get("id")}
# Scrub PII patterns from exception messages
for exc in event.get("exception", {}).get("values", []):
if exc.get("value"):
exc["value"] = re.sub(
r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}",
"[EMAIL]", exc["value"]
)
return event
sentry_sdk.init(
dsn=os.environ["SENTRY_DSN"],
send_default_pii=False,
before_send=scrub_event,
traces_sample_rate=0.1,
)
Step 2 — Server-Side Data Scrubbing and IP Anonymization
Server-side scrubbing acts as defense in depth. Configure in Project Settings > Security & Privacy:
Enable Data Scrubber — automatically redacts values matching common PII field names (password, token, secret)
Scrub IP Addresses — enable to remove client IPs from all events
Scrub Credit Cards — detect and remove card number patterns
For advanced regex-based rules, navigate to Project Settings > Security & Privacy > Advanced Data Scrubbing:
# Remove credit card patterns from all string fields
[Remove] [Regex: \d{4}-\d{4}-\d{4}-\d{4}] from [$string]
# Remove email addresses everywhere
[Remove] [Regex: \b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b] from [$string]
# Remove SSN patterns
[Remove] [Regex: \b\d{3}-\d{2}-\d{4}\b] from [$string]
# Mask passwords in request bodies
[Mask] [Password] from [extra.request_body]
# Replace credit card data everywhere with placeholder
[Replace] [Credit card] with [REDACTED] from [**]
Data forwarding — if forwarding events to external systems (Splunk, BigQuery), apply the same scrubbing rules at the destination. Configure forwarding in Project Settings > Data Forwarding.
Data retention — configure in Organization Settings > Subscription > Data Retention:
Plan
Default retention
Maximum retention
Developer
30 days
30 days
Team
90 days
90 days
Business
90 days
365 days
Enterprise
90 days
Custom
Step 3 — GDPR Compliance and Data Subject Requests
Right to be Informed — document Sentry usage in your privacy policy. Disclose what data is collected (stack traces, device info, anonymized user IDs) and the legal basis (legitimate interest in application reliability).
Consent-based initialization — for strict GDPR compliance, gate Sentry on user consent:
typescript
function initSentryWithConsent(hasConsent: boolean): void {
if (!hasConsent) {
// Do not initialize Sentry — no data sent
return;
}
Sentry.init({
dsn: process.env.SENTRY_DSN,
sendDefaultPii: false,
beforeSend: scrubEvent,
});
}
Right to Erasure (Article 17) — delete user data via the Sentry API:
bash
# Delete all events for a specific issue
curl -X DELETE \
-H "Authorization: Bearer ${SENTRY_AUTH_TOKEN}" \
"https://sentry.io/api/0/projects/${SENTRY_ORG}/${SENTRY_PROJECT}/issues/${ISSUE_ID}/" \
|| { echo "ERROR: Deletion failed — verify auth token has project:admin scope"; exit 1; }
typescript
// Programmatic deletion for data subject requests
async function handleDeletionRequest(userId: string): Promise<void> {
const org = process.env.SENTRY_ORG;
const project = process.env.SENTRY_PROJECT;
const token = process.env.SENTRY_AUTH_TOKEN;
// Search for issues containing user data
const searchRes = await fetch(
`https://sentry.io/api/0/projects/${org}/${project}/issues/?query=user.id:${userId}`,
{ headers: { Authorization: `Bearer ${token}` } }
);
if (!searchRes.ok) {
throw new Error(`Search failed: ${searchRes.status} ${searchRes.statusText}`);
}
const issues = await searchRes.json();
// Delete each matching issue
for (const issue of issues) {
const deleteRes = await fetch(
`https://sentry.io/api/0/projects/${org}/${project}/issues/${issue.id}/`,
{ method: 'DELETE', headers: { Authorization: `Bearer ${token}` } }
);
if (!deleteRes.ok) {
throw new Error(`Deletion failed for issue ${issue.id}: ${deleteRes.status}`);
}
}
console.log(`Deleted ${issues.length} issues for user ${userId}`);
}
Audit log access — Business and Enterprise plans provide audit logs at Organization Settings > Audit Log. Export via API for SOC 2 evidence:
Sentry Data Handling next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
Sentry Data Handling compared with similar skills
Skill
Stars
Used in
Tokens
Auto-check
Licence
Repo updated
Sentry Data Handling this skilljeremylongshore/tons-of-skills-marketplace
Expert CIS Controls v8 (CIS Top 18) advisor — implementation group scoping (IG1/IG2/IG3), control gap assessments, safeguard-level guidance, asset inventory, software inventory, data protection…
A skill your agent uses whenever someone needs security or compliance guidance for Amazon EKS — phrased as "CIS Benchmark for EKS", "HIPAA / PCI-DSS / FedRAMP / SOC 2 / GDPR on EKS", "harden my EKS…
115 GitHub stars~4.7k tokensUpdated 2 days ago
Legal & ComplianceAuto-check passed
More from jeremylongshore/tons-of-skills-marketplace
Configure GDPR-compliant data handling, PII scrubbing, and data retention policies in Sentry. Sentry Data Handling is an agent skill from jeremylongshore/tons-of-skills-marketplace. Configure GDPR-compliant data handling, PII scrubbing, and data retention policies in Sentry.
When should I use Sentry Data Handling?
Sentry Data Handling fits situations like: implementing beforeSend filters; server-side data scrubbing rules; IP anonymization; data subject deletion requests.
How do I install Sentry Data Handling in Claude Code?
Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill sentry-data-handling -a claude-code`. Or copy the skill folder (skills/.curated/sentry-data-handling in jeremylongshore/tons-of-skills-marketplace) into .claude/skills/sentry-data-handling in your project. Claude Code loads it when a task matches its description.
How do I install Sentry Data Handling in Codex?
Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill sentry-data-handling -a codex`. Or copy the skill folder (skills/.curated/sentry-data-handling in jeremylongshore/tons-of-skills-marketplace) into .agents/skills/sentry-data-handling in your project. Codex loads it when a task matches its description.
Can I use Sentry Data Handling in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill sentry-data-handling -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/sentry-data-handling, .gemini/skills/sentry-data-handling, .github/skills/sentry-data-handling and .opencode/skills/sentry-data-handling in your project.
What does Sentry Data Handling need to run?
Going by SKILL.md and its folder, Sentry Data Handling needs the command-line tools its instructions call (curl) and credentials named SENTRY_AUTH_TOKEN. Our summary lists: Python 3; A credential in SENTRY_AUTH_TOKEN. Its frontmatter pre-approves these tools: Read, Write, Edit, Grep, Bash(curl:*), Bash(node:*). Compatibility (from SKILL.md): Designed for Claude Code.
Does Sentry Data Handling access the network?
SKILL.md names 2 domains. In commands or code: sentry.io; the agent is likely to contact it when it follows the instructions. As links in the text: docs.sentry.io. This is read from the text; nothing was executed.
Is Sentry Data Handling safe to install?
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
What licence does Sentry Data Handling use?
Sentry Data Handling is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Sentry Data Handling use?
About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.2k tokens, read only when the agent opens those files.
What are the alternatives to Sentry Data Handling?
Skills that share tags, products or a category with Sentry Data Handling: Nist 800 53 (Sushegaad/Claude-Skills-Governance-Risk-and-Compliance, 946 stars), Audit Report (harness/harness-skills, 115 stars), Cis Controls (Sushegaad/Claude-Skills-Governance-Risk-and-Compliance, 946 stars) and Security Compliance (sangrokjung/claude-forge, 852 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Sentry Data Handling?
jeremylongshore (a GitHub user) maintains it in jeremylongshore/tons-of-skills-marketplace, which has 2,827 GitHub stars. The repository holds 3,342 skills in this directory. The repository was last updated on October 10, 2026.