Claude Code Hooks: Kumpletong Gabay (2026)

Author Avatar
Andrew
AI Perks Team
14,261
Claude Code Hooks: Kumpletong Gabay (2026)

Buod: Ang Claude Code hooks ay mga automation script na nagpapatakbo sa mga tiyak na punto ng lifecycle sa mga session ng AI coding, na nagpapahintulot sa mga developer na magpatakbo ng mga custom command, mag-validate ng mga aksyon, mag-format ng code, magpadala ng mga notipikasyon, at magpatupad ng mga panuntunan sa proyekto. Ang mga hook na ito ay nagsasama sa daloy ng trabaho ng Claude sa pamamagitan ng mga event tulad ng SessionStart, PreToolUse, at PostToolUse, na sumusuporta sa mga pattern ng pagpapatakbo na batay sa command, batay sa HTTP, at batay sa prompt na may mga configurable timeout at pag-uugali ng exit code.

Binabago ng hook system ng Claude Code ang AI coding assistant mula sa isang nakakatulong na tool tungo sa isang ganap na automated na development environment. Karamihan sa mga developer ay hindi napagtatanto ang antas ng kontrol na magagamit sa pamamagitan ng mga hook.

Narito ang bagay bagaman—ang mga hook ay hindi lamang para sa pagpapatakbo ng mga script pagkatapos ng mga pag-edit ng file. Nagbibigay ang mga ito ng mga interception point sa buong proseso ng paggawa ng desisyon ng Claude. Bago ito magpatakbo ng isang command. Pagkatapos mabigo ang isang tool call. Kapag kailangan nito ng pahintulot. Kahit bago iproseso ang mga user prompt.

Saklaw ng gabay na ito ang lahat ng ibinibigay ng opisyal na dokumentasyon, kasama ang mga praktikal na pattern na ipinapakita ng mga diskusyon sa komunidad na talagang gumagana sa mga production environment.

Ano Talaga ang Ginagawa ng mga Claude Code Hook

Ayon sa opisyal na dokumentasyon ng Claude Code, ang mga hook ay mga user-defined shell command, HTTP endpoint, o prompt injection na nagpapatakbo sa mga tiyak na punto sa lifecycle ng Claude Code. Tumanggap sila ng structured JSON input sa pamamagitan ng stdin at kinokontrol ang daloy ng trabaho sa pamamagitan ng mga exit code o HTTP response.

Ang automation ay mas malalim kaysa sa iminumungkahi ng karamihan sa mga gabay. Maaaring ganap na harangan ng mga hook ang pagpapatupad ng tool, mag-inject ng karagdagang konteksto sa pangangatwiran ng Claude, mag-trigger ng mga panlabas na serbisyo, at magpatupad ng mga validation rule na dapat sundin ng Claude.

May tatlong pangunahing uri ng hook:

  • Command hooks: Mga shell script na nakikipag-usap sa pamamagitan ng stdout, stderr, at exit codes
  • HTTP hooks: Mga remote endpoint na tumatanggap ng mga POST request at nagbabalik ng mga JSON response
  • Prompt hooks: Mga dynamic na tagubilin na ini-inject sa konteksto ng Claude sa mga tiyak na event

Ang bawat uri ay nagsisilbi ng iba't ibang pattern ng automation. Hinahawakan ng mga Command hook ang lokal na validation at formatting. Isinasama ng mga HTTP hook ang mga panlabas na serbisyo at database. Binabago ng mga Prompt hook ang pag-uugali ng Claude nang walang mga panlabas na proseso.

Lifecycle ng Hook at Event System

Tinutukoy ng opisyal na dokumentasyon ang maraming hook event (SessionStart, UserPromptSubmit, PreToolUse, PermissionRequest, PostToolUse, PostToolUseFailure, Notification, at iba pa) na nag-aapoy sa execution flow ng Claude Code. Ang pag-unawa kung kailan nag-aapoy ang bawat isa ay tumutukoy kung anong automation ang posible.

Mga event ng Claude Code hook at ang kanilang execution flow sa isang tipikal na session
EventKailan Nag-aapoyMaaaring Harangan 
SessionStartKapag nagsisimula o nagpapatuloy ang isang sessionHindi
UserPromptSubmitKapag nagsusumite ka ng prompt, bago ito iproseso ng ClaudeOo
PreToolUseBago magpatupad ang isang tool callOo
PermissionRequestKapag lumalabas ang isang dialog ng pahintulotOo
PostToolUsePagkatapos magtagumpay ang isang tool callHindi
PostToolUseFailurePagkatapos mabigo ang isang tool callHindi
NotificationKapag nagpapadala ng notipikasyon ang Claude CodeHindi
SubmitMessageKapag nagsumite ng mensahe ang Claude sa userHindi
ContextCompactionKapag papalapit na sa mga limitasyon ang context windowHindi

Ang kakayahang humarang ay ang pinakamahalaga. Maaaring pigilan ng mga PreToolUse hook ang mga mapanganib na operasyon bago ito ipatupad. Ang exit code 1 ay humaharang sa aksyon. Ang exit code 0 ay nagpapahintulot dito. Ang exit code 2 ay nagti-trigger ng pagpapasya ng Claude na muling isaalang-alang.

Ngunit teka. Hindi mababaligtad ng mga PostToolUse hook ang mga aksyon dahil naganap na ang pagpapatupad ng tool. Ang limitasyong ito ay humuhubog kung paano binubuo ang logic ng validation. Ang mga kritikal na pagsusuri ay kabilang sa PreToolUse. Ang paglilinis at pag-format ay kabilang sa PostToolUse.

Mag-browse ng mga AI Tool Perk Habang Nagse-setup ng Claude Code

Kung nagtatrabaho ka sa mga Claude Code hook, maaari ka ring pumili ng iba pang AI tool sa iyong workflow. Ang Get AI Perks ay nangongolekta ng mga startup credit at software discount para sa AI at cloud tools sa isang lugar. Kasama sa platform ang 200+ na alok, na may mga kondisyon ng perk at gabay sa pag-claim para sa bawat isa.

Naghahanap ng mga Claude o Iba Pang AI Tool Perk?

Tingnan ang Get AI Perks upang:

  • mag-browse ng mga alok ng Claude at iba pang AI tool
  • ihambing ang mga kondisyon ng perk bago mag-apply
  • makahanap ng mga startup discount sa iyong tool stack

👉 Bisitahin ang Get AI Perks upang galugarin ang kasalukuyang mga AI software perk.

Configuration at File Structure

Ang mga hook ay tinutukoy sa .claude/settings.json file sa loob ng isang proyekto. Sinusuportahan ng configuration schema ang mga global hook at mga tool-specific matcher na nagfi-filter kung kailan nagpapatakbo ang mga hook.

Basic command hook structure:

{
  “hooks”: [
    {
      “event”: “PostToolUse”,
      “command”: “prettier –write”,
      “args”: [“${file}”]
    }
  ]
}

Ang ${file} variable ay nagpapalawak sa aktwal na path ng file mula sa input ng tool. Ayon sa opisyal na dokumentasyon, sinusuportahan ng mga hook ang mga variable expansion na ito sa mga command at args field.

Hierarchy ng Lokasyon ng Hook

Sinusuri ng Claude Code ang maraming lokasyon para sa mga depinisyon ng hook, na may malinaw na order ng priyoridad:

  1. Antas ng Proyekto: .claude/settings.json sa kasalukuyang workspace
  2. Antas ng User: ~/.claude/settings.json para sa lahat ng session
  3. Ibinibigay ng Plugin: Mga hook na naka-bundle sa mga naka-install na plugin

Ang mga hook ng proyekto ay nag-o-override ng mga hook ng user para sa parehong event. Pinapayagan nito ang mga panuntunan sa pag-format na partikular sa proyekto habang pinapanatili ang mga global notification handler.

Mga Pattern ng Matcher para sa Selective Execution

Ang sistema ng matcher ay nagfi-filter ng mga hook sa mga tiyak na tool o kondisyon. Kung walang mga matcher, nag-aapoy ang mga hook para sa bawat paglitaw ng kanilang event.

{
  “hooks”: [
    {
      “event”: “PreToolUse”,
      “matcher”: {
        “toolName”: “edit_file”,
        “pathPattern”: “src/**/*.ts”
      },
      “command”: “./scripts/validate-typescript.sh”
    }
  ]
}

Tumatanggap ang pathPattern field ng glob syntax. Ang toolName field ay tumutugma sa mga built-in na tool ng Claude tulad ng edit_file, execute_command, read_file, at create_directory.

Ipinapakita ng mga diskusyon sa komunidad na ang mga kumbinasyon ng matcher ay gumagana sa AND logic. Dapat tumugma ang lahat ng tinukoy na matcher para magpatupad ang hook.

Command Hooks: Pagsasama ng Shell Script

Nagpapatupad ang mga Command hook ng mga shell command o script na may structured JSON input. Kinakatawan nila ang pinakakaraniwang uri ng hook para sa lokal na automation.

Tinutukoy ng opisyal na dokumentasyon na ang mga command hook ay tumatanggap ng JSON sa pamamagitan ng stdin na may ganitong istraktura:

{
  “event”: “PreToolUse”,
  “toolName”: “edit_file”,
  “toolInput”: {
    “path”: “src/app.ts”,
    “content”: “…”
  },
  “sessionId”: “abc123”,
  “turnId”: “turn-456”
}Ang mga script ay nagpapasuri sa input na ito upang makagawa ng mga desisyon. Ang isang Python validation hook ay maaaring ganito:#!/usr/bin/env python3
import sys
import json

input_data = json.load(sys.stdin)
tool_input = input_data.get(‘toolInput’, {})
file_path = tool_input.get(‘path’, ”)

if file_path.startswith(‘protected/’):
    print(“Cannot edit protected files”, file=sys.stderr)
    sys.exit(1)

sys.exit(0)

Ang exit code 0 ay nagpapahintulot sa operasyon. Ang exit code 1 ay humaharang dito at ipinapakita ang mensahe sa stderr sa Claude. Ang exit code 2 ay nagti-trigger ng espesyal na pag-uugali depende sa event.

Pag-uugali ng Exit Code 2

Ayon sa opisyal na dokumentasyon ng hooks reference, ang exit code 2 ay may kahulugang espesipiko sa event (PreToolUse: humaharang at naghihikayat ng pagpapasya; UserPromptSubmit: nagbibigay ng konteksto nang hindi humaharang; PermissionRequest: humaharang sa pahintulot):

  • PreToolUse: Hinaharangan ang tool at naghihikayat sa Claude na muling isaalang-alang gamit ang mensahe sa stderr bilang konteksto
  • UserPromptSubmit: Nagbibigay ng output sa stderr bilang karagdagang konteksto nang hindi humaharang
  • PermissionRequest: Hinaharangan ang pagbibigay ng pahintulot

Lumilikha ito ng gitnang daan sa pagitan ng mahigpit na pagharang at pagpapahintulot. Tumatanggap ang Claude ng feedback tungkol sa kung bakit maaaring problema ang aksyon at maaaring ayusin ang diskarte nito.

Asynchronous Command Hooks

Ang async: true flag ay nagpapatakbo ng mga hook sa background nang hindi hinaharangan ang daloy ng trabaho ng Claude. Mahalaga ito para sa mabagal na operasyon tulad ng mga notification sa deployment o pagkolekta ng metriko.

{
  “event”: “PostToolUse”,
  “matcher”: {
    “toolName”: “execute_command”
  },
  “command”: “./scripts/log-to-analytics.sh”,
  “async”: true,
  “timeout”: 30
}

Kapag nag-aapoy ang isang async hook, sinisimulan ng Claude Code ang proseso at nagpapatuloy kaagad. Ang timeout field ay nagtatakda ng maximum na oras ng pagpapatupad sa mga segundo. Kung hindi tinukoy, ang mga async hook ay gumagamit ng default na 10 minutong timeout.

Totoong usapan: Hindi maaaring harangan ng mga async hook ang mga operasyon dahil tumatakbo ang mga ito pagkatapos magpatuloy ang Claude. Gumagana sila para sa pag-log, mga notipikasyon, at paglilinis—hindi para sa validation.

HTTP Hooks: Pagsasama ng External Service

Nagpo-POST ang mga HTTP hook ng mga JSON payload sa mga remote endpoint at nagpapasuri ng mga response para sa kontrol ng desisyon. Pinapayagan nila ang pagsasama sa mga validation service, database, at third-party tool.

Basic HTTP hook configuration:

{
  “event”: “PreToolUse”,
  “url”: “api.example.com/validate”,
  “headers”: {
    “Authorization”: “Bearer ${API_TOKEN}”
  },
  “timeout”: 5
}

Ang istraktura ng payload ay tumutugma sa input ng command hook ngunit dumarating bilang HTTP POST body. Ang response ang magdidikta ng susunod na aksyon ng Claude.

Paghawak ng HTTP Response

Ayon sa opisyal na dokumentasyon, binibigyang-kahulugan ng mga HTTP hook ang mga response batay sa status code at nilalaman ng katawan:

Status CodeEpektoPinagmulan ng Mensahe 
200Payagan ang operasyonBody ng response (opsyonal)
400Harangan ang operasyonBody ng response na ipinapakita sa Claude
500Error sa hook, payagan ang operasyonNaka-log ngunit hindi ipinapakita sa Claude
Iba paPayagan ang operasyonHindi hinaharangan ng pagkabigo ng hook ang daloy ng trabaho

Maaaring maglaman ang response body ng isang message field na nakikita ng Claude bilang konteksto. Pinapayagan nito ang mga validation service na ipaliwanag kung bakit naharang ang isang operasyon.

Interpolasyon ng Environment Variable

Sinusuportahan ng mga HTTP hook ang ${VAR} syntax sa url, headers, at iba pang string fields. Ang mga variable ay nagpapalawak mula sa environment kung saan tumatakbo ang Claude Code.

Ayon sa opisyal na dokumentasyon ng MCP, kasama sa environment variable expansion ang default fallback syntax: ${VAR:-default} ay nagpapalawak sa VAR kung naka-set, kung hindi, ginagamit ang default na halaga.

Konstrikto sa seguridad: Ayon sa GitHub issue #28044, ang mga HTTP hook ay maaari lamang ma-access ang mga environment variable na tahasang nakalista sa allowedEnvVars configuration field. Pinipigilan nito ang aksidenteng paglantad ng mga kredensyal.

Prompt Hooks: Pag-inject ng Konteksto

Nag-i-inject ang mga Prompt hook ng mga dynamic na tagubilin sa konteksto ng Claude sa mga tiyak na event. Binabago nito ang pag-uugali nang walang mga panlabas na proseso o API call.

{
  “event”: “SessionStart”,
  “prompt”: “Nagtatrabaho ka sa isang TypeScript project. Palaging gumamit ng strict null checks at mas gusto ang async/await kaysa sa mga promise.”
}

Ang in-inject na teksto ay nagiging bahagi ng mga system instruction ng Claude para sa session na iyon. Maaari ding gumamit ng mga template variable ang mga prompt hook na nagpapalawak batay sa data ng event.

Dynamic Prompt Generation

Ayon sa opisyal na dokumentasyon, sinusuportahan ng mga prompt hook ang mga command field na bumubuo ng mga dynamic na prompt:

{
  “event”: “ContextCompaction”,
  “type”: “prompt”,
  “command”: “./scripts/generate-context-summary.sh”
}

Tumatanggap ang command ng standard JSON input sa pamamagitan ng stdin at naglalabas ng prompt text sa stdout. Pinapayagan nito ang pagbuo ng context-aware instruction batay sa estado ng proyekto.

Agent-Based Hooks

Tinutukoy ng mga Agent hook ang isang subagent na humahawak sa event sa halip na direktang prompt injection. Tumatanggap ang subagent ng konteksto tungkol sa event at maaaring magsagawa ng multi-step reasoning.

{
  “event”: “PostToolUseFailure”,
  “agent”: “debugger”,
  “agentPrompt”: “Nabigo ang isang tool call. Suriin ang error at magmungkahi ng mga pag-aayos.”
}

Ang pinangalanang subagent ay dapat na tukuyin sa configuration ng proyekto. Pinapayagan ng mga Agent hook ang kumplikadong logic ng desisyon na hindi maibibigay ng simpleng prompt injection.

Mga Praktikal na Pattern ng Hook

Ang mga diskusyon sa komunidad at mga opisyal na halimbawa ay nagpapakita ng mga tiyak na pattern ng automation na gumagana nang maaasahan sa production.

Awtomatikong Pag-format ng Code Pagkatapos ng mga Edits

Ang pinakakaraniwang pattern ay awtomatikong nagfo-format ng code pagkatapos mag-edit ng mga file ang Claude:

{
  “event”: “PostToolUse”,
  “matcher”: {
    “toolName”: “edit_file”,
    “pathPattern”: “**/*.{js,ts,jsx,tsx}”
  },
  “command”: “prettier”,
  “args”: [“–write”, “${toolInput.path}”]
}

Ang ${toolInput.path} variable ay nagpapalawak sa path ng na-edit na file. Tinitiyak ng PostToolUse na ang pag-format ay nangyayari pagkatapos ng matagumpay na mga pag-edit ngunit hindi hinaharangan ang daloy ng trabaho ng Claude.

Harangan ang Pagbabago ng Protektadong File

Nagpapatupad ang mga PreToolUse hook ng mga panuntunan sa proteksyon ng file:

{
  “event”: “PreToolUse”,
  “matcher”: {
    “toolName”: “edit_file”
  },
  “command”: “./scripts/check-protected.sh”
}

Vini-validate ng script ang target na path laban sa mga protektadong pattern at nag-e-exit na may code 1 upang harangan ang mga ipinagbabawal na pag-edit.

Makatanggap ng Paunawa Kapag Kailangan ng Claude ng Input

Ayon sa opisyal na workflow guide, ang mga Notification hook ay maaaring mag-trigger ng mga desktop alert o magpadala ng mga mensahe sa mga panlabas na serbisyo:

{
  “event”: “Notification”,
  “command”: “osascript”,
  “args”: [“-e”, “display notification \”${message}\” with title \”Claude Code\””]
}

Ito ay nag-aapoy sa tuwing magpapadala ang Claude Code ng notipikasyon, kabilang ang kapag naghihintay para sa input ng user o pagkatapos ng pagkumpleto ng gawain.

Muling I-inject ang Konteksto Pagkatapos ng Compaction

Ang mga ContextCompaction hook ay nagbabalik ng mahalagang konteksto kapag napuno ang conversation window:

{
  “event”: “ContextCompaction”,
  “type”: “prompt”,
  “command”: “cat .claude/critical-context.md”
}

Ang output ng command ay ini-inject pabalik sa konteksto ng Claude pagkatapos alisin ng compaction ang mga lumang mensahe. Pinipigilan nito ang pagkawala ng mga kritikal na tagubilin na partikular sa proyekto.

Audit ng mga Pagbabago sa Configuration

Subaybayan kung kailan binabago ng Claude ang mga configuration file:

{
  “event”: “PostToolUse”,
  “matcher”: {
    “toolName”: “edit_file”,
    “pathPattern”: “**/{package.json,.env,*.config.*}”
  },
  “command”: “git”,
  “args”: [“add”, “${toolInput.path}”],
  “async”: true
}

Pinipigilan ng asynchronous execution ang pagharang sa Claude habang natatapos ang mga git operation. Lumilikha ito ng audit trail ng mga pagbabago sa configuration nang walang manual staging.

JSON Output at Kontrol ng Desisyon

Maaaring maglabas ang mga Command hook ng structured JSON upang magbigay ng detalyadong feedback na higit pa sa mga simpleng exit code. Ayon sa opisyal na reference, pinapayagan ng JSON output ang mga multi-field na response na binibigyang-kahulugan ng Claude para sa paggawa ng desisyon.

{
  “allowed”: false,
  “message”: “Ang file na ito ay protektado ng patakaran ng team”,
  “suggestion”: “Gumawa ng bagong file sa src/features/ sa halip”
}

Ang allowed field ay kumokontrol kung magpapatuloy ang operasyon. Ang mensahe ay lumalabas sa Claude bilang konteksto. Ang suggestion field ay nagbibigay ng alternatibong mga paraan.

Upang maglabas ng JSON ang mga hook, dapat silang:

  1. Magsulat ng valid JSON sa stdout
  2. Mag-exit na may code 0 (para sa pinahintulutan) o 1 (para sa hinaharang)
  3. Maglaman ng hindi bababa sa allowed boolean field

Binibigyang-kahulugan ng Claude Code ang JSON at ginagamit ito upang pagyamanin ang feedback loop. Ang mga exit code ay nagdidikta pa rin ng pangunahing desisyon, ngunit ang JSON ay nagbibigay ng mas mayamang konteksto.

Reference ng mga Input Field ng Hook

Lahat ng hook ay tumatanggap ng JSON object sa pamamagitan ng stdin na may mga karaniwang field kasama ang event-specific na data. Ang pag-unawa sa kumpletong schema ay nagbibigay-daan para sa mas sopistikadong logic ng hook.

JSON schema ng input ng hook na nagpapakita ng mga karaniwang field at event-specific extension

Mga Karaniwang Input Field

Lahat ng hook ay tumatanggap ng mga base field na ito:

  • event: Ang pangalan ng hook event (hal., “PreToolUse”)
  • sessionId: Natatanging identifier para sa kasalukuyang Claude session
  • turnId: Identifier para sa kasalukuyang conversation turn
  • timestamp: ISO 8601 timestamp kung kailan nag-aapoy ang event

Mga Field ng Tool Event

Kasama sa mga PreToolUse, PostToolUse, at PostToolUseFailure event ang:

  • toolName: Pangalan ng tool na tinatawag (edit_file, execute_command, atbp.)
  • toolInput: Object na naglalaman ng mga parameter ng input ng tool
  • toolResponse: Output data ng tool (PostToolUse lamang)
  • error: Mga detalye ng error kasama ang mensahe at code (PostToolUseFailure lamang)

Ang toolInput structure ay nag-iiba bawat tool. Para sa edit_file kasama nito ang path at content. Para sa execute_command kasama nito ang command at args.

Mga Field ng Permission Event

Kasama sa mga PermissionRequest event ang:

  • permissionType: Uri ng pahintulot na hiniling (file_write, command_execute, atbp.)
  • requestedAction: Tiyak na aksyon na nangangailangan ng pahintulot
  • resourcePath: Path ng file o identifier ng resource na apektado

Mga Claude Code MCP Tool Hook

Ayon sa opisyal na hooks reference, ang mga hook ay maaaring tumugma sa Model Context Protocol (MCP) tools gamit ang mcpTool matcher field. Pinapayagan nito ang execution ng hook kapag gumagamit ang Claude ng mga external tool na ibinigay ng mga MCP server.

{
  “event”: “PreToolUse”,
  “matcher”: {
    “mcpTool”: “database/query”
  },
  “command”: “./scripts/validate-sql.sh”
}

Ang mcpTool value ay tumutugma sa pangalan ng tool sa format server-name/tool-name. Pinapayagan nito ang validation logic para sa mga database query, API call, o iba pang panlabas na operasyon.

Ipinapakita ng mga feature request sa GitHub ang lumalagong interes sa mas malalim na MCP integration, kabilang ang mga hook na maaaring sumuri sa mga MCP server notification at tumugon sa mga panlabas na event.

Mga Pagsasaalang-alang sa Seguridad

Nagpapatupad ang mga hook na may parehong pahintulot gaya ng Claude Code mismo. Lumilikha ito ng mga implikasyon sa seguridad para sa mga multi-user environment at mga shared configuration.

Sandbox ng Command Execution

Ayon sa GitHub issue #28044, ang mga HTTP hook ay dumadaan sa isang sandbox proxy na naghihigpit sa network access at nagfi-filter ng mga environment variable. Ang mga command hook ay walang ganoong mga paghihigpit—nagpapatakbo sila na may buong shell access.

Inirerekomenda ng dokumentasyon ang mga gawaing ito:

  • Huwag kailanman mag-imbak ng mga kredensyal sa mga command ng hook
  • Gumamit ng mga environment variable para sa sensitibong data
  • I-validate ang lahat ng input mula sa ${…} expansion
  • Magpatupad ng mga limitasyon sa timeout para sa mga panlabas na serbisyo
  • Gumamit ng mga async hook para sa mga hindi kritikal na operasyon upang maiwasan ang pagharang sa mga pagkabigo

Isolasyon ng Hook Execution

Ang mga hook sa antas ng user sa ~/.claude/settings.json ay nalalapat sa lahat ng proyekto. Lumilikha ito ng mga panganib kapag nagtatrabaho sa iba't ibang antas ng tiwala. Ang mga hook sa antas ng proyekto ay nag-o-override ng mga hook ng user ngunit hindi ito ganap na maalis.

Ipinapakita ng /hooks menu sa Claude Code ang lahat ng aktibong hook para sa kasalukuyang session. Ang pagrepaso sa listahang ito bago magtrabaho sa mga sensitibong proyekto ay nakakatulong sa pagtukoy ng mga potensyal na alalahanin sa seguridad.

Pag-debug at Pag-troubleshoot

Ang mga pagkabigo sa hook ay hindi palaging malinaw na lumalabas sa conversation ng Claude. Ang opisyal na dokumentasyon ay nagbibigay ng ilang pamamaraan sa pag-debug.

Mga Log ng Hook Execution

Nagla-log ang Claude Code ng hook execution sa session debug output. Ayon sa troubleshooting guide, ang pagpapagana ng debug logging ay nagpapakita ng:

  • Aling mga hook ang tumugma para sa bawat event
  • Ang JSON input na ipinadala sa bawat hook
  • Stdout at stderr output mula sa mga hook process
  • Exit codes at execution time
  • HTTP response codes at bodies para sa mga HTTP hook

Paganahin ang debug logging sa pamamagitan ng pag-set ng CLAUDE_DEBUG=1 sa environment bago simulan ang Claude Code.

Pagsusubok ng mga Hook Nang Independiyente

Maaaring subukan ang mga command hook sa labas ng Claude Code sa pamamagitan ng manu-manong pagbuo ng JSON input:

echo ‘{“event”:”PreToolUse”,”toolName”:”edit_file”,”toolInput”:{“path”:”test.txt”}}’ | ./scripts/my-hook.sh

Vini-validate nito ang logic ng hook nang hindi nagti-trigger ng aktwal na mga operasyon ng Claude. Ang exit code at stdout/stderr output ay dapat tumugma sa inaasahang pag-uugali.

Mga Karaniwang Pagkabigo sa Hook

Natukoy ng mga diskusyon sa komunidad ang mga madalas na isyu na ito:

  • Timeout errors: Ang default na 10 minutong timeout ay masyadong maikli para sa mabagal na operasyon—dagdagan gamit ang timeout field
  • Path expansion failures: Ang mga variable tulad ng ${file} ay hindi natukoy para sa mga event na walang kasamang file context
  • Permission errors: Ang mga hook script ay kulang sa execute permissions—patakbuhin ang chmod +x script.sh
  • JSON parse errors: Malformed JSON output mula sa mga hook—i-validate gamit ang jq bago ibalik
  • Hindi available ang environment variables: Hindi ipinapasa ang mga variable sa hook process—tingnan ang environment ng Claude Code

Mga Implikasyon sa Performance ng Hook

Hinaharangan ng mga synchronous hook ang workflow ng Claude hanggang sa pagkumpleto. Pinipigilan ng default na 10 minutong timeout ang walang hanggang pagka-hang, ngunit kahit ang maiikling pagkaantala ay naipon sa maraming operasyon.

Ang mga practitioner ay nag-uulat na ang mga simpleng validation hook ay may hindi gaanong epekto sa performance. Ang mga file formatting hook ay nagdudulot ng kapansin-pansin ngunit katanggap-tanggap na epekto sa performance. Ang mga panlabas na API call ay maaaring lumikha ng alitan sa workflow. Ang mga mabigat na operasyon sa pagkokompyut ay nakikinabang sa asynchronous execution.

Hook Batching

Maraming hook ang maaaring tumugma sa parehong event. Ayon sa reference documentation, ang mga hook ay nagpapatupad nang sunud-sunod sa order ng depinisyon. Kung ang anumang hook ay humaharang sa operasyon, hindi magpapatupad ang mga natitirang hook.

Mahalaga ito para sa performance. Limang synchronous hook sa 200ms bawat isa ay nagdaragdag ng isang segundo bawat event. Ang pagsasama-sama ng mga kaugnay na validation sa isang hook ay nagbabawas ng overhead.

Mga Advanced na Pattern

Higit pa sa basic automation, pinapayagan ng mga hook ang sopistikadong pag-customize ng workflow.

Mga Stateful Hook Chain

Maaaring panatilihin ng mga hook ang estado sa pagitan ng mga execution gamit ang mga file o database. Maaaring itala ng isang PostToolUse hook ang mga matagumpay na operasyon na mamaya ay ibi-validate ng isang PreToolUse hook laban sa:

#!/bin/bash
# Itala ang mga matagumpay na edits
echo “${toolInput.path}” >> .claude/edit-history.txt

Maaaring suriin ng isang kasamang PreToolUse hook ang kasaysayang ito upang pigilan ang paulit-ulit na mga operasyon o ipatupad ang mga constraint sa pag-order.

Conditional Hook Activation

Kinokontrol ng mga environment variable ang pag-uugali ng hook sa runtime. Ang pag-set ng CLAUDE_SKIP_HOOKS=1 ay nag-a-disable ng mga hook para sa mga emergency situation.

Maaaring suriin ng mga hook mismo ang mga environment flag:

#!/bin/bash
if [ “$STRICT_MODE” = “1” ]; then
  # Magpatupad ng mahigpit na validation
  exit 1
fi
exit 0

Pinapayagan nito ang development mode kumpara sa production mode na pag-uugali nang walang mga pagbabago sa configuration.

Multi-Stage Validation

Maaaring magpatupad ang mga PreToolUse hook ng multi-tier validation kung saan pinapayagan ng exit code 2 ang Claude na magpatuloy na may mga babala:

  1. Hard failures (exit 1): Harangan ang mga mapanganib na operasyon
  2. Soft warnings (exit 2): Babalaan ang Claude na muling isaalang-alang
  3. Pass with context (exit 0 + JSON): Magbigay ng karagdagang impormasyon

Lumilikha ito ng validation spectrum na mas nuanced kaysa sa binary allow/deny.

Pagsasama sa CI/CD

Ayon sa opisyal na dokumentasyon ng platform integration, tumatakbo ang Claude Code sa mga CI/CD environment para sa automated code review at issue triage. Pinalalawak ng mga hook ang automation na ito.

Maaaring tumukoy ang mga GitHub Actions workflow ng mga hook na nagpapatupad ng mga panuntunan ng team sa mga automated session:

– name: Run Claude Code with strict hooks
  env:
    STRICT_MODE: 1
  run: |
    claude “Review this PR and suggest improvements”

Ang STRICT_MODE flag ay nagpapagana ng conditional validation logic sa mga hook script. Tinitiyak nito na ang mga automated session ay sumusunod sa mas mahigpit na mga panuntunan kaysa sa interactive development.

Pagbuo ng Audit Trail

Ang mga PostToolUse hook sa mga CI environment ay lumilikha ng detalyadong audit log ng lahat ng operasyon ng Claude:

{
  “event”: “PostToolUse”,
  “command”: “./scripts/log-to-database.sh”,
  “async”: true
}

Ang background logging ay hindi nakakaapekto sa performance ngunit nagbibigay ng kumpletong kasaysayan ng operasyon para sa pagsunod at pag-debug.

Ang /hooks Menu

Nagbibigay ang Claude Code ng /hooks command na nagpapakita ng lahat ng aktibong hook para sa kasalukuyang session. Ayon sa opisyal na dokumentasyon, ipinapakita ng menu na ito:

  • Uri ng hook event
  • Mga pattern ng matcher
  • Command o URL endpoint
  • Kung ang hook ay tumatakbo nang async
  • Pinagmulan ng configuration (proyekto, user, o plugin)

Ang pagpili ng hook ay nagpapakita ng kumpletong configuration nito at nagpapahintulot sa pansamantalang pag-disable para sa kasalukuyang session.

I-disable o Tanggalin ang mga Hook

Maaaring i-disable ang mga hook nang hindi inaalis ang configuration sa pamamagitan ng pagdaragdag ng “enabled”: false sa depinisyon ng hook. Pinapanatili nito ang configuration habang pinipigilan ang execution.

Upang permanenteng alisin ang hook, burahin ang entry nito mula sa naaangkop na settings.json file. Ang mga pagbabago ay magkakabisa sa susunod na pag-restart ng session o kapag nagpapatakbo ng /reload.

Mga Hook sa Skills at Agents

Ayon sa opisyal na dokumentasyon, ang mga hook na tinukoy sa loob ng mga configuration ng skill o subagent ay nalalapat lamang kapag nagpapatupad ang skill o agent na iyon. Pinapayagan nito ang espesyal na automation para sa mga tiyak na workflow.

Maaaring isama sa isang debugging subagent ang mga hook na nagla-log ng lahat ng tool call:

{
  “name”: “debugger”,
  “hooks”: [
    {
      “event”: “PostToolUse”,
      “command”: “./scripts/log-debug.sh”,
      “async”: true
    }
  ]
}

Ang mga hook na ito ay nag-aapoy lamang sa panahon ng mga debugger agent session, hindi sa panahon ng normal na operasyon ng Claude Code.

Reference ng mga Script sa Pamamagitan ng Path

Sinusuportahan ng mga hook command ang parehong relative at absolute paths. Ang mga relative path ay nagre-resolve mula sa project root kung saan tumatakbo ang Claude Code.

Pinakamahusay na mga kasanayan mula sa mga diskusyon sa komunidad:

  • Mag-imbak ng mga hook script sa .claude/hooks/ directory
  • Gumamit ng mga descriptive na pangalan: validate-typescript.sh hindi hook1.sh
  • Gawing executable ang mga script: chmod +x .claude/hooks/*.sh
  • Isama ang shebang line: #!/usr/bin/env bash o #!/usr/bin/env python3
  • Magdagdag ng error handling gamit ang set -e sa bash scripts

Mga Kakayahan sa Hinaharap ng Hook

Ipinapakita ng mga feature request sa GitHub ang mga planado at hiniling na pagpapahusay sa hook:

  • Inline script hooks: Tukuyin ang logic ng hook nang direkta sa settings.json nang walang mga external file
  • MCP tool integration: Tawagin ang mga MCP server tool mula sa mga hook sa halip na mga shell command
  • Multi-agent collaboration: Mga hook na nakikipag-ugnayan sa pagitan ng mga Claude instance sa iba't ibang machine
  • Pinahusay na mga type: TypeScript type definition para sa mga hook input/output schema

Ayon sa GitHub issue #4274, ang kahilingan para sa integrated hook types (MCP tool, inline script, API call) ay naglalayong pasimplehin ang configuration at pagandahin ang karanasan ng developer.

Mga Madalas Itanong

Maaari bang pigilan ng mga hook ang Claude na magpatupad ng mga mapanganib na command?

Oo. Maaaring harangan ng mga PreToolUse hook ang anumang tool execution sa pamamagitan ng pag-exit na may code 1. Kasama dito ang mga pag-edit ng file, pagpapatupad ng command, at mga MCP tool call. Tumatanggap ang hook ng kumpletong tool input at maaaring mag-validate laban sa anumang pamantayan bago payagan ang operasyon.

Paano ko idi-debug ang isang hook na hindi gumagana?

Paganahin ang debug logging gamit ang CLAUDE_DEBUG=1 bago simulan ang Claude Code. Suriin ang mga log ng session para sa mga detalye ng hook execution kasama ang kung aling mga hook ang tumugma, ang JSON input na ipinadala, stdout/stderr output, at mga exit code. Subukan ang mga hook nang independiyente sa pamamagitan ng pagpapadala ng sample JSON sa hook script.

Gumagana ba ang mga hook sa lahat ng platform ng Claude Code?

Gumagana ang mga hook sa CLI, desktop app, at VS Code extension. Ayon sa opisyal na dokumentasyon, nagpapatupad ang mga hook kung saan man tumatakbo ang Claude Code na may access sa file system. Ang Claude na nakabatay sa browser at mga mobile app ay hindi sumusuporta sa mga hook dahil sa mga constraint ng sandboxing.

Maaari bang baguhin ng mga hook ang mga response o pag-uugali ng Claude?

Nag-i-inject ang mga Prompt hook ng mga tagubilin na nakakaimpluwensya sa pag-uugali ng Claude. Ang mga Agent hook ay nagde-delegate ng event handling sa mga espesyal na subagent. Gayunpaman, hindi direktang mababago ng mga hook ang nabuong teksto o proseso ng pangangatwiran ng Claude—gumagana sila sa pamamagitan ng pagbibigay ng konteksto at pagharang sa mga operasyon.

Ano ang pagkakaiba sa pagitan ng async at sync hooks?

Hinaharangan ng mga Synchronous hook ang workflow ng Claude hanggang sa pagkumpleto o timeout. Ang mga asynchronous hook ay tumatakbo sa background nang hindi hinaharangan. Maaaring pigilan ng mga Sync hook ang mga operasyon sa pamamagitan ng mga exit code. Hindi maaaring harangan ng mga Async hook dahil nagpapatuloy ang Claude bago matapos ang hook. Gumamit ng async para sa pag-log at mga notipikasyon, sync para sa validation.

Paano ako magbabahagi ng mga hook sa isang team?

I-commit ang .claude/settings.json file sa version control. Ang mga hook sa antas ng proyekto ay nalalapat sa lahat ng miyembro ng team na nag-clone ng repository. Para sa mga patakaran sa buong organisasyon, ang mga team ay maaaring magpanatili ng isang shared user-level settings file na kinokopya ng mga miyembro sa ~/.claude/settings.json.

Maaari bang tumawag sa mga internal API sa likod ng mga firewall ang mga HTTP hook?

Oo, kung tumatakbo ang Claude Code sa isang environment na may network access sa mga API na iyon. Gumagawa ang mga HTTP hook ng mga standard na POST request mula sa machine na nagpapatakbo ng Claude Code. Normal na nalalapat ang mga corporate firewall at VPN. Ang sandbox proxy na binanggit sa dokumentasyon ay kumokontrol sa exposure ng environment variable, hindi sa network routing.

Nagpapataas ba ang mga hook sa paggamit ng token ng Claude Code?

Nag-i-inject ang mga Prompt hook ng teksto sa konteksto ng Claude, na kumokonsumo ng mga token. Ang mga Command at HTTP hook ay hindi direktang nakakaapekto sa paggamit ng token, ngunit ang kanilang output (mga error message, mga mungkahi) ay nagiging bahagi ng conversation context. Ang exit code 2 na may mga paliwanag na mensahe ay nagdaragdag ng higit na konteksto kaysa sa exit code 1 na may simpleng pagharang.

Konklusyon

Binabago ng mga Claude Code hook ang AI assistant mula sa isang makapangyarihang tool tungo sa isang ganap na automated na development platform. Ang event system ay nagbibigay ng mga interception point sa buong workflow ng Claude—mula sa session initialization hanggang sa context compaction.

Hinahawakan ng mga Command hook ang lokal na validation at formatting. Isinasama ng mga HTTP hook ang mga panlabas na serbisyo at database. Binabago ng mga Prompt hook ang pag-uugali sa pamamagitan ng pag-inject ng konteksto. Sama-sama, pinapayagan nila ang mga pattern ng automation na nagpapatupad ng mga panuntunan ng team, nagpapanatili ng kalidad ng code, at nagsasama sa umiiral na development infrastructure.

Ang sistema ng matcher ay nagfi-filter ng mga hook sa mga tiyak na tool at file pattern. Kinokontrol ng mga exit code at JSON output ang daloy ng desisyon. Pinipigilan ng asynchronous execution ang pagharang sa mga mabagal na operasyon. Sinusuportahan ng kumpletong configuration schema ang lahat mula sa simpleng auto-formatting hanggang sa kumplikadong multi-stage validation.

Magsimula sa mga basic PostToolUse hook para sa code formatting. Magdagdag ng PreToolUse validation habang lumilitaw ang mga patakaran. Mag-eksperimento sa mga prompt hook para sa pagbabago ng pag-uugali. Bumuo ng mga HTTP integration para sa enforcement sa buong team.

Tingnan ang opisyal na dokumentasyon ng Claude Code para sa kumpletong reference ng mga hook at updated na configuration schema habang naglalabas ng mga bagong kakayahan.

AI Perks

Nagbibigay ang AI Perks ng access sa mga eksklusibong diskwento, kredito, at deal sa mga AI tool, cloud service, at API upang matulungan ang mga startup at developer na makatipid.

AI Perks Cards

This content is for informational purposes only and may contain inaccuracies. Credit programs, amounts, and eligibility requirements change frequently. Always verify details directly with the provider.