
1. 长任务里最烦的两件事改动没记录、确认弹到手软如果你用 Claude Code 跑过稍微大一点的重构任务大概率遇到过这两个场景Agent 一口气改了七八个文件你回头想看看它到底动了哪里结果 VS Code 的 Timeline 面板干干净净一个历史节点都没有另一个场景是它每执行一条 Bash、每写一次文件都要弹窗问你「是否允许」一个下午点确认点到手指发酸。这两个问题的根源其实不一样。Timeline 不记录是因为 Claude Code 的 Edit/Write 工具是直接往磁盘写文件的VS Code 虽然能感知文件变化并刷新编辑器内容但不会把文件标记成「脏」状态tab 上不出现小圆点autoSave 自然不触发Timeline 也就没有历史可记。而权限弹窗是 Claude Code 默认的安全策略在起作用——它不确定你的命令是否安全所以每次都问你。这篇要交付的就是一个settings.local.json配置骨架用 Stop hook 在每次会话结束时自动git commit用dontAsk模式关掉高频确认弹窗。配置可以直接复制后面还会讲怎么验证 hook 到底有没有生效以及万一配错了怎么回滚。适合谁看已经在用 Claude Code 做日常开发、希望减少手动操作、又不想丢掉改动记录的开发者。如果你还没装 Claude Code这篇的配置部分同样能看懂但建议先把基础环境跑起来。2. 前置准备TaoToken 接入与 Claude Code 环境确认在动settings.local.json之前得先确保 Claude Code 能正常跑起来。Claude Code 本身是个命令行工具它需要一个能调用 Claude 系列模型的 API 入口。我这边用的是 TaoToken 的接入方式配置起来比较直接。TaoToken 的官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。注意 API 地址后面不加 UTM 参数直接填就行。你需要先去控制台拿一个 API Key。打开 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 在 API Keys 页面创建一个新的 Key复制出来备用。这个 Key 就是 Claude Code 调用模型时的凭证。拿到 Key 之后在终端里设置环境变量。Claude Code 读取的是ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY这两个变量export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEY你的_API_Key如果你想让这个配置持久化可以写进~/.bashrc或~/.zshrc。Windows 用户可以在系统环境变量里添加或者用 PowerShell 的$env:语法临时设置。设置完之后跑一下claude --version确认工具本身装好了。如果提示找不到命令说明 Claude Code 还没安装需要先通过 npm 全局安装npm install -g anthropic-ai/claude-code环境确认这一步别跳过。后面配 hook 的时候如果发现 commit 没触发有一半的概率是 API 环境本身就没通Agent 根本没跑起来自然也不会有 Stop 事件。3. 可复制配置settings.local.json 骨架Claude Code 的配置文件分几个层级个人级配置放在项目根目录的.claude/settings.local.json里。这个文件默认不会被提交到仓库适合放个人偏好和本地 hook。先看完整的配置骨架{ hooks: { Stop: [ { hooks: [ { type: command, command: git add -A (git diff --cached --quiet || git commit -m \Session Saved\) } ] } ] }, permissions: { defaultMode: dontAsk } }这个文件做了两件事。第一件是注册了一个 Stop hook。Stop 事件在每次 Claude Code 停止等待用户输入时触发也就是一个回合结束的时候。hook 里执行的命令是git add -A暂存所有变更然后用git diff --cached --quiet检查暂存区有没有实际改动如果没有就跳过 commit有的话就提交一条Session Saved的记录。第二件事是把权限模式设成dontAsk。这个模式下Bash、Edit、Write 等操作不再弹确认框直接执行。关于dontAsk有一个点必须说清楚它会允许所有操作包括删除文件、执行危险命令。所以这个配置只建议在个人开发环境用团队协作或者生产相关的仓库里不要开。如果你只是不想被频繁打断但又想保留一定的安全边界可以不用dontAsk改成在permissions.allow里列出你信任的命令前缀比如Bash(git:*)、Bash(npm:*)这种。不过那是另一套配置思路这篇聚焦在dontAsk的完整骨架上。文件放好之后不需要重启 Claude Code它在下次会话开始时会读取配置。但 hook 的注册是在会话启动时完成的所以如果你是在当前会话中途改的配置建议退出重进一次。4. 验证 hook 是否生效从 git log 到回滚动作配置写完了不代表它就在工作。得实际验证一下。第一步确认配置文件的位置和内容没问题。在项目根目录下执行cat .claude/settings.local.json看看输出的 JSON 是不是你刚写的那份。如果文件不存在说明路径放错了。注意是项目根目录下的.claude/文件夹不是用户主目录下的~/.claude/。两个位置 Claude Code 都会读但settings.local.json按约定放在项目里。第二步让 Claude Code 做一次小改动。比如让它在一个已有文件里加一行注释或者新建一个临时文件。等它停下来、回到等待输入的状态时Stop hook 就应该触发了。第三步检查 git 历史git log --oneline -5如果看到最近一条 commit 的 message 是Session Saved说明 hook 生效了。如果没看到先检查git status看看有没有未暂存的改动——有可能 hook 执行了但 commit 被git diff --cached --quiet跳过了那说明暂存区确实是空的Agent 可能没产生实际文件变更。第四步验证dontAsk是否生效。让 Claude Code 执行一条简单的 Bash 命令比如echo hello。如果它直接执行并返回结果没有弹确认框说明dontAsk起作用了。如果还是弹窗检查 JSON 里permissions的层级有没有写错defaultMode是放在permissions对象下面的。回滚也很简单。把settings.local.json里的hooks和permissions两段删掉或者直接把整个文件删了Claude Code 就回到默认行为。如果你只是想临时关掉 hook 但保留dontAsk把hooks对象清空成{}就行。还有一个细节git add -A会把所有变更都暂存包括你不想提交的临时文件。建议在项目里配好.gitignore把.history/、node_modules/、*.log这类目录排除掉。不然每次 Session Saved 都会把这些垃圾文件一起提交进去历史很快就乱了。5. 本篇常见错排查配置过程中有几个坑出现的频率比较高这里集中说一下。hook 没触发git log 里看不到 Session Saved。先确认 Claude Code 是不是真的停下来了。Stop 事件只在它结束一个回合、等待你输入时触发。如果它还在跑任务或者你手动中断了hook 不会执行。另外检查一下settings.local.json的 JSON 格式多一个逗号或者少一个括号都会导致整个配置被忽略。可以用python -m json.tool .claude/settings.local.json验证格式。commit 出现了但内容是空的或者只有一行。这通常是git add -A没暂存到东西。检查一下 Agent 改的文件是不是在.gitignore里被排除了或者文件路径不在当前 git 仓库范围内。还有一种可能是 Agent 只做了读取操作没有实际写入。dontAsk 开了但还在弹窗。确认defaultMode的拼写是dontAsk不是dont_ask也不是DontAsk。另外某些特定操作可能仍然会触发确认比如访问项目目录之外的文件。这是 Claude Code 的边界保护dontAsk不能完全绕过。多个 Session Saved 堆在一起历史很乱。这是预期行为每个回合结束都会提交一次。定期用git reset --soft把几个 Session Saved 合并成一个有意义的 commit 就行。比如git reset --soft HEAD~3 git commit -m 重构用户模块把最近三次自动提交压成一条。想验证 hook 命令本身能不能跑。直接在终端里执行git add -A (git diff --cached --quiet || git commit -m Session Saved)看看有没有报错。如果终端里能跑通但 hook 不触发那就是配置注册的问题不是命令的问题。6. 接入与排障入口如果你在配置过程中遇到 API 调用层面的问题比如 Claude Code 报连接错误、认证失败或者想确认模型是否正常响应可以直接用模型对话入口测一下 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。这个页面能快速验证 Key 和 API 地址是否配对正确。需要管理或重新生成 API Key 的话控制台入口在这里 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有各语言和工具的配置示例。如果你打算长期用 Claude Code 做编码任务或者跑 Agent 类的自动化流程可以了解一下 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。它针对高频编码场景做了额度上的适配比按量调用更适合日常开发。配置这东西跑通了就一劳永逸。先把settings.local.json放对位置验证一次 hook 和dontAsk都生效后面每次会话结束自动落盘、全程无弹窗开发节奏会顺很多。