最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文詳解Claude Code中Hooks的使用

  發(fā)布時(shí)間:2026-06-02 15:21:27   作者:AI 早咖啡   我要評(píng)論
Claude Code 每次調(diào)用工具、等待輸入、結(jié)束會(huì)話,都會(huì)觸發(fā)對(duì)應(yīng)的Hook生命周期事件,Hook 腳本除了做判斷和記錄,還可以把事件轉(zhuǎn)發(fā)到本地 socket,讓一個(gè)常駐進(jìn)程處理所有狀態(tài)變化,下面小編就和大家詳細(xì)介紹一下吧

Claude Code 每次調(diào)用工具、等待輸入、結(jié)束會(huì)話,都會(huì)觸發(fā)對(duì)應(yīng)的生命周期事件。你可以在這些事件上掛腳本,拿到上下文 JSON,決定 Claude 要不要繼續(xù)執(zhí)行。

Hooks 是什么

Claude 要調(diào)用工具時(shí),Claude Code 把當(dāng)時(shí)的狀態(tài)打包成 JSON,通過(guò) stdin 傳給你配置的腳本,等腳本退出再繼續(xù)。

整個(gè)流程:

有哪些 Hook 事件

事件觸發(fā)時(shí)機(jī)能否阻斷
SessionStart會(huì)話開(kāi)始
UserPromptSubmit用戶提交了一條消息
PreToolUseClaude 調(diào)用工具之前
PostToolUse工具調(diào)用完成之后
NotificationClaude 需要提醒用戶時(shí)
StopClaude 完成一輪回復(fù),等待用戶
SessionEnd會(huì)話結(jié)束

七個(gè)事件覆蓋一次完整會(huì)話的全過(guò)程:

PreToolUse 是最關(guān)鍵的事件。退出碼決定行為:0 繼續(xù)執(zhí)行,2 阻斷工具調(diào)用,其他非 0 記錄錯(cuò)誤但不阻斷。

怎么配置

打開(kāi) ~/.claude/settings.json,加入 hooks 字段:

{
??"hooks": {
? ??"PreToolUse": [
? ? ? {
? ? ? ??"hooks": [
? ? ? ? ? {
? ? ? ? ? ??"type":?"command",
? ? ? ? ? ??"command":?"python3 /path/to/my_hook.py"
? ? ? ? ? }
? ? ? ? ]
? ? ? }
? ? ],
? ??"Notification": [
? ? ? {
? ? ? ??"hooks": [
? ? ? ? ? {
? ? ? ? ? ??"type":?"command",
? ? ? ? ? ??"command":?"python3 /path/to/notify.py"
? ? ? ? ? }
? ? ? ? ]
? ? ? }
? ? ]
? }
}

每個(gè)事件可以配多個(gè)腳本,按順序執(zhí)行。腳本可以是任何可執(zhí)行文件,Python、Shell、Node 都行。

腳本收到什么數(shù)據(jù)

Claude Code 把 JSON 寫(xiě)入腳本的 stdin,不同事件的字段不同。

PreToolUse 示例:

{
??"session_id":?"abc-123",
"hook_event_name":?"PreToolUse",
"tool_name":?"Bash",
"tool_input": {
? ??"command":?"rm -rf /tmp/test"
? },
"cwd":?"/Users/you/myproject",
"tty":?"/dev/ttys001"
}

Notification 示例:

{
??"session_id":?"abc-123",
??"hook_event_name":?"Notification",
??"message":?"任務(wù)完成,等待你的下一步指令",
??"cwd":?"/Users/you/myproject"
}

Stop 示例:

{
??"session_id":?"abc-123",
??"hook_event_name":?"Stop",
??"cwd":?"/Users/you/myproject"
}

腳本還能通過(guò) stdout 影響 Claude

stdin 是 Claude Code 傳給腳本的數(shù)據(jù),stdout 方向相反:腳本輸出 JSON 到 stdout,Claude Code 讀取并按內(nèi)容決策。

PreToolUse:用 stdout 阻斷或放行

腳本可以在 stdout 輸出一個(gè) JSON 對(duì)象,decision 字段控制行為:

import?json, sys

data = json.load(sys.stdin)

if?data.get("tool_name") ==?"Bash":
? ? command = data.get("tool_input", {}).get("command",?"")
? ??if"rm -rf"in?command:
? ? ? ??# 通過(guò) stdout JSON 阻斷
? ? ? ? print(json.dumps({
? ? ? ? ? ??"decision":?"block",
? ? ? ? ? ??"reason":?"禁止執(zhí)行 rm -rf"
? ? ? ? }))
? ? ? ? sys.exit(0) ?# stdout 已表達(dá)意圖,退出碼可以是 0

sys.exit(0)

decision 值為 "block" 時(shí)阻斷,"approve" 時(shí)強(qiáng)制放行(跳過(guò)權(quán)限提示)。

向 Claude 注入上下文

stdout JSON 還支持 additionalContext 字段,內(nèi)容會(huì)直接注入到 Claude 的上下文里,Claude 讀完再?zèng)Q定下一步。適合在工具調(diào)用前后補(bǔ)充環(huán)境信息:

print(json.dumps({
? ??"additionalContext":?"當(dāng)前磁盤(pán)剩余空間 2GB,請(qǐng)謹(jǐn)慎執(zhí)行大文件操作"
}))
sys.exit(0)

動(dòng)手寫(xiě)第一個(gè) Hook

示例 1:記錄 Claude 調(diào)用過(guò)的所有命令

#!/usr/bin/env python3
import?json
import?sys
from?datetime?import?datetime

data = json.load(sys.stdin)

if?data.get("tool_name") ==?"Bash":
? ? command = data.get("tool_input", {}).get("command",?"")
? ??with?open("/tmp/claude_commands.log",?"a")?as?f:
? ? ? ? f.write(f"{datetime.now()}?|?{command}\n")

sys.exit(0) ?# 退出碼 0,Claude 繼續(xù)執(zhí)行

掛在 PostToolUse 上,Claude 每跑完一條 Bash 命令,日志文件就多一行。

示例 2:阻止刪除操作

#!/usr/bin/env python3
import?json
import?sys

data = json.load(sys.stdin)

if?data.get("tool_name") ==?"Bash":
? ? command = data.get("tool_input", {}).get("command",?"")
? ??if?"rm -rf"?in?command:
? ? ? ? print("攔截:禁止執(zhí)行 rm -rf", file=sys.stderr)
? ? ? ? sys.exit(2) ?# 退出碼 2,Claude 放棄這次工具調(diào)用

sys.exit(0)

退出碼 2 是 PreToolUse 的阻斷信號(hào)。Claude 讀到 stderr,把它當(dāng)作拒絕原因展示給用戶,然后停止這次工具調(diào)用。退出碼 1 或其他非 0 值只會(huì)記錄錯(cuò)誤,Claude 仍會(huì)繼續(xù)執(zhí)行。

示例 3:任務(wù)完成時(shí)發(fā)系統(tǒng)通知

#!/usr/bin/env python3
import?json
import?sys
import?subprocess

data = json.load(sys.stdin)

subprocess.run([
? ??"osascript",?"-e",
? ??f'display notification "Claude 完成了,去看看吧" with title "Claude Code"'
])

sys.exit(0)

把這個(gè)腳本掛在 Stop 或 Notification 上。Claude 停下來(lái)等你回復(fù)時(shí),Mac 右上角就會(huì)彈出通知。

示例 4:針對(duì)特定工具設(shè)置 matcher

如果只想監(jiān)聽(tīng)某類工具,加 matcher 字段:

{
??"hooks": {
? ??"PreToolUse": [
? ? ? {
? ? ? ??"matcher":?"Bash",
? ? ? ??"hooks": [
? ? ? ? ? {
? ? ? ? ? ??"type":?"command",
? ? ? ? ? ??"command":?"python3 /path/to/bash_guard.py"
? ? ? ? ? }
? ? ? ? ]
? ? ? }
? ? ]
? }
}

加了 matcher,只有 Bash 工具觸發(fā)時(shí)腳本才跑,Edit、Read 等其他工具不走這里。

腳本拿到數(shù)據(jù)后能做什么

寫(xiě)日志:把 Claude 的所有工具調(diào)用記下來(lái),方便復(fù)盤(pán)

發(fā)通知:Claude 等待輸入時(shí),通過(guò)系統(tǒng)通知或微信、釘釘提醒你

阻斷危險(xiǎn)操作:檢測(cè)到高風(fēng)險(xiǎn)命令,退出碼 2 阻止執(zhí)行

轉(zhuǎn)發(fā)事件:把 JSON 發(fā)到本地 socket,驅(qū)動(dòng)自定義 UI 或狀態(tài)面板

記錄耗時(shí):PreToolUse 記開(kāi)始時(shí)間,PostToolUse 記結(jié)束時(shí)間,統(tǒng)計(jì)每類工具的耗時(shí)分布

進(jìn)階:用 Hooks 驅(qū)動(dòng)自定義 UI

Hook 腳本除了做判斷和記錄,還可以把事件轉(zhuǎn)發(fā)到本地 socket,讓一個(gè)常駐進(jìn)程處理所有狀態(tài)變化。

轉(zhuǎn)發(fā)腳本只需幾行:

#!/usr/bin/env python3
import?json, socket, sys
data = sys.stdin.read()
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect("/tmp/my_app.sock")
sock.sendall((data +?"\n").encode())
response = sock.recv(1024).decode().strip()
sock.close()
# 常駐進(jìn)程返回 "block" 時(shí)阻斷工具調(diào)用(必須用退出碼 2)
sys.exit(2if?response ==?"block"else0)

常駐進(jìn)程在 socket 上監(jiān)聽(tīng),收到 PreToolUse 彈出確認(rèn)窗口,用戶點(diǎn)通過(guò)就回 ok,點(diǎn)拒絕就回 block,hook 腳本根據(jù)返回值決定退出碼。這樣就能在 Claude 執(zhí)行過(guò)程中插入任意交互界面,不限于終端。

上手步驟

  1. 創(chuàng)建你的腳本文件,給執(zhí)行權(quán)限:chmod +x my_hook.py
  2. 編輯 ~/.claude/settings.json,加入 hooks 配置
  3. 啟動(dòng)一個(gè)新的 Claude Code 會(huì)話(已有會(huì)話需要重啟才能加載新配置)
  4. 觸發(fā)相關(guān)操作,看腳本是否被調(diào)用

調(diào)試時(shí)在腳本里加 print(json.dumps(data, indent=2), file=sys.stderr) 把收到的完整數(shù)據(jù)打出來(lái),Claude Code 會(huì)把 stderr 輸出顯示在終端。

一個(gè)腳本、一個(gè)退出碼,就能接入 Claude Code 的整個(gè)執(zhí)行流程。你的腳本負(fù)責(zé)判斷邏輯,Claude Code 負(fù)責(zé)觸發(fā)和等待,各管各的。

到此這篇關(guān)于一文詳解Claude Code中Hooks的使用的文章就介紹到這了,更多相關(guān)Claude Code Hooks使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

相關(guān)文章

  • 2026年Claude Code使用指南:從入門(mén)到IDEA集成實(shí)戰(zhàn)

    本文詳細(xì)解析了基于AnthropicSonnet4.5架構(gòu)的ClaudeCode系統(tǒng),包含智能編程代理模型的三層架構(gòu)和核心組件矩陣,文章還展示了微服務(wù)重構(gòu)和CI/CD優(yōu)化等企業(yè)級(jí)應(yīng)用案例,并給出
    2026-05-29
  • 使用Claude Code自動(dòng)化部署Linux環(huán)境的詳細(xì)過(guò)程

    Claude Code 作為智能開(kāi)發(fā)輔助工具,能大幅提升 Linux 環(huán)境下的部署效率,本文以全新虛擬機(jī)為環(huán)境,全程依托 Claude Code 完成 Docker 與 MySQL8.0 的自動(dòng)化安裝,需要的朋友
    2026-05-28
  • 在Windows系統(tǒng)上配置Claude Code使用DeepSeek API的操作指南

    在Windows系統(tǒng)上配置Claude使用使用DeepSeekAPI,需安裝Node.js、配置ClaD環(huán)境及設(shè)置DeepSeekAPI環(huán)境變量,本文詳細(xì)介紹了安裝步驟、配置方法及常用命令,助你快速上手,需要的
    2026-05-28
  • 2026最新Claude Code開(kāi)發(fā)配置詳細(xì)手冊(cè)

    你有沒(méi)有遇到過(guò)這些情況, 每次打開(kāi)新會(huì)話,又要跟 Claude 重新解釋一遍我們項(xiàng)目的命名規(guī)范或者 Claude 突然跑去執(zhí)行了一條危險(xiǎn)命令,下面小編就和大家詳細(xì)介紹一下Claude C
    2026-05-28
  • Claude Code中Skill的介紹與使用完整指南

    簡(jiǎn)單來(lái)說(shuō),Skill 就是 Claude Code 的專業(yè)技能包,Claude 自帶了一些內(nèi)置 Skill(如代碼審查、安全檢查),你也可以創(chuàng)建自己的自定義 Skill(如文檔格式化),或者安裝別人
    2026-05-28
  • 一文分享Claude Code中9大神級(jí)Skills的安裝,使用場(chǎng)景和踩坑經(jīng)驗(yàn)

    Skills本質(zhì)是「封裝好的專業(yè)提示詞 + 標(biāo)準(zhǔn)化工作流」,相當(dāng)于給 Claude 裝上了「行業(yè)專家大腦」,今天這篇文章,先把親測(cè)好用的 9 個(gè) Skills 分享出來(lái),從安裝到使用場(chǎng)景到
    2026-05-27
  • VS Code+Claude Code+Deepseek的使用小結(jié)

    本文詳細(xì)介紹了在VSCode中配置ClaudeCode插件并集成Deepseek AI模型的方法,文中通過(guò)圖文示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下
    2026-05-26
  • 盤(pán)點(diǎn)2026年8大Claude Code Skill深度解析與使用案例指南

    本文盤(pán)點(diǎn)了2226年8個(gè)值得使用的的ClaudeSkill,涵蓋前端設(shè)計(jì)、測(cè)試自動(dòng)化、代碼重構(gòu)等關(guān)鍵領(lǐng)域,助開(kāi)發(fā)者提升效率,通過(guò)安裝這些Skill,Claude能更好地理解和執(zhí)行復(fù)雜任務(wù),實(shí)現(xiàn)
    2026-05-25
  • Claude Code CLI 使用完整指南

    Claude Code 是 Anthropic 官方的命令行 AI 編程助手,像在終端里有一個(gè)懂你整個(gè)代碼庫(kù)的高級(jí)工程師,本文給大家介紹Claude Code CLI 使用完整指南,感興趣的朋友跟隨小編一
    2026-05-21
  • Claude code相關(guān)的skill是干什么以及有什么作用詳解

    Skills是一種可復(fù)用的能力模塊,你可以把它理解成給Claude Code安裝的插件或技能包,這篇文章主要介紹了Claude code相關(guān)的skill是干什么以及有什么作用的相關(guān)資料,文中通過(guò)代
    2026-05-20

最新評(píng)論

岗巴县| 句容市| 陇川县| 栾川县| 富宁县| 华亭县| 松原市| 西城区| 罗源县| 松阳县| 长治县| 祁连县| 定边县| 罗平县| 昭平县| 扬中市| 青海省| 阿尔山市| 庆安县| 尼勒克县| 筠连县| 广丰县| 利辛县| 离岛区| 遂昌县| 西畴县| 清徐县| 永新县| 石楼县| 洛扎县| 安远县| 淳化县| 祁门县| 旬邑县| 阳曲县| 安仁县| 灵武市| 秦皇岛市| 万年县| 望城县| 刚察县|