{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"doc\": {\n \"id\": 95,\n \"parent_id\": 92,\n \"slug\": \"hook-scripts\",\n \"path\": \"\/prozesse\/claude-hooks-prozess\/hook-scripts\",\n \"title\": \"Hook-Scripts\",\n \"description\": \"Übersicht aller Hook-Scripts\",\n \"content\": \"<h2>Hook-Scripts<\/h2>\\n\\n<p>Übersicht aller Scripts, die im Hook-System verwendet werden.<\/p>\\n\\n<h3>Hauptverzeichnisse<\/h3>\\n<table>\\n <thead>\\n <tr>\\n <th>Pfad<\/th>\\n <th>Zweck<\/th>\\n <\/tr>\\n <\/thead>\\n <tbody>\\n <tr>\\n <td><code>\/var\/www\/tools\/ki-protokoll\/claude-hook\/<\/code><\/td>\\n <td>Protokollierung, Backup, Workflow-Guards<\/td>\\n <\/tr>\\n <tr>\\n <td><code>\/var\/www\/scripts\/hooks\/<\/code><\/td>\\n <td>Sicherheits-Blocker<\/td>\\n <\/tr>\\n <tr>\\n <td><code>\/var\/www\/scripts\/<\/code><\/td>\\n <td>Utility-Scripts<\/td>\\n <\/tr>\\n <\/tbody>\\n<\/table>\\n\\n<h3>Script-Übersicht<\/h3>\\n\\n<h4>log_to_db.py<\/h4>\\n<table>\\n <tr><th>Pfad<\/th><td><code>\/var\/www\/tools\/ki-protokoll\/claude-hook\/log_to_db.py<\/code><\/td><\/tr>\\n <tr><th>Events<\/th><td>UserPromptSubmit, PreToolUse, PostToolUse, Stop, SessionStart, SessionEnd<\/td><\/tr>\\n <tr><th>Datenbank<\/th><td><code>ki_dev.protokoll<\/code><\/td><\/tr>\\n <tr><th>Funktion<\/th><td>\\n <ul>\\n <li>Protokolliert alle Claude Code Events<\/li>\\n <li>Request\/Response-Pairing mit Duration<\/li>\\n <li>Token-Schätzung (4 Zeichen = 1 Token)<\/li>\\n <li>Sensitive Daten werden redacted<\/li>\\n <\/ul>\\n <\/td><\/tr>\\n<\/table>\\n\\n<h4>file_backup_hook.py<\/h4>\\n<table>\\n <tr><th>Pfad<\/th><td><code>\/var\/www\/tools\/ki-protokoll\/claude-hook\/file_backup_hook.py<\/code><\/td><\/tr>\\n <tr><th>Events<\/th><td>PreToolUse (Edit, Write)<\/td><\/tr>\\n <tr><th>Datenbank<\/th><td><code>ki_dev.file_backup_history<\/code><\/td><\/tr>\\n <tr><th>Funktion<\/th><td>\\n <ul>\\n <li>Sichert Datei-Inhalt vor Änderung<\/li>\\n <li>Versionierung pro Datei<\/li>\\n <li>Hash-basierte Duplikat-Erkennung<\/li>\\n <li>Max. 10 MB pro Datei<\/li>\\n <\/ul>\\n <\/td><\/tr>\\n<\/table>\\n\\n<h4>task_completion_guard.py<\/h4>\\n<table>\\n <tr><th>Pfad<\/th><td><code>\/var\/www\/tools\/ki-protokoll\/claude-hook\/task_completion_guard.py<\/code><\/td><\/tr>\\n <tr><th>Events<\/th><td>PreToolUse (mcp__mcp-tasks__tasks_status)<\/td><\/tr>\\n <tr><th>Datenbank<\/th><td><code>ki_dev.task_results<\/code><\/td><\/tr>\\n <tr><th>Funktion<\/th><td>\\n <ul>\\n <li>Blockiert tasks_status(completed) ohne Result<\/li>\\n <li>Prüft: SELECT COUNT(*) FROM task_results WHERE task_id = ?<\/li>\\n <li>Exit 2 = Block, Exit 0 = Allow<\/li>\\n <li>Fail-open bei DB-Fehlern<\/li>\\n <\/ul>\\n <\/td><\/tr>\\n <tr><th>Dokumentation<\/th><td><a href=\\\"\/docs\/prozesse\/claude-hooks-prozess\/task-completion-guard\\\">Task-Completion Guard Hook<\/a><\/td><\/tr>\\n<\/table>\\n\\n<h4>block_direct_db.py<\/h4>\\n<table>\\n <tr><th>Pfad<\/th><td><code>\/var\/www\/scripts\/hooks\/block_direct_db.py<\/code><\/td><\/tr>\\n <tr><th>Events<\/th><td>PreToolUse (Bash)<\/td><\/tr>\\n <tr><th>Funktion<\/th><td>\\n <ul>\\n <li>Blockiert direkte MySQL\/MariaDB-Zugriffe<\/li>\\n <li>Patterns: <code>mysql -p<\/code>, <code>--password=<\/code><\/li>\\n <li>Empfiehlt: MCP-DB Tools<\/li>\\n <\/ul>\\n <\/td><\/tr>\\n<\/table>\\n\\n<h4>block_direct_task_db.py<\/h4>\\n<table>\\n <tr><th>Pfad<\/th><td><code>\/var\/www\/scripts\/hooks\/block_direct_task_db.py<\/code><\/td><\/tr>\\n <tr><th>Events<\/th><td>PreToolUse (Bash)<\/td><\/tr>\\n <tr><th>Funktion<\/th><td>\\n <ul>\\n <li>Blockiert SQL auf Task-Tabellen<\/li>\\n <li>Patterns: INSERT\/UPDATE\/DELETE auf tasks, task_*<\/li>\\n <li>Empfiehlt: MCP-Tasks Tools<\/li>\\n <\/ul>\\n <\/td><\/tr>\\n<\/table>\\n\\n<h4>fix-permissions.sh<\/h4>\\n<table>\\n <tr><th>Pfad<\/th><td><code>\/var\/www\/scripts\/fix-permissions.sh<\/code><\/td><\/tr>\\n <tr><th>Events<\/th><td>PostToolUse (Edit, Write)<\/td><\/tr>\\n <tr><th>Funktion<\/th><td>\\n <ul>\\n <li>Setzt Owner auf www-data:www-data<\/li>\\n <li>Setzt Permissions auf 755<\/li>\\n <li>Für dev und prod Verzeichnisse<\/li>\\n <\/ul>\\n <\/td><\/tr>\\n<\/table>\\n\\n<h3>Hook-Konfiguration<\/h3>\\n<p>Die Hooks werden in <code>\/root\/.claude\/settings.json<\/code> definiert:<\/p>\\n\\n<pre>\\n{\\n \\\"hooks\\\": {\\n \\\"PreToolUse\\\": [\\n {\\n \\\"matcher\\\": \\\"Bash\\\",\\n \\\"hooks\\\": [\\n {\\\"type\\\": \\\"command\\\", \\\"command\\\": \\\"\/var\/www\/scripts\/hooks\/block_direct_db.py\\\"},\\n {\\\"type\\\": \\\"command\\\", \\\"command\\\": \\\"\/var\/www\/scripts\/hooks\/block_direct_task_db.py\\\"}\\n ]\\n },\\n {\\n \\\"matcher\\\": \\\"mcp__mcp-tasks__tasks_status\\\",\\n \\\"hooks\\\": [\\n {\\\"type\\\": \\\"command\\\", \\\"command\\\": \\\"...\/task_completion_guard.py\\\", \\\"timeout\\\": 5}\\n ]\\n },\\n {\\n \\\"matcher\\\": \\\"Edit|Write\\\",\\n \\\"hooks\\\": [\\n {\\\"type\\\": \\\"command\\\", \\\"command\\\": \\\"...\/file_backup_hook.py\\\", \\\"timeout\\\": 10}\\n ]\\n },\\n {\\n \\\"matcher\\\": \\\"\\\",\\n \\\"hooks\\\": [\\n {\\\"type\\\": \\\"command\\\", \\\"command\\\": \\\"...\/log_to_db.py\\\", \\\"timeout\\\": 5}\\n ]\\n }\\n ],\\n \\\"PostToolUse\\\": [\\n {\\n \\\"matcher\\\": \\\"Write|Edit\\\",\\n \\\"hooks\\\": [\\n {\\\"type\\\": \\\"command\\\", \\\"command\\\": \\\"\/var\/www\/scripts\/fix-permissions.sh\\\"}\\n ]\\n },\\n {\\n \\\"matcher\\\": \\\"\\\",\\n \\\"hooks\\\": [\\n {\\\"type\\\": \\\"command\\\", \\\"command\\\": \\\"...\/log_to_db.py\\\", \\\"timeout\\\": 10}\\n ]\\n }\\n ]\\n }\\n}\\n<\/pre>\",\n \"status\": \"published\",\n \"sort_order\": 3,\n \"depth\": 2,\n \"created_at\": \"2025-12-23T05:40:00\",\n \"updated_at\": \"2025-12-27T10:29:32\"\n }\n}"
}
]
}