{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"doc\": {\n \"id\": 33,\n \"parent_id\": 29,\n \"slug\": \"ki-tasks-hooks\",\n \"path\": \"\/ki-tasks\/ki-tasks-hooks\",\n \"title\": \"Hooks\",\n \"description\": \"Automatische Task-Erstellung aus Claude Code Prompts via Hook-System.\",\n \"content\": \"<nav class=\\\"breadcrumb\\\">\\n <a href=\\\"\/docs\\\">Dokumentation<\/a> » <a href=\\\"\/docs\/ki-tasks\\\">KI-Tasks<\/a> » Hook-Integration\\n<\/nav>\\n\\n<h1>Hook-Integration<\/h1>\\n<p class=\\\"doc-meta\\\"><strong>Erstellt:<\/strong> 2025-12-20 | <strong>Aktualisiert:<\/strong> 2025-12-20<\/p>\\n\\n<p>Automatische Task-Erstellung aus Claude Code Prompts via Hook-System.<\/p>\\n\\n<table>\\n <tr><th>Hook-Script<\/th><td>\/var\/www\/tools\/ki-protokoll\/claude-hook\/task_hook.py<\/td><\/tr>\\n <tr><th>Trigger<\/th><td>UserPromptSubmit<\/td><\/tr>\\n <tr><th>Datenbank<\/th><td>ki_protokoll<\/td><\/tr>\\n<\/table>\\n\\n<h2>Erkannte Patterns<\/h2>\\n<p>Der Hook erkennt folgende Patterns in User-Prompts und erstellt automatisch Tasks:<\/p>\\n\\n<table>\\n <tr><th>Pattern<\/th><th>Beispiel<\/th><th>Task-Titel<\/th><\/tr>\\n <tr><td><code>TODO: <text><\/code><\/td><td>TODO: Tests schreiben<\/td><td>Tests schreiben<\/td><\/tr>\\n <tr><td><code>TASK: <text><\/code><\/td><td>TASK: API dokumentieren<\/td><td>API dokumentieren<\/td><\/tr>\\n <tr><td><code>@task <text><\/code><\/td><td>@task Refactoring<\/td><td>Refactoring<\/td><\/tr>\\n <tr><td><code>#task <text><\/code><\/td><td>#task Bug fixen<\/td><td>Bug fixen<\/td><\/tr>\\n<\/table>\\n\\n<h2>Funktionsweise<\/h2>\\n<pre><code>User-Prompt: \\\"Bitte TODO: Logging implementieren und den Code reviewen\\\"\\n ↓\\n Hook erkennt Pattern\\n ↓\\n Task erstellt: \\\"Logging implementieren\\\"\\n ↓\\n type: ai_task\\n status: pending\\n created_by: $USER\\n created_by_type: ai<\/code><\/pre>\\n\\n<h2>Hook-Konfiguration<\/h2>\\n<p>Datei: <code>\/var\/www\/dev.campus.systemische-tools.de\/.claude\/settings.local.json<\/code><\/p>\\n\\n<pre><code>{\\n \\\"hooks\\\": {\\n \\\"UserPromptSubmit\\\": [\\n {\\n \\\"hooks\\\": [\\n {\\n \\\"type\\\": \\\"command\\\",\\n \\\"command\\\": \\\"\/var\/www\/tools\/ki-protokoll\/claude-hook\/log_to_db.py\\\",\\n \\\"timeout\\\": 5\\n },\\n {\\n \\\"type\\\": \\\"command\\\",\\n \\\"command\\\": \\\"\/var\/www\/tools\/ki-protokoll\/claude-hook\/task_hook.py\\\",\\n \\\"timeout\\\": 5\\n }\\n ]\\n }\\n ]\\n }\\n}<\/code><\/pre>\\n\\n<h2>Hook-Script<\/h2>\\n\\n<h4>Konfiguration<\/h4>\\n<pre><code># Datenbankverbindung - verwendet Umgebungsvariablen\\nDB_CONFIG = {\\n 'host': os.environ.get('CLAUDE_DB_HOST', 'localhost'),\\n 'port': int(os.environ.get('CLAUDE_DB_PORT', '3306')),\\n 'user': os.environ.get('CLAUDE_DB_USER', 'claude_code'),\\n 'password': os.environ.get('CLAUDE_DB_PASSWORD'),\\n 'database': os.environ.get('CLAUDE_DB_NAME', 'ki_protokoll'),\\n 'charset': 'utf8mb4'\\n}\\n\\n# Erkennungsmuster\\nTASK_PATTERNS = [\\n (r'TODO:\\\\s*(.+?)(?:\\\\n|$)', 'todo'),\\n (r'TASK:\\\\s*(.+?)(?:\\\\n|$)', 'task'),\\n (r'@task\\\\s+(.+?)(?:\\\\n|$)', 'mention'),\\n (r'#task\\\\s+(.+?)(?:\\\\n|$)', 'hashtag'),\\n]<\/code><\/pre>\\n\\n<h4>Erstellte Task-Eigenschaften<\/h4>\\n<table>\\n <tr><th>Eigenschaft<\/th><th>Wert<\/th><\/tr>\\n <tr><td>type<\/td><td>ai_task<\/td><\/tr>\\n <tr><td>status<\/td><td>pending<\/td><\/tr>\\n <tr><td>created_by<\/td><td>$USER oder 'claude-code-hook'<\/td><\/tr>\\n <tr><td>created_by_type<\/td><td>ai<\/td><\/tr>\\n<\/table>\\n\\n<h2>Installation<\/h2>\\n\\n<h4>1. Hook ausführbar machen<\/h4>\\n<pre><code>chmod +x \/var\/www\/tools\/ki-protokoll\/claude-hook\/task_hook.py<\/code><\/pre>\\n\\n<h4>2. Python-Abhängigkeiten<\/h4>\\n<pre><code>pip3 install pymysql<\/code><\/pre>\\n\\n<h4>3. Hook in settings.local.json registrieren<\/h4>\\n<pre><code># Füge den task_hook.py zu den UserPromptSubmit Hooks hinzu<\/code><\/pre>\\n\\n<h4>4. Testen<\/h4>\\n<pre><code># In Claude Code eingeben:\\n\\\"TODO: Test-Task erstellen\\\"\\n\\n# Prüfen:\\nphp \/var\/www\/tools\/ki-tasks\/cli.php list<\/code><\/pre>\\n\\n<h2>Fehlerbehandlung<\/h2>\\n\\n<p>Der Hook ist <strong>non-blocking<\/strong>. Fehler werden zu stderr geloggt, aber der Claude Code Workflow wird nicht unterbrochen.<\/p>\\n\\n<pre><code># Immer zurückgegeben:\\n{\\\"continue\\\": true}<\/code><\/pre>\\n\\n<h4>Debugging<\/h4>\\n<pre><code># Hook manuell testen\\necho '{\\\"hook_event_name\\\":\\\"UserPromptSubmit\\\",\\\"prompt\\\":\\\"TODO: Test\\\"}' | python3 \/var\/www\/tools\/ki-protokoll\/claude-hook\/task_hook.py\\n\\n# Logs prüfen (stderr)\\n# Task #123 created: Test...<\/code><\/pre>\\n\\n<h2>Erweiterungen<\/h2>\\n\\n<h4>Eigene Patterns hinzufügen<\/h4>\\n<pre><code># In task_hook.py\\nTASK_PATTERNS = [\\n # ... bestehende Patterns ...\\n (re.compile(r'FIXME:\\\\s*(.+?)(?:\\\\n|$)', re.IGNORECASE), 'fixme'),\\n (re.compile(r'BUG:\\\\s*(.+?)(?:\\\\n|$)', re.IGNORECASE), 'bug'),\\n]<\/code><\/pre>\\n\\n<h2>Zusammenspiel mit anderen Hooks<\/h2>\\n\\n<table>\\n <tr><th>Hook<\/th><th>Funktion<\/th><th>Event<\/th><\/tr>\\n <tr><td>log_to_db.py<\/td><td>Protokolliert alle Events<\/td><td>Alle<\/td><\/tr>\\n <tr><td>file_backup_hook.py<\/td><td>Backup vor Dateiänderungen<\/td><td>PreToolUse (Edit, Write)<\/td><\/tr>\\n <tr><td>task_hook.py<\/td><td>Tasks aus Prompts erstellen<\/td><td>UserPromptSubmit<\/td><\/tr>\\n<\/table>\",\n \"status\": \"published\",\n \"sort_order\": 4,\n \"depth\": 1,\n \"created_at\": \"2025-12-20T11:13:58\",\n \"updated_at\": \"2025-12-27T15:58:19\"\n }\n}"
}
]
}