Claude Code 使用指南:权限模式、会话管理与 Hooks 配置实战

发布时间:2026/9/29 8:23:23
Claude Code 使用指南:权限模式、会话管理与 Hooks 配置实战
1. 为什么你的 Claude Code 用起来总差点意思很多人第一次打开 Claude Code敲一句“帮我写个登录页”看着它刷刷刷生成文件会觉得这就是终端 AI 编程的完全体了。但用上一周问题就冒出来了它怎么老在改文件前停下来问我上次那个会话去哪了为什么每次都要重新告诉它项目规范Shell 命令它到底会不会自己跑这些问题的答案其实都藏在三个关键词里权限模式、会话管理、Hooks 配置。权限模式决定了 Claude Code 的自动化边界是每步都问你还是放手让它改会话管理决定了你能不能找回昨天的上下文而不是每次从零开始Hooks 则决定了它能不能在你没盯着屏幕的时候自动帮你格式化代码、发通知、跑审查。这篇指南面向的是已经在用 Claude Code、但想把日常协作规范起来的开发者。我会把 settings.json 的配置骨架、权限模式的切换步骤、Hooks 的验证动作都拆开讲清楚同时说明怎么通过 TaoToken 统一 Key 和 API 通道接入让团队里每个人的环境配置保持一致。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 后面配置环节会用到。先说结论Claude Code 的默认行为是保守的它假设你希望每一步都确认。但真实开发里你需要的是一套分场景的权限策略加上能跨会话延续的上下文再加上几个关键节点的自动化钩子。这三件事配好了终端 AI 编码的效率才会有质的变化。2. TaoToken 前置统一 Key 与 API 通道在动 settings.json 之前得先把接入层理清楚。Claude Code 本身是个客户端它需要一个 API 端点和一个 Key 才能工作。团队协作里最容易出乱子的地方就是每个人的 Key 不一样、端点不一样、模型配置不一样导致同一个项目里行为不一致。TaoToken 在这里扮演的角色是统一的 API 通道。你可以在 https://taotoken.net/api 拿到兼容的接口地址然后在 Claude Code 的配置里指向它。这样做的好处是团队可以共用一套接入配置Key 的轮换和额度管理集中处理不用每个人去折腾自己的环境变量。具体操作上你需要先在 TaoToken 的控制台创建一个 API Key。访问 https://taotoken.net/api-keys 生成 Key注意保存好它只显示一次。然后这个 Key 会用在两个地方一是 Claude Code 的环境变量二是后面 settings.json 里的模型配置。注意不要把 Key 硬编码进项目里的 settings.json 并提交到 Git。团队共享的配置里只放端点地址和模型名Key 走本地环境变量或 settings.local.json。环境变量设置方式Linux/macOS 下export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEY你的_TaoToken_KeyWindows PowerShell$env:ANTHROPIC_BASE_URLhttps://taotoken.net/api $env:ANTHROPIC_API_KEY你的_TaoToken_Key设置完之后启动 Claude Code 时它会读取这两个变量。如果你想让配置持久化可以把它们写进 shell 的 profile 文件或者用 Claude Code 自己的 settings.json 来管理。这里有个细节Claude Code 读取配置的优先级是 项目级 用户级 环境变量所以如果你在项目里写了 settings.json它会覆盖环境变量里的同名项。接入文档在 https://taotoken.net/doc 里面有完整的端点和参数说明。配好之后你可以先用一个简单请求验证通道是否通再往下做权限和 Hooks 的配置。3. 可复制配置settings.json 骨架与权限模式Claude Code 的配置文件分三层理解这三层是配好权限的前提。用户级配置在~/.claude/settings.json对所有项目生效适合放个人偏好和通用 Hooks。项目级配置在项目根/.claude/settings.json只对当前项目生效适合放团队规范应该提交到 Git。本地配置在项目根/.claude/settings.local.json只对当前项目当前人生效适合放个人覆盖项和敏感信息应该加进 .gitignore。先给一份可以直接复制的项目级 settings.json 骨架{ model: claude-sonnet-4-20250514, permissions: { allow: [ Read, Glob, Grep ], deny: [ Bash(rm -rf:*), Bash(curl:*), Read(./.env), Read(./secrets/**) ] }, hooks: { PostToolUse: [ { matcher: Edit|Write, hooks: [ { type: command, command: jq -r .tool_input.file_path | xargs -r npx prettier --write } ] } ], Notification: [ { matcher: *, hooks: [ { type: command, command: notify-send Claude Code 需要你的确认 } ] } ] } }这份骨架里permissions.allow列出了不需要每次确认的操作读文件、匹配文件、搜索内容这些只读操作放进去是安全的。permissions.deny是硬性禁止rm -rf、curl这类危险命令直接拦掉.env和 secrets 目录禁止读取。hooks部分配了两个文件编辑后自动跑 Prettier需要用户注意时发系统通知。权限模式本身不是写在 settings.json 里的而是运行时用Shift Tab循环切换。三种模式的行为差异如下模式状态栏显示文件编辑Shell 命令适用场景默认模式? for shortcuts每次确认每次确认学习阶段、陌生项目编辑模式accept edits on自动接受仍需确认信任 AI 的日常开发计划模式plan mode on先出计划不执行复杂重构、需人工审核切换顺序是默认 → 编辑 → 计划 → 默认。在计划模式下Claude Code 会先把任务拆成步骤给你看你确认后才执行。这个模式特别适合“把这份代码拆成三个文件”这类结构性改动因为它会先告诉你打算怎么拆而不是直接动手。关于--dangerously-skip-permissions这个参数我的建议是只在无网络的容器或虚拟机里用。它会跳过所有权限检查包括 Shell 命令在生产环境或者有敏感数据的机器上跑风险太高。团队规范里应该明确禁止在开发机上使用这个参数。4. 会话管理与 Hooks 验证会话管理的核心命令有四个/resume、/rename、/clear、/compact。这四个命令解决的是不同层面的问题别混用。/resume用来找回历史会话。Claude Code 会自动保存所有会话记录存在~/.claude/sessions/下。启动时加-c参数可以直接加载最近一次会话claude -c或者在会话里输入/resume会列出历史会话让你选。列表支持搜索会话多了之后很有用。/rename给当前会话起个语义化的名字。默认会话名是时间戳过两天你根本分不清哪个是哪个。养成习惯每个任务开始时先重命名/rename 用户中心重构注意只能重命名当前会话。要改历史会话的名字先/resume加载它再/rename。/clear清除当前会话的所有上下文。处理完一个任务、要开始不相关的新任务时用它重置。官方建议是在不相关任务之间频繁使用避免上下文互相干扰。/compact压缩上下文。当状态栏显示上下文占用接近 90% 时手动触发压缩可以指定保留哪些内容/compact 保留关于数据库迁移的讨论压缩会保留核心对话和 CLAUDE.md 里的项目规范删掉中间步骤和重复讨论。Claude Code 在上下文达到 95% 时会自动触发压缩但手动控制在 90% 左右更稳妥。现在说 Hooks 的验证。配好 Hooks 之后怎么确认它真的生效了以 PostToolUse 的 Prettier 格式化为例验证步骤如下。第一步确认 Prettier 在项目里可用npx prettier --version第二步故意写一个格式混乱的文件比如test-format.jsconst a1;function foo( ){return a1}第三步在 Claude Code 里让它编辑这个文件比如“把 foo 函数的返回值改成 a2”。编辑完成后PostToolUse Hook 应该自动触发 Prettier。检查文件内容cat test-format.js如果 Hook 生效文件会被格式化成规范的样子。如果没变化说明 Hook 没触发需要排查。Notification Hook 的验证更直接在编辑模式下让 Claude Code 执行一个需要确认的 Shell 命令比如npm install然后切到别的窗口。如果系统通知弹出来了说明 Hook 生效。Hooks 的配置位置和优先级也要注意配置级别文件路径作用范围是否提交 Git用户配置~/.claude/settings.json所有项目否项目配置.claude/settings.json当前项目是本地配置.claude/settings.local.json当前项目个人否团队协作时把通用的格式化 Hook 放在项目配置里个人偏好的通知方式放在本地配置里。这样既统一了代码风格又不强制别人的通知方式。5. 本篇常见错排查配置过程中最容易踩的坑我按出现频率排一下。Hook 命令不执行没有任何报错。最常见的原因是命令路径问题。Hooks 执行时的当前工作目录是项目根目录但如果你用了相对路径引用脚本可能找不到。建议用绝对路径或者用$CLAUDE_PROJECT_DIR环境变量。另外Hook 命令的退出码非零时Claude Code 会认为 Hook 失败但默认不会中断主流程所以你可能看不到报错。调试时可以在命令后面加2/tmp/claude-hook.log把错误输出重定向到日志文件。权限配置不生效该拦的没拦住。检查 settings.json 的 JSON 格式是否正确一个多余的逗号就会导致整个文件被忽略。可以用jq . .claude/settings.json验证格式。另外deny 规则的匹配是前缀匹配Bash(rm -rf:*)能拦住rm -rf /tmp但拦不住rm -r -f /tmp参数顺序变了就匹配不上。要严格拦截的话得把常见变体都列出来。会话恢复后上下文丢失。/resume恢复的是对话记录不是文件状态。如果你在会话之外手动改了文件恢复会话后 Claude Code 看到的还是它记忆里的文件内容可能和实际不一致。这种情况用/rewind回滚或者让它重新读一遍文件。上下文压缩后关键信息没了。/compact默认会保留 CLAUDE.md 的内容和用户明确请求的部分但如果你在对话中间随口提了一个重要约束可能被压掉。重要约束应该写进 CLAUDE.md而不是靠对话记忆。这也是/init和/memory的价值所在。MCP Server 连不上。先确认 MCP 的传输协议配置对不对。HTTP 传输用--transport httpSSE 用--transport sse。配好后用/mcp查看状态如果是未授权状态需要按提示完成 OAuth。MCP Server 的地址如果是内网地址确认网络可达。模型返回 401 或 403。大概率是 Key 或端点配置问题。检查ANTHROPIC_BASE_URL是否指向了正确的端点ANTHROPIC_API_KEY是否有效。如果用 TaoToken 的通道确认 Key 是在 https://taotoken.net/api-keys 生成的并且没有过期。接入文档 https://taotoken.net/doc 里有错误码对照表可以按码排查。6. 把配置沉淀成团队资产配好权限、会话策略和 Hooks 之后下一步是让这套东西在团队里可复制。核心思路是能提交 Git 的配置尽量提交个人相关的走本地配置敏感信息走环境变量。项目级的.claude/settings.json和CLAUDE.md应该进版本控制。前者定义权限边界和通用 Hooks后者定义项目规范和工作流。新成员克隆项目后只需要配好自己的 Key 和环境变量就能获得一致的 Claude Code 行为。.claude/settings.local.json和.claude/sessions/应该进 .gitignore。前者是个人覆盖项后者是会话记录都不适合共享。如果你想让团队进一步统一模型调用可以用 TaoToken 的 Coding Plan 来管理额度分配。访问 https://taotoken.net/coding-plan 了解具体方案。对于需要长期跑 Agent 任务的场景统一的通道和额度管理能省掉很多协调成本。最后给一个实操建议每周花十分钟回顾一下.claude/settings.local.json看看有没有临时加的权限规则可以清理有没有反复出现的确认操作可以加到 allow 列表里。配置是活的跟着你的使用习惯迭代才会越用越顺手。