当前位置: 首页 > news >正文

我被Claude Code失忆折磨了3天后,写了一个工具拯救自己

如果你用 Claude Code、Cursor 或其他 AI 编码工具,你一定经历过这种绝望:切换标签页,整个会话没了。Prompt太长,应用崩溃。早期说的需求,AI早就忘得一干二净。

GitHub: YaBoom/ContextRoller-zyt⭐ Star 支持一下!


我是怎么发现这个痛点的

这周我在做一个 AI 项目,连续用了 3 天 Claude Code。这期间我经历了:

第一次崩溃:我在一个复杂的功能上跟 Claude 聊了 2 小时,上下文已经建立得很完整——它知道我要做什么、代码结构是怎样的、之前踩过哪些坑。这时候我不小心点了一下浏览器的另一个标签页,回来时发现整个会话没了。没有警告,没有恢复按钮,2 小时的上下文灰飞烟灭。

第二次崩溃:我学聪明了,用终端版的claude命令。这次聊得更久,大概 4 小时,Prompt 累积得很大。突然报错:"Prompt is too long",然后直接退出。没有自动压缩,没有优雅的降级,只有冷冰冰的错误。

第三次崩溃:我试着用CLAUDE.md文件来持久化一些规则。但问题是,这个项目越做越复杂,CLAUDE.md 越来越长,每次启动时 Claude 都要先读完这个文件,反而占用大量上下文窗口。而且,CLAUDE.md 只是静态的规则,没法保存动态的会话状态。

我受不了了。上 GitHub 搜了一圈,发现我不是一个人


为什么现有方案不够用

在 anthropic/claude-code 仓库里,关于「会话丢失」「上下文失忆」的 Issue 有几十个:

  • Issue #28511: “Session lost when switching between Code/Chat/Cowork tabs”
  • Issue #21105: “Context truncation causes loss of conversation history”
  • Issue #1110: “Prompt is too long without warning”

Stack Overflow 的 2025 开发者调查显示:45% 的开发者表示调试 AI 生成的代码比预期更耗时,其中很大一部分原因是「上下文丢失导致的重复沟通」。

我研究了一下现有的解决方案:

方案问题
CLAUDE.md静态文件,无法保存动态会话状态;太长会占用上下文
tmux/screen只保持进程运行,不保存 AI 对话历史
Git版本控制代码,不保存 AI 交互过程
手动复制粘贴太累,容易遗漏

没有一个工具能真正解决「AI 会话生命周期管理」这个问题。


我是怎么设计解决方案的

我决定自己写一个工具,核心需求很明确:

  1. 自动捕获:能自动或手动保存完整会话(包括对话历史、文件状态、环境变量)
  2. 智能压缩:当接近上下文限制时,自动压缩历史,保留关键决策点
  3. 快速恢复:能在任意时刻恢复到任意会话的状态
  4. AI 友好:最好能作为 MCP 工具被 AI Agent 自己调用

我把它命名为ContextRoller(上下文滚轮),意思是让会话上下文像滚轮一样顺滑地流转。

架构设计

┌─────────────────────────────────────────────────────────────┐ │ ContextRoller Core │ ├─────────────────────────────────────────────────────────────┤ │ 📝 Session Parser │ Parse Claude/Cursor session files │ │ 🗜️ Compression │ Token-aware context compression │ │ 💾 Storage │ Local SQLite + optional cloud sync │ │ 🔌 MCP Server │ Expose as MCP tool for any AI agent │ └─────────────────────────────────────────────────────────────┘

三个压缩级别

我设计了三种压缩策略,应对不同场景:

  • Lossless(无损): 只合并重复消息、清理空白,适合需要完整历史的场景
  • Semantic(语义): 保留代码块、错误信息、关键决策,压缩普通对话,我的默认推荐
  • Summary(摘要): 生成高层次总结,只保留最后几条消息,适合紧急救场

踩了什么坑

坑 #1: Claude 的会话文件格式

Claude Code 在~/.claude/目录下保存会话,但格式是 JSON Lines(每行一个 JSON 对象),而且字段名在不同版本有变化。我花了半天时间逆向工程,才搞明白怎么正确解析。

坑 #2: Token 估算

要智能压缩,必须先知道当前用了多少 token。但 Tiktoken(OpenAI 的 tokenizer)不支持异步加载,而且不同模型的 tokenizer 不一样。最后我用了简化算法:token ≈ 字符数 / 4,虽然不完美,但够用。

坑 #3: MCP Server 的 stdio 模式

MCP 协议用 stdio 传输数据,这意味着我的 Server 不能用普通的console.log调试,否则会污染 JSON 消息流。我改了三次日志方案才搞定。

坑 #4: SQLite 在 Node.js 的兼容性

sqlite3包有原生依赖,在某些环境下编译会失败。我加了better-sqlite3作为 fallback,但打包体积又变大了。最后决定先用sqlite3,让用户自己处理环境问题。


最终实现效果

CLI 使用体验

# 在项目根目录初始化$ ctxr init ✓ ContextRoller 初始化成功!# 捕获当前 Claude Code 会话$ ctxr capture--name="用户认证模块重构"✓ 会话已保存: 用户认证模块重构 ID: session_1741401600000_a1b2c Token使用:12,345# 查看所有会话$ ctxr list 📋 保存的会话:1. 用户认证模块重构[claude-code]2026/3/810:00:00 ·12,345tokens session_1741401600000_a1b2c2. 数据库表设计[manual]2026/3/718:30:00 ·8,900tokens session_1741315200000_d4e5f# 会话太大,压缩一下$ ctxr compress session_1741401600000_a1b2c--level=semantic ✓ 压缩完成 原始Token:45,678压缩后Token:18,234节省:60.1%

MCP Server 集成

配置好后,Claude 自己就能调用 ContextRoller:

用户: 我昨天做的那个功能,现在想继续优化 Claude: 让我先查看您的历史会话... [调用 contextroller/list_sessions] 找到了几个相关会话: 1. "用户认证模块重构" (12,345 tokens) 2. "API 性能优化" (8,900 tokens) 您想恢复哪个? 用户: 第一个 Claude: [调用 contextroller/restore_session] 好的,我已经恢复了 "用户认证模块重构" 的上下文。 关键决策点: - 使用 JWT + Refresh Token 方案 - 密码用 bcrypt 加密,salt rounds 设为 12 - 已实现 /login 和 /register 接口 我们可以继续了!

代码实现

核心代码在这里,感兴趣可以看看:

GitHub: YaBoom/ContextRoller-zyt

几个关键模块:

// 智能压缩器exportclassContextCompressor{compress(session:SessionSnapshot,options:CompressionOptions):CompressedContext{// 三种压缩策略...}}// 会话解析器(支持 Claude/Cursor)exportclassSessionParser{asyncparseClaudeSession():Promise<ParsedSessionFile|null>{// 解析 ~/.claude/ 下的会话文件}}// MCP ServerexportclassContextRollerMCPServer{asynchandleToolCall(name:string,args:Record<string,unknown>):Promise<unknown>{// 暴露 capture_session, restore_session, compress_session 等工具}}

项目结构:

ContextRoller-zyt/ ├── src/ │ ├── core/ │ │ ├── types.ts # 类型定义 │ │ ├── storage.ts # SQLite 存储 │ │ ├── parser.ts # 会话解析 │ │ └── compressor.ts # 智能压缩 │ ├── cli.ts # 命令行界面 │ └── mcp/ │ └── server.ts # MCP Server ├── tests/ # 测试套件 └── examples/ # 使用示例

还有哪些不足

这个项目还很早期,有很多地方需要完善:

  1. 只支持 Claude Code: Cursor、Copilot Chat 的格式还没适配
  2. 压缩算法很初级: 没用 LLM 生成摘要,只是基于规则的压缩
  3. 没有团队同步: 目前只是本地 SQLite,多人协作时无法共享上下文
  4. Token 估算不准: 不同模型 tokenizer 不同,估算会有偏差
  5. 缺少 GUI: 纯 CLI,不够直观

如果你对这个方向感兴趣,欢迎来 GitHub 提 Issue 或 PR!


为什么选这个方向

做这个工具,不只是为了解决我自己的问题。

2025-2026 是 AI Agent 爆发的一年,但开发者工具明显滞后。我们有了越来越强的 AI,却还在用「手动复制粘贴」的方式来管理上下文。

我觉得Context 管理会成为 AI 原生开发的核心基础设施之一,就像 Git 是代码协作的基础设施一样。

ContextRoller 是我的一个实验性尝试。如果你也有类似的痛点,或者对这个方向有想法,欢迎交流!

GitHub: YaBoom/ContextRoller-zyt— 求 Star ⭐ 求 Fork 🍴

http://www.jsqmd.com/news/454171/

相关文章:

  • Hacker传说之不能说的秘密
  • 企业 FTP 替换该怎么做?
  • 【Java】踩坑实录:Spring Boot + Nginx 本地部署404终极排查:从80端口被占用到配置生效全流程
  • 微波驱动机器人:创新技术与未来应用
  • 2026年高性价比自动记录通话语音机器人厂商推荐 - 品牌2026
  • Entity Framework快速入门
  • WPF Multi-Touch 开发:Windows 安装多点触屏模拟器
  • Android整体印象
  • 2026厂房管道安装改造扩建公司哪家强?厂房管道安装工程专业公司推荐 - 品牌2026
  • rfid智能书柜排名 - 聚澜智能
  • 跑回归为什么平行趋势有些期自动Omit掉了
  • 如何在保障业务连续性的前提下实现 MySQL 负载的平滑平移?
  • 帝国cms部署https(ssl)后会员无法登录
  • Windows Azure Platform体验():SQL Azure
  • Java 程序员 和 .NET 程序员
  • 2026年超声波清洗机厂家深度测评:基于清洗效率与行业适配的五维对比。 - 品牌推荐
  • Windows Azure Platform体验():Windows Azure
  • 2026年 无机纤维喷涂厂家推荐排行榜:硬质/外墙/高铁机场/电梯井/地下室/车库顶板/厂房/矿物/超细无机纤维棉喷涂,专业防火隔音工程解决方案 - 品牌企业推荐师(官方)
  • C#会重蹈覆辙吗?系列之:华而不实的C#析构器
  • 2026年美国移民公司深度测评:基于法律合规与案例实效的五维对比分析 - 品牌推荐
  • 综述:编程语言的发展趋势及未来方向
  • 2026无纸化会议室会议系统优质品牌推荐榜 - 优质品牌商家
  • Windows上安装Go并配置环境变量(图文步骤)
  • 开发者必备:【Java】 设计模式从入门到精通
  • 2026 年贵州省变频器厂家优质推荐 本土实力企业甄选指南 - 深度智识库
  • 2026年高端智能语音机器人厂商盘点及智能语音应答机器人实力对比 - 品牌2026
  • 基于HFSS的宽带圆极化天线设计
  • [继续讨论]关于Windows PE和.net assembly的加载
  • 2026厂房无尘室洁净室工程改造扩建公司哪家强?厂房无尘室洁净室专业公司推荐 - 品牌2026
  • 浏览器自动化技术全景:Playwright + Midscene.js 核心原理与实战方案