Claude Code turi hook’ų sistemą — tai shell komandos, kurios automatiškai vykdomos tam tikrais momentais sesijos metu. Skirtingai nuo instrukcijų CLAUDE.md faile, hook’ai garantuotai įvykdomi kiekvieną kartą.
Šiame įraše sukonfigūruosime hook’ą, kuris automatiškai aktyvuos Python virtualią aplinką kiekvienoje Claude Code sesijoje.
Kaip veikia hook’ai?
Hook’ai konfigūruojami settings.json faile. Kiekvienas hook’as turi:
- Įvykį (event) — kada jis paleidžiamas
- Komandą (command) — ką jis vykdo
Pagrindiniai įvykiai:
| Įvykis | Kada iššaunamas |
|---|---|
SessionStart |
Sesijos pradžioje |
PreToolUse |
Prieš įrankio vykdymą |
PostToolUse |
Po įrankio vykdymo |
Notification |
Kai Claude laukia įvesties |
Konfigūracijos failai
Hook’us galima konfigūruoti dviejuose lygiuose:
| Failas | Galioja |
|---|---|
~/.claude/settings.json |
Visiems projektams |
.claude/settings.json |
Tik konkrečiam projektui |
Venv aktyvavimo hook’as
Atsidarome globalų nustatymų failą:
vim ~/.claude/settings.json
Pridedame hooks bloką:
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "if [ -f \"$CLAUDE_PROJECT_DIR/.venv/bin/activate\" ]; then echo \"source $CLAUDE_PROJECT_DIR/.venv/bin/activate\" > \"$CLAUDE_ENV_FILE\"; fi"
}
]
}
]
}
}
Kas čia vyksta?
SessionStart— hook’as paleidžiamas kiekvienai naujai sesijai.$CLAUDE_PROJECT_DIR— aplinkos kintamasis, nurodantis dabartinio projekto direktoriją.$CLAUDE_ENV_FILE— specialus failas, kurio turinys vykdomas prieš kiekvieną Bash komandą sesijoje.- Tikrinama ar egzistuoja
.venv/bin/activate— jei taip,sourcekomanda įrašoma į$CLAUDE_ENV_FILE. - Jei projektas neturi
.venv— nieko nevyksta.
Rezultatas: kiekviena Bash komanda, kurią Claude vykdo sesijoje, automatiškai naudoja projekto virtualią aplinką.
Patikrinimas
Paleisk naują Claude Code sesiją projekte su .venv:
cd ~/Work/my-python-project
claude
Sesijoje paprašyk Claude paleisti:
which python
Turėtum matyti kelią į .venv/bin/python, o ne sisteminį Python.
Šaltiniai
- Claude Code Hooks dokumentacija https://docs.anthropic.com/en/docs/claude-code/hooks