SD-006 — Hardcoded Secret

SD-006 flags a credential written into the skill's own files: an AWS access key, a GitHub or Slack token, an sk- API key, or a long value assigned to a secret-shaped name.

What it matches

Credential-shaped literals committed into the skill: AWS access keys, GitHub and Slack tokens, sk- API keys, and long values assigned to a secret-shaped name.

Why it matters

A key committed into a skill is a key in every copy of that skill — every clone, every fork, every cache, and the git history of all of them. In a public repository it is readable by anyone, including the crawlers that harvest exactly these formats continuously; in a private one it is readable by everyone with repository access, which is a far wider set than the people meant to hold the credential. Deleting the line afterwards does not help, because the value stays in history.

Example

yaml

# In the skill's committed config:
api_key: "sk-EXAMPLEEXAMPLEEXAMPLEEXAMPLEEXAMPLE"
aws_access_key_id: AKIAEXAMPLEEXAMPLE12

Placeholders here; in a real skill this is the credential itself, committed.

How to fix it

Read the value from the environment or a secrets manager at run time and keep only the variable name in the file. If a real key has already been committed, rotate it first and remove it second — it survives in the repository's history and in every clone taken before the removal.

Known false positives

Placeholder and example keys. We do not verify a secret is live, because verifying would mean using it.

Standards mapping

OWASP ASI ASI03

CWE CWE-798

Agent Skills in the Wild E2

Prevalence

criticalpermission_hygiene

Pattern SD-006 was detected in 59 of 16475 public skills scanned as of 11 September 2026.

current ruleset 2414c32f04000b5d

Check your own skills

Scan a repository or a single skill against this rule and the rest of the catalogue, free.