hook-schreiben
Skill1 starsChanged 30 days agoMITView on GitHub
Einen eigenen Claude-Code-Hook schreiben und testen: PreToolUse, PostToolUse, UserPromptSubmit, Stop oder SessionStart, mit JSON auf stdin, permissionDecision deny oder ask, Eintrag in .claude/settings.json mit ${CLAUDE_PROJECT_DIR} und einem Test per Pipe. Nutzen, wenn eine Regel technisch durchgesetzt werden soll statt nur in CLAUDE.md zu stehen, z.B. bestimmte Befehle sperren, Dateien schützen oder nach jeder Änderung formatieren. Englisch: write a Claude Code hook, PreToolUse hook example.
In this repository13 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- claude-code-auditSkill
- claude-code-einrichtenSkill
- claude-md-schreibenSkill
- claude-code-auditSkill
- claude-code-einrichtenSkill
- claude-md-schreibenSkill
- hook-schreibenSkill
- claude-code-auditSkill
- claude-code-einrichtenSkill
- claude-md-schreibenSkill
- hook-schreibenSkill
The file
Files
Hook schreiben
Teil von Claude Code Best Practices für Teams.
Ablauf
- Kläre in einem Satz, was der Hook verhindern oder erledigen soll, und wähle das Ereignis:
- vor einem Werkzeug blocken oder nachfragen:
PreToolUse - nach einer Änderung formatieren oder prüfen:
PostToolUse - Prompt prüfen, bevor er an das Modell geht:
UserPromptSubmit - verhindern, dass Claude zu früh fertig meldet:
Stop - Kontext beim Start mitgeben:
SessionStart
- vor einem Werkzeug blocken oder nachfragen:
- Schreibe das Skript nach
.claude/hooks/<name>.py, nur mit Standardbibliothek. Gibt es.claude/hooks/_hook.pyaus der Team-Vorlage, nutzelies_eingabe,entscheideundausfuehrendaraus. - Antwort für
PreToolUseals JSON auf stdout, Exit 0:{"hookSpecificOutput": {"hookEventName": "PreToolUse", "permissionDecision": "deny", "permissionDecisionReason": "<Grund für Claude>"}}Erlaubt sindallow,deny,askunddefer. FürUserPromptSubmit,PostToolUseundStopheißt es{"decision": "block", "reason": "..."}. - Der Hook muss bei eigenen Fehlern die Aktion durchlassen (Exit 0 ohne Ausgabe) und den Fehler nach stderr schreiben. Exit 1 blockt nichts. Wer blocken will, gibt JSON aus oder nutzt Exit 2 mit dem Grund auf stderr.
- Bei
Stopimmerstop_hook_activeauswerten. Ist estrue, nichts tun, sonst entsteht eine Schleife. - Eintrag in
.claude/settings.jsonmit festem Projektpfad:{"type": "command", "command": "python3 \"${CLAUDE_PROJECT_DIR}/.claude/hooks/<name>.py\"", "timeout": 10}unterhooks.<Ereignis>[].hooks, bei Werkzeug-Ereignissen mitmatcher, z.B."Bash"oder"Edit|Write". - Teste ohne Claude per Pipe, je ein Fall, der greifen soll, und einer, der durchgehen soll:
echo '{"hook_event_name":"PreToolUse","tool_name":"Bash","tool_input":{"command":"..."}}' | python3 .claude/hooks/<name>.py - Schreibe die Fälle als pytest-Test, der das Skript mit
subprocess.run(..., input=json.dumps(eingabe))startet. - Danach
claude-team audit .(CC021 bis CC024 prüfen Pfad, Ausführbarkeit und Ereignisnamen) und in Claude Code/hooksöffnen, um zu sehen, ob der Hook geladen ist.
Grenze
Hooks laufen mit den vollen Rechten der Person. Keine Netzwerkaufrufe, keine Ausgabe von Dateiinhalten oder Tokens in reason. Ein Hook ersetzt keine deny-Regel: Was Claude nie lesen darf, gehört zusätzlich unter permissions.deny. Referenz: https://code.claude.com/docs/en/hooks
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

