check-security
Skill2 starsChanged 10 days agoMITView on GitHub
Security and privacy review of a Keelokit project — a map of every piece of personal data, the privacy law of each market, a threat model of the critical journeys, dependency/container/OWASP ZAP scans, PII in logs, data export and deletion, retention and encryption. Fixes at the root with a test and leaves a check per class. Use when the user says "security", "seguridad", "privacidad", "PII", "GDPR", "vulnerabilidades", "pentest", before the first production release or one that touches personal data, auth or payments, or every few months.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- cachewraith/cachewraith-skillstheir own version, first seen Oct 25, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- cachewraith/cachewraith-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository18 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .claude/CLAUDE.mdCLAUDE.md
- template/CLAUDE.mdCLAUDE.md
- build-storySkill
- check-bugbashSkill
- check-healthSkill
- coordinateSkill
- harness-upgradeSkill
- keelokitSkill
- plan-backlogSkill
- plan-intakeSkill
- project-adoptSkill
- project-dashboardSkill
- project-newSkill
- project-reportSkill
- run-localSkill
- ship-releaseSkill
- ship-setupSkill
The file
Files
Check security — what an attacker or a regulator would find first
Autonomous until the report, like check-bugbash, with the same exception: a fix that changes a
product rule (what data is kept, for how long, who may see it) is a pending decision for the
user, with options and a recommendation. Legal questions are named and explained, never decided:
the user or their counsel decides.
Scope comes from the profile (.keelokit/profile.toml): the data map and privacy law when it has
personal-data; the staging scan when it's hosted; payment flows when it has payments. A
developer-facing project (library, CLI, plugin) gets supply-chain questions instead: what it runs
on the user's machine, which network calls it makes, what permissions it asks for, and whether
anything private ends up in what it distributes.
The day-to-day checks already run on every push: secret scan (SEC-1), pnpm audit through .keelokit/bin/audit.py (SEC-3: blocks what has a fix, lists what doesn't),
Semgrep (SAST-1), the access matrix (AUTHZ-1). This skill looks for what they can't.
1. Data map — docs/privacy/data-map.md
From the Prisma schema, the API contracts in packages/shared, the logs, analytics and error
reporting, and every third party that receives data (mail, WhatsApp, payments, hosting):
| Data | Where | Kind | Why we keep it | Who can see it | Kept for | Leaves to |
Kind: personal (identifies someone: name, email, phone, IP), sensitive (health, finances,
children, location history…), secret (passwords, tokens). A field nobody can justify is a
finding: don't collect it. Markets and languages come from docs/context/product.md; name the law
that applies to each (e.g. GDPR in the EU, LGPD in Brazil, Ley 25.326 in Argentina, Ley 18.331 in
Uruguay) and what it asks of this product in plain words. Unknowns are gaps with an owner.
2. Privacy checks
- No personal data in logs or error reports: the logger redacts the map's
personal,sensitiveandsecretfields; Sentry'sbeforeSendscrubs them. Proven with a test that logs and reports a record full of them and finds none. - Export and deletion: a person can get their data and have it deleted (or anonymised where the law requires keeping it), including from third parties; a test per path.
- Retention: what the map says is kept for N days is actually removed (a scheduled job and its test), backups included.
- Encryption:
sensitivefields encrypted at rest; everything in transit over HTTPS. - Consent and notices: what the product promises in its screens and privacy text matches what it does (COPY-1).
3. Security checks
- Threat model of each critical journey (STRIDE, one table each): who could abuse it, how, what stops them, what doesn't yet.
- Access: another tenant's ids, another role, an expired session, guessable ids, mass assignment, rate limits on login, sign-up and anything that sends a message or costs money.
- Dependencies and images:
pnpm audit, plusdocker run --rm -v "$PWD:/src" ghcr.io/google/osv-scanner:latest -r /srcand the image scan of the API's Dockerfile; licences that aren't OSI-approved (DEP-1). - Staging, from outside:
docker run --rm -t ghcr.io/zaproxy/zaproxy:stable zap-baseline.py -t <staging url>— headers, cookies, CORS, TLS. Never against production without the user's yes. - Secrets and config: nothing sensitive in the web bundle or the mobile app; production config complete (CFG-1).
4. Fix and leave a check
Same loop as check-bugbash: a failing test first (titled with the finding id), the fix at the
cause, the check that now covers the class (a test, a lint rule, a Semgrep rule in
.semgrep/, an invariant of class isolation, a house rule registered with
/keelokit:check-health), a row in docs/escapes.md. What can't be fixed now becomes a backlog
story with origin = "security:<date> <finding id>" (/keelokit:plan-backlog).
5. Report — docs/security/<date>/report.md
## Scope first (sha, staging URL, what was checked and what couldn't be); the findings table
(id · area · severity P0–P3 · title · status · fix commit · check added) with the same statuses as a
bug bash; ## Pending decisions (privacy choices and legal questions, with options); the data map's
changes. Refresh the dashboard: its Security section reads these reports.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

