Erstellt: 2025-12-23 | Aktualisiert: 2025-12-23

Post-Hook Ablauf

Der Post-Hook wird nach jeder Tool-Ausführung aufgerufen und führt Aufräumarbeiten sowie Logging durch.

Trigger

Post-Hooks werden bei folgenden Tools ausgelöst:

Ablauf bei Edit/Write

1. Berechtigungskorrektur

Nach jeder Edit/Write-Operation:

fix-permissions.sh
├── chown -R www-data:www-data /var/www/dev.campus...
├── chown -R www-data:www-data /var/www/prod.campus...
├── chmod -R 755 /var/www/dev.campus...
└── chmod -R 755 /var/www/prod.campus...

Warum? Claude Code läuft als root. Ohne Korrektur hätten die Dateien falschen Owner und Apache könnte sie nicht lesen.

2. Response-Logging

Für alle Tools wird die Response protokolliert:

log_to_db.py
├── Sucht: Matching PreToolUse-Request
│   └── Über: session_id + tool_name
│
├── Extrahiert: tool_response
├── Sanitized: Sensible Daten
├── Schätzt: tokens_output
│
└── UPDATE protokoll SET
    ├── response (JSON)
    ├── response_timestamp
    ├── tokens_output
    ├── tokens_total = tokens_input + tokens_output
    ├── duration_ms (berechnet aus Timestamps)
    └── status: 'completed'

Request/Response-Pairing

Das Logging-System verbindet Pre- und Post-Hook-Events:

PreToolUse (Edit "file.php")
├── INSERT protokoll → ID=123
└── Speichert: /tmp/claude_hooks/{session}_{tool}_PreToolUse.json
    └── {"db_id": 123, "timestamp": "..."}

[Tool-Ausführung]

PostToolUse (Edit "file.php")
├── Lädt: /tmp/claude_hooks/{session}_{tool}_PreToolUse.json
├── Findet: db_id=123
├── UPDATE protokoll WHERE id=123
│   └── SET response, duration_ms, status='completed'
└── Löscht: Tracking-Datei

Duration-Berechnung

Die Dauer wird präzise aus den Timestamps berechnet:

duration_ms = TIMESTAMPDIFF(MICROSECOND, request_timestamp, response_timestamp) / 1000

Damit ist die exakte Tool-Ausführungszeit in Millisekunden erfasst.

Fail-Open Prinzip

Bei Fehlern im Post-Hook:

Post-Hooks sind nie blockierend, da die Aktion bereits abgeschlossen ist.