{
"event": "PreToolUse",
"tool_name": "mcp__mcp-docs__docs_get",
"tool_input": {
"path": "\/prozesse\/claude-hooks-prozess\/post-hook-ablauf"
}
}
{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"doc\": {\n \"id\": 94,\n \"parent_id\": 92,\n \"slug\": \"post-hook-ablauf\",\n \"path\": \"\/prozesse\/claude-hooks-prozess\/post-hook-ablauf\",\n \"title\": \"Post-Hook Ablauf\",\n \"description\": \"Was passiert NACH der Tool-Ausführung\",\n \"content\": \"\\n<p class=\\\"doc-meta\\\"><strong>Erstellt:<\/strong> 2025-12-23 | <strong>Aktualisiert:<\/strong> 2025-12-23<\/p>\\n<h2>Post-Hook Ablauf<\/h2>\\n\\n<p>Der Post-Hook wird <strong>nach<\/strong> jeder Tool-Ausführung aufgerufen und führt Aufräumarbeiten sowie Logging durch.<\/p>\\n\\n<h3>Trigger<\/h3>\\n<p>Post-Hooks werden bei folgenden Tools ausgelöst:<\/p>\\n<ul>\\n <li><code>Edit<\/code> - Nach Datei-Bearbeitung<\/li>\\n <li><code>Write<\/code> - Nach Datei-Erstellung<\/li>\\n <li>Alle anderen Tools (generisches Response-Logging)<\/li>\\n<\/ul>\\n\\n<h3>Ablauf bei Edit\/Write<\/h3>\\n\\n<h4>1. Berechtigungskorrektur<\/h4>\\n<p>Nach jeder Edit\/Write-Operation:<\/p>\\n\\n<pre>\\nfix-permissions.sh\\n├── chown -R www-data:www-data \/var\/www\/dev.campus...\\n├── chown -R www-data:www-data \/var\/www\/prod.campus...\\n├── chmod -R 755 \/var\/www\/dev.campus...\\n└── chmod -R 755 \/var\/www\/prod.campus...\\n<\/pre>\\n\\n<p><strong>Warum?<\/strong> Claude Code läuft als root. Ohne Korrektur hätten die Dateien falschen Owner und Apache könnte sie nicht lesen.<\/p>\\n\\n<h4>2. Response-Logging<\/h4>\\n<p>Für alle Tools wird die Response protokolliert:<\/p>\\n\\n<pre>\\nlog_to_db.py\\n├── Sucht: Matching PreToolUse-Request\\n│ └── Über: session_id + tool_name\\n│\\n├── Extrahiert: tool_response\\n├── Sanitized: Sensible Daten\\n├── Schätzt: tokens_output\\n│\\n└── UPDATE protokoll SET\\n ├── response (JSON)\\n ├── response_timestamp\\n ├── tokens_output\\n ├── tokens_total = tokens_input + tokens_output\\n ├── duration_ms (berechnet aus Timestamps)\\n └── status: 'completed'\\n<\/pre>\\n\\n<h3>Request\/Response-Pairing<\/h3>\\n<p>Das Logging-System verbindet Pre- und Post-Hook-Events:<\/p>\\n\\n<pre>\\nPreToolUse (Edit \\\"file.php\\\")\\n├── INSERT protokoll → ID=123\\n└── Speichert: \/tmp\/claude_hooks\/{session}_{tool}_PreToolUse.json\\n └── {\\\"db_id\\\": 123, \\\"timestamp\\\": \\\"...\\\"}\\n\\n[Tool-Ausführung]\\n\\nPostToolUse (Edit \\\"file.php\\\")\\n├── Lädt: \/tmp\/claude_hooks\/{session}_{tool}_PreToolUse.json\\n├── Findet: db_id=123\\n├── UPDATE protokoll WHERE id=123\\n│ └── SET response, duration_ms, status='completed'\\n└── Löscht: Tracking-Datei\\n<\/pre>\\n\\n<h3>Duration-Berechnung<\/h3>\\n<p>Die Dauer wird präzise aus den Timestamps berechnet:<\/p>\\n<pre>\\nduration_ms = TIMESTAMPDIFF(MICROSECOND, request_timestamp, response_timestamp) \/ 1000\\n<\/pre>\\n<p>Damit ist die exakte Tool-Ausführungszeit in Millisekunden erfasst.<\/p>\\n\\n<h3>Fail-Open Prinzip<\/h3>\\n<p>Bei Fehlern im Post-Hook:<\/p>\\n<ul>\\n <li>Hook gibt trotzdem <code>exit(0)<\/code> zurück<\/li>\\n <li>Fehler wird zu stderr geloggt<\/li>\\n <li>Claude Code arbeitet normal weiter<\/li>\\n<\/ul>\\n<p>Post-Hooks sind nie blockierend, da die Aktion bereits abgeschlossen ist.<\/p>\",\n \"status\": \"published\",\n \"sort_order\": 2,\n \"depth\": 2,\n \"created_at\": \"2025-12-23T05:39:59\",\n \"updated_at\": \"2025-12-27T15:58:19\"\n }\n}"
}
]
}