{"id":"df661366-5a23-4cd8-8ea1-d5219e519f14","shortId":"wxV2GH","kind":"skill","title":"pci-compliance","tagline":"Master PCI DSS (Payment Card Industry Data Security Standard) compliance for secure payment processing and handling of cardholder data.","description":"# PCI Compliance\n\nMaster PCI DSS (Payment Card Industry Data Security Standard) compliance for secure payment processing and handling of cardholder data.\n\n## Do not use this skill when\n\n- The task is unrelated to pci compliance\n- You need a different domain or tool outside this scope\n\n## Instructions\n\n- Clarify goals, constraints, and required inputs.\n- Apply relevant best practices and validate outcomes.\n- Provide actionable steps and verification.\n- If detailed examples are required, open `resources/implementation-playbook.md`.\n\n## Use this skill when\n\n- Building payment processing systems\n- Handling credit card information\n- Implementing secure payment flows\n- Conducting PCI compliance audits\n- Reducing PCI compliance scope\n- Implementing tokenization and encryption\n- Preparing for PCI DSS assessments\n\n## PCI DSS Requirements (12 Core Requirements)\n\n### Build and Maintain Secure Network\n1. Install and maintain firewall configuration\n2. Don't use vendor-supplied defaults for passwords\n\n### Protect Cardholder Data\n3. Protect stored cardholder data\n4. Encrypt transmission of cardholder data across public networks\n\n### Maintain Vulnerability Management\n5. Protect systems against malware\n6. Develop and maintain secure systems and applications\n\n### Implement Strong Access Control\n7. Restrict access to cardholder data by business need-to-know\n8. Identify and authenticate access to system components\n9. Restrict physical access to cardholder data\n\n### Monitor and Test Networks\n10. Track and monitor all access to network resources and cardholder data\n11. Regularly test security systems and processes\n\n### Maintain Information Security Policy\n12. Maintain a policy that addresses information security\n\n## Compliance Levels\n\n**Level 1**: > 6 million transactions/year (annual ROC required)\n**Level 2**: 1-6 million transactions/year (annual SAQ)\n**Level 3**: 20,000-1 million e-commerce transactions/year\n**Level 4**: < 20,000 e-commerce or < 1 million total transactions\n\n## Data Minimization (Never Store)\n\n```python\n# NEVER STORE THESE\nPROHIBITED_DATA = {\n    'full_track_data': 'Magnetic stripe data',\n    'cvv': 'Card verification code/value',\n    'pin': 'PIN or PIN block'\n}\n\n# CAN STORE (if encrypted)\nALLOWED_DATA = {\n    'pan': 'Primary Account Number (card number)',\n    'cardholder_name': 'Name on card',\n    'expiration_date': 'Card expiration',\n    'service_code': 'Service code'\n}\n\nclass PaymentData:\n    \"\"\"Safe payment data handling.\"\"\"\n\n    def __init__(self):\n        self.prohibited_fields = ['cvv', 'cvv2', 'cvc', 'pin']\n\n    def sanitize_log(self, data):\n        \"\"\"Remove sensitive data from logs.\"\"\"\n        sanitized = data.copy()\n\n        # Mask PAN\n        if 'card_number' in sanitized:\n            card = sanitized['card_number']\n            sanitized['card_number'] = f\"{card[:6]}{'*' * (len(card) - 10)}{card[-4:]}\"\n\n        # Remove prohibited data\n        for field in self.prohibited_fields:\n            sanitized.pop(field, None)\n\n        return sanitized\n\n    def validate_no_prohibited_storage(self, data):\n        \"\"\"Ensure no prohibited data is being stored.\"\"\"\n        for field in self.prohibited_fields:\n            if field in data:\n                raise SecurityError(f\"Attempting to store prohibited field: {field}\")\n```\n\n## Tokenization\n\n### Using Payment Processor Tokens\n```python\nimport stripe\n\nclass TokenizedPayment:\n    \"\"\"Handle payments using tokens (no card data on server).\"\"\"\n\n    @staticmethod\n    def create_payment_method_token(card_details):\n        \"\"\"Create token from card details (client-side only).\"\"\"\n        # THIS SHOULD ONLY BE DONE CLIENT-SIDE WITH STRIPE.JS\n        # NEVER send card details to your server\n\n        \"\"\"\n        // Frontend JavaScript\n        const stripe = Stripe('pk_...');\n\n        const {token, error} = await stripe.createToken({\n            card: {\n                number: '4242424242424242',\n                exp_month: 12,\n                exp_year: 2024,\n                cvc: '123'\n            }\n        });\n\n        // Send token.id to server (NOT card details)\n        \"\"\"\n        pass\n\n    @staticmethod\n    def charge_with_token(token_id, amount):\n        \"\"\"Charge using token (server-side).\"\"\"\n        # Your server only sees the token, never the card number\n        stripe.api_key = \"sk_...\"\n\n        charge = stripe.Charge.create(\n            amount=amount,\n            currency=\"usd\",\n            source=token_id,  # Token instead of card details\n            description=\"Payment\"\n        )\n\n        return charge\n\n    @staticmethod\n    def store_payment_method(customer_id, payment_method_token):\n        \"\"\"Store payment method as token for future use.\"\"\"\n        stripe.Customer.modify(\n            customer_id,\n            source=payment_method_token\n        )\n\n        # Store only customer_id and payment_method_id in your database\n        # NEVER store actual card details\n        return {\n            'customer_id': customer_id,\n            'has_payment_method': True\n            # DO NOT store: card number, CVV, etc.\n        }\n```\n\n### Custom Tokenization (Advanced)\n```python\nimport secrets\nfrom cryptography.fernet import Fernet\n\nclass TokenVault:\n    \"\"\"Secure token vault for card data (if you must store it).\"\"\"\n\n    def __init__(self, encryption_key):\n        self.cipher = Fernet(encryption_key)\n        self.vault = {}  # In production: use encrypted database\n\n    def tokenize(self, card_data):\n        \"\"\"Convert card data to token.\"\"\"\n        # Generate secure random token\n        token = secrets.token_urlsafe(32)\n\n        # Encrypt card data\n        encrypted = self.cipher.encrypt(json.dumps(card_data).encode())\n\n        # Store token -> encrypted data mapping\n        self.vault[token] = encrypted\n\n        return token\n\n    def detokenize(self, token):\n        \"\"\"Retrieve card data from token.\"\"\"\n        encrypted = self.vault.get(token)\n        if not encrypted:\n            raise ValueError(\"Token not found\")\n\n        # Decrypt\n        decrypted = self.cipher.decrypt(encrypted)\n        return json.loads(decrypted.decode())\n\n    def delete_token(self, token):\n        \"\"\"Remove token from vault.\"\"\"\n        self.vault.pop(token, None)\n```\n\n## Encryption\n\n### Data at Rest\n```python\nfrom cryptography.hazmat.primitives.ciphers.aead import AESGCM\nimport os\n\nclass EncryptedStorage:\n    \"\"\"Encrypt data at rest using AES-256-GCM.\"\"\"\n\n    def __init__(self, encryption_key):\n        \"\"\"Initialize with 256-bit key.\"\"\"\n        self.key = encryption_key  # Must be 32 bytes\n\n    def encrypt(self, plaintext):\n        \"\"\"Encrypt data.\"\"\"\n        # Generate random nonce\n        nonce = os.urandom(12)\n\n        # Encrypt\n        aesgcm = AESGCM(self.key)\n        ciphertext = aesgcm.encrypt(nonce, plaintext.encode(), None)\n\n        # Return nonce + ciphertext\n        return nonce + ciphertext\n\n    def decrypt(self, encrypted_data):\n        \"\"\"Decrypt data.\"\"\"\n        # Extract nonce and ciphertext\n        nonce = encrypted_data[:12]\n        ciphertext = encrypted_data[12:]\n\n        # Decrypt\n        aesgcm = AESGCM(self.key)\n        plaintext = aesgcm.decrypt(nonce, ciphertext, None)\n\n        return plaintext.decode()\n\n# Usage\nstorage = EncryptedStorage(os.urandom(32))\nencrypted_pan = storage.encrypt(\"4242424242424242\")\n# Store encrypted_pan in database\n```\n\n### Data in Transit\n```python\n# Always use TLS 1.2 or higher\n# Flask/Django example\napp.config['SESSION_COOKIE_SECURE'] = True  # HTTPS only\napp.config['SESSION_COOKIE_HTTPONLY'] = True\napp.config['SESSION_COOKIE_SAMESITE'] = 'Strict'\n\n# Enforce HTTPS\nfrom flask_talisman import Talisman\nTalisman(app, force_https=True)\n```\n\n## Access Control\n\n```python\nfrom functools import wraps\nfrom flask import session\n\ndef require_pci_access(f):\n    \"\"\"Decorator to restrict access to cardholder data.\"\"\"\n    @wraps(f)\n    def decorated_function(*args, **kwargs):\n        user = session.get('user')\n\n        # Check if user has PCI access role\n        if not user or 'pci_access' not in user.get('roles', []):\n            return {'error': 'Unauthorized access to cardholder data'}, 403\n\n        # Log access attempt\n        audit_log(\n            user=user['id'],\n            action='access_cardholder_data',\n            resource=f.__name__\n        )\n\n        return f(*args, **kwargs)\n\n    return decorated_function\n\n@app.route('/api/payment-methods')\n@require_pci_access\ndef get_payment_methods():\n    \"\"\"Retrieve payment methods (restricted access).\"\"\"\n    # Only accessible to users with pci_access role\n    pass\n```\n\n## Audit Logging\n\n```python\nimport logging\nfrom datetime import datetime\n\nclass PCIAuditLogger:\n    \"\"\"PCI-compliant audit logging.\"\"\"\n\n    def __init__(self):\n        self.logger = logging.getLogger('pci_audit')\n        # Configure to write to secure, append-only log\n\n    def log_access(self, user_id, resource, action, result):\n        \"\"\"Log access to cardholder data.\"\"\"\n        entry = {\n            'timestamp': datetime.utcnow().isoformat(),\n            'user_id': user_id,\n            'resource': resource,\n            'action': action,\n            'result': result,\n            'ip_address': request.remote_addr\n        }\n\n        self.logger.info(json.dumps(entry))\n\n    def log_authentication(self, user_id, success, method):\n        \"\"\"Log authentication attempt.\"\"\"\n        entry = {\n            'timestamp': datetime.utcnow().isoformat(),\n            'user_id': user_id,\n            'event': 'authentication',\n            'success': success,\n            'method': method,\n            'ip_address': request.remote_addr\n        }\n\n        self.logger.info(json.dumps(entry))\n\n# Usage\naudit = PCIAuditLogger()\naudit.log_access(user_id=123, resource='payment_methods', action='read', result='success')\n```\n\n## Security Best Practices\n\n### Input Validation\n```python\nimport re\n\ndef validate_card_number(card_number):\n    \"\"\"Validate card number format (Luhn algorithm).\"\"\"\n    # Remove spaces and dashes\n    card_number = re.sub(r'[\\s-]', '', card_number)\n\n    # Check if all digits\n    if not card_number.isdigit():\n        return False\n\n    # Luhn algorithm\n    def luhn_checksum(card_num):\n        def digits_of(n):\n            return [int(d) for d in str(n)]\n\n        digits = digits_of(card_num)\n        odd_digits = digits[-1::-2]\n        even_digits = digits[-2::-2]\n        checksum = sum(odd_digits)\n        for d in even_digits:\n            checksum += sum(digits_of(d * 2))\n        return checksum % 10\n\n    return luhn_checksum(card_number) == 0\n\ndef sanitize_input(user_input):\n    \"\"\"Sanitize user input to prevent injection.\"\"\"\n    # Remove special characters\n    # Validate against expected format\n    # Escape for database queries\n    pass\n```\n\n## PCI DSS SAQ (Self-Assessment Questionnaire)\n\n### SAQ A (Least Requirements)\n- E-commerce using hosted payment page\n- No card data on your systems\n- ~20 questions\n\n### SAQ A-EP\n- E-commerce with embedded payment form\n- Uses JavaScript to handle card data\n- ~180 questions\n\n### SAQ D (Most Requirements)\n- Store, process, or transmit card data\n- Full PCI DSS requirements\n- ~300 questions\n\n## Compliance Checklist\n\n```python\nPCI_COMPLIANCE_CHECKLIST = {\n    'network_security': [\n        'Firewall configured and maintained',\n        'No vendor default passwords',\n        'Network segmentation implemented'\n    ],\n    'data_protection': [\n        'No storage of CVV, track data, or PIN',\n        'PAN encrypted when stored',\n        'PAN masked when displayed',\n        'Encryption keys properly managed'\n    ],\n    'vulnerability_management': [\n        'Anti-virus installed and updated',\n        'Secure development practices',\n        'Regular security patches',\n        'Vulnerability scanning performed'\n    ],\n    'access_control': [\n        'Access restricted by role',\n        'Unique IDs for all users',\n        'Multi-factor authentication',\n        'Physical security measures'\n    ],\n    'monitoring': [\n        'Audit logs enabled',\n        'Log review process',\n        'File integrity monitoring',\n        'Regular security testing'\n    ],\n    'policy': [\n        'Security policy documented',\n        'Risk assessment performed',\n        'Security awareness training',\n        'Incident response plan'\n    ]\n}\n```\n\n## Resources\n\n- **references/data-minimization.md**: Never store prohibited data\n- **references/tokenization.md**: Tokenization strategies\n- **references/encryption.md**: Encryption requirements\n- **references/access-control.md**: Role-based access\n- **references/audit-logging.md**: Comprehensive logging\n- **assets/pci-compliance-checklist.md**: Complete checklist\n- **assets/encrypted-storage.py**: Encryption utilities\n- **scripts/audit-payment-system.sh**: Compliance audit script\n\n## Common Violations\n\n1. **Storing CVV**: Never store card verification codes\n2. **Unencrypted PAN**: Card numbers must be encrypted at rest\n3. **Weak Encryption**: Use AES-256 or equivalent\n4. **No Access Controls**: Restrict who can access cardholder data\n5. **Missing Audit Logs**: Must log all access to payment data\n6. **Insecure Transmission**: Always use TLS 1.2+\n7. **Default Passwords**: Change all default credentials\n8. **No Security Testing**: Regular penetration testing required\n\n## Reducing PCI Scope\n\n1. **Use Hosted Payments**: Stripe Checkout, PayPal, etc.\n2. **Tokenization**: Replace card data with tokens\n3. **Network Segmentation**: Isolate cardholder data environment\n4. **Outsource**: Use PCI-compliant payment processors\n5. **No Storage**: Never store full card details\n\nBy minimizing systems that touch card data, you reduce compliance burden significantly.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["pci","compliance","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows"],"capabilities":["skill","source-sickn33","skill-pci-compliance","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/pci-compliance","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34616 github stars · SKILL.md body (13,923 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T00:51:22.796Z","embedding":null,"createdAt":"2026-04-18T21:42:14.517Z","updatedAt":"2026-04-23T00:51:22.796Z","lastSeenAt":"2026-04-23T00:51:22.796Z","tsv":"'-1':274,1168 '-2':1169,1173,1174 '-256':754,1440 '-4':390 '-6':265 '/api/payment-methods':965 '0':1198 '000':273,283 '1':137,255,264,288,1417,1489 '1.2':851,1470 '10':221,388,1192 '11':233 '12':129,244,505,784,814,818 '123':510,1093 '180':1265 '2':143,263,1189,1425,1497 '20':272,282,1246 '2024':508 '256':763 '3':156,271,1435,1504 '300':1281 '32':676,771,834 '4':161,281,1443,1511 '403':942 '4242424242424242':502,838 '5':173,1453,1519 '6':178,256,385,1464 '7':190,1471 '8':202,1478 '9':210 'a-ep':1249 'access':188,192,206,213,226,885,899,904,923,930,938,944,952,968,977,979,984,1021,1029,1090,1341,1343,1401,1445,1450,1460 'account':325 'across':167 'action':82,951,1026,1043,1044,1097 'actual':602 'addr':1050,1082 'address':249,1048,1080 'advanc':623 'ae':753,1439 'aesgcm':743,786,787,820,821 'aesgcm.decrypt':824 'aesgcm.encrypt':790 'algorithm':1120,1142 'allow':321 'alway':848,1467 'amount':526,548,549 'annual':259,268 'anti':1327 'anti-virus':1326 'app':881 'app.config':856,863,868 'app.route':964 'append':1016 'append-on':1015 'appli':74 'applic':185 'arg':913,959 'ask':1572 'assess':125,1227,1377 'assets/encrypted-storage.py':1408 'assets/pci-compliance-checklist.md':1405 'attempt':430,945,1064 'audit':112,946,987,1001,1009,1087,1360,1413,1455 'audit.log':1089 'authent':205,1056,1063,1074,1355 'await':498 'awar':1380 'base':1400 'best':76,1102 'bit':764 'block':316 'boundari':1580 'build':97,132 'burden':1537 'busi':197 'byte':772 'card':8,29,103,309,327,333,336,372,376,378,381,384,387,389,451,461,466,484,500,516,541,558,603,617,637,662,665,678,683,701,1111,1113,1116,1125,1130,1146,1163,1196,1241,1263,1275,1422,1428,1500,1525,1532 'card_number.isdigit':1138 'cardhold':21,42,154,159,165,194,215,231,329,906,940,953,1031,1451,1508 'chang':1474 'charact':1212 'charg':521,527,546,563 'check':918,1132 'checklist':1284,1288,1407 'checkout':1494 'checksum':1145,1175,1184,1191,1195 'ciphertext':789,796,799,810,815,826 'clarif':1574 'clarifi':68 'class':342,444,631,746,996 'clear':1547 'client':469,478 'client-sid':468,477 'code':339,341,1424 'code/value':311 'commerc':278,286,1235,1254 'common':1415 'complet':1406 'complianc':3,13,24,34,56,111,115,252,1283,1287,1412,1536 'compliant':1000,1516 'compon':209 'comprehens':1403 'conduct':109 'configur':142,1010,1292 'const':491,495 'constraint':70 'control':189,886,1342,1446 'convert':664 'cooki':858,865,870 'core':130 'creat':457,463 'credenti':1477 'credit':102 'criteria':1583 'cryptography.fernet':628 'cryptography.hazmat.primitives.ciphers.aead':741 'currenc':550 'custom':569,583,591,606,608,621 'cvc':355,509 'cvv':308,353,619,1307,1419 'cvv2':354 'd':1154,1156,1180,1188,1268 'dash':1124 'data':10,22,31,43,155,160,166,195,216,232,292,301,304,307,322,346,361,364,393,410,414,426,452,638,663,666,679,684,689,702,736,749,778,804,806,813,817,844,907,941,954,1032,1242,1264,1276,1302,1309,1390,1452,1463,1501,1509,1533 'data.copy':368 'databas':599,658,843,1219 'date':335 'datetim':993,995 'datetime.utcnow':1035,1067 'decor':901,911,962 'decrypt':716,717,801,805,819 'decrypted.decode':722 'def':348,357,404,456,520,565,644,659,696,723,756,773,800,896,910,969,1003,1019,1054,1109,1143,1148,1199 'default':150,1297,1472,1476 'delet':724 'describ':1551 'descript':560 'detail':87,462,467,485,517,559,604,1526 'detoken':697 'develop':179,1333 'differ':60 'digit':1135,1149,1160,1161,1166,1167,1171,1172,1178,1183,1186 'display':1319 'document':1375 'domain':61 'done':476 'dss':6,27,124,127,1223,1279 'e':277,285,1234,1253 'e-commerc':276,284,1233,1252 'embed':1256 'enabl':1362 'encod':685 'encrypt':120,162,320,647,651,657,677,680,688,693,705,710,719,735,748,759,767,774,777,785,803,812,816,835,840,1313,1320,1395,1409,1432,1437 'encryptedstorag':747,832 'enforc':873 'ensur':411 'entri':1033,1053,1065,1085 'environ':1510,1563 'environment-specif':1562 'ep':1251 'equival':1442 'error':497,936 'escap':1217 'etc':620,1496 'even':1170,1182 'event':1073 'exampl':88,855 'exp':503,506 'expect':1215 'expert':1568 'expir':334,337 'extract':807 'f':383,429,900,909,958 'f.__name__':956 'factor':1354 'fals':1140 'fernet':630,650 'field':352,395,398,400,419,422,424,434,435 'file':1366 'firewal':141,1291 'flask':876,893 'flask/django':854 'flow':108 'forc':882 'form':1258 'format':1118,1216 'found':715 'frontend':489 'full':302,1277,1524 'function':912,963 'functool':889 'futur':580 'gcm':755 'generat':669,779 'get':970 'goal':69 'handl':19,40,101,347,446,1262 'higher':853 'host':1237,1491 'httpon':866 'https':861,874,883 'id':525,554,570,584,592,596,607,609,950,1024,1038,1040,1059,1070,1072,1092,1348 'identifi':203 'implement':105,117,186,1301 'import':442,625,629,742,744,878,890,894,990,994,1107 'incid':1382 'industri':9,30 'inform':104,241,250 'init':349,645,757,1004 'initi':761 'inject':1209 'input':73,1104,1201,1203,1206,1577 'insecur':1465 'instal':138,1329 'instead':556 'instruct':67 'int':1153 'integr':1367 'ip':1047,1079 'isoformat':1036,1068 'isol':1507 'javascript':490,1260 'json.dumps':682,1052,1084 'json.loads':721 'key':544,648,652,760,765,768,1321 'know':201 'kwarg':914,960 'least':1231 'len':386 'level':253,254,262,270,280 'limit':1539 'log':359,366,943,947,988,991,1002,1018,1020,1028,1055,1062,1361,1363,1404,1456,1458 'logging.getlogger':1007 'luhn':1119,1141,1144,1194 'magnet':305 'maintain':134,140,170,181,240,245,1294 'malwar':177 'manag':172,1323,1325 'map':690 'mask':369,1317 'master':4,25 'match':1548 'measur':1358 'method':459,568,572,576,587,595,612,972,975,1061,1077,1078,1096 'million':257,266,275,289 'minim':293,1528 'miss':1454,1585 'monitor':217,224,1359,1368 'month':504 'multi':1353 'multi-factor':1352 'must':641,769,1430,1457 'n':1151,1159 'name':330,331 'need':58,199 'need-to-know':198 'network':136,169,220,228,1289,1299,1505 'never':294,297,482,539,600,1387,1420,1522 'nonc':781,782,791,795,798,808,811,825 'none':401,734,793,827 'num':1147,1164 'number':326,328,373,379,382,501,542,618,1112,1114,1117,1126,1131,1197,1429 'odd':1165,1177 'open':91 'os':745 'os.urandom':783,833 'outcom':80 'output':1557 'outsid':64 'outsourc':1512 'page':1239 'pan':323,370,836,841,1312,1316,1427 'pass':518,986,1221 'password':152,1298,1473 'patch':1337 'payment':7,16,28,37,98,107,345,438,447,458,561,567,571,575,586,594,611,971,974,1095,1238,1257,1462,1492,1517 'paymentdata':343 'paypal':1495 'pci':2,5,23,26,55,110,114,123,126,898,922,929,967,983,999,1008,1222,1278,1286,1487,1515 'pci-compli':1,998,1514 'pciauditlogg':997,1088 'penetr':1483 'perform':1340,1378 'permiss':1578 'physic':212,1356 'pin':312,313,315,356,1311 'pk':494 'plaintext':776,823 'plaintext.decode':829 'plaintext.encode':792 'plan':1384 'polici':243,247,1372,1374 'practic':77,1103,1334 'prepar':121 'prevent':1208 'primari':324 'process':17,38,99,239,1272,1365 'processor':439,1518 'product':655 'prohibit':300,392,407,413,433,1389 'proper':1322 'protect':153,157,174,1303 'provid':81 'public':168 'python':296,441,624,739,847,887,989,1106,1285 'queri':1220 'question':1247,1266,1282 'questionnair':1228 'r':1128 'rais':427,711 'random':671,780 're':1108 're.sub':1127 'read':1098 'reduc':113,1486,1535 'references/access-control.md':1397 'references/audit-logging.md':1402 'references/data-minimization.md':1386 'references/encryption.md':1394 'references/tokenization.md':1391 'regular':234,1335,1369,1482 'relev':75 'remov':362,391,728,1121,1210 'replac':1499 'request.remote':1049,1081 'requir':72,90,128,131,261,897,966,1232,1270,1280,1396,1485,1576 'resourc':229,955,1025,1041,1042,1094,1385 'resources/implementation-playbook.md':92 'respons':1383 'rest':738,751,1434 'restrict':191,211,903,976,1344,1447 'result':1027,1045,1046,1099 'retriev':700,973 'return':402,562,605,694,720,794,797,828,935,957,961,1139,1152,1190,1193 'review':1364,1569 'risk':1376 'roc':260 'role':924,934,985,1346,1399 'role-bas':1398 'safe':344 'safeti':1579 'samesit':871 'sanit':358,367,375,377,380,403,1200,1204 'sanitized.pop':399 'saq':269,1224,1229,1248,1267 'scan':1339 'scope':66,116,1488,1550 'script':1414 'scripts/audit-payment-system.sh':1411 'secret':626 'secrets.token':674 'secur':11,15,32,36,106,135,182,236,242,251,633,670,859,1014,1101,1290,1332,1336,1357,1370,1373,1379,1480 'securityerror':428 'see':536 'segment':1300,1506 'self':350,360,409,646,661,698,726,758,775,802,1005,1022,1057,1226 'self-assess':1225 'self.cipher':649 'self.cipher.decrypt':718 'self.cipher.encrypt':681 'self.key':766,788,822 'self.logger':1006 'self.logger.info':1051,1083 'self.prohibited':351,397,421 'self.vault':653,691 'self.vault.get':706 'self.vault.pop':732 'send':483,511 'sensit':363 'server':454,488,514,531,534 'server-sid':530 'servic':338,340 'session':857,864,869,895 'session.get':916 'side':470,479,532 'signific':1538 'sk':545 'skill':48,95,1542 'skill-pci-compliance' 'sourc':552,585 'source-sickn33' 'space':1122 'special':1211 'specif':1564 'standard':12,33 'staticmethod':455,519,564 'step':83 'stop':1570 'storag':408,831,1305,1521 'storage.encrypt':837 'store':158,295,298,318,417,432,566,574,589,601,616,642,686,839,1271,1315,1388,1418,1421,1523 'str':1158 'strategi':1393 'strict':872 'stripe':306,443,492,493,1493 'stripe.api':543 'stripe.charge.create':547 'stripe.createtoken':499 'stripe.customer.modify':582 'stripe.js':481 'strong':187 'substitut':1560 'success':1060,1075,1076,1100,1582 'sum':1176,1185 'suppli':149 'system':100,175,183,208,237,1245,1529 'talisman':877,879,880 'task':51,1546 'test':219,235,1371,1481,1484,1566 'timestamp':1034,1066 'tls':850,1469 'token':118,436,440,449,460,464,496,523,524,529,538,553,555,573,578,588,622,634,660,668,672,673,687,692,695,699,704,707,713,725,727,729,733,1392,1498,1503 'token.id':512 'tokenizedpay':445 'tokenvault':632 'tool':63 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'total':290 'touch':1531 'track':222,303,1308 'train':1381 'transact':291 'transactions/year':258,267,279 'transit':846 'transmiss':163,1466 'transmit':1274 'treat':1555 'true':613,860,867,884 'unauthor':937 'unencrypt':1426 'uniqu':1347 'unrel':53 'updat':1331 'urlsaf':675 'usag':830,1086 'usd':551 'use':46,93,146,437,448,528,581,656,752,849,1236,1259,1438,1468,1490,1513,1540 'user':915,917,920,927,948,949,981,1023,1037,1039,1058,1069,1071,1091,1202,1205,1351 'user.get':933 'util':1410 'valid':79,405,1105,1110,1115,1213,1565 'valueerror':712 'vault':635,731 'vendor':148,1296 'vendor-suppli':147 'verif':85,310,1423 'violat':1416 'virus':1328 'vulner':171,1324,1338 'weak':1436 'wrap':891,908 'write':1012 'year':507","prices":[{"id":"10eaf9fa-7fa6-441e-a589-bb0c15f25789","listingId":"df661366-5a23-4cd8-8ea1-d5219e519f14","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:42:14.517Z"}],"sources":[{"listingId":"df661366-5a23-4cd8-8ea1-d5219e519f14","source":"github","sourceId":"sickn33/antigravity-awesome-skills/pci-compliance","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/pci-compliance","isPrimary":false,"firstSeenAt":"2026-04-18T21:42:14.517Z","lastSeenAt":"2026-04-23T00:51:22.796Z"}],"details":{"listingId":"df661366-5a23-4cd8-8ea1-d5219e519f14","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"pci-compliance","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34616,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-22T06:40:00Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"bb8fbd33b61bc2f06fcc4789cb999fb07facdf6a","skill_md_path":"skills/pci-compliance/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/pci-compliance"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"pci-compliance","description":"Master PCI DSS (Payment Card Industry Data Security Standard) compliance for secure payment processing and handling of cardholder data."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/pci-compliance"},"updatedAt":"2026-04-23T00:51:22.796Z"}}