新闻详情

新闻详情

首页 / 资讯中心 / 详情

Claude Code 长期任务越跑越慢?用 Hooks + Git 给 Compact 补上工程方案

发布时间:2026/9/28 4:18:57来源:尧图网络
Claude Code 长期任务越跑越慢?用 Hooks + Git 给 Compact 补上工程方案
1. 长会话越跑越慢问题到底出在哪如果你用 Claude Code 跑过超过两小时的重构任务大概率见过这个画面前几轮对话思路清晰、改代码干净利落跑到后面开始反复改同一段逻辑删了又加、加了又删最后你只能clear重开。这不是模型变笨了而是长会话里上下文被反复压缩后任务连续性断掉了。Claude Code 的 Compact 机制会在上下文接近窗口上限时把之前的对话总结成一段摘要丢掉细节、保留关键信息。听起来合理但压缩是有损的第一次压缩还能保住主干第二次在摘要基础上再摘要第三次就开始丢关联。就像复印件的复印件每复印一次清晰度掉一级最后连自己写过什么函数都记不清。Anthropic 在《Effective harnesses for long-running agents》里点破了这件事长期运行代理的根本挑战不是模型能力而是记忆的工程化管理。Compact 只是权宜之计真正管用的是把状态外置到文件系统——用 Git 存历史、用进度日志存摘要、用特性清单存任务边界再通过 Claude Code 的 Hooks 系统在每次会话启动时自动把这些上下文注入进去。这篇就按这个思路走先讲清楚 Compact 为什么会衰减再给出可复制的settings.json配置骨架和 Hooks 脚本最后用 Git 快照验证压缩前后的任务连续性。适合正在用 Claude Code 做长期编码任务、被越跑越慢折磨过的开发者。2. 前置准备TaoToken 接入与 Claude Code 环境要让 Hooks 和 Git 协同工作前提是 Claude Code 能稳定跑起来。我这边是通过 TaoToken 接入的它提供 Claude 系列模型的 API 通道配置方式和官方一致省去自己折腾鉴权的麻烦。先去控制台拿一个 API Key地址是 https://taotoken.net/api-keys 登录后新建一个 Key 复制出来。然后在终端里配置环境变量Claude Code 会读取ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY这两个变量export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的key如果你用的是 Claude Code CLI也可以写进~/.claude/settings.json的env字段里避免每次开终端都要 export。配置完跑一句claude --version确认能正常启动再随便问一句列出当前目录文件验证通道通了。模型选择上长任务建议用 Opus 4.5 或 Sonnet 4.5前者推理更稳、后者速度更快。如果你打算长期跑编码 Agent可以看下 Coding Plan 的额度方案 https://taotoken.net/coding-plan 按量或包月都行比单次调用划算。接入文档在 https://taotoken.net/doc 里面有各语言 SDK 的示例遇到 401/429 报错先翻这里。环境通了之后我们进入正题怎么用 Hooks 把 Anthropic 那套双代理工作流落到 Claude Code 里。3. 可复制配置settings.json 骨架与 Hooks 脚本Claude Code 的 Hooks 系统允许你在特定事件触发时执行 shell 命令最有用的是SessionStart会话启动和PreCompact压缩前。前者用来注入上下文后者用来在压缩前打 Git 快照这样即使压缩丢了细节也能从快照里找回。先建目录结构mkdir -p .claude/hooks touch .claude/hooks/session_start.sh touch .claude/hooks/pre_compact.sh chmod x .claude/hooks/*.shsession_start.sh的作用是在每次新会话开始时把 Git 状态、进度日志、待办特性自动打印出来让模型一上来就知道现在在哪、还剩什么#!/bin/bash echo 项目上下文自动加载 echo echo ## 当前分支 git branch --show-current 2/dev/null || echo 非 Git 仓库 echo echo ## 最近 5 次提交 git log --oneline -5 2/dev/null echo echo ## 工作区状态 git status --short 2/dev/null if [ -f feature_list.json ]; then echo echo ## 待完成功能前 5 项 jq -r .[] | select(.passes false) | - \(.description) feature_list.json 2/dev/null | head -5 fi if [ -f claude-progress.txt ]; then echo echo ## 最近工作进展 tail -5 claude-progress.txt fipre_compact.sh更关键它在 Compact 触发前自动 commit 一次把当前工作区状态固化下来#!/bin/bash if [ -n $(git status --porcelain) ]; then git add -A git commit -m auto-snapshot before compact $(date %Y%m%d-%H%M%S) --no-verify echo 已创建压缩前快照 else echo 工作区干净无需快照 fi然后在.claude/settings.json里挂上这两个 Hook{ hooks: { SessionStart: [ { hooks: [ { type: command, command: .claude/hooks/session_start.sh } ] } ], PreCompact: [ { hooks: [ { type: command, command: .claude/hooks/pre_compact.sh } ] } ] } }注意PreCompact事件名在不同 Claude Code 版本里可能略有差异如果你的版本不识别可以退而求其次用Stop事件在每轮对话结束时打快照。配置改完记得重启 Claude Code 让 Hook 生效。这套配置的核心思路是把 Compact 从唯一记忆降级为辅助摘要真正的记忆交给 Git。压缩丢了什么git log和git diff里都能找回来。4. 验证请求用 Git 快照检查压缩前后连续性配置好之后怎么验证它真的起作用了我设计了一个小实验让 Claude Code 做一个需要多轮才能完成的任务观察 Compact 触发前后的 Git 历史。先准备一个feature_list.json把任务拆成 5 个特性[ {description: 实现用户登录接口, passes: false}, {description: 添加 JWT 鉴权中间件, passes: false}, {description: 实现密码加密存储, passes: false}, {description: 编写登录单元测试, passes: false}, {description: 更新 API 文档, passes: false} ]然后启动 Claude Code给它一个长任务指令claude 读取 feature_list.json按顺序实现每个特性每完成一个就 commit 并更新 passes 字段跑的过程中当上下文接近上限、Compact 触发时pre_compact.sh会自动打一个快照。你可以在另一个终端里实时观察watch -n 5 git log --oneline -10正常情况你会看到类似这样的历史a3f2c1d auto-snapshot before compact 20250115-143022 b8e4d2a 实现密码加密存储 c1a9f3e 添加 JWT 鉴权中间件 d7b2e4f 实现用户登录接口压缩前的那次 auto-snapshot 就是关键证据——它证明在上下文被压缩之前工作区状态已经被完整保存。压缩之后如果模型失忆了你可以让它执行git log --oneline -20和git diff HEAD~3来重建上下文而不是靠那段有损的摘要。验证成功的标志有三个一是git log里能看到 auto-snapshot 记录二是压缩后模型仍能正确说出上一个完成的特性是什么三是feature_list.json的passes字段在持续推进没有出现回退或重复实现。如果压缩后模型开始重复造轮子说明 Hook 没生效或者 Git 历史没被正确读取。这时候手动跑一次session_start.sh看输出确认它能打印出待办列表和最近提交。5. 本篇常见错排查报错一jq: command not foundsession_start.sh里用了jq解析 JSONmacOS 上默认没有。装一下brew install jq # macOS sudo apt install jq # Ubuntu/Debian不想装jq的话可以把那行换成python3 -c import json;...但jq更简洁建议装上。报错二Hook 不触发SessionStart 没输出先确认settings.json的路径对不对——项目级配置在.claude/settings.json用户级在~/.claude/settings.json。再确认脚本有执行权限ls -l .claude/hooks/看有没有x。最后确认脚本第一行的 shebang 是#!/bin/bash而不是#!/bin/sh后者在某些系统上不支持[[ ]]语法。报错三pre_compact.sh报nothing to commit这是正常的说明工作区干净、没有未提交改动。但如果你明明改了代码却报这个检查是不是在子目录里跑 Claude Code而 Git 仓库根目录在上一层。用git rev-parse --show-toplevel确认仓库根位置必要时把 Hook 里的git命令加上-C参数指定路径。报错四Compact 后模型仍重复劳动大概率是session_start.sh的输出没被模型读到。Claude Code 的 Hook 输出会作为系统消息注入但如果输出太长超过几千字可能被截断。把git log的条数从 20 降到 5feature_list.json只取前 5 项保持输出精简。另外确认feature_list.json的passes字段确实在被更新——如果模型忘了改下次会话就不知道哪些已完成。报错五API 返回 429 限流长任务跑久了容易撞限流。TaoToken 的模型对话入口在 https://taotoken.net/chat 可以先在那里手动测一下当前 Key 的可用性。如果是 Coding Plan 用户检查额度是否用完。临时缓解可以在settings.json里加maxConcurrentRequests: 1降低并发。6. 把记忆交给 Git把流程交给 Hooks回到最初的问题Claude Code 长期任务为什么越跑越慢因为 Compact 把记忆这件事押注在了有损压缩上压缩次数越多任务连续性越差。Anthropic 的解法不是让模型记住更多而是承认模型会忘然后把该记的东西全部外置——Git 存历史、日志存摘要、JSON 存任务边界。Hooks 的价值在于把这套外置流程自动化。SessionStart让每次新会话秒进状态PreCompact让每次压缩前都有快照兜底。你不需要改 Claude Code 的源码也不用换模型只是在.claude/settings.json里挂两个脚本就能把越跑越慢变成越跑越稳。实测下来配好这套之后一个原本要clear三次的重构任务现在一次会话跑完中间 Compact 触发了两次但模型每次都能从 Git 历史里找回上下文没有出现重复劳动。如果你也在被长会话衰减困扰建议先拿一个小项目试一遍这两个 Hook跑通了再往大项目上套。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

河南做网站河南网站建设:3个免费工具解决无人访问难题 2026/9/28 5:34:36

河南做网站河南网站建设:3个免费工具解决无人访问难题

河南做网站河南网站建设:3个免费工具解决无人访问难题 网站上线三个月,后台数据惨淡如冰,这种煎熬做过站的都懂。河南做网站河南网站建设圈里,太多老板抱怨 网站做好了没人访问 ,其实问题不在服务器慢,而在设计没人看。别急着加钱投广告,先用…

阅读更多 →
SSM+微信小程序家政服务系统毕业设计:环境配置到答辩全攻略 2026/9/28 5:34:29

SSM+微信小程序家政服务系统毕业设计:环境配置到答辩全攻略

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

阅读更多 →
高速全差分运放的CMFB设计实战:共模控制失效分析与优化 2026/9/28 5:34:22

高速全差分运放的CMFB设计实战:共模控制失效分析与优化

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

阅读更多 →
单细胞转录组数据分析:从数据清洗到细胞初步分型全流程实操指南 2026/9/28 5:34:22

单细胞转录组数据分析:从数据清洗到细胞初步分型全流程实操指南

拿到cellranger输出的filtered矩阵那一刻,大多数新手的第一反应是:接下来呢?读进来、画两张图、然后呢?我见过太多人卡在这一步——矩阵读进来了,看着那个几万行乘几千列的表格,完全不知道哪些细胞该留、哪…

阅读更多 →
SpringBoot自定义logback日志配置:从原理到生产级实践 2026/9/28 5:34:22

SpringBoot自定义logback日志配置:从原理到生产级实践

一个SpringBoot项目如果日志没配好,排查线上问题就像在黑屋里找一只黑猫。我自己接手过几个老项目,日志要么是默认的spring-boot-starter-logging,要么是网上抄了一份logback.xml拼在一起,结果生产一跑起来,文件没轮转…

阅读更多 →
通过 Nanobot 源码学习架构 ---(4)SubAgent 上下文隔离与配置骨架 2026/9/28 5:34:22

通过 Nanobot 源码学习架构 ---(4)SubAgent 上下文隔离与配置骨架

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉