Secrets Hygiene — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Secrets Hygiene (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A leaked secret is a live incident until rotated. Treat any suspected exposure as confirmed until proven otherwise - the cost of an unnecessary rotation is always lower than the cost of a breach. The costly mistake this skill prevents is the instinctive wrong move: deleting the commit, force-pushing, and considering it handled while the key stays valid in every fork, clone, and scraper cache.
The order is deliberate: rotation comes before investigation because every minute of analysis is a minute the credential works for an attacker.
For prevention-mode engagements (no active leak), skip to Step 4.
Rotation is complete only when all three hold: the old credential is revoked (not just superseded), the new credential is deployed and the service is healthy, and audit logs show zero post-revocation use of the old value.
Run a secret scanner across the full git history, not just HEAD. Recommended tools: trufflehog (history-aware), gitleaks, or detect-secrets. Configure patterns for the stack's credential formats: AWS AKIA prefixes, GCP service account JSON keys, Stripe sk_live_ prefixes, PEM headers.
Also scan the places scanners miss by default: CI/CD pipeline logs (they frequently echo env vars), Terraform state files, Docker image layers, and Kubernetes configmaps or Secrets stored in plaintext.
Bad - key in the repo, token in the logs:
// config.js - committed to source control
const stripeKey = "sk_live_REPLACE-WITH-REAL-KEY";
logger.info("inbound request", { headers: req.headers }); // Authorization header now sits in logsGood - fetched at runtime, allowlisted logging:
// nothing secret in the repo, the image, or the logs
const stripeKey = await secretsManager.get("payments/stripe-api-key");
logger.info("inbound request", { path: req.path, userId: req.user.id }); // allowlisted fields onlyRotation checklist template - copy and fill during an incident:
SECRET ROTATION RECORD
Credential: [FILL: name + issuing system]
Privilege scope: [FILL: what it can access]
Exposure window: [FILL: first exposure -> revocation, or "unknown, assumed N days"]
Rotated at: [FILL: timestamp] Old value revoked: yes / no
Derived sessions revoked: yes / no
90-day audit review: clean / suspicious access found -> escalate to incident
Root cause: [FILL: how it leaked]
Prevention added: [FILL: pre-commit hook / CI check / scope reduction]Produce either an incident record (the filled rotation checklist with containment verified) or a secrets posture report: scan results across history and infrastructure, the storage pattern per runtime with gaps named, and the prevention controls installed or missing - each gap with an owner.
If the 90-day audit review shows unattributed use of the leaked credential, this is a breach, not a leak - escalate to incident response (sev-triage) and involve legal or compliance before any external communication, since disclosure obligations may apply. Personal-data exposure routes to pii-scrubber; code-level credential handling flaws found along the way route to secure-code-review.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.