
1. 先说结论PowerShell里关掉的Claude Code对话到底能不能接着聊很多朋友第一次用Claude Code的时候都遇到过这个场景在PowerShell里敲了几轮提问AI帮你改了不少代码聊得正起劲突然终端被误关了、电脑重启了、或者一个手滑按了CtrlC再打开PowerShell重新输入claude发现是全新的对话之前上下文全没了。先说结论能接着提问只要你会用对恢复命令绝大多数情况都能找回之前的对话。Claude Code本身支持会话持久化它的历史记录会按项目路径自动落盘并不是关掉终端就清空。但这里有几个关键前提和操作细节比如你退出时是不是正常退出、用的是哪个恢复命令、以及PowerShell环境下的一些转义和编码坑这些才是大多数人找回失败的真正原因。这篇文章我把会话恢复这块的机制、命令、踩坑经验全部拆开讲覆盖PowerShell和VS Code终端两种常见场景顺手把恢复后上下文不完整、400错误这类衍生问题也一并解决希望能帮你把这套CLI工具用得顺一点。2. Claude Code的会话机制真相为什么关掉不等于删除2.1 会话到底存在哪里Claude Code的会话不是只活在内存里的临时东西。它在每次启动、每次交互时会把prompt、assistant回复、工具调用等消息流增量写入本地的项目目录具体位置在用户主目录下的隐藏文件夹里按你打开项目时所在的路径做了分组。本质上每一个对话会话就是一个独立的记录文件关掉终端只是切断了交互通道落盘的数据还在。所以能不能恢复这个问题核心是进程是不是正常走到了会话保存这一步。如果你用exit、CtrlD这类正常退出方式Claude Code会完整收尾并保留历史如果是强制杀进程、直接关标签页、电脑断电文件里可能只写了一半恢复的时候就会缺胳膊少腿。2.2 恢复命令有两个别搞混Claude Code给你提供了两条恢复路径claude --continue简写claude -c直接接着最近的会话继续提问。这是最常用的适合我就一个对话刚关了现在想接着聊的场景。claude --resume像聊天记录列表一样列出所有历史会话让你用方向键或编号选择具体哪一条。两者的差别在于--continue是盲选最近那一个--resume是让你从清单里挑。如果你平时一个项目会话开得少那--continue就够了如果一天开十几个会话建议用--resume按ID或按时间挑。2.3 为什么不推荐直接再开一个有人可能觉得既然代码工程都在本地重新开一个会话也无所谓把之前需求再描述一遍不就行了。小项目确实可以但项目一大你之前喂给Claude Code的几十轮上下文、约束条件、错误日志、中途改动的细节根本不可能用一段话补回来。而且重新描述本身就容易变形漏了某个约束AI后面就可能跑偏。会话恢复的价值就在这里上下文是连续的AI记得你上一个问题、你修正过什么、你最后让它做到哪一步。这个机制跟你浏览器里的历史记录逻辑很像关了标签页只要没清历史下次打开还能回到那一页。但前提是你没进无痕模式。3. PowerShell里恢复对话的标准操作流程3.1 最基本的恢复流程假设你刚才在PowerShell中运行过claude然后聊了十几轮关掉了窗口。要恢复重新打开PowerShell切换到同一个项目目录然后claude --continue就这么简单。它会加载最近一次会话的历史恢复之后你直接打字提问就行。如果你想从历史列表里选claude --resume这时终端会显示一个交互式列表包含会话ID、时间、项目路径等信息方向键移动、回车确认。选完之后界面看起来跟之前一样但注意它不会把完整消息历史全部重新打印出来你能看到的是会话被重新加载的提示之后继续提问即可。3.2 路径问题为什么恢复时老说找不到历史我的经验里恢复失败最常见的一个原因是目录对不上。Claude Code的会话记录是按项目路径组织的比如你在D:\code\mydemo目录启动的claude那它记录就挂在mydemo这个项目分组下。如果你恢复时跑到了D:\code甚至别的盘它当然找不到之前的对话。所以恢复之前先确认cd D:\code\mydemo claude --resume另外Windows下还有路径大小写、盘符格式的问题。你之前用D:\code\MYDEMO启动这次用D:\code\mydemo路径字符串不完全一致可能也会搜不到。建议平时固定用同一个方式进入项目目录别今天小写、明天大写。3.3 PowerShell与CMD、Git Bash的差异很多Windows用户其实有多个终端PowerShell、CMD、Git Bash来回切。这里有个需要留神的地方Claude Code恢复会话时项目路径的判定跟当前工作目录有关而不同的终端启动时初始目录不一样。比如Git Bash默认可能进入用户主目录PowerShell默认进的也是用户主目录如果你没主动cd那你恢复时根本不在之前的项目路径下自然找不到。我建议把恢复操作固定在一个终端里比如以后都在PowerShell里做并且进入项目目录后再跑恢复命令。这样最稳妥。3.4 编码问题PowerShell下中文乱码影响会话恢复吗热词里很多人搜PowerShell乱码。乱码这事分两个层面界面显示乱码不影响会话恢复因为你恢复的是记录文件文件里UTF-8编码的消息和终端显示编码不是一回事。终端显示乱码是控制台代码页的问题修复方法是把代码页切到UTF-8chcp 65001或在PowerShell里设置[Console]::OutputEncoding [System.Text.Encoding]::UTF8会话文件名或内容乱码如果你之前是在乱码状态下提问的有些中文内容可能被终端错误编码后写进记录恢复出来会是乱码。这种情况只能说是环境没配好导致的脏数据真要解决就得改PowerShell启动时的默认编码。注意恢复会话前先修好编码否则你看着一堆乱码AI输出的中文也是坏的容易误判成会话损坏。4. 恢复之后上下文不全这些细节你可能忽略了4.1 正常退出与被杀的区别我上面提到正常退出exit、CtrlD才能保证会话完整落盘。但在PowerShell里很多人习惯直接点终端右上角的×这在Windows上等于强制结束进程Claude Code可能还没来得及做最终保存结果就是恢复时历史只到某一轮甚至加载失败。我自己试过的场景用exit退出恢复完整上下文连续。用CtrlC中断正在生成的内容然后退出一般也能恢复但最后几轮不完整。直接关闭窗口偶尔能恢复偶尔不能完全碰运气。所以养成好习惯不要用杀进程的方式退出Claude Code。即使它一时半会儿没响应也先按几次CtrlC回到输入状态再输入exit。4.2 恢复后AI失忆了怎么办有时候恢复成功了但你再提问AI好像不记得之前的重要约定比如你让它所有注释都用中文这种全局要求它后面又改用英文了。这不一定真是失忆而是Claude Code的机制导致的它恢复会话时历史消息虽然都在但模型可能会因为上下文长度、系统提示的权重没有把早期约束当成强指令。解决办法有两个恢复之后把关键的约束条件重新说一遍比如记住本项目注释一律用中文。对于重要的项目级约束写进项目里的配置文件比如在项目根目录维护一个CLAUDE.md之类的说明文档让每次会话启动都能自动加载这个上下文。这样即使换新会话全局约束也不会丢。4.3 恢复时上下文太长被截断如果你之前的会话特别长恢复后继续提问可能提示上下文已满或者报400错误。这是因为模型对上下文token数量有上限历史消息太多时放不进新的请求。Claude Code在这种情况下一般会做压缩或截断但有时会直接报错。热词里有人搜claudecode apierror 400 maximum context就是这个坑。这种情况下的处理如果是短会话直接继续只要没超限就没事。如果确实超了建议开新会话用claude --resume查看旧会话里最后几轮内容手动把关键结论复制给新会话。粗糙但有效。提示Claude Code有自动压缩机制但我实测它压缩的质量不稳定。真正怕丢上下文的还是靠小步提交勤开新会话来减少单会话内容膨胀。5. 实操记录从半路被杀到成功恢复的完整过程5.1 一次真实的中途断电恢复我之前在做一个小工具时PowerShell里一路聊了大概四十多轮突然电脑蓝屏重启重启后我第一件事就是重新打开PowerShellcd到项目目录输入claude --resume列表里确实有刚才那个会话按时间排序在最上面。我选中恢复后发现它复现了项目上下文。不过有个细节最后几轮关于错误日志的提问没恢复出来聊天记录戛然而止。好在那几轮本身价值不大损失可接受。5.2 如果不小心开了一个新会话怎么返回还有一种情况你在PowerShell里直接输入claude它开了个新会话你觉得不对想切回去。这时候不要慌退出当前会话输入exit再用claude --continue它会继续最近的那个会话。注意--continue本身是接最近的如果你刚才的新会话也被记录为最近那你continue可能是接着新会话而不是旧会话。这种情况下建议用claude --resume看列表选真正那个你想要的。5.3 用VS Code终端和PowerShell恢复的区别很多人是在VS Code里集成了Claude Code用VS Code自带的终端窗口默认也是PowerShell操作。区别在于VS Code的终端有复用进程机制有时候你关掉Claude Code终端进程还在再次运行命令时环境变量、路径状态可能还保留着恢复起来更顺。但VS Code终端也会带来一个问题如果VS Code窗口没关Claude Code进程可能仍在后台挂着你重新运行claude命令时它检测到已有实例可能让你选择附加还是新建。在这种状态下别乱选看清提示通常你选attach附加就能回到原来那个会话。6. 会话管理的高级玩法从恢复到自动化6.1 用脚本固定项目路径和恢复命令如果你经常在多个项目间切换恢复会话时老担心路径错了可以写一个PowerShell脚本比如resume-demo.ps1Set-Location D:\code\mydemo claude --resume以后每次恢复直接.\resume-demo.ps1一来路径不会错二来省去手动cd。如果觉得这样不够灵活也可以用函数function Invoke-ClaudeResume { param([string]$Path) if ($Path) { Set-Location $Path } claude --resume }这样你随时可以切到不同项目恢复还能记录到PowerShell配置文件里。6.2 清理历史会话恢复列表太多怎么办用久了历史列表一大堆看着心烦。Claude Code的历史记录文件在用户主目录下的.claude目录里按项目分目录存放。如果实在想清理直接删除对应项目的目录即可。注意删除前建议备份尤其是你还有用的会话。删了就真没了。6.3 开机自启PowerShell会影响恢复吗热词里有人搜PowerShell开机自启脚本这个和会话恢复没有直接关系。但如果你的开机自启脚本会切换默认工作目录、设置奇怪的别名确实可能干扰Claude Code的项目路径判定。比如你设置了Set-Location到某个目录或者给claude命令起了一个别名而别名指向了错误参数恢复命令就会出问题。排查时仔细看命令行前的当前路径提示如果不在项目目录先cd回来再操作。7. 常见问题速查表与避坑心得问题现象解决方案找不到历史会话--continue提示没有可恢复的会话确认是否在同一项目路径用--resume看列表恢复后上下文少了几轮最后几轮对话丢失退出时用exit而不要直接关窗CtrlC中断后再退出恢复后中文乱码对话内容变成乱码在PowerShell设置UTF-8编码检查chcp输出恢复后报400错误提示maximum context开新会话手动把旧会话关键信息带过去恢复后AI失忆之前的项目约定被忘记重新声明约束把长期约束写进项目配置文件VS Code里重复启动提示已存在实例看清提示选attach不要直接开新会话新会话覆盖了恢复--continue接的是新会话用--resume选指定会话不用--continue7.1 我最想提醒的三件事第一会话能恢复不等于你的环境配置能恢复。如果你之前用的是某个特定模型配置、自定义了系统提示恢复会话后最好确认一下这些配置还在否则上下文虽然接上了但行为方式变了。第二不要依赖会话恢复来保存代码改动。Claude Code改的代码是直接落在文件里的会话历史只是对话记录。代码改了就是改了不会因为会话关闭而消失。反过来你改了代码只要会话历史还在AI仍然能感知。第三高频操作者建议用版本管理工具定期备份会话目录。历史记录文件虽然不是特别大但积累多了也占空间而且一旦损坏前面的心血就没了。7.2 我对这个问题的最终看法从实际体验来看Claude Code的会话恢复机制在绝大多数场景下是可靠的特别是你按要求正常退出并且在同一个项目目录下恢复。PowerShell下的主要障碍不是功能缺失而是使用习惯和环境配置问题比如退出方式、工作目录、编码设置。把这些基本项弄对你完全可以把一个对话暂停几天再回来接着聊AI不会忘记你之前让它做的事。最后再分享一个小技巧在我自己这边已经把进项目目录 claude --resume设成了PowerShell快捷键一步到位。好的工具靠的是细节会话恢复这种看似不起眼的功能关键时刻能帮你省下大量重新描述需求的时间。