{
"event": "PreToolUse",
"tool_name": "mcp__mcp-docs__docs_update",
"tool_input": {
"id": 33,
"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-31<\/p>\n\n<p>Automatische Task-Erstellung aus Claude Code Prompts via Hook-System.<\/p>\n\n<div class=\"warning-box\">\n<strong>Status:<\/strong> Der <code>task_hook.py<\/code> ist derzeit <strong>nicht aktiv<\/strong>. \nEr ist nicht in der Hook-Konfiguration registriert. Diese Dokumentation beschreibt die geplante Funktionalität.\n<\/div>\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 (nicht aktiv)<\/td><\/tr>\n <tr><th>Status<\/th><td>Nicht aktiviert<\/td><\/tr>\n<\/table>\n\n<h2>Erkannte Patterns (geplant)<\/h2>\n<p>Bei Aktivierung würde der Hook folgende Patterns in User-Prompts erkennen und automatisch Tasks erstellen:<\/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 (bei Aktivierung)<\/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>Aktivierung<\/h2>\n<p>Um den Hook zu aktivieren, muss er in der Hook-Konfiguration registriert werden:<\/p>\n\n<p>Datei: <code>\/root\/.claude\/settings.json<\/code> oder <code>.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>Aktive Hooks (aktueller Stand)<\/h2>\n<p>Derzeit sind folgende Hooks für UserPromptSubmit aktiv:<\/p>\n<table>\n <tr><th>Hook<\/th><th>Funktion<\/th><\/tr>\n <tr><td>log_to_db.py<\/td><td>Protokolliert Prompts in Datenbank<\/td><\/tr>\n<\/table>\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_dev'),\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 (falls gewünscht)<\/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.json registrieren<\/h4>\n<pre><code># Füge den task_hook.py zu den UserPromptSubmit Hooks hinzu (siehe oben)<\/code><\/pre>\n\n<h4>4. Testen<\/h4>\n<pre><code># In Claude Code eingeben:\n\"TODO: Test-Task erstellen\"\n\n# Prüfen ob Task erstellt wurde<\/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>Zusammenspiel mit anderen Hooks<\/h2>\n\n<table>\n <tr><th>Hook<\/th><th>Funktion<\/th><th>Event<\/th><th>Status<\/th><\/tr>\n <tr><td>log_to_db.py<\/td><td>Protokolliert alle Events<\/td><td>Alle<\/td><td>Aktiv<\/td><\/tr>\n <tr><td>block_direct_db.py<\/td><td>Blockiert mysql\/mariadb CLI<\/td><td>PreToolUse:Bash<\/td><td>Aktiv<\/td><\/tr>\n <tr><td>file_backup_hook.py<\/td><td>Backup vor Dateiänderungen<\/td><td>PreToolUse:Edit|Write<\/td><td>Aktiv<\/td><\/tr>\n <tr><td>task_hook.py<\/td><td>Tasks aus Prompts erstellen<\/td><td>UserPromptSubmit<\/td><td>Nicht aktiv<\/td><\/tr>\n<\/table>\n\n<h2>Änderungshistorie<\/h2>\n<table>\n <tr><th>Datum<\/th><th>Änderung<\/th><\/tr>\n <tr><td>2025-12-31<\/td><td>Klarstellung: Hook ist nicht aktiv, Aktivierungsanleitung hinzugefügt<\/td><\/tr>\n <tr><td>2025-12-20<\/td><td>Initial erstellt<\/td><\/tr>\n<\/table>"
}
}
{
"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-31<\/p>\\n\\n<p>Automatische Task-Erstellung aus Claude Code Prompts via Hook-System.<\/p>\\n\\n<div class=\\\"warning-box\\\">\\n<strong>Status:<\/strong> Der <code>task_hook.py<\/code> ist derzeit <strong>nicht aktiv<\/strong>. \\nEr ist nicht in der Hook-Konfiguration registriert. Diese Dokumentation beschreibt die geplante Funktionalität.\\n<\/div>\\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 (nicht aktiv)<\/td><\/tr>\\n <tr><th>Status<\/th><td>Nicht aktiviert<\/td><\/tr>\\n<\/table>\\n\\n<h2>Erkannte Patterns (geplant)<\/h2>\\n<p>Bei Aktivierung würde der Hook folgende Patterns in User-Prompts erkennen und automatisch Tasks erstellen:<\/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 (bei Aktivierung)<\/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>Aktivierung<\/h2>\\n<p>Um den Hook zu aktivieren, muss er in der Hook-Konfiguration registriert werden:<\/p>\\n\\n<p>Datei: <code>\/root\/.claude\/settings.json<\/code> oder <code>.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>Aktive Hooks (aktueller Stand)<\/h2>\\n<p>Derzeit sind folgende Hooks für UserPromptSubmit aktiv:<\/p>\\n<table>\\n <tr><th>Hook<\/th><th>Funktion<\/th><\/tr>\\n <tr><td>log_to_db.py<\/td><td>Protokolliert Prompts in Datenbank<\/td><\/tr>\\n<\/table>\\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_dev'),\\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 (falls gewünscht)<\/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.json registrieren<\/h4>\\n<pre><code># Füge den task_hook.py zu den UserPromptSubmit Hooks hinzu (siehe oben)<\/code><\/pre>\\n\\n<h4>4. Testen<\/h4>\\n<pre><code># In Claude Code eingeben:\\n\\\"TODO: Test-Task erstellen\\\"\\n\\n# Prüfen ob Task erstellt wurde<\/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>Zusammenspiel mit anderen Hooks<\/h2>\\n\\n<table>\\n <tr><th>Hook<\/th><th>Funktion<\/th><th>Event<\/th><th>Status<\/th><\/tr>\\n <tr><td>log_to_db.py<\/td><td>Protokolliert alle Events<\/td><td>Alle<\/td><td>Aktiv<\/td><\/tr>\\n <tr><td>block_direct_db.py<\/td><td>Blockiert mysql\/mariadb CLI<\/td><td>PreToolUse:Bash<\/td><td>Aktiv<\/td><\/tr>\\n <tr><td>file_backup_hook.py<\/td><td>Backup vor Dateiänderungen<\/td><td>PreToolUse:Edit|Write<\/td><td>Aktiv<\/td><\/tr>\\n <tr><td>task_hook.py<\/td><td>Tasks aus Prompts erstellen<\/td><td>UserPromptSubmit<\/td><td>Nicht aktiv<\/td><\/tr>\\n<\/table>\\n\\n<h2>Änderungshistorie<\/h2>\\n<table>\\n <tr><th>Datum<\/th><th>Änderung<\/th><\/tr>\\n <tr><td>2025-12-31<\/td><td>Klarstellung: Hook ist nicht aktiv, Aktivierungsanleitung hinzugefügt<\/td><\/tr>\\n <tr><td>2025-12-20<\/td><td>Initial erstellt<\/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-31T10:03:00\"\n },\n \"message\": \"Document #33 updated\"\n}"
}
]
}