Hooks och subagenter löser två olika problem. En hook är ett kommando som Claude Code kör automatiskt vid en viss händelse, till exempel efter varje filändring, så att det alltid blir gjort. En subagent är en separat Claude-assistent som tar hand om en deluppgift i ett eget sammanhang och bara lämnar tillbaka en sammanfattning. Hooks ger er kontroll, subagenter ger er avlastning.
Hooks: det som alltid ska hända
Det som står i CLAUDE.md är vägledning. Claude följer det nästan alltid, men det finns ingen garanti. En hook är annorlunda. Den körs av Claude Code själv, inte av Claude, så den körs varje gång händelsen inträffar, oavsett vad Claude tycker.
Hooks läggs i en inställningsfil, och var filen ligger avgör vem de gäller för:
.claude/settings.jsoni projektet. Den kan checkas in i git, så hela teamet får samma hooks..claude/settings.local.jsongäller bara dig i det här projektet.~/.claude/settings.jsongäller i alla dina projekt.
Varje hook kopplas till en händelse. Det finns många, men de här räcker långt:
| Händelse | När den körs |
|---|---|
PreToolUse | Innan Claude använder ett verktyg, till exempel ändrar en fil. Kan stoppa åtgärden. |
PostToolUse | Efter att verktyget har körts utan fel. Kan inte ångra något. |
SessionStart | När en session startar eller återupptas. |
Notification | När Claude Code skickar en avisering, till exempel för att den väntar på dig. |
Stop | När Claude är klar med sitt svar. |
För verktygshändelser som PreToolUse och PostToolUse styr fältet matcher vilka verktyg hooken gäller, och det skiljer på stora och små bokstäver. Edit|Write betyder att den körs när Claude ändrar eller skriver en fil.
Exempel 1: formatera koden efter varje ändring
Det vanligaste första exemplet. Efter varje filändring kör Claude Code Prettier på just den filen, så att formateringen alltid stämmer utan att någon behöver tänka på det.
Claude Code skickar information om ändringen till kommandot, och jq plockar ut sökvägen till filen. Kommandot kräver att jq är installerat. Lyckas hooken syns ingenting i konversationen, filen är bara formaterad.
Exempel 2: stoppa ändringar i en mapp
I Vad ska stå i CLAUDE.md? skrev vi regeln "Rör inte filerna i legacy/". Måste den verkligen hållas är en hook rätt verktyg. Spara ett litet skript i .claude/hooks/skydda-legacy.sh och gör det körbart med chmod +x:
Raden som gör om snedstrecken behövs på Windows. Utan den matchar sökvägen aldrig, och skriptet släpper igenom ändringen.
Koppla sedan skriptet till PreToolUse, så att det körs innan ändringen görs:
Avslutas skriptet med kod 2 stoppas ändringen, och texten skriptet skriver ut skickas till Claude som förklaring. Claude kan då välja en annan väg. En sådan spärr gäller i alla lägen, även i auto-läget som Claude Code startar i som standard.
Skriv /hooks i en session för att se vilka hooks som är inlästa och vilken händelse de hör till. Ni kan också be Claude skriva hooken åt er genom att beskriva vad ni vill ha.
Subagenter: hjälpreder med eget sammanhang
När Claude läser tjugo filer, kör en lång testsvit eller går igenom loggar fylls sessionen med text som ni sällan behöver igen. En subagent gör det jobbet i ett eget sammanhang och lämnar bara tillbaka det som spelar roll. Huvudsessionen hålls ren och fokuserad.
Claude Code har några inbyggda subagenter som används automatiskt, till exempel Explore, som söker igenom kodbasen utan att ändra något. Ni kan också skapa egna. En subagent är en Markdown-fil i .claude/agents/ i projektet, eller i ~/.claude/agents/ om den ska finnas i alla dina projekt. Överst står inställningarna, och resten av filen är instruktionen subagenten arbetar efter.
Fälten betyder följande:
nameär subagentens namn. Det är det ni använder när ni ber om den.descriptionär det Claude läser för att avgöra när subagenten ska användas. Skriv tydligt när den passar.toolsbegränsar vilka verktyg den får använda. Utelämnar ni fältet får den alla verktyg som subagenter kan använda.modelväljer modell. Medinheritanvänds samma modell som i huvudsessionen.
Claude kan välja subagenten själv när en uppgift matchar beskrivningen. Ni kan också be om den direkt, "låt granskaren titta på mina ändringar", eller skriva @agent-granskare för att vara säker på att just den körs. Checka in mappen i git, så kan hela teamet använda och förbättra samma subagenter.
Flera saker samtidigt
Subagenter kan arbeta parallellt. Ber du Claude "undersök inloggningen, kundvagnen och betalningen med var sin subagent" går tre subagenter igenom varsin del samtidigt, och Claude sammanställer sedan svaren. Det fungerar bäst när delarna inte hänger ihop.
När passar vad?
| Ni vill | Använd |
|---|---|
| Att något alltid händer, som formatering eller tester | En hook |
| Stoppa vissa ändringar helt | En hook på PreToolUse, gärna tillsammans med en deny-regel |
| Lägga ut en stor deluppgift utan att fylla sessionen | En subagent |
| En granskare eller specialist med egna instruktioner och begränsade verktyg | En subagent |
| Ge Claude en återkommande arbetsinstruktion i samma session | En skill |
| Förklara hur projektet fungerar | CLAUDE.md |
När det inte passar
Allt behöver inte automatiseras. Ett litet projekt med en utvecklare klarar sig ofta gott med en bra CLAUDE.md, och varje hook är ytterligare något som kan gå sönder.
Subagenter är fel val när du och Claude behöver prata fram och tillbaka, eller när uppgiften är en snabb, liten ändring. En vanlig subagent börjar från noll och ser inte konversationen ni har haft, så den behöver tid att sätta sig in i uppgiften. Undantaget är en fork, som får med hela konversationen.
Fallgropar att känna till
- Hooks körs med dina rättigheter. De kan läsa, ändra och radera allt ditt konto kommer åt. Läs igenom en hook innan du lägger till den, även när den kommer från ett repo du har klonat.
- En spärr på
Edit|Writestoppar inte allt. Claude kan fortfarande ändra filer via terminalkommandon, och då körs inte hooken. Lägg därför också till en deny-regel, till exempel"permissions": { "deny": ["Edit(/legacy/**)"] }i.claude/settings.json. Den gäller även kända filkommandon i terminalen, somsedochtee. Behöver ni ett skydd som gäller alla program, slå på sandlådan med/sandbox. - Ogiltig JSON stänger av hela filen. Claude Code varnar när sessionen startar, och fortsätter du hoppas hela inställningsfilen över, inte bara hooken. Kommatecken efter sista raden och kommentarer är inte tillåtna. Kontrollera med
/hooks. - Subagenter förbrukar användning. Varje subagent gör egna anrop som räknas mot samma gränser som huvudsessionen, och många subagenter som lämnar långa svar fyller ändå sessionen.
- Subagenten vet bara det den får veta. Den ser inte konversationen, bara uppdraget Claude skriver. Egna subagenter läser er CLAUDE.md, men de inbyggda Explore och Plan gör det inte. Be Claude ge den en tydlig uppgift och upprepa regler som måste följas.
- Ny mapp kräver omstart. Fanns inte mappen
.claude/agents/när sessionen startade behöver du starta om Claude Code för att den nya subagenten ska hittas.
Sammanfattning
Hooks lägger ni i .claude/settings.json för det som alltid ska hända, som att formatera efter varje ändring eller stoppa ändringar i en mapp. Subagenter lägger ni i .claude/agents/ för deluppgifter som ska göras i ett eget sammanhang, gärna parallellt. Börja med en hook och en granskare, och bygg vidare när ni ser vad som faktiskt sparar tid. Är ni nya i Claude Code, börja med Claude Code: kom igång steg för steg.