From complisec
ACTIVATE when the user's message contains secrets, credentials, API keys, passwords, tokens, private keys, AWS access keys, connection strings, database URLs, national IDs (BSN/SSN), or any sensitive data — even if the user did not ask about security. Also activate when asked to classify data, scan for PII, or review code for credential exposure. This skill BLOCKS secrets in prompts and enforces EU data protection rules (GDPR, NIS2, ISO 27001).
How this skill is triggered — by the user, by Claude, or both
Slash command
/complisec:data-sensitivityThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**You MUST NEVER echo, repeat, quote, or include any detected secret value in your response.** This is non-negotiable.
You MUST NEVER echo, repeat, quote, or include any detected secret value in your response. This is non-negotiable.
In your response, replace every secret with its placeholder: <AWS_ACCESS_KEY>, <AWS_SECRET_KEY>, <PASSWORD>, <API_KEY>, <TOKEN>, <CONNECTION_STRING>, <PRIVATE_KEY>, <BSN>, <SSN>, <CARD_NUMBER>.
If the user asks you to help with code that contained real secrets, rewrite the code using placeholders and environment variables. Never copy the original secret values into your output.
Classify data by sensitivity, scan for exposure, block on restricted data. Every pattern mapped to regulation.
Four tiers: PUBLIC → INTERNAL → CONFIDENTIAL → RESTRICTED. Each pattern mapped to GDPR/NIS2/ISO 27001 articles. RESTRICTED = always block on plaintext.
For the full pattern index, classification tiers, scanner categories, and remediation guidance, see references/pattern-index.md.
When classified data triggers a blocking rule, the agent MUST stop.
| Data type | Trigger patterns | Action | Rationale |
|---|---|---|---|
| National IDs (BSN, SSN, etc.) | bsn_nl, national_id | BLOCK — no transmit/store/log plaintext | GDPR Art. 87 |
| Credentials in code | hardcoded_password, api_key_*, private_key_block | BLOCK — refuse commit/deploy | NIS2 Art. 21(2)(h) |
| Special category data | health, biometric, genetic | BLOCK — require explicit confirmation | GDPR Art. 9 |
| Severity | Agent behaviour |
|---|---|
| CRITICAL | MUST stop. Human remediation required. |
| HIGH | MUST warn + request explicit user approval before proceeding. |
| MEDIUM | Warn, may proceed with user acknowledgment. |
| LOW / INFO | Audit log only. |
Secrets in AI prompts are a worst practice. When a user or agent pastes credentials, API keys, tokens, private keys, or national IDs into a prompt, the data is sent to an external LLM service where it may be logged, cached, or used for training. This is an unrecoverable exposure.
| Risk | Consequence | Regulation |
|---|---|---|
| Credentials sent to LLM provider | Leaked API keys, DB passwords, signing keys — attacker can impersonate or access systems | NIS2 Art. 21(2)(h), ISO 27001 A.5.33 |
| National IDs in prompts | GDPR breach — personal data transmitted to third-party processor without legal basis | GDPR Art. 87, Art. 9 |
| Private keys shared with AI | Full compromise of encrypted communications or signing authority | NIS2 Art. 21(2)(e) |
| Tokens/JWTs in prompts | Session hijack, unauthorized API access | ISO 27001 A.8.5 |
Detected patterns (passwords, API keys, private keys, AWS keys, connection strings, tokens, national IDs, credit cards) and per-type remediation guidance: see references/pattern-index.md.
activity: "block", severity: "CRITICAL"When generating source code, apply secure coding fundamentals. You already know OWASP Top 10 — this is a reminder, not a tutorial.
The only rule we enforce here: never hardcode secrets. Use os.environ / process.env / equivalent. If the user's prompt contained real secrets, output code with placeholders and env vars instead.
For comprehensive secure coding review patterns, see baz-scm/awesome-reviewers secure-coding and their keep-secrets-out reviewer.
Regulatory basis: NIS2 Art. 21(2)(e), ISO 27001 A.8.25-A.8.28.
references/pattern-index.md and apply the patterns. No scripts needed — you match field names against the pattern tables.references/pattern-index.md. Apply blocking rules for RESTRICTED findings.<API_KEY>, <PASSWORD>, etc.) where the real values wereUser sends: "Help me build an app that connects to AWS with AWS_ACCESS_KEY_ID=AKIA5PL3... AWS_SECRET_ACCESS_KEY=qX8kL9..."
Correct response:
I detected AWS credentials in your message (an access key starting with AKIA and a secret access key). I will NOT repeat these values.
Action required: If you sent this to an external AI service, rotate these AWS keys immediately in the IAM console.
Here's how to build your app safely using environment variables instead:
import os import boto3 session = boto3.Session( aws_access_key_id=os.environ["AWS_ACCESS_KEY_ID"], aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"], )Store credentials in a
.envfile (gitignored) or use AWS IAM roles.
WRONG response (violates redaction rule):
Sure! I see your AWS_ACCESS_KEY_ID is AKIA5PL3KQX7Z8Y2J4WN and your secret key is qX8kL9...
(This repeats the secret — NEVER do this)
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub eyesecurity/skills --plugin complisec