三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Claude Code :自动保存 + 免打扰模式

Claude Code :自动保存 + 免打扰模式

使用 Claude Code 的 Agent 修改代码时,有两个痛点:

  1. VS Code Timeline 不记录 Agent 的改动—— Agent 通过Edit/Write工具直接写入磁盘,VS Code 虽然能检测到文件变化并刷新编辑器内容,但不会将文件标记为"脏"(tab 上没有圆点),因此autoSave不会触发,Timeline 也就不会产生历史记录。

  2. 每次操作都要点权限确认—— Bash、Edit、Write 等操作频繁弹出确认框,打断思路。

方案一:Stop Hook 实现自动 Git 提交

既然 VS Code Timeline 指望不上,那就用 Git 来做"自动保存"。Claude Code 提供了 Hooks 机制,可以在特定事件触发时执行脚本。

使用Stophook,在每次会话结束时统一提交一次。Agent 一个回合内的所有文件变动(Edit、Write、Delete)会合并成一条 commit。

{"hooks":{"Stop":[{"hooks":[{"type":"command","command":"git add -A && (git diff --cached --quiet || git commit -m \"Session Saved\")"}]}]}}

关键点:

  • Stop事件在每次 Claude Code 停止等待用户输入时触发
  • git add -A暂存所有变更(包括新增和删除)
  • git diff --cached --quiet检查是否有实际变更,无变更则跳过 commit
  • 配合.gitignore排除不需要追踪的目录(如.history/)

效果:

gitlog--oneline# xxxxx Session Saved ← 刚才的改动# xxxxx Session Saved ← 上一次的改动# xxxxx Initial commit

VS Code 的 Git Graph 扩展和 Timeline 面板(会读取 git 历史)都能看到每一次变动的完整记录。定期用git reset --soft把多个Session Saved合并成有意义的 commit 即可保持历史整洁。

方案二:dontAsk 免确认模式

每次 Bash、Edit 操作都弹确认框,开发时非常打断思路。在个人项目中直接开启dontAsk模式:

{"permissions":{"defaultMode":"dontAsk"}}

注意:dontAsk会允许所有操作(包括危险命令),建议仅在个人开发环境使用。

最终配置

两个方案合并到同一个文件.claude/settings.local.json(个人级配置,不会提交到仓库):

{"hooks":{"Stop":[{"hooks":[{"type":"command","command":"git add -A && (git diff --cached --quiet || git commit -m \"Session Saved\")"}]}]},"permissions":{"defaultMode":"dontAsk"}}

一个文件,两种能力:

  • 每次会话结束自动 git commit →不再丢历史
  • 所有操作免确认 →不再弹窗打扰

总结

痛点方案实现
Agent 修改不触发 TimelineGit 自动提交Stop hook →Session Saved
权限弹窗打断思路免确认模式defaultMode: dontAsk

一个settings.local.json文件,解决两个痛点。

← 返回列表