Data handling + security

SkillOx is a security tool. We hold ourselves to the same standard we publicly grade other people's skills against — minimal collection, explicit retention, no quiet harvesting. This page is the canonical answer to "what happens to the SKILL.md content I send you?"

tl;dr

What we store

scans

Every scan goes into a Postgres scans table. Columns:

We do not store: raw IP, raw User-Agent, geolocation, browser fingerprint, referrer (beyond OG meta on the Report Card), cookies, session tokens (for unauthenticated callers).

skills

The canonical catalog table. One row per unique SKILL.md URL we've scanned, with the latest grade + repo metadata (stars, license, archived, license, description, topics, owner type). Populated by the crawler + by every completed scan via the worker's upsert.

This table has no IP / UA / user data — it's about the skill, not the requester. Anonymous removal is a soft-delete flag (removed = true) so the crawler skips it on re-discovery.

users + creators

For signed-in users (GitHub OAuth): users stores email, display name, image URL, and admin flags. creators stores the creator profile linked to that user (slug, display name, bio, verification level, subscription tier).

OAuth tokens (accounts.access_token) are stored encrypted at rest by Postgres's underlying disk encryption and used only to fetch the GitHub username for creator linking. They're never used to read your private repos.

Rate-limit state (Redis)

Redis keys of the form rl:{ip_hash}:{bucket} with a 24-hour TTL. Pure counters, no PII.

Retention

Where it lives

Nothing lives in the US. Nothing lives on AWS. No third-party analytics, no Google fonts (we self-host Inter + JetBrains Mono), no Segment / Mixpanel / Amplitude / FullStory / Sentry-with-replay.

What we never collect

Self-hosting

The full stack is open-source under git.skillox.io/skillox/skillox (Apache-2.0). If you don't want to send SKILL.md content to api.skillox.io, run your own instance behind your own VPC. The CLI (npm i -g skillox) works entirely offline by default; passing --api-base points it at your own scanner.

GDPR + EU AI Act

We're an EU-based company (Atomira Technologies S.L., Barcelona). Personal data handling falls under GDPR; the catalog of skills + scan results is non-personal data (public artifacts about public code).

Reporting a vulnerability

Coordinated disclosure: see /docs/disclose. TL;DR — email security@skillox.io with reproducer; we respond within 24 h, fix critical issues within 7 days, credit in the changelog.

Something here surprised you, or you want a specific data-handling commitment we don't make? Open an issue at git.skillox.io or email privacy@skillox.io. The line between "reasonable defaults" and "privacy maximalism" is a conversation, not a fixed point.