[claude code] 04 进阶篇:权限、Hooks 与自动化

发布时间:2026/9/25 18:14:14

[claude code] 04 进阶篇:权限、Hooks 与自动化
04 进阶篇权限、Hooks 与自动化精细控制 Claude Code 的行为边界让 AI 安全地为你工作。4.1 分层权限系统Claude Code 的权限系统分为三层权限模式粗粒度 → allow/deny 规则细粒度 → 沙盒隔离层权限模式回顾模式读取编辑命令切换方式普通模式自动需确认需确认ShiftTab自动接受编辑自动自动需确认ShiftTab计划模式自动不执行不执行ShiftTab4.2 allow/deny 规则配置配置文件位置文件作用范围优先级~/.claude/settings.json全局所有项目低.claude/settings.json项目团队共享中.claude/settings.local.json项目个人高规则语法{permissions:{allow:[Read,Glob,Grep,Bash(npm run test),Bash(npm run build),Bash(git status),Bash(git diff),Bash(git log*)],deny:[Bash(rm -rf *),Bash(git push --force),Bash(curl * | bash),Read(./.env*),Read(./**/secrets/*)]}}规则匹配模式模式含义示例Read允许/拒绝所有读取读取任意文件Write允许/拒绝所有写入修改任意文件Bash(npm run test)精确匹配命令仅匹配npm run testBash(npm run:*)前缀匹配冒号分隔匹配npm run test、npm run build等Bash(git *)通配符匹配匹配所有 git 命令Read(./.env*)Glob 匹配文件路径匹配.env、.env.local等实战配置示例前端项目{permissions:{allow:[Read,Glob,Grep,Bash(npm run:*),Bash(npx:*),Bash(git *),Bash(node *)],deny:[Bash(npm publish*),Bash(git push --force*),Read(./.env*)]}}Python 项目{permissions:{allow:[Read,Glob,Grep,Bash(python *),Bash(pytest *),Bash(pip install *),Bash(git *),Bash(poetry *)],deny:[Bash(pip install --user *),Bash(git push --force*),Read(./**/credentials*)]}}最佳实践先用普通模式观察 Claude 常用哪些命令再逐步添加 allow 规则始终添加 deny 规则保护危险操作rm -rf、git push --force敏感文件用Read(./path*)deny 规则保护不要使用--dangerously-skip-permissions除非在 CI 等受信环境4.3 Hooks 系统Hooks 是 Claude Code 的自动化引擎在特定生命周期事件触发时执行自定义命令。8 大生命周期事件事件触发时机可用变量能否阻断典型用途SessionStart会话开始无否环境初始化UserPromptSubmit用户按回车前prompt是危险指令过滤PreToolUse工具执行前tool_name,tool_input是权限审计PostToolUse工具执行后tool_name,tool_input,tool_output否自动格式化NotificationClaude 需要用户输入notification_text否桌面通知Stop响应完全结束无否摘要日志SubagentStop子代理任务结束subagent_name,result否子任务统计PreCompact对话压缩前无否备份历史Hook 配置结构{hooks:{事件名:[{matcher:匹配模式正则,hooks:[{type:command,command:要执行的 shell 命令}]}]}}可用环境变量变量含义适用事件$CLAUDE_TOOL_NAME被调用的工具名PreToolUse, PostToolUse$CLAUDE_TOOL_INPUT工具输入JSONPreToolUse, PostToolUse$CLAUDE_TOOL_INPUT_FILE_PATH文件路径文件操作工具$CLAUDE_TOOL_OUTPUT工具输出JSONPostToolUse$CLAUDE_PROMPT用户提示文本UserPromptSubmit4.4 Hook 实战示例示例一自动格式化PostToolUse每次 Claude 编辑文件后自动运行 Prettier{hooks:{PostToolUse:[{matcher:Write|Edit,hooks:[{type:command,command:npx prettier --write \$CLAUDE_TOOL_INPUT_FILE_PATH\ 2/dev/null || true}]}]}}示例二ESLint 检查PostToolUse编辑 JS/TS 文件后自动 lint{hooks:{PostToolUse:[{matcher:Write|Edit,hooks:[{type:command,command:npx eslint \$CLAUDE_TOOL_INPUT_FILE_PATH\ --fix 2/dev/null || true}]}]}}示例三安全审计PreToolUse阻止 Claude 读取敏感文件{hooks:{PreToolUse:[{matcher:Read,hooks:[{type:command,command:echo \$CLAUDE_TOOL_INPUT\ | jq -r .file_path | grep -qE \\.(env|key|pem)$ echo BLOCK: 不允许读取敏感文件 exit 1 || exit 0}]}]}}示例四桌面通知NotificationClaude 需要输入时发送系统通知{hooks:{Notification:[{matcher:,hooks:[{type:command,command:osascript -e display notification \Claude Code 需要你的输入\ with title \Claude Code\}]}]}}Linux 替代方案{command:notify-send Claude Code 需要你的输入}Windows 替代方案{command:powershell -Command \[System.Reflection.Assembly]::LoadWithPartialName(System.Windows.Forms); [System.Windows.Forms.MessageBox]::Show(Claude Code 需要你的输入, Claude Code)\}示例五会话日志Stop每次会话结束记录摘要{hooks:{Stop:[{matcher:,hooks:[{type:command,command:echo \[$(date %Y-%m-%d %H:%M)] Session ended in $(pwd)\ ~/.claude/session-log.txt}]}]}}示例六Python 自动格式化PostToolUse{hooks:{PostToolUse:[{matcher:Write|Edit,hooks:[{type:command,command:echo \$CLAUDE_TOOL_INPUT\ | jq -r .file_path | grep -qE \\.py$ black \$CLAUDE_TOOL_INPUT_FILE_PATH\ 2/dev/null || true}]}]}}4.5 自动化工作流工作流一代码质量门禁{hooks:{PostToolUse:[{matcher:Write|Edit,hooks:[{type:command,command:FILE\$CLAUDE_TOOL_INPUT_FILE_PATH\; case \$FILE\ in *.py) black \$FILE\ flake8 \$FILE\;; *.ts|*.tsx) npx prettier --write \$FILE\ npx eslint \$FILE\ --fix;; *.go) gofmt -w \$FILE\;; esac 2/dev/null || true}]}]}}工作流二自动测试{hooks:{PostToolUse:[{matcher:Write|Edit,hooks:[{type:command,command:FILE\$CLAUDE_TOOL_INPUT_FILE_PATH\; case \$FILE\ in *test*.py) pytest \$FILE\ -q;; *test*.ts) npx jest \$FILE\;; esac 2/dev/null || true}]}]}}工作流三Git 安全防护{hooks:{PreToolUse:[{matcher:Bash,hooks:[{type:command,command:echo \$CLAUDE_TOOL_INPUT\ | jq -r .command | grep -qiE (push --force|reset --hard|clean -f|rm -rf /) echo BLOCK: 危险 Git 操作被阻止 exit 1 || exit 0}]}]}}4.6 沙盒模式在隔离环境中运行命令防止意外损害{security:{sandbox:true}}沙盒模式下Claude 执行的命令被限制在安全范围内。最佳实践生产环境或共享服务器上建议开启沙盒模式。4.7 Hook 注意事项注意事项说明保持轻量Hook 在每次工具调用时执行慢 Hook 会严重拖慢体验错误容忍用2/dev/null || true防止 Hook 报错阻断流程matcher 是正则Write|Edit匹配 Write 或 Edit 工具阻断返回非零PreToolUse Hook exit 1 会阻断工具执行配置位置全局~/.claude/settings.json或项目.claude/settings.local.json4.8 小结概念关键要点权限模式三种模式ShiftTab 切换allow/deny细粒度控制支持精确匹配和通配符Hooks8 大生命周期事件实现自动化常用 Hook格式化、lint、安全审计、通知沙盒生产环境建议开启Hook 原则轻量、容错、正则匹配上一篇03 项目篇CLAUDE.md 与项目配置下一篇05 实战篇MCP 服务器与技能扩展

相关新闻

盘锦装修施工怎么选?从服务细节到口碑反馈少走弯路

盘锦装修施工怎么选?从服务细节到口碑反馈少走弯路

2026/9/8 21:20:05

盘锦装修施工的选择,不能只看效果图和单项报价,更应关注设计、材料、工艺、验收和售后之间是否形成闭环。尤其是整装、大平层、别墅、老房翻新、办公室装修和商铺装修,涉及工种多、周期长,前期判断越细,后期体验风险通…

5步实现AI Agent工具调用能力:从原理到实践

5步实现AI Agent工具调用能力:从原理到实践

2026/8/7 5:09:09

1. 项目概述:AI Agent工具调用能力实现路径去年在开发智能客服系统时,我首次尝试让AI自主调用外部工具处理工单,结果因为缺乏系统方法论踩了不少坑。现在回头看,其实只需要掌握几个关键节点就能快速搭建可用的工具调用型AI Agent。…

Agent插件生态与MCP协议:构建下一代智能助手的技术架构

Agent插件生态与MCP协议:构建下一代智能助手的技术架构

2026/8/3 21:01:35

通用Agent领域正在经历一场深刻的变革,传统的单一模型竞争格局逐渐被生态化竞争所取代。这次我们重点分析决定Agent成败的两个核心要素:插件生态的完善程度和基础模型的能力边界。无论是开源社区的Hermes Agent、PI Agent,还是商业平台的Clau…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/25 10:06:33

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/25 9:40:47

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/25 10:06:21

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/25 9:53:52

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/25 8:58:17

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/25 10:00:17

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/24 16:02:49

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/25 9:41:47

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/25 4:22:14

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…