会话管理
每次启动 CrabCode 是一个会话。/resume 恢复、/rewind 回滚到任意一步、/rename 改名、/export 导出、-c/-r 直接从命令行接上。
是什么
每次跑 crabcode 启动都开一个会话(session)——对话历史、工作目录、模型选择、文件改动轨迹全在这一个会话里。
会话以 JSONL 格式存盘,关掉终端不丢;下次能挑回来继续接着聊。CrabCode 把会话按"项目"分组——同一个 git 仓的所有会话归到一组,方便挑回。
何时会用到
- 终端被关 / 系统重启了,要接上昨天的活
- 一通操作走错了路,想回到三步之前重来
- 想把对话导出当文档 / 给同事看
- 同一个项目里堆了几十个会话,想搜出"上周改 auth 的那次"
存储位置
会话存在配置目录下的 projects/:
~/.crabcode/projects/<项目路径 sanitize 后>/<session-id>.jsonl~/.crabcode/projects/<项目路径 sanitize 后>/<session-id>.jsonl<项目路径 sanitize 后>是你启动 CrabCode 时所在目录的安全化文件名<session-id>是 UUID,每个会话独立- 文件是 JSONL(每行一个 JSON 事件),可以直接 grep / cat
切换工作目录 = 切换"项目"分组。同账号在不同项目的会话之间互不可见。
/resume —— 挑一个会话接上
/resume(别名 /continue)打开会话挑选器:
- 列出当前项目所有会话,按修改时间倒序
- 显示第一条用户输入作为预览
- 支持模糊搜索(按关键字过滤)
- 选中后整段历史读回、继续
带参数版:
/resume <session-id> # 直接指定 ID 恢复
/resume <搜索词> # 用搜索词预填挑选器/resume <session-id> # 直接指定 ID 恢复
/resume <搜索词> # 用搜索词预填挑选器CLI 启动时直接恢复
不用进 TUI 也能恢复,这两个 flag 在命令行就能用(src/main.tsx:435-441):
crabcode -c # 接上当前目录最近一个会话
crabcode --continue # 同上(长写法)
crabcode -r # 打开会话挑选器(互动模式)
crabcode -r <session-id> # 指定 ID 恢复
crabcode -r "fix auth bug" # 带搜索词进挑选器crabcode -c # 接上当前目录最近一个会话
crabcode --continue # 同上(长写法)
crabcode -r # 打开会话挑选器(互动模式)
crabcode -r <session-id> # 指定 ID 恢复
crabcode -r "fix auth bug" # 带搜索词进挑选器-c / -r 适合脚本化场景:CI 接力上次跑、IDE 集成里接上前一个上下文。
--fork-session
crabcode -r <id> --fork-sessioncrabcode -r <id> --fork-session--fork-session 在恢复的瞬间分叉出一个新的 session id——原会话不动,新会话从同一时点开始独立演化。适合"想拿这次结果当起点试两条路"。
/rewind —— 回滚到任意一步
/rewind(别名 /checkpoint)打开消息选择器,让你回到对话里某一条用户消息。回滚时可以选:
| 选项 | 效果 |
|---|---|
both | 对话回滚 + 代码恢复(撤回那之后所有文件改动) |
conversation | 只回滚对话,文件保持当前状态 |
code | 只恢复代码,对话历史不动 |
summarize | 把那一点之前的对话压成摘要,继续往后 |
summarize_up_to | 压缩到选中位置 |
nevermind | 取消 |
代码恢复靠 CrabCode 内部维护的"文件历史"——它在每次编辑前快照原文件,回滚时按记录写回。这意味着回滚是安全的,不需要 git 也能撤销,但前提是改动是通过 CrabCode 工具做的。
/rename —— 给会话起名
/rename <name> # 显式起名
/rename # 不传参 → 用小模型基于对话内容自动起名/rename <name> # 显式起名
/rename # 不传参 → 用小模型基于对话内容自动起名起名后在 /resume 挑选器里直接显示,找起来比"第一条 prompt 截 50 字"友好。
/export —— 导出对话
/export # 弹对话框,让你选文件名 + 路径
/export <filename> # 直接写到当前目录 <filename>.txt/export # 弹对话框,让你选文件名 + 路径
/export <filename> # 直接写到当前目录 <filename>.txt导出格式是纯文本——把整段对话渲染成可读的转录,含工具调用与输出。默认文件名是 <时间戳>-<首条 prompt 摘要>.txt。
适合:
- 把调试过程贴给同事
- 归档复盘
- 把 CrabCode 跟你的来回喂给另一个模型当上下文
隔离
- 跨账号:登不同账号 = 看不到对方的会话(每个账号独立的 transcript 目录)
- 跨项目:默认只列当前项目的会话;要全局搜索从
/resume挑选器里选"all projects" - 跨设备:本地存储,不会自动云同步——会话只在你存的那台机器上
排错
| 现象 | 检查 |
|---|---|
/resume 看不到旧会话 | 你启动 CrabCode 的目录是否变了?项目 sanitize 后路径不同 |
| 会话挑选器太慢 | 旧会话堆积过多;可手动归档 ~/.crabcode/projects/<old>/ |
/rewind 找不到要回的那条 | 消息太旧被压缩 / 滚出窗口;用 /export 找出来后手动复刻 |
| 多设备想同步 | 用 git / rsync 自己同步 ~/.crabcode/projects/(自担风险) |