工作区与会话管理
Kiki 把每次对话持久化为一个「会话」,保留消息历史和元数据,可以随时关闭终端或浏览器后再回来继续。桌面版、浏览器 GUI 和 CLI/TUI 读写同一份会话数据。本页介绍如何管理工作区与会话、使用任务看板、恢复和派生会话,以及导出和压缩上下文。
会话存储
所有会话保存在 $KIKI_HOME/sessions/ 下(默认 ~/.kiki/sessions/),按工作目录分组存放。日常使用不需要关心这些文件——它们主要在你需要调试、排查或备份会话时才有用:
~/.kiki/
├── config.toml
├── session_index.jsonl
└── sessions/
└── <workDirKey>/
└── <sessionId>/
├── state.json
└── agents/
├── main/
│ └── wire.jsonl
└── <subagentId>/
└── wire.jsonlstate.json:会话标题、创建时间等元数据。agents/*/wire.jsonl:Agent 的事件流记录,用于会话恢复和回放;同时记录发给模型的请求轨迹(工具定义、请求参数、MCP 工具清单),方便排查问题。
kiki session seal 会保留每个 wire.jsonl,不会缩小它。活动会话会被拒绝。已经开始的读取会等待。封存损坏时读取失败,而不是悄悄改用原始文件;kiki session unseal 去掉封存后,之后的读取重新使用原文件。
注意
请勿手动编辑 sessions/ 目录下的文件,否则可能导致会话无法正常恢复。
桌面版和浏览器 GUI 可以记住你为新会话选择的模型、思考力度、工作区、工作目录和配置档案(profile),导航和刷新后仍然保留。设置里的「输入框 → 保留输入草稿」控制这件事,关掉会清空已保存的内容。当前打开的页面里未发送的输入不受影响,但下次刷新就不会再恢复了。这部分内容与上面的会话文件分开存放。
已有对话重新打开时使用已提交的模型和思考力度,输入框旧的显示值不会撤销后来的模型切换。已确认的模型选择及其直接、压缩或全新上下文方式,会在绑定刷新时留在草稿中,由下一条提交的消息应用;该消息被接受前,不会提前切换对话。已完成的模型切换恢复后仍是已完成,不需要重试。
任务看板
任务看板由可选官方插件 kiki-task-board 提供,宿主需支持插件协议 0.4.1 及以上版本。安装并启用插件后,在能力 → 扩展与工具 → 插件中打开它的工作区面板,再选择工作区。面板和智能体工具 plugin__kiki_task_board__BoardRead、plugin__kiki_task_board__BoardWrite 读写同一批卡片。
没安装、已停用或已卸载插件时,用过它的对话仍能打开并发送普通消息。历史里的 BoardRead、BoardWrite 调用及已记录的结果保持不变。再次调用不可用的工具时才报告缺少工具,不会伪造成功结果或重放旧的写入。
卡片保留原存储位置。taskBoard.storage 为 auto 时优先复用兼容的工作区存储,否则用 sessions/<workspaceId>/.board;global 用 Kiki home 下的 boards 目录;fixed 用绝对路径或相对工作区的路径。改这项设置不会搬迁旧卡片,读卡片也不会改写卡片文件。卡片记录需求,与后台任务和每个智能体的待办清单分开。
压缩上下文不会自动附加关联卡片,需要时可让智能体通过插件读取。卡片状态不会随 Todo 列表或 Agent 运行结束自动更新。
搜索对话
用左栏搜索或 Ctrl-K 快捷切换器,按标题、工作区或消息正文找对话;Ctrl-F 在当前显示的对话中查找。消息搜索默认只包含用户与 Assistant 正文,开启包含工具输出(会话内查找中的终端图标)后才纳入已保存的工具结果和 Shell 输出。两种范围都不搜索思考块、工具名称和工具输入。你在引用或代码中写的文字仍可搜索。
切换包含工具输出会更新命中与计数,不混用另一范围的分页。会话内查找可以加载命中的更早轮次,并展开折叠的输出。在消息视图中,工具输出命中提供在过程中查看入口,打开并高亮输出,同时保留查询。原始历史始终可读,不受搜索范围影响。
左栏和快捷切换器会区分内容搜索失败、不可用与没有命中。出现重试入口时可直接重试,本地标题命中和查询仍保留。
启动与恢复会话
桌面版或浏览器的「新会话」页面里,可以选已有工作区、填写项目的绝对目录,或选择「自动创建工作区」(没有已注册工作区时默认选中)。选自动创建时,首次发送会在 $KIKI_HOME/workspaces/(默认 ~/.kiki/workspaces/)下新建目录、注册为工作区,并在那里开启会话。如果明确选择的工作区后来被删除,该选项会一直保持无效,直到你换一个或改回自动创建,Kiki 不会悄悄打开另一个工作区。目录结构和清理影响见数据路径。
左栏只选中一个工作区时,「新会话」会使用该工作区。工作区列表加载失败不等于列表为空,草稿和选择都会保留。可以点「重试」、明确选择自动创建,或填写文件夹的绝对路径。
按工作区查看时,真实工作区的标题行会在悬停、键盘焦点或触屏上显示加号。这个加号在该行自己的工作区新建草稿,而不是当前打开的对话所在的工作区,也不会改默认工作区或折叠分组。已置顶和未分组标题不是工作区,所以没有加号。页面上有未保存的编辑时仍会先询问,已经写下的草稿会保留。
要直接使用 Profile Markdown 文件,打开输入框旁的执行菜单,选择「使用配置档文件…」,输入连接主机上的路径,预览后点「使用此配置档」。相对路径以选中的工作区或目录为起点;自动创建工作区时请填绝对路径。合法文件不必出现在主配置档菜单中,选择它也不会注册或复制源文件。预览失败时草稿会保留,可以重试或换一个配置档。
停止创建会保留草稿,并等待请求结果,不会撤销服务器上已创建的会话。确认创建成功后,可以保留原选择再次发送来复用该会话,或点「打开已创建的会话」而不发送消息。
创建结果未确认时,保留原选择再次发送会复用原来的创建请求,也可以打开对应会话核查。开启「保留输入草稿」后,草稿与创建身份会一并保留到刷新之后;刷新不会自动重发。
打开已保存的会话只读取历史,不会唤醒尚未运行的 Agent;选择 subagent 只读取它自己的历史,不加载 main agent 的对话。发送、编辑或重新生成消息,回答审批或提问,以及 steer 提示词时才会激活会话。激活失败则不会发送,历史仍可阅读。浏览会话不会停止其中正在运行的工作。
subagent 沿用同一模型恢复时,时间线显示「已恢复 · 继续使用…」,不显示「已切换到…」。真正换模型、更新思考强度和重建上下文各有对应的状态行。
GUI 首先显示少量最新消息,向上滚动时自动加载相邻的更早一页;仅保持对话打开,不会在后台读完整段历史。只要还有更早一页,当前窗口没有可见消息时也可使用「加载更早的消息」。可见消息和展开的条目按需加载详情。跳转到旧消息或返回已保存的阅读位置时,会持续读取直到找到目标;自己滚动会取消旧跳转。滚动到旧消息时,界面可能重新读取其预览,以控制阅读缓存占用。离开对话会取消待完成的读取,不会停止 Agent 工作。真实读取失败时保留已经加载的消息并提供重试;阅读超时控制一次读取最多等待多久。
消息记录只加载了一部分时,右下状态区会显示「还有消息记录」,即使已加载的消息里没有待发送项。展开后点「继续加载」,每次读取一页;读取失败时可「重试」,现有排队行不会消失。进度统计包含已完成的消息记录,不是待发送消息的数量。队列为空时,输入框上方不留空条。
每次直接运行 kiki 都会创建新会话。以下方式可以恢复历史会话:
继续当前目录最近的会话(-c 是 --continue 的短写,与首次启动中的 kiki -c 相同):
kiki --continue恢复指定会话(通过会话 ID,abc123 只是示例):
kiki --session abc123交互式浏览历史会话并选择(--session 不带参数时的行为):
kiki --session注意
--continue 与 --session 互斥,不能同时使用。
GUI 中,已保存但不再可用的模型、配置档案或思考力度会保留原值并显示诊断信息,发送前请选一个有效值,界面不会悄悄换成别的模型或配置档案。列表还在加载或目录请求失败时的报错,不代表你保存的选择有问题。
在 TUI 中切换会话
不离开当前终端也可以管理会话,以下斜杠命令仅在 Agent 空闲时可用:
/new(别名/clear):切换到新会话,丢弃当前上下文。/sessions(别名/resume):浏览并恢复历史会话。/fork:派生当前会话(详见下文)。/title <text>(别名/rename):设置会话标题方便识别;不带参数时显示当前标题。
GUI 会话恢复与活动历史
左栏里,由另一个线程创建的线程默认嵌套在创建者下面。在该行的菜单里选「恢复顶层显示」可以把它提为独立顶层条目,选「恢复嵌套显示」放回去。这只影响显示,从属关系不变,同一浏览器或桌面空间内刷新、重启后仍保留。按最近活动排序时取该线程所在家族内最近一次活动,因此嵌套线程有新活动会在下次列表刷新之前就把父线程往前带;每一行仍显示自己的最后消息时间,提升到顶层的线程按自己的位置和时间分组独立排列。
同一个菜单还提供「复制线程链接」和「添加到当前对话」,后者将引用放入当前打开的对话。
归档线程会连同仍附属的对话一起归档,包括更深层的后代和左栏尚未加载的对话。显式提升为顶层的线程及其后代,在祖先归档时保持独立;归档这个顶层线程自身,仍会带上它的附属对话。仅因筛选或工作区分组而显示为顶层,不算提升独立。归档保留历史,不移除 worktree。若只有部分对话归档成功,可重试完成剩余项。恢复线程只恢复该线程,不会自动恢复过去已归档的所有后代。
打开设置 → 会话 → 管理归档对话,可按标题、工作区和时间浏览已保存的归档。搜索会匹配各页的标题与工作区;打开对话可读历史,不会将它恢复为未归档。返回归档管理页可继续浏览。
单项删除会永久删除该对话及仍附属的已归档后代;显式提升为顶层的线程保持独立,未归档对话保留。删除全部归档对话覆盖当前连接 home 中所有归档,不限当前页,也不受搜索条件限制。两项操作都会先确认,取消不会改动数据;删除无法撤销。开始后页面会保持等待,完成时刷新列表。若部分条目失败,页面会列出未删除条目,不会显示全部成功;重试前请先核对刷新后的列表。
打开或刷新已有对话失败时,GUI 留在原对话,保留已加载的历史和草稿。错误显示在历史上方,有 request ID 时一并显示。选择「重试」重新读取对话;临时读取失败不会新建会话。
通过 Kiki 修改排队提示词的正文或投递时机后,恢复仍能识别同一条提示词,不需要还原原文或重复发送。Kiki 后端正常退出时,尚未开始执行的消息仍保留为待处理;恢复后,请先核对保存的队列,再继续执行。已经开始执行但结果未知的消息不会自动重发,决定重发前请先查看已保存的结果。明确取消的请求仍保持取消,包括归档或删除会话时取消的请求。
已保存的会话还可以在 Agent 受理之前把一条消息留作恢复。这种保存不是已经开始的轮次:页面会说明服务器已保留这条消息等待恢复,尚未开始执行。等待确认或失败的保存用同一条消息恢复,不要另发一条。临时会话,或保存状态仍未知的会话,不会留下这份恢复副本,也不算已受理。
若轮次已执行完但存储暂时不可写,Kiki 会短暂重试保存同一结果,不重新执行轮次。较长故障会让轮次继续等待保存;存储恢复可写后,提交下一条提示词会先重试原结果的保存,再继续工作。等待保存不代表结果已经落盘。
已解决的问题、审批、标记和已结束的后台任务会以紧凑条目留在时间线里。已完成的工作可以收在「已处理」下,展开看每一条。展开提问可读完整问题,已回答的还能看到保存的回答,已忽略或已过期的问题则显示当时的选项。已完成任务的输出仍在任务历史里。文件引用可以预览、打开或在文件夹中显示,预览按需生成,原件随时可以打开或下载。
发送的附件和工具结果里的图片,滚动到可见位置就会自动显示,不需要点一下才加载。点一下是看原图;真的加载失败时会给出重试。查看器里保留了它自己的下载,图片下面不再重复放下载链接。
用户消息中的线程链接、附件、引用和批注会各自显示,自动附加的提示词说明不进入正文气泡。你自己写的 XML、代码和块引用仍然可见。没有保存展示元数据的旧消息保持原样。
点击消息中的文件引用,如 src/example.ts:12:7 或 docs/example.md#L12-L20,会在预览标签中定位到对应源码。行内代码和普通文字里的文件引用也可点击。Markdown 的行号引用会打开「源码」,[章节](docs/example.md#heading) 这样的链接则定位到渲染后的标题。文档中的 #heading 留在当前文档,相对链接从该文档的目录解析。再次点击引用会复用标签,保留未保存的编辑;目标不存在或超出范围时,文件仍会打开,并显示定位提示。
其它 Markdown 预览默认是渲染结果,切到「源码」可以看文本,桌面版有写入通道时也能在那里编辑。渲染视图支持表格、公式、图表,以及相对 Markdown 文件链接的图片。文件超过约 512 KB 时首屏先显示开头,其余部分在后台继续加载;到这个大小仍然是只读的,也就是说可以用「源码」阅读,但编辑要留给更小的文件。后台读取失败时,视图会说明并提供重试。
GUI 用量统计
「用量」默认打开「实时」,展示模型请求、运行中的智能体和并发规则,不加载历史用量。选择「历史」可查看浏览器本地时间的当天。已有的历史、筛选和会话链接仍打开对应历史视图;URL 里指定的时间范围优先,已保存的全历史视图不会覆盖当天默认。跨过午夜或浏览器时区偏移变化时,页面会更新日期边界。
先看费用趋势,点一根柱子可查看该时段的消费来源。来源可按模型、提供商、智能体档或工作区分组;选择一项只收窄对应维度,日期范围与其他筛选保持不变。按需打开会话记录,再用已记录轮次的链接跳到原始对话;返回后仍保留刚才的用量视图。没有轮次归属的记录会说明原因,不猜测位置。
选定有起止日期的范围后,可以按需查看前期比较。缺少前期数据会显示不可比较,而不是当作 0;比较请求失败也不会遮住当前时段。收起的实时参考与所选历史范围独立。
扫描还没完成时,页面会提示统计未完成,只显示已计入的小计;尚未读到用量的总数显示横线,不显示 0。单次读取达到时间或记录上限时,页面会自动从已保存的进度继续统计;也可选择「继续统计」,不发起全量重扫。离开「历史」会取消尚未完成的读取。
Token 用量与估算费用各有自己的完整性标记。供应商没返回用量时,Kiki 标为未知而不是当作 0;已知与未知混合时显示已记录的小计并提示计量不完整。缺少模型价格只影响费用估算,不影响已记录的 token 数。「数据可信度」会把这些情况与范围内没有记录、请求失败区分开。
主会话上下文详情中的累计 tokens 和费用覆盖整个会话;子智能体会话中则只计该子智能体。右栏「本智能体」只计选中智能体自身,「全树」还包含其后代。上下文窗口表单独表示当前执行引擎的窗口占用,不是累计计费 tokens,也不是多个智能体的窗口之和。
上下文压缩
对话变长时,Kiki 会在上下文接近窗口上限时自动压缩历史消息,释放 token 空间。也可以随时手动触发:
/compact压缩时可以附带指引,告诉模型优先保留哪些信息:
/compact 保留与数据库迁移相关的讨论Agent 正在干活时也可以请求压缩。Kiki 会把请求排队,等当前这次响应和它调用的工具都结束就执行,不用等整个轮次走完。已经有手动压缩在排队或执行时再请求不会有任何效果——同一次只会有一条。上下文用量表上方那一行写明你在看的是哪一次、进行到哪一步:手动压缩已排队,然后是手动压缩中,最后是手动压缩已完成;压缩不了就是手动压缩失败。上下文到顶自动触发的那次读起来一样,只是把「手动」换成「自动」。
摘要响应为空或只有思考内容时,Kiki 会在压缩尝试次数上限内用相同输入重试,默认最多尝试三次。供应商过滤的响应不会重试。有效结果保存前,原上下文保持不变。
时间线区分「手动压缩已排队 · 等待安全边界」和「正在压缩上下文…」。上下文提交成功后,摘要式显示「已生成摘要」,清空式显示「已保留接力上下文」;旧记录没有明确模式时只显示「上下文已压缩」。只有新上下文提交前的取消才会保持上下文不变;提交后的取消请求保留已经成功的结果。失败、取消,以及冷会话中已中断的运行都不计为成功。连续的同类成功提交可以合并成一行,例如「3 次成功压缩」;展开可看每次提交的时间和已记录的原因。这个次数不是生成失败后的重试次数。
输入框下方的上下文用量表显示同样的数字,可以直接调整压缩点,展开的详情卡里还有续上下文策略:压缩、清空重开和自动。清空式不调用摘要模型,也不删除会话历史:它用工作笔记、历史读取指针和接力内容替换较早的模型上下文,并按预算保留用户输入及近期消息。自动是主智能体的内置默认,满足安全换窗条件时使用清空式,否则生成摘要;时间线显示实际执行的模式。终端里用 /autocompact 查看或移动压缩点。必须熬过压缩的事实更适合放进记忆,它比会话活得久。
两种方式都会保留尚未得到完整响应的用户输入中的媒体。历史图片、音频和视频共用 20,000 token 的估算预算,覆盖保留的旧输入、接力内容和近期工具输出,优先保留用户提供的媒体。压缩不会删除会话历史或已保存的附件,需要时可以让 Agent 重读指定的旧图。这个预算采用 Kiki 的媒体估算,不等同于供应商实际计算的图片 token 数。
派生会话
/fork 复制当前会话,方便你试另一条路而不打断现在这个:
/fork你仍留在原会话里继续工作,副本彼此独立,随时可以用 /sessions 切过去。已保存的 /goal 不会带过去,想在副本里做 goal 工作就重新设一个。完整复制、按轮次截取和创建子会话都不会带走定时任务。原会话的计划和此前已创建的副本保持不变;要在新会话定时执行,请单独创建任务。fork 后 CLI 会打印一条可直接运行的 kiki --resume 命令,同时复制到剪贴板,便于在新终端里打开副本。
导出会话
用 kiki export 把会话打包为 ZIP,适合分享、归档或提交问题反馈:
kiki export <sessionId>不传 sessionId 时导出当前目录最近的会话(有交互式确认,加 -y 跳过)。用 -o 指定输出路径:
kiki export <sessionId> -o ~/Desktop/my-session.zip导出包含会话目录下的全部文件(含诊断日志),以及全局日志 ~/.kiki/logs/kimi-code.log(文件名沿用项目早期的命名)。不需要它就加 --no-include-global-log。
也可以在 TUI 内导出,无需离开交互界面:
/export-debug-zip:产生与kiki export相同的调试 ZIP。/export-md(别名/export):导出为人类可读的 Markdown 对话记录,适合分享或存档。可选接收路径参数;不带参数时写入工作目录下的kimi-export-<short-id>-<timestamp>.md。
web UI 中 /export 会把当前会话下载为诊断 ZIP:包含持久化的会话数据、诊断日志,以及只含元数据、大小有上限的 logs/kimi-web.jsonl(记录浏览器关键事件)。提示词正文、WebSocket 内容和 console 参数不会写进这份浏览器日志。这条 web 命令与上面 TUI 的 /export 别名不是一回事。
提示
导出文件可能包含代码、命令输出和路径等敏感信息,分享前请先确认内容。