Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Security and compliance review framework for Kling AI integrations. Use when preparing for audits or reviewing security posture. Trigger with phrases like 'klingai compliance', 'kling ai security review', 'klingai audit prep', 'video generation compliance'.
.claude/skills/jeremylongshore-klingai-compliance-review/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 20% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 35% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 11% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 1% | 0% |
Security and compliance assessment framework for Kling AI integrations. Covers data handling, credential management, content policy, privacy, and regulatory considerations.
User Prompt → [Your App] → [Kling AI API] → [Kling GPU Cluster]
↓
[Your CDN] ← download ← [Kling CDN (temporary URL)] ← Generated Video| Data | Location | Retention | |------|----------|-----------| | Prompts | Sent to Kling servers (China/global) | Processing only | | Generated videos | Kling CDN (temporary URLs) | ~24-72 hours | | API keys | Your infrastructure | You control | | Audit logs | Your infrastructure | You control |
python# Safe logging pattern def safe_log_key(access_key: str) -> str: return access_key[:8] + "..." + access_key[-4:]
api.klingai.com:443| Question | Consideration | |----------|--------------| | Do prompts contain PII? | Filter PII before sending to API | | Do images contain faces? | Check consent requirements (GDPR Art. 6) | | Are generated videos stored? | Define retention policy | | Who has access to generated content? | RBAC on storage layer | | Cross-border data transfer? | Kling API servers may be in China |
pythonclass GDPRCompliantClient: """Kling client with GDPR data handling.""" def __init__(self, base_client, audit_logger): self.client = base_client self.audit = audit_logger def text_to_video(self, prompt: str, data_subject_id: str = None, **kwargs): # Log processing activity (GDPR Art. 30) self.audit.log("processing_activity", "system", { "purpose": "video_generation", "data_subject": data_subject_id, "legal_basis": "legitimate_interest", "data_categories": ["text_prompt"], "recipients": ["klingai_api"], }) return self.client.text_to_video(prompt, **kwargs) def handle_deletion_request(self, data_subject_id: str): """Handle GDPR right to erasure (Art. 17).""" # Delete stored videos associated with the data subject # Delete audit logs referencing the data subject # Note: cannot delete data already sent to Kling API self.audit.log("deletion_request", "system", { "data_subject": data_subject_id, "action": "processed", })
pythondef run_compliance_check(config: dict) -> dict: """Run automated compliance checks against configuration.""" checks = [] # Check credential storage if config.get("key_source") == "environment": checks.append(("WARN", "credentials", "Using env vars; prefer secrets manager")) elif config.get("key_source") == "secrets_manager": checks.append(("PASS", "credentials", "Using secrets manager")) # Check TLS if config.get("base_url", "").startswith("https://"): checks.append(("PASS", "tls", "HTTPS enforced")) else: checks.append(("FAIL", "tls", "Not using HTTPS")) # Check content filtering if config.get("content_filter_enabled"): checks.append(("PASS", "content_filter", "Pre-submission filtering active")) else: checks.append(("WARN", "content_filter", "No pre-submission content filtering")) # Check audit logging if config.get("audit_logging"): checks.append(("PASS", "audit", "Audit logging enabled")) else: checks.append(("FAIL", "audit", "No audit logging")) # Print report for status, area, message in checks: icon = {"PASS": "OK", "WARN": "!!", "FAIL": "XX"}[status] print(f" [{icon}] {area}: {message}") return { "passed": sum(1 for s, _, _ in checks if s == "PASS"), "warnings": sum(1 for s, _, _ in checks if s == "WARN"), "failed": sum(1 for s, _, _ in checks if s == "FAIL"), }
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 24,782 | 19,553 | -21% | 1 | 1 | 0% | 3,423 | 4,101 | +20% | 0 | 0 | — |
case-02 | fail→fail | 34,303 | 26,732 | -22% | 1 | 1 | 0% | 4,786 | 6,609 | +38% | 0 | 0 | — |
case-03 | fail→fail | 29,100 | 22,200 | -24% | 1 | 1 | 0% | 4,425 | 4,721 | +7% | 0 | 0 | — |
case-04 | fail→pass | 27,723 | 13,086 | -53% | 1 | 1 | 0% | 2,017 | 2,733 | +35% | 0 | 0 | — |
case-05 | pass→pass | 16,029 | 7,284 | -55% | 1 | 1 | 0% | 1,911 | 2,592 | +36% | 0 | 0 | — |
case-06 | pass→pass | 18,443 | 9,945 | -46% | 1 | 1 | 0% | 2,144 | 2,154 | +0% | 0 | 0 | — |
case-07 | fail→pass | 13,886 | 5,929 | -57% | 1 | 1 | 0% | 2,238 | 2,489 | +11% | 0 | 0 | — |
case-08 | pass→pass | 25,909 | 19,443 | -25% | 1 | 1 | 0% | 2,817 | 3,763 | +34% | 0 | 0 | — |
case-09 | fail→pass | 15,866 | 10,821 | -32% | 1 | 1 | 0% | 1,923 | 2,624 | +36% | 0 | 0 | — |
case-10 | fail→pass | 16,672 | 8,898 | -47% | 1 | 1 | 0% | 2,017 | 2,046 | +1% | 0 | 0 | — |
case-11 | pass→pass | 13,411 | 10,201 | -24% | 1 | 1 | 0% | 1,337 | 1,838 | +37% | 0 | 0 | — |
case-12 | fail→pass | 28,600 | 6,688 | -77% | 1 | 1 | 0% | 4,205 | 2,667 | -37% | 0 | 0 | — |
case-13 | pass→pass | 19,134 | 12,439 | -35% | 1 | 1 | 0% | 2,220 | 2,346 | +6% | 0 | 0 | — |
case-14 | pass→pass | 14,512 | 10,917 | -25% | 1 | 1 | 0% | 2,266 | 3,148 | +39% | 0 | 0 | — |
case-15 | fail→pass | 19,985 | 4,235 | -79% | 1 | 1 | 0% | 2,580 | 2,052 | -20% | 0 | 0 | — |
case-16 | pass→pass | 24,451 | 29,295 | +20% | 1 | 1 | 0% | 3,218 | 4,372 | +36% | 0 | 0 | — |
case-17 | pass→pass | 8,787 | 12,044 | +37% | 1 | 1 | 0% | 1,030 | 2,310 | +124% | 0 | 0 | — |
case-18 | pass→pass | 36,752 | 6,200 | -83% | 1 | 1 | 0% | 2,475 | 2,314 | -7% | 0 | 0 | — |
case-19 | pass→pass | 20,222 | 25,615 | +27% | 1 | 1 | 0% | 2,582 | 4,223 | +64% | 0 | 0 | — |
case-20 | pass→pass | 17,108 | 16,408 | -4% | 1 | 1 | 0% | 2,239 | 3,242 | +45% | 0 | 0 | — |
case-21 | pass→pass | 18,245 | 17,733 | -3% | 1 | 1 | 0% | 2,436 | 3,354 | +38% | 0 | 0 | — |
case-22 | pass→pass | 22,232 | 23,086 | +4% | 1 | 1 | 0% | 2,789 | 4,238 | +52% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +32 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.