”Ändra bara utkasten, tack” är en förnuftig arbetsinstruktion. Men det är ännu inte en teknisk kontrollpunkt. En hook kan tillämpa en återkommande regel vid den punkt där en specifik åtgärd har förberetts. Därmed blir en allmän begäran ett verifierbart beslut om ett visst verktygsanrop.
I Claude Code-referensen beskrivs bland annat händelsen PreToolUse: den inträffar efter att verktygsparametrarna har skapats och innan anropet behandlas. Hooken kan returnera ett beslut. Följande exempel förklarar ett eget utkast; ingen hook-konfiguration installerades eller kördes för dem.
Vilken information finns tillgänglig vid beslutspunkten?
Vårt övningsprojekt innehåller en mapp med utkast och en referensfil bredvid den. Agenten ska bara redigera utkast. En förnuftig regel tittar därför på det specifika målet för en skrivåtgärd. Den avgör inte om hela innehållet i konversationen är pålitligt.
Gränssnittet tillhandahåller verktygsnamnet och indata. För en lämplig filbegäran kan målet fastställas utifrån dem. Ett okänt verktyg eller obegripliga indata bör utlösa ett eget tillstånd. Ett tyst fel i kontrollprogrammet får inte se ut som en framgångsrikt kontrollerad sökväg.
Ett beslut är ett strukturerat returvärde
Ett illustrativt avslagsvärde i den dokumenterade PreToolUse-strukturen ser ut så här. Motiveringen är vår egen formulering; den beskriver den lokala regeln, inte en allmän bedömning av användaren.
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "The target file is outside the drafts area."
}
}
Detta utdrag är returvärdet, inte ett komplett kontrollprogram. Det innehåller varken registreringen av hooken eller inläsningen och kontrollen av indata. Just denna uppdelning är till hjälp: regeln, den tekniska utvärderingen och gränssnittets utdata kan granskas var för sig.
Att tillhöra en sökväg är mer än ett matchande prefix
En ren jämförelse av teckensträngar kan förväxla närliggande mappar med liknande namn. Din egen regel bör därför arbeta med entydigt upplösta sökvägar och kontrollera om målet faktiskt tillhör den avsedda rotmappen. Olika avgränsare och länkar måste beaktas i den miljö som används.
own rule logic, schematic:
Input fully readable? Otherwise check status unknown.
Tool belongs to the write path being handled? Otherwise not checked.
Resolve target and permitted root unambiguously.
Target really inside the root? Otherwise deny.
Assess only the specific call being handled.
Denna skiss antyder medvetet inte ett fullständigt skydd. Särskilt externa program som själva ändrar ytterligare filer kräver andra överväganden än ett enskilt filfält. En tillåten startfil säger ännu ingenting om vilka efterföljande åtgärder ett skript utför.
Fyra prov gör räckvidden synlig
Skapa i ett slit-och-släng-projekt en tillåten fil, en skyddad referens och en närliggande mapp med liknande namn. Lägg till ogiltiga indata. Skriv för varje fall ner i förväg vilket beslut som förväntas. Titta sedan både på returvärdet och på den faktiska körningen.
Testa också ett fel i själva kontrollprogrammet. Felbeteendet beror på händelsen och konfigurationen och är därför en del av godkännandet. Ett uteblivet meddelande är inget bevis för att regeln kontrollerades framgångsrikt.
Notera också för varje prov om hooken över huvud taget nåddes. En åtgärd som tar en annan väg kan kringgå regeln utan att dess interna sökvägskontroll har fungerat felaktigt.
En hook är inte ett fullständigt skyddsramverk
PreToolUse gäller verktygsanrop. Kontext kan komma in i sessionen via andra vägar; den aktuella referensen beskriver uttryckligen begränsningar i detta avseende. En hook ersätter därför varken behörigheter eller kontroll över miljön, och den är inget allmänt skydd mot prompt injection.
Börja med en enda lokal regel och dokumentera vilka vägar den täcker och inte täcker. Den tekniska vinsten ligger i en begriplig kontrollpunkt. Om denna kontrollpunkt är korrekt konfigurerad i din version måste visas genom ett faktiskt försök med lämpliga gränssnitt.
Källor och dokumentationsstatus: 25 oktober 2026.

