会话管理
Cockpit 里的会话指一个引擎上的一段连续对话 —— 绑定一个 Agent tab。每个 tab 就是一个会话;整个 UI 围绕"同时跑多个会话还不至于乱"来设计。
Tab 就是会话
打开 Agent 面板(Cmd+1),看顶部的 tab 条。每个 tab:
- 有自己的引擎选择(Claude / Codex / DeepSeek / Kimi / Ollama)
- 有自己的工作目录(默认当前项目)
- 有自己的对话历史
- 有自己的 token / 成本计数
- 并行运行 —— 在一个 tab 发消息不会暂停其它 tab
点 tab 旁边的 + 按钮新开(带下拉选引擎)。鼠标悬停 tab 上,右侧出现 × 关闭。拖动 tab 重排序。
固定会话
鼠标悬停 tab 上,右上角出现一个星号图标 —— 点击切换固定(填充星号 = 已固定,空心星号 = 未固定)。不是右键菜单,就是 hover-icon-click。
固定的会话会:
- 跨 Cockpit 重启保留 —— 存到 Cockpit 数据目录里的 pinned-sessions 文件。
- 在左侧栏底部出现一个带数字角标的星号按钮(几个固定会话就显示几)。
- 点这个星号按钮弹出固定会话面板,在侧栏右侧浮出:每行一个固定会话,显示项目名 + 自定义标题(或 session ID 前 8 位),带:
- 拖手柄(6 点图标)拖动重排
- 铅笔图标改自定义标题
- × 图标取消固定
- 一键回到这个 tab。
适合那些反复回到的长期会话 —— 跨日的"主线工作"。
会话浏览器(Session Browser)
点左侧栏顶部的网格图标打开会话浏览器 —— 一个全屏模态框,按项目分组列出你历史上所有的会话:
- 顶部有搜索框,按项目路径关键字过滤。
- 每个项目可展开,展开后看到这个项目下的所有 session(每条带时间、首条消息预览)。
- 还能新增项目目录。
注意:浏览器是分层结构(项目 → 会话),不是跨所有 session 的扁平模糊搜索。要找的会话记不清在哪个项目,先按项目过滤、再展开找。
Enter / 点击会话项跳到 tab(必要时自动创建)。
Fork 一个会话
右键任意消息 → Fork from here。Cockpit 创建一个新 tab,预加载到这条消息为止的对话历史 —— 服务端会读原 session 文件,在指定消息处截断,把前面的复制成新文件。原 tab 完全不动。
适用于:
- 探索替代方案。 "如果用 Postgres 而不是 Redis 呢?" —— fork 出来探索,不污染原线索。
- 拆分长会话。 一段对话涨到几万 token 时,在自然断点 fork,继续走。老上下文留在原 tab 里随时可查。
- 跨引擎 A/B 对比。 把同一段对话 fork 到 DeepSeek tab 和 Claude tab,问下一个问题。
会话完成 toast
当你不在那个项目的 tab 上时,如果一个会话生成结束(AI 停了,没有 token 在流),Cockpit 在左下角弹小 toast:
my-service已完成 —— "已加上 60 秒 TTL 的 Redis 缓存。"
toast 显示项目名 + AI 最后一条消息的预览。点击跳到对应 tab。toast 5 秒自动消失;悬停可暂停倒计时,移开 2 秒后继续走。
你正在看的那个项目的 tab 完成时不会弹 toast —— 你都在看了不用打扰。
正是这一个功能让 5+ 并行会话变得可行:你启动它们、切到别的面板、做别的事,它们准备好时拍你肩膀。
Token 与成本
每个 tab 跟踪每条消息的输入 / 输出 token,并按引擎价格表换算成美元。点击顶栏 token 按钮打开 Token 统计 模态:
- 当前会话总量
- 按模型(每个引擎下面具体到模型变体)拆分
- 按天的 token 使用图
成本是估算 —— 最终账单以你的服务商上报为准。Ollama 永远显示 $0.00(它不在价格表里)。
实用布局
用几天后常见的模式:
- 3–5 个固定会话给主要工作线 —— 通过侧栏底部星号按钮一键回。
- 2–3 个临时 tab 给一次性问题 —— 关掉就完了。
- 1 个"草稿" tab 在旁边做
/qa澄清、/cg探索等。
会话浏览器是粘合剂:任何时候想不起来某个东西在哪,点侧栏顶部网格图标。