{
"event": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": ".\/venv\/bin\/python -c \"\nimport json\nfrom db import db\n\ndb.connect()\n\n# Get content\ncursor = db.execute('''\n SELECT cv.content FROM content_versions cv \n WHERE cv.order_id = 35 ORDER BY cv.version_number DESC LIMIT 1\n''')\nversion = cursor.fetchone()\ncursor.close()\n\ncontent = json.loads(version['content'])['text']\n\n# Get Cary LinkedIn profile\ncursor = db.execute('SELECT content FROM content_config WHERE id = 28')\nprofile = cursor.fetchone()\ncursor.close()\n\ncary = json.loads(profile['content'])\n\ndb.disconnect()\n\nprint('=== CARY-VALIDIERUNG Version 7 ===\\\\n')\n\nchecks = []\n\n# 1. Ton\nprint('1. TON: sachlich-bestimmt mit persönlicher Fundierung')\nif 'In meiner Arbeit als Executive Coach' in content:\n checks.append(('Ich-Perspektive für Praxisbezug', True))\n print(' ✓ Ich-Perspektive vorhanden')\nelse:\n checks.append(('Ich-Perspektive', False))\n print(' ✗ Fehlt Ich-Perspektive')\n\n# 2. Einstieg\nprint('\\\\n2. EINSTIEG: Provokante These')\nif content.startswith('Vertrauen ist kein Kuschelkonzept'):\n checks.append(('Provokante These', True))\n print(' ✓ Provokante These am Anfang')\nelse:\n checks.append(('Provokante These', False))\n \n# 3. Buzzwords\nprint('\\\\n3. BUZZWORDS\/FLOSKELN: verboten')\nbuzzwords = ['Win-win', 'Synergien', 'Mehrwert', 'proaktiv', 'agil']\nfound = [b for b in buzzwords if b.lower() in content.lower()]\nif not found:\n checks.append(('Keine Buzzwords', True))\n print(' ✓ Keine Buzzwords gefunden')\nelse:\n checks.append(('Keine Buzzwords', False))\n print(f' ✗ Buzzwords gefunden: {found}')\n\n# 4. Emojis\nprint('\\\\n4. EMOJIS: verboten')\nemojis = ['▪️', '👉', '💡', '🔥', '✅', '❌']\nfound = [e for e in emojis if e in content]\nif not found:\n checks.append(('Keine Emojis', True))\n print(' ✓ Keine Emojis')\nelse:\n checks.append(('Keine Emojis', False))\n print(f' ✗ Emojis gefunden: {found}')\n\n# 5. Markdown\nprint('\\\\n5. MARKDOWN: verboten')\nif '**' not in content and '##' not in content:\n checks.append(('Kein Markdown', True))\n print(' ✓ Kein Markdown')\nelse:\n checks.append(('Kein Markdown', False))\n print(' ✗ Markdown gefunden')\n\n# 6. Haltung: einladend, nicht belehrend\nprint('\\\\n6. HALTUNG: einladend, nicht belehrend')\nbelehrend = ['Bitte vermeide', 'Du solltest', 'Du musst', 'Mach das', 'Tu dies']\nfound = [b for b in belehrend if b in content]\nif not found:\n checks.append(('Nicht belehrend', True))\n print(' ✓ Keine belehrenden Imperative')\nelse:\n checks.append(('Nicht belehrend', False))\n print(f' ✗ Belehrend: {found}')\n\n# 7. Einladende Sprache\nprint('\\\\n7. EINLADENDE SPRACHE')\neinladend = ['Es könnte', 'vielleicht', 'Schreib mir gern', 'wenn du']\nfound = [e for e in einladend if e.lower() in content.lower()]\nif len(found) >= 2:\n checks.append(('Einladende Sprache', True))\n print(f' ✓ Einladende Formulierungen: {found}')\nelse:\n checks.append(('Einladende Sprache', False))\n print(' ✗ Zu wenig einladende Sprache')\n\n# 8. Dreier-Struktur\nprint('\\\\n8. DREIER-STRUKTUR')\nif content.count('- ') >= 3:\n checks.append(('Dreier-Struktur', True))\n print(' ✓ Dreier-Struktur mit Listen vorhanden')\nelse:\n checks.append(('Dreier-Struktur', False))\n \n# 9. Schluss\nprint('\\\\n9. SCHLUSS: Soft CTA')\nif 'Schreib mir gern' in content or 'tiefer einsteigen' in content:\n checks.append(('Soft CTA', True))\n print(' ✓ Einladung zum Dialog')\nelse:\n checks.append(('Soft CTA', False))\n print(' ✗ Kein Soft CTA')\n\n# Summary\nprint('\\\\n' + '='*50)\npassed = sum(1 for _, v in checks if v)\ntotal = len(checks)\npercentage = (passed \/ total) * 100\n\nprint(f'ERGEBNIS: {passed}\/{total} Kriterien erfüllt ({percentage:.0f}%)')\n\nif percentage >= 95:\n print('\\\\n🎯 ZIEL ERREICHT: ≥95% Cary-Ähnlichkeit')\nelse:\n print(f'\\\\n⚠️ Noch {95-percentage:.0f}% bis zum Ziel')\n\"\n",
"description": "Validate against Cary profile"
}
}