Skip to content
Skills Library
Security · Review & audit

sensitive-data-git

/sensitive-data-git

Keep real people data, credentials, and dumps out of git across any domain (identity, auth secrets, financial, health, CRM, education, infra dumps); prefer gitignored private storage; anonymize tests/factories/seeders; redact logs. Use when committing, staging, writing fixtures, importing CSV/Excel/JSON/SQL, reviewing PRs for PII/secrets, or when the user mentions anonymize, sensitive data, private storage, or gitleaks.

Licence
MIT
Last repository change
13.11.2026

Assessment and security

100/ 100Class: good
Format25 / 25
Frontmatter with name and description, valid name, description up to 1,024 characters, name matching the folder.
Discoverability25 / 25
Description explains when to use the skill, has a reasonable length and uses third person.
Content35 / 35
At least 150 words and at most 500 lines, headings, step lists, examples or code.
Hygiene15 / 15
No placeholders such as TODO, no Windows paths, with a licence.
Riskno signals detected in the scan
Files in this package
4
Scripts
0
HTML comments
0
URLs in SKILL.md
0
Deprecation

No signals detected. Repository changed on 13.11.2026, without references to retired models or APIs.

Licence

MIT, open: use and modify while retaining author attribution.

What it does and when to use it

Keep real people data, credentials, and dumps out of git across any domain (identity, auth secrets, financial, health, CRM, education, infra dumps); prefer gitignored private storage; anonymize tests/factories/seeders; redact logs. Use when committing, staging, writing fixtures, importing CSV/Excel/JSON/SQL, reviewing PRs for PII/secrets, or when the user mentions anonymize, sensitive data, private storage, or gitleaks.

Original author description

Keep real people data, credentials, and dumps out of git across any domain (identity, auth secrets, financial, health, CRM, education, infra dumps); prefer gitignored private storage; anonymize tests/factories/seeders; redact logs. Use when committing, staging, writing fixtures, importing CSV/Excel/JSON/SQL, reviewing PRs for PII/secrets, or when the user mentions anonymize, sensitive data, private storage, or gitleaks.

How it works

  1. Non-negotiables
  2. User-private material — agents must skip
  3. Prefer local private storage — never git
  4. What counts as sensitive (predict beyond one domain)
  5. Never commit
  6. Allowed in git (reference / anonymized only)
  7. Tests, factories, seeders, fixtures
  8. Logging and audit redaction
  9. Git history hygiene
  10. Agent commit / PR checklist
Original SKILL.md headings · 208 lines, 1,334 words
SKILL.md preview
---
name: sensitive-data-git
description: >-
  Keep real people data, credentials, and dumps out of git across any domain
  (identity, auth secrets, financial, health, CRM, education, infra dumps);
  prefer gitignored private storage; anonymize tests/factories/seeders; redact
  logs. Use when committing, staging, writing fixtures, importing
  CSV/Excel/JSON/SQL, reviewing PRs for PII/secrets, or when the user mentions
  anonymize, sensitive data, private storage, or gitleaks.
---

# Sensitive Data and Git

Stop real people data and secrets from entering version control — for **any**
product domain, not only HR-style exports. Prefer gitignored private storage.
Keep tests and demos fictional.

Stack-agnostic: the **rule** is portable; **paths** are chosen per framework.
Laravel gets a clear path preset; Nest / Express / others map the same rule.

**When unsure, treat as sensitive** until the user confirms it is public or
fully fictional. Full taxonomy: [sensitive-catalog.md](sensitive-catalog.md).

## Non-negotiables

1. **Never commit** real people rows, credentials, or operational dumps.
2. **Prefer gitignored local private storage** for sensitive-on-disk files
   (path depends on the stack — see below).
3. **Anonymize** all tests, factories, seeders, and fixtures.
4. **Never log** secrets or identity payloads (see redaction list).
5. **On leak:** rotate secrets, remove from the working tree, stop. Do **not**
   rewrite git history unless the user explicitly asks.
6. **User-private material is off-limits to agents** — see below (SSH/VPS keys,
   live `.env`, cloud creds). Do not hunt, open, quote, or “helpfully” surface them.

## User-private material — agents must skip

These belong to the human / ops host, not the agent context. If found or
requested in a way that would expose them:

**Do not**

- Search the disk for `id_ed25519`, `id_rsa`, `.ssh/`, deploy/vps `*.pub`/key files
  “to wire deploy”
- `Read` / `cat` / print private **or** matching public deploy keys
- Paste key bodies (or fingerprints that identify a live host key) into chat,
  commits, docs, CI logs, or screenshots
- Copy keys into the repo “temporarily” or into workflow YAML
- Ask the user to paste a private key into the chat

**Do**

- **Skip** those paths immediately; treat as private user property
- Tell the user deploy/VPS auth must stay in **GitHub Actions secrets** (or the
  local SSH agent) — never in git
- If a key is already tracked: instruct `git rm --cached`, rotate if exposed,
  strengthen `.gitignore` — still **do not** open or reprint the key material
- Continue the task using secret **names** / docs only (e.g. `SSH_PRIVATE_KEY`
  Actions secret), never the value

Same skip rule applies to live `.env`, cloud credential JSON, and other
catalog §2/§9 secrets: detect for guard purposes if needed, but do not load or
echo contents.

## Prefer local private storage — never git

Put real people / credential / dump files only under a **gitignored** private
directory in the app, or an external backup outside the repo.

### Portable rule

1. Pick one private directory for operational people-data / secrets-on-disk
2. Ensure it is gitignored (and never `git add -f`)
3. Keep tracked trees (`data/`, `tests/`, `fixtures/`, `public/`, docs) free of
   real people files — anonymized stubs only
4. Document the chosen path in `AGENTS.md` so every agent uses the same place

### Stack path presets (additive)

| Stack | Suggested private location (gitignored) |
|---|---|
| **Any / unknown** | `storage/private/` or `.data/private/` at repo or app root |
| **Laravel** | `storage/app/private/` (cloud credential JSON under a gitignored credentials/secrets subdir) |
| **NestJS / Express / Node** | `storage/private/` or `var/private/` (not `public/`, not committed `uploads/` with real PII) |
| **Django** | `var/private/` or media path that is gitignored — never under tracked fixtures |
| **External backup** | machine-local `bak/` **outside** the repo (all stacks) |

Laravel is listed as a first-class preset because the pattern is proven there —
not because other stacks are unsupported. Pick the row that matches; if none
fit, use **Any / unknown** and write the path into `AGENTS.md`.

Do **not** place real people files under tracked `data/`, `tests/`, `fixtures/`,
`public/`, or docs. Never `git add -f` gitignored private storage.

## What counts as sensitive (predict beyond one domain)

Block real instances of **any** of these categories (details in
[sensitive-catalog.md](sensitive-catalog.md)):

| Category | Examples agents should watch for |
|---|---|
| Identity / contact | Names, emails, phones, addresses, national IDs, passports |
| Auth / secrets | Passwords, PINs, JWT, API keys, `.env`, cloud creds, SSH/VPS keys (**private and `.pub`**) |
| Financial | Bank/IBAN, card data, payroll, invoices naming real customers |
| Health / biometrics | Diagnoses, medical IDs, face embeddings, raw biometric payloads |
| CRM / comms | Customer exports, ticket/chat/email dumps with real users |
| Work / school | Employee rosters, student records, guardian contacts |
| Location / device | Precise GPS tracks, device IDs joined to identity |
| Infra dumps | SQL/Redis/ES dumps, TF state, kube secrets, HAR/CI logs with tokens |

**High-risk shapes:** `xlsx/csv/sql/dump/parquet`, `.env*`, `*.pem`/`*.key`,
`id_ed25519` / `id_ed25519.pub` / deploy key pairs, `*credentials*.json`, `.har`,
heap/core dumps — guilty until proven anonymized.

## Never commit

Treat as blocked unless the user explicitly requests a one-off exception **and**
the file is fully anonymized / non-secret:

- Spreadsheets or data files with real people or regulated payloads
- Seed / snapshot JSON with real identities or live secrets
- Credentials and key material (see catalog §2 and §9)
- **SSH / VPS / deploy key pairs** (`id_ed25519`, `id_rsa`, matching `.pub`,
  `.ssh/`, deploy/vps key files) — no exceptions for “public key only”; keep
  deploy material in **GitHub Actions secrets** (or the host SSH agent), not git
- Backups and DB/search/queue dumps
- Deploy/CI logs, screenshots, or HAR files that expose PII or secrets

## Allowed in git (reference / anonymized only)

- Non-PII reference masters (geo, currencies, public taxonomies)
- Fully fictional test fixtures
- `.env.example` with placeholders only (no real secrets)

## Tests, factories, seeders, fixtures

Summary (full how-to: [`safe-demo-data`](../safe-demo-data/SKILL.md)):

- Use fictional identities only: `Sample…` / `Test…` labels or Faker/`fake()`
- Demo seeders must refuse `production`; secrets from env/config, not literals
- Prefer obvious fake codes (`TST…`, `DEV…`) unless asserting a product code-prefix
- Before commit: scan the diff for real names, government IDs, phones, live keys

## Logging and audit redaction

Never log or persist raw values for:

- Government IDs, phones, emails (unless product-required and minimized)
- Passwords, PINs, tokens, session values, MFA seeds
- Cloud credential JSON / private keys
- Card numbers, bank accounts
- Raw CV, face, biometric, or identity-document payloads
- Full request/response bodies that contain the above

Prefer opaque IDs + outcome messages. Audit diffs may note that a sensitive
field **changed**, but must never store the new/old secret or PII value.

## Git history hygiene

If secrets or people data were committed by mistake:

1. Rotate the secret / invalidate exposed credentials
2. Remove the file from the working tree
3. Stop

Do **not** run history rewrite (`filter-repo`, force-push) unless the user
explicitly requests it.

## Agent commit / PR checklist

Before any commit or PR the user requests:

- [ ] Staged set has no blocked people-data files
- [ ] No hard-coded real PII in source, tests, or seeders
- [ ] New fixtures use fictional identities only
- [ ] No credential files (`.env`, SSH/VPS keys, tokens) staged
- [ ] Agent did not open/print user-private keys or live secret files
- [ ] Logs/audit paths do not print identity or secret values

If blocked material is found: **stop**, warn the user, and keep it out of the
commit.

## Optional repo guards

When the repo already has them, run before commits that touch data/tests:

```bash
bash scripts/check-sensitive-paths.sh
```

CI should also run a tracked-path blocklist and secret scanning. Path checks
catch people dumps by location; gitleaks catches credentials in file content.
Do not weaken those checks without an explicit request.

Sibling skills:

- [`sensitive-path-guard`](../sensitive-path-guard/SKILL.md) — `check-sensitive-paths.sh`
- [`gitleaks-guard`](../gitleaks-guard/SKILL.md) — gitleaks config + CI

## Install into a repo

**Portable core (every agent):**

1. Paste the `AGENTS.md` section from [templates.md](templates.md) into the
   repo’s agent instructions file
2. Add PR checklist snippets from the same templates
3. Pair with [`sensitive-path-guard`](../sensitive-path-guard/SKILL.md) and
   [`gitleaks-guard`](../gitleaks-guard/SKILL.md) for enforcement

**Better DX if you use Cursor / Copilot (additive):** copy into
`.cursor/skills/` and/or `.github/copilot-instructions.md` — same policy, nicer
discovery. Other agents keep using `AGENTS.md`. See root [README.md](../README.md).

Also see:

- [examples.md](examples.md) — cross-domain commit / fixture decisions
- [sensitive-catalog.md](sensitive-catalog.md) — full predictive taxonomy
Files in this package (4)
  • SKILL.md 9 KB
  • examples.md 4 KB
  • sensitive-catalog.md 6 KB
  • templates.md 5 KB

Versions

The database has no other skills named sensitive-data-git.

Database snapshot: 13.11.2026 · package version 5ed8b1bd3658 (SHA-256 digest of the entire package)

Downloads in the last 30 days: 0 · ranking

Report a problem with this skill: harmful content, incorrect descriptions or an author’s removal request.

Similar skills

  • 90sensitive-disclosure
    Detects PII, credentials, and secrets passed to LLM APIs or embedded in system prompts. Use when writing code that passes sensitive data (PII, credentials, health data) to an LLM API, constructs system prompts containing secrets, returns LLM responses that could contain training…
  • 100data-masking
    Mask, redact, and anonymize sensitive data (PII, PCI, PHI) in databases, logs, and APIs. Use when protecting PII in dev/staging environments, redacting sensitive data from logs, anonymizing data for analytics, or applying k-anonymity and differential privacy for GDPR-compliant data sharing.
  • 95orca-data-exposure
    DSPM view — sensitive data at risk across the environment, exposed secrets/PII/credentials, data store security posture, and remediation priorities. Use when user asks about data exposure, sensitive data, or secrets (e.g., "data exposure", "where is our PII", "sensitive data at…
  • 100sensitive-path-guard
    Add and maintain a git tracked-path blocklist script (scripts/check-sensitive-paths.sh): blocked/allowed regexes, CI wiring, allowlist exceptions, and failure triage. Use when blocking .env, bak/, dumps, credential JSON, or people spreadsheets from entering git, or when pairing…
  • 98anonymize-logs
    Anonymize and sanitize customer-provided log files. Performs a line-by-line review and replaces all sensitive values inline, preserving log structure and format exactly — never reformats, re-indents, or restructures content. Use when sanitizing customer logs, sample events, or…
  • 100anon
    De-identify a session transcript (file or folder) by redacting PII LOCALLY before any sharing or cloud use. Produces a redacted GREEN copy with unique reserved-sentinel placeholders ([CONFIDE_PERSON_0001], [CONFIDE_EMAIL_0001], [CONFIDE_DATE_0002]...) plus a counts-only stats…

Feedback and reports

Your message goes to Bartosz Sokoliński. An email address is needed only for a reply. See the privacy policy.