源文件 按 main 分支生成 · 最新发布 v0.4.0

会话

群、私聊、线程、回应。

本页
  1. 群(Group)
  2. 私聊(Direct)
  3. 项目会话(Project session)
  4. 任务地图(Task map)
  5. 会话(Session)
  6. 来源(Origin)
  7. 线程(Thread)
  8. 回应(Reaction)
  9. 判断日志(Judgement log)

群(Group)

至少两个 Bot 的共享会话(人数无上限),有自己的名字:谁建谁起,不能空,不从在场者拼接。交接要可见时用群,而不是把人当路由器。少于两个 Bot 的对话是私聊,不是群。

回避:频道, 房间, workflow, 计划 DAG, 群人数上限, 用成员名单当群名

私聊(Direct)

你与一个 Bot,或两个 Bot 之间的一对一会话;你与 Bot 的私聊长期复用,Bot 之间的协作私聊属于它们所做的那件事。Bot↔Bot 私聊中你只读,不是第三个发言者。细节见行为说明·私聊。

行为细节

你和一个 Bot 的私聊长期复用;Bot↔Bot 私聊你仍只读,可以查看工作记录和操作已有安全控制,不是能发普通消息的第三位参与者。3 级委派按无方向的「两个 Bot × 规划」复用一条有且仅有这两个在场 Bot、未归档的私聊:反向交接同一规划也复用,不同规划不复用,没有新会话种类。协作私聊在代码仍叫 direct,领域里的「协作线程」不等于主转录里一条消息的引用回复。

3 级起委派线程(有 thread_task_id 的那条)里的普通消息(包括纯文字收尾和对在场对方的点名)只留下 peer_note,wakes=0;已有段可读到,没在做的 Bot 不因此醒来。通知不是委派结果,不会解除等待。点名不在这条私聊里的第三个 Bot、未知名字或全员点名时,send_message 在落消息前返回 use_delegate「要它动手用 delegate」;需要实际处理走委派。

Bot 自己开的私聊(ADR 0091):create_direct 在每个级别都有,用来告诉另一个 Bot 一件事、和它商量,不派活(派活用 delegate,几个 Bot 一起或要你在场用群)。每次调用都从叫醒这一轮的那句话新开一条,入口挂在那句话下面。这种私聊没有 thread_task_id,Bot 在里面说的每句话都叫醒对方:对方正在做这件事就进它的收件,不然开一轮;短回执接短回执、两轮都没跑命令时不叫醒(和下面 0–2 级同一条规则),提示词也让只剩回执时用 end_turn。

只从你在场的会话开,结束后回那里交代(ADR 0093):create_direct 只能在你在场的会话里调用;在 Bot 与 Bot 的私聊或委派线程里调,回 not_a_member,让它在这里谈完,结果会带回原会话。这种私聊静下来(没有进行中的轮、10 秒没有新的一轮结束)后,每个级别都会把开它的 Bot 叫回来源会话,带上私聊里最后一句话,让它在那里交代这次私聊的结果;叫回那一行下面附着这条私聊最近 20 条话(每条截到 1000 字),原会话里看不到私聊也能交代全;每段新的对话只叫回一次。叫回挂在开启方自己在私聊里的那一轮上;开启方在私聊里一轮都没跑过(对方的话进了它在别处正在跑的那一轮,或者对方没说话)就不叫回。委派线程不在此列:4 级起由委派的回复和监督器把发起方带回来。

在哪看:侧栏和收起后的窄栏都不列 Bot 与 Bot 的私聊,钉住过的也不列;工作台不给它开标签,「窗口打开方式」里也没有这一类。只从触发它的那句话下面的「开了私聊」卡片进去,在当前会话上面弹出这一条私聊:标题是两个 Bot,下面「来自 …」点了回到那句话(从另一条私聊开出的回到那条私聊),里面是它自己的对话,照旧只读。手机上是一页,返回键先关它;Esc 也关它。搜索、通知、链接点到 Bot 私聊也是弹出,屏幕上没有会话时先把它来自的会话放到下面。在弹窗里打开文件、Bot 资料、流程或工作区时,弹窗先收起,东西照常在原来的位置打开。委派线程按一对 Bot × 一件事复用,它的卡片只挂在第一次委派的那句话下面,弹窗里是整条线程。

0–2 级仍是旧的一次发起一条 Bot↔Bot 私聊,普通收尾/私信会叫醒另一方(短回执接回执的识别仍有保留),静下来后的旧 report_back 可能叫回发起方。3 级也还有 report_back/plan-watch/settle,所以普通消息的非叫醒语义不等于所有旧静默回报已经消失;4 级起委派线程的 report_back 和 plan-watch 由按持球者叫醒的监督器接替,create_direct 开的私聊照旧 report_back(见上),settle 仍在。

引用回复继续只是一层、仍留主转录:回复 Bot 可自动带它的点名,已经点名/全员点名不重复,不自动点名用户;参数仍是 parent_id。

回避:把几件不相干的事混成一条协作私聊, 用户是 Bot↔Bot 私聊发言者, 所有私聊发言必叫醒对方

项目会话(Project session)

你和本机的一个 Agent(Claude Code 或 Codex)在一个项目目录里的对话,和 Agent 自己的桌面端一样;没有 Bot。可以选目录新开,Claude Code 的还能接着你在终端里开过的会话(从原会话开分支,原会话不变)。应用只管权限模式、模型、思考等级、Stop 和打 / 列出的命令(Codex 的是应用替它执行的几条和它的 skill),Claude Code 的还有账号、计划模式和它放到后台的命令、监视与子代理(在对话里看得到、打得开,和 Bot 私聊里的工作一样):没有工作、流程图、整理、交付审查和叫停;Agent 自己记着历史,应用每轮只发你的新话。项目目录里的文件可以批注,一批发出是你的一句话。侧栏「项目」一段按目录分组。额度用完时,Claude Code 会话自己换到你另一个套餐账号接着做,都用完就到重置时间自己接着做(ADR 0110)。细节见行为说明·项目会话、ADR 0095、ADR 0098 和 ADR 0099。

行为细节

(ADR 0095)你和本机的 Claude Code 或 Codex 在一个项目目录里的对话,和 Claude、Codex 自己的桌面端一样,没有 Bot。侧栏「Bot」一段(群聊和你与 Bot 的私聊列在一起,按列表原来的顺序;段头的「+」里是「新建 Bot」和「新建群」)下面是「项目」一段:每个目录一行,按它第一次有会话的时间排,新的在前,在一个目录里新开会话、说话或读消息不会挪动目录的位置(只有删掉它最早的会话时可能换位置);展开是它下面的会话,最近的在前,每个会话前面是它的 agent 的标志(同一个目录可以有不同 agent 的会话),它的标签、面板头和侧栏收起后的窄栏里也是这个标志。会话行和 Bot 的行一样大、说的也一样:标志在头像的位置,名字和时间,下面一行是 agent 正在做的(思考中、回复中、待审批,标志上也亮同色的点),没在跑时是最后一句话,未读有计数;段头的「+」里每个 agent 一项(「新开 Claude Code 会话…」「新开 Codex 会话…」),分隔线下是「导入终端会话…」;每个目录行右边也有一个「+」,点开选 agent,在这个目录下直接新开(有鼠标时悬停才显示,手机上一直在);分隔线下是「打开项目目录」和「在项目目录打开终端」。在目录行上右键,同一个菜单弹在指针处。「在项目目录打开终端」在这个目录里起一个 shell(见终端):宽屏上开成一个终端标签,手机上是终端那一页。「打开项目目录」把这个目录本身打开在预览里:正文列出目录里的东西,旁边是项目目录的文件树(和下面「文件链接」打开文件时的那棵一样),点文件夹进去、点文件在同一个预览里看;宽屏上一个项目只有一个预览标签,写着「<目录名>项目目录」:同一个目录里哪个会话打开它、点开哪个会话里提到的文件,都进这一个标签(见下面「文件链接」);手机上它借这个目录里一个会话的预览打开(正在看的那个在这个目录里就用它,否则用最近的那个),先切到那个会话再从底部升起预览。手机上右下角的新建按钮里是「在文件夹中新开…」和「导入终端会话…」,新开在面板里选 agent。有鼠标时,悬停在一个会话的行上,右边出现「置顶」和「⋯」,「⋯」就是它的右键菜单,和 Bot 的行一样。置顶后它从目录下移到侧栏顶部的置顶栏,戴着 agent 的标志;目录下没有别的会话时,这个目录行也暂时不列,取消置顶就回来。重命名一个置顶的会话时,目录下多出一行输入框,改完就收起;置顶栏里的它不动。手机上「Bot」和「项目」两页各显示自己的置顶。

两个面板:都是先选 agent(新开有 Claude Code 和 Codex,导入只有 Claude Code),下面按目录列出,最近动过的在前。「新开」列你的 Claude Code 终端会话和应用里的项目会话(哪个 agent 的都算)出现过的每个目录,点一下就在那里新开;最后一行「其他目录…」用来填别的目录。「导入」只列有终端会话的目录,每行有目录名、路径和会话数,一次展开一个。

新开:「新开 Claude Code 会话…」「新开 Codex 会话…」在电脑的窗口里直接打开系统的文件夹选择,选好就用这个 agent 在那里开(没有系统的文件夹选择时打开新开面板,选中这个 agent);目录行的「+」选了 agent 就在那个目录开;新开面板里点一个目录;或者在「其他目录…」里选一个目录(窗口里用系统的文件夹选择,也能直接填完整路径;手机上没有这两样,改成一层层浏览电脑上的文件夹,进到项目目录按「使用此目录」,经 GET /v1/host/tree),按「开始」。第一句话的前 60 个字成了会话名;右键菜单里的「重命名」把侧栏那一行变成输入框,回车保存,Esc 不改,改过名的会话不再被第一句话命名。第一轮在那个目录里起 Claude Code(或 Codex),记下它自己的会话 id(Codex 的线程 id),之后每一轮接着那个会话。

接着终端里的会话:「导入终端会话…」打开导入面板,展开的目录里列出你在终端里在这个目录开过的 Claude Code 会话(每个账号目录下的 projects/*/*.jsonl,最近改过的在前,先列 8 个,「再显示」看其余的;SDK 起的会话——包括应用自己开的——和子代理不列),每行有标题、分支和时间,会话来自不止一个账号时还写是哪个账号。选一个按「接着聊」:会话开在原会话的目录里,名字是它的标题;你说过的话和 Claude 的正文按原来的时间补进来(Claude Code 自己插进来的通知,比如后台任务做完了,不算你说的),最下面一条系统行写来源和省掉了几次工具调用(工具调用不逐条导入)。第一轮从原会话开一个分支(resume 加 forkSession),终端里的原会话不变,你回终端还能接着用;之后每一轮接着这个分支。应用里新开的会话由 SDK 起,终端的 /resume 不列它们。第一次启动时,向导的最后一步也能这样挑一个接着聊(见「Bot 模板和第一次启动」)。

像在终端里一样:Claude Code 读你的用户、项目和本地设置与 CLAUDE.md,用它自己的系统提示,应用不加人设和工具;每一轮只发你的新话和它带的图片、文件,历史它自己记着。一轮在跑时你再说话,那句话送进这一轮,它在下一步读到。图片作为图片放在你的话前面,和在 Claude Code 里粘贴一样;别的文件和太大的图片写成「附件:」加它在这台电脑上的绝对路径(文件存在 inbox/,不在项目目录里;读文件在哪种权限模式下都直接放行)。工作区路径和线程回复会被拒。

应用只管权限、账号、模型、思考等级和 Stop:每个工具按应用的权限模式走(项目会话没有自己的模式),判定和 Claude Agent Bot 一样:改动先问下出一张批准卡,按「允许」或「拒绝」;只读下改动直接被拒;Claude Code 自己的设置和凭据一律碰不到,只有它对这个项目的记忆(账号配置目录下 projects/<项目>/memory/,项目按 git 仓库根算)用文件工具打得开:读随时可以,写按权限模式,命令仍然进不去;设置里的 MCP 工具和没列出的工具被拒;AskUserQuestion 不开。干活时和 Bot 一样:会话末尾是一个正在写的气泡,里面是它这一轮已经说的话,跑过的命令折成一张卡片,最后一行是它正在做的那一步(比如「运行 npm test」)、这一步用了多久和这一轮的总用时;要你批准时,气泡下面是一张批准卡。Stop 在输入框里、发送旁边,和 Bot 私聊一样:结束这一轮和它起的所有进程,干活时照样可以接着发话。它到那时已经说的话留在对话里,成为它的一行,排在你接着发的话前面;出错停下时也一样。输入框底部选模型:列的是这个会话的账号在 Claude Code 自己的 /model 里能选的那些(比如 Default (recommended)、Opus 5.5、Fable 5.1、Sonnet 5.5、Haiku 5.5,名字和说明照它的原样),由 daemon 不带提示词地启动一次 Claude Code 问来(GET /v1/runtime/claude-code/models,每个账号记 10 分钟,不花用量);其中 Default 就是不指定、照你的设置;问不到时退回 sonnet、opus、haiku、fable 这几个别名;别处设的完整 id 也留作一项。旁边选思考等级:「默认思考」照你的设置,可选的档位是所选模型支持的那些,不支持思考等级的模型不出这一项。两个都是选了从下一步起生效,正在跑的那一轮当场换,之后每一轮都带上(sessions.project_model、sessions.project_effort)。配了不止一个 Claude 账号时,最前面还有账号(按登录邮箱列出):换了从下一轮起用新账号跑,换之前把这段 Claude Code 会话的文件连同子代理复制到新账号的目录下,Claude Code 才找得到它接着聊;正在跑的时候不能换(sessions.project_config_dir)。三样都是每个会话自己的,记在会话上。三样合成输入框底部的一个级联选择器:收起时写着模型和思考等级,账号跟在后面、字小一号,窄了先省略它;点开后一级一级展开:先只有账号一列(只有一个账号时直接是模型),指向或点一个账号,右边展开它的模型(名字下面是 Claude Code 对它的说明),再指向或点一个模型,右边展开它的思考等级;会话现在选的那一项打着勾。只有下面没有下一级的才是选定:点一个思考等级,或点一个不支持思考等级的模型,就把到这一行为止的选择一次定下;展开新的一列不会挪动前面的列。第一列贴着输入框;之后每一列从点出它的那一行旁边展开,第一行和那一行齐平,往那边放不下时往回挪,最多贴回输入框那一边。方向键也能走:上下换行,右或回车展开下一级并进去,左退回上一列,在最后一级上回车选定。正在跑时另一个账号点不了,账号那一列下面写着原因。手机上是从底部升起的面板,一级一级点进去:先是账号,点一个进到它的模型,再点一个模型进到它的思考等级,点一个就定下;标题写着点进来的那一项,返回回到上一级。设置里配了语音识别服务时,输入框右下角也有麦克风,和 Bot 的输入框一样:说的话转成文字放进光标处,不会自己发出去(ADR 0073)。输入框也能带图片和文件,和 Bot 的一样:粘贴截图或文件,或点左下角的回形针选,发出前排在输入框上面;图片作为图片交给 Claude Code,别的文件交给它在这台电脑上的路径。工作、规划、流程图、整理、读句、收尾契约、交付审查、监督器、回看和叫停都不进项目会话;打「停下」只是一句话,停要按 Stop。

额度用完(ADR 0110 的补记):Claude Code 会话的一次请求被套餐额度挡下时,这个账号记为用完(和 Bot 共用这份记录),会话自己换到「几个账号」里另一个用 Claude 套餐登录、没用完的账号:等上一个 Claude Code 退出,像你在输入框里换账号那样把会话复制过去,贴一行「Claude 账号 <原目录> 的用量额度用完了(… 重置),这个会话换到 <新目录> 接着做」,然后自己开一轮,告诉它刚才因为额度停下、接着做没做完的事,并带上你还没得到回复的话;不出「出错停下了」。之后会话留在新账号上,要换回去在输入框里换。你说话时会话的账号还记着用完,也先换再跑。所有账号都用完时照旧停下,失败行写明什么时候自动接着做;到了那个时间过一分钟自己开一轮接着做,这之间你说过话、清了记录或删了会话就不再接着做。Codex 会话不换账号,它报了重置时间时同样到点接着做。

计划模式(ADR 0098):输入框底部的「计划」开关,或者在输入框里按 Shift+Tab(和终端一样),打开这个会话的计划模式:Claude Code 先看、把计划写好,你批准之后才动手。开着时每一轮都以计划模式起跑;跑到一半打开或关上,从它的下一步起生效(sessions.project_mode)。计划模式下文件工具只写计划:计划写在账号配置目录下的 plans/ 里,每种权限模式下都直接写;别处的写一律拒绝;命令和计划模式关着时一样按权限模式走(自动、全部允许下直接跑,改动先问下出批准卡,只读下拒绝),让它只看不动的是 Claude Code 自己的计划模式;读、搜索、待办清单和子代理照常。计划交上来是一张自己的卡:计划按 markdown 画出来,长了在卡里滚动,下面是「批准,开始做」和「接着改」。卡头右边的按钮让它铺满整个窗口,正文收在便于阅读的宽度,读到哪还在哪,两个按钮仍在下面;Esc 或手机的返回退出,会话的滚动位置不变;批准、接着改、点开计划里提到的文件,都先退出全屏,要改哪里也是退出后在输入框里说。批准后 Claude Code 离开计划模式接着干,开关自动关上,之后按应用的权限模式走;「接着改」让它留在计划模式接着改;卡等着时你直接发的话就是要改的地方,照常送进这一轮。计划文件夹和记忆一样,文件工具随时能读,命令进不去。

斜杠命令(ADR 0098):一句以 / 开头的话原样交给 Claude Code,和在终端里一样执行:/compact、/context、/clear、/review、你的 skill 和插件命令都行。打 / 时输入框上面列出这个会话能用的命令(GET /v1/project-sessions/:id/commands:daemon 按会话的账号、在它的目录里不带提示词地起一次 Claude Code 问来,读你的设置,按账号和目录记 10 分钟,不花用量),名字或别名开头对得上的在前,名字里含有的在后;↑↓ 选,Tab 补全,Enter 直接执行,Esc 关上,点一行补全。终端专用的(doctor 等)、输入框选择器管着的 model 和 effort、侧栏管着的 rename 不列;打了照样发出去,只是 /model 只改这一轮,选择器不知道。没话回的命令(/compact、/clear)在会话里留一行系统行说已执行;/compact 进行中,工作行写「正在压缩上下文」;/clear 让 Claude Code 从空的上下文重新开始,这里的记录还在。命令不给会话起名:会话名取第一句不是命令的话。Codex 会话的命令见下一段。

Codex(ADR 0099):新开面板里选 Codex,就在那个目录里和你本机的 Codex 对话,和 Codex 自己的应用一样:每一轮起一个 codex app-server(设置 › Agent 里找到的那个),第一轮开一个 Codex 自己存着的线程,之后每一轮接着它;它读你的 config.toml、AGENTS.md、MCP 服务器和 skill,应用不加指令和工具。权限和 Claude Code 的一样由应用管:Codex 的每条命令和每次改文件都先来问应用(线程开着只读沙箱、untrusted 批准),自动和全部允许下直接放行,改动先问下出批准卡,只读下拒绝(Codex 读文件也走命令,只读下连读也不行);各个 Agent 的凭据碰不到。输入框底部选的是 Codex 自己列出的模型(和 Bot 面板同一份,GET /v1/runtime/agents)和这个模型支持的思考等级,没选就照你的 Codex 设置;改了从下一个 turn 起生效。一个 turn 在跑时你再说话,用 Codex 的 steer 送进这个 turn。图片按路径交给 Codex,别的文件写路径。打 / 列出的是应用能替 Codex 执行的命令和它的 skill(Codex 的 app-server 不执行斜杠命令,/status 这类发过去它只当成普通的话):/compact 压缩上下文,进行中工作行写「正在压缩上下文」,完了留一行系统行;/review 审查未提交的改动,后面写了字就按你写的审查,回复是审查结果。审查时 Codex 自己跑只看不改的命令(只读沙箱),不来问应用,所以开始前按权限模式决定一次:自动、全部允许下直接开始,改动先问下先出一张卡、批准才开始,只读下不执行。审查期间应用的规则管不到这些命令,凭据那一条也一样:沙箱只挡写不挡读,项目外的文件它也读得到。/new(或 /clear)开一个新的 Codex 线程,之后的轮次接着它,这里的记录还在,后面写的字是新线程的第一句话;/ 加 skill 的名字按 Codex 自己的 $名字 用那个 skill(列表来自 Codex 的 skills/list:你的、插件的、项目的和 Codex 自带的,按目录记 10 分钟)。别的 / 开头的话原样当文字发给 Codex。Codex 在干活时发的命令不插进这一轮,等它完了再执行。Codex 会话还没有计划模式、选账号、导入终端会话和任务地图的回放(地图只画实时的调用)。出错时会话里写「Codex 出错停下了:」加 Codex 自己的话,比如你设置里的模型这个账号用不了,这时在输入框底部选一个列出来的模型。

文件链接:Claude Code 回复里提到的文件和 Bot 的一样画成文件链接,点开在预览里看。它写的路径相对它当时干活的地方,不是应用的工作区:可能就在项目目录下,也可能是目录里某个仓库下的 src/lib/api.ts,或者只有文件名 server.go。所以点开前先问电脑它在哪(GET /v1/project-sessions/:id/locate?path=):绝对路径或 ~/ 开头的照写;项目目录下有这个路径就是它;没有就在项目目录里一层层找路径以它结尾的文件或文件夹(按整段比,不进点开头的文件夹、node_modules 和链接过去的文件夹,最多看两万项),取最浅的那一个。找不到,或最浅的有好几个,弹一条提示说明,不开预览;分支名这类带 / 的词也会画成链接,点了说「在项目目录里没找到」。找到的位置这个会话里记着,没找到的下次点再问。预览旁边是项目目录的文件树,和工作区浏览器一样一层层读:通往这个文件的文件夹从外到里打开,文件本身选中;点别的文件在同一个预览里打开,点文件夹只展开或收起;手机上预览顶部的列表按钮写着项目目录的名字。宽屏上这个预览是项目的,不是这个会话的:同一个目录里各个会话点开的文件都进同一个「<目录名>项目目录」标签,在那里换文件,不另开;以前按会话各开一个、存在布局里的,打开应用后并成一个(留离键盘最近的那个)。标签记着最后从哪个会话打开,那个会话删掉时它也关上。点开头的文件夹和 node_modules 不在树里,里面的文件照样打得开,只是树里没有选中的行。项目目录以外的文件(~/Downloads/…、/tmp/…、你贴进对话的图片)旁边也是项目目录的文件树(ADR 0095 决定 29),从顶层列起,树里没有它自己的行;能不能保存、批注照旧看它在哪。这是 NSH 版;信使旁边还是这句话提到的那几个文件。

批注(ADR 0095 决定 28):项目目录里的文件可以批注,和 Bot 私聊里一样在预览栏里加、在列表里看、攒一批一起发、在对话里成卡片;只有 NSH 版有入口,信使的预览照旧只读。批注挂在文件的绝对路径和 Agent 的一条回复上:从回复里点开的挂那一条,在文件树里切到的、从侧栏打开项目目录后点的挂这个会话里它最新的一条;它还没说过话就批不了,预览里写明原因。项目目录外的文件(贴进来的图片、/tmp 里的)批不了。一批发出就是你在这个会话里的一句话,不引用、不 @,什么都没补充时这句话只有卡片;交给 Agent 时,你的话后面跟一行「下面是我在文件上写的批注……」,再把每条写全(路径、种类、位置、引文、意见),框选的裁图作为图片一起给(Codex 的先写到系统临时目录,按路径给)。它没有应用的工具,所以只有你标已处理;文件改了照样标「原文已变」或重新定位;清空和删除会话时一起删。

消息索引:对话左缘和 Bot 的对话一样有一列消息索引:已载入的每一句一道短刻度,你的用强调色,agent 和应用的是灰色;悬停弹出这一句的摘要、谁说的、时间和第几句,点刻度或那张卡片就滚到这一句;方向键逐条走,Esc 关卡片。亮着的刻度跟着读到哪儿走,在最底下时是最后一句;点过去以后,新来的话和 agent 的进度不再把你拉回底部。顶上的箭头载入更早的一页。至少两句(或还有更早的)才出现,对话窄到手机宽度时不显示。

记录:每一轮记在 agent_runs(状态、等你批准的那一项、正在做什么、出错原因、后台任务和它们的状态),守护进程重启时还在跑的记作中断。花费记进花费账本、单列「项目会话」,也算进每日上限(见花费);用量照样算在 Claude 账号上,用量挂件里看得到。Claude Code 没找到、没登录或目录不在了,这一轮失败,会话里有一条系统行写明原因。右键菜单能置顶、打开项目目录、在项目目录打开终端、重命名、清空历史、归档和删除;后三样都先 Stop 正在跑的那一轮。清空历史后下一轮从头开一个新会话;删除只去掉应用里的会话和消息,Claude Code 那边的会话文件和目录里的文件都还在。记忆在 Claude Code 自己的会话文件里,那个文件被删,下一轮会因为找不到会话失败。手机经同样的路由(GET /v1/runtime/claude-code/sessions、POST /v1/project-sessions、GET /v1/project-sessions/:id/run、GET /v1/project-sessions/:id/locate、GET /v1/project-sessions/:id/commands、PATCH /v1/project-sessions/:id、POST /v1/agent-runs/:id/approve|deny|stop)。

给任务地图的:每个工具调用开始和结束各发一个工具帧(turn_id 是这一轮的 id,agent_run 写着子代理、地点、做这一步的模型和成没成),不落库。GET /v1/project-sessions/:id/replay 从 Claude Code 自己的会话文件读回整段:每个工具调用的时间、主线还是哪个子代理、地点、做它的模型、成没成、耗时和 Claude Code 记下的放行决定(钩子放行是 hook,卡上允许是 user_temporary,卡上拒绝是 user_reject),子代理,你说的话和你对它提问的回答。地点是项目里的相对路径、项目外的路径(~/.claude* 单列)、测试或类型检查、git;命令、文件内容和结果都不带出来。目前只支持 Claude Code。

后台任务(ADR 0095 决定 25):Claude Code 在项目会话里能像在终端里一样把命令放到后台、用 Monitor 盯着一个命令或连接、派子代理;Monitor 的命令和别的命令一样按权限模式走。这些和 Bot 私聊里的工作一样读。工作气泡一直在,回复之后只有后台任务时末行写「N 个后台任务运行中」,侧栏和窗格写「后台任务运行中」,你说的话马上答;任务结束时 Claude Code 通常会自己接着说一句。末行点开是正在做的事,在跑的命令和监视带实时输出。结束的进「N 条命令」卡片,输出点开看;这一轮结束后,它们折叠留在启动它们的那一轮的回复下面,早先几轮的也在。子代理和 Bot 之间的私聊一样,回复下面一个入口,点开是弹窗(手机上是整页):交给它的任务、它说的话和每个工具调用,运行中跟着走。Stop 只在输入框:有后台任务时那个按钮是停止菜单,全部停下或停其中一个;守护进程重启也会结束它们,它们不会接着跑。Codex 会话没有这些,Bot 也仍然不许后台任务。

任务地图(ADR 0096):项目会话右键菜单里的「打开任务地图」,或者它窗格顶栏和标签 ⋯ 里的「地图」,在旁边开一个窗格,把这段会话画成一个等距的小镇。调用多的目录各是一栋楼(最多 10 栋,形状按目录名挑,比如 docs 是图书馆),另有项目根、测试场、版本库、外部服务(MCP,所有服务一座中继站)、Claude 会话库和项目外;分区在打开时排好,之后实时来的调用按目录归进已有的楼,不重排(新会话还没有一栋代码楼时,头几次调用进来就排)。Claude Code 是主角,它派出的子代理是小一号的角色,只在干活期间出现;角色头顶的名牌是 Agent 的 logo、名字和这一步的模型(比如 Opus 5.5)。拖动平移,右键或 Shift+拖动旋转,滚轮缩放,横向滑动也能转;转盘可以拖,也可以点一个朝向。天色跟着回放的钟走:太阳东升西落,夜里换成月亮和星星,墙面明暗和影子随之变化,天黑后路灯亮起。没人在的楼,牌子只有颜色点和来过的次数,鼠标移上去、点开或放大到 1.5 倍以上才写出名字。点一栋楼的牌子看它到这一刻被去过几次、谁去的、失败几次、最近碰过的文件,能跳到上一次和下一次来访;点角色跟着它走。下面的时间轴能播放(1、4、8、32 倍)和拖动,每个角色一条轨道,红点是失败;超过 15 分钟的空档压成 4 秒。侧栏写着它在哪做什么、你交代给它的事和值得看的时刻(派出分身、问你等了多久、长时间没动静、被拦下、你在卡上允许的改动、失败、半分钟以上的调用、两地来回),点一个跳过去。交代给它的事和值得看的时刻平分 Bot 卡片下面剩下的高度:一边短就只占它那几行,另一边用余下的,两边都长各一半,各自在卡里滚动。会话在跑时地图跟着最新一步走,标着「实时」;拖回去看之前的,按「回到实时」回来;一轮结束和重新连上后重读一次回放。只有宽窗口有地图,手机和窄窗口还没有。

Bot 对话的任务地图(ADR 0097):私聊和群也有地图,入口一样(右键菜单「打开任务地图」,窗格顶栏和标签 ⋯ 的「地图」),文件投送没有。应用记下 Bot 每次工具调用在哪干的(tool_places):文件工具的路径从工作区根算,shell 按它的 cwd(没写就是这一轮的工作目录)读命令里的路径,MCP 工具落在它的服务上,发消息、提问、排任务这类算在工作区;只记地点、文件名、模型和结果,不记参数、命令和内容。等你批准的调用和卡片关联,你允许或拒绝的那次都在图上。地图上每个干过活的 Bot 都是主角,从头到尾都在、一样大,每个 Bot 是从吉祥物布丁和麻薯长出来的一个角色:同一副身体,各有口味配色和行头(布丁戴天线;麻薯戴毛线帽端着热饮;芋泥戴耳机拿写字板;樱花戴贝雷帽拿调色盘和画笔;抹茶戴厨师帽拿打蛋器;焦糖戴安全帽拿锤子;芝麻戴眼镜、耳后夹铅笔、抱着书;蓝莓戴巫师帽拿魔杖),一张图里不重样,总是脸朝你;头像是 folk 的 Bot,就是它头像上那个角色(前面已有 Bot 占了就另分一个),眼睛和嘴照它头像的,其余是布丁本来的脸;胸前别着一枚圆徽章,里面是它的头像;在一处干活时各干各的(布丁敲键盘、天线收信号;麻薯喝冒热气的饮料;芋泥跟着耳机点头、在写字板上打勾;樱花挥笔甩出彩色笔触;抹茶打蛋;焦糖抡锤砸下、火花四溅;芝麻看书翻页、推眼镜;蓝莓飘起来挥魔杖洒星星),走在路上时摆手,几个站在同一个门口时每个站在右边那个的前面、手上的活露出来;回复时张嘴说话、等你时蹦跳挥手、出错时撇嘴,平时会眨眼,颜色随地图的时辰变暗变暖;名牌最前面也是它的头像,后面是名字、它模型来源的 logo(端点的厂商、Claude Agent 的火花、本机 Agent 的 logo)和这一步的模型;侧栏每个 Bot 一张卡,用它的头像。地图按「这件事」画,和流程一个口径:没指定时是这段对话最新的那件工作,上方的切换器能换,流程页顶栏的「地图」打开的就是这件事的;它的工作是它所有轮次的调用,不管在群、你和 Bot 的私聊还是 Bot 之间的私聊里(GET /v1/tasks/:id/replay),每个 Bot 的卡片写着它这一步在哪段对话、为你哪一句干活,「交代给它的事」每句标出在哪说的,一个 Bot 第一次在某段对话里做这件事是一个值得看的时刻,顶上写着它在几段对话里;一段对话还没有一件事时,地图画它里面的全部工作。根在这里叫「工作区」,工作区以外叫「工作区外」,调用少的目录叫「工作区别处」,小镇以这件事的文件夹命名(没有一件事时是工作区的);宣布一轮结束(end_turn)不算一步,等过你卡片的调用不算长调用。GET /v1/sessions/:id/replay 读回最新的 5000 次调用、你说的话和你对 Bot 提问的回答。这一版之前的调用没有记地点,画不出来。删掉或清空一段对话时,它的记录一起删;Bot 读不到这份记录。

回避:把项目会话叫成 Bot, 给项目会话开工作或流程图, 打「停下」当 Stop, 改写终端里的原会话

任务地图(Task map)

把干活的过程(一个项目会话的,或 Bot 的一件事的)画成目录的小镇:调用多的目录各是一栋楼,另有根(项目根,Bot 的地图上是工作区)、测试场、版本库、外部服务、Claude 会话库和项目外。项目会话里 Agent 是主角,它派出的子代理是小一号的角色;从 Bot 的对话打开时按「这件事」画(和流程一个口径),跨群、私聊和 Bot 之间的私聊,每个 Bot 都是主角。名牌上是模型来源的 logo 和这一步的模型。能回放也跟着实时走,只描述发生了什么,不评判。工作台里的一种窗格,除了文件投送每段对话都有;Bot 的调用从应用记下地点那一版起才画得出来。细节见行为说明·项目会话、ADR 0096 和 ADR 0097。

行为细节

(ADR 0095)你和本机的 Claude Code 或 Codex 在一个项目目录里的对话,和 Claude、Codex 自己的桌面端一样,没有 Bot。侧栏「Bot」一段(群聊和你与 Bot 的私聊列在一起,按列表原来的顺序;段头的「+」里是「新建 Bot」和「新建群」)下面是「项目」一段:每个目录一行,按它第一次有会话的时间排,新的在前,在一个目录里新开会话、说话或读消息不会挪动目录的位置(只有删掉它最早的会话时可能换位置);展开是它下面的会话,最近的在前,每个会话前面是它的 agent 的标志(同一个目录可以有不同 agent 的会话),它的标签、面板头和侧栏收起后的窄栏里也是这个标志。会话行和 Bot 的行一样大、说的也一样:标志在头像的位置,名字和时间,下面一行是 agent 正在做的(思考中、回复中、待审批,标志上也亮同色的点),没在跑时是最后一句话,未读有计数;段头的「+」里每个 agent 一项(「新开 Claude Code 会话…」「新开 Codex 会话…」),分隔线下是「导入终端会话…」;每个目录行右边也有一个「+」,点开选 agent,在这个目录下直接新开(有鼠标时悬停才显示,手机上一直在);分隔线下是「打开项目目录」和「在项目目录打开终端」。在目录行上右键,同一个菜单弹在指针处。「在项目目录打开终端」在这个目录里起一个 shell(见终端):宽屏上开成一个终端标签,手机上是终端那一页。「打开项目目录」把这个目录本身打开在预览里:正文列出目录里的东西,旁边是项目目录的文件树(和下面「文件链接」打开文件时的那棵一样),点文件夹进去、点文件在同一个预览里看;宽屏上一个项目只有一个预览标签,写着「<目录名>项目目录」:同一个目录里哪个会话打开它、点开哪个会话里提到的文件,都进这一个标签(见下面「文件链接」);手机上它借这个目录里一个会话的预览打开(正在看的那个在这个目录里就用它,否则用最近的那个),先切到那个会话再从底部升起预览。手机上右下角的新建按钮里是「在文件夹中新开…」和「导入终端会话…」,新开在面板里选 agent。有鼠标时,悬停在一个会话的行上,右边出现「置顶」和「⋯」,「⋯」就是它的右键菜单,和 Bot 的行一样。置顶后它从目录下移到侧栏顶部的置顶栏,戴着 agent 的标志;目录下没有别的会话时,这个目录行也暂时不列,取消置顶就回来。重命名一个置顶的会话时,目录下多出一行输入框,改完就收起;置顶栏里的它不动。手机上「Bot」和「项目」两页各显示自己的置顶。

两个面板:都是先选 agent(新开有 Claude Code 和 Codex,导入只有 Claude Code),下面按目录列出,最近动过的在前。「新开」列你的 Claude Code 终端会话和应用里的项目会话(哪个 agent 的都算)出现过的每个目录,点一下就在那里新开;最后一行「其他目录…」用来填别的目录。「导入」只列有终端会话的目录,每行有目录名、路径和会话数,一次展开一个。

新开:「新开 Claude Code 会话…」「新开 Codex 会话…」在电脑的窗口里直接打开系统的文件夹选择,选好就用这个 agent 在那里开(没有系统的文件夹选择时打开新开面板,选中这个 agent);目录行的「+」选了 agent 就在那个目录开;新开面板里点一个目录;或者在「其他目录…」里选一个目录(窗口里用系统的文件夹选择,也能直接填完整路径;手机上没有这两样,改成一层层浏览电脑上的文件夹,进到项目目录按「使用此目录」,经 GET /v1/host/tree),按「开始」。第一句话的前 60 个字成了会话名;右键菜单里的「重命名」把侧栏那一行变成输入框,回车保存,Esc 不改,改过名的会话不再被第一句话命名。第一轮在那个目录里起 Claude Code(或 Codex),记下它自己的会话 id(Codex 的线程 id),之后每一轮接着那个会话。

接着终端里的会话:「导入终端会话…」打开导入面板,展开的目录里列出你在终端里在这个目录开过的 Claude Code 会话(每个账号目录下的 projects/*/*.jsonl,最近改过的在前,先列 8 个,「再显示」看其余的;SDK 起的会话——包括应用自己开的——和子代理不列),每行有标题、分支和时间,会话来自不止一个账号时还写是哪个账号。选一个按「接着聊」:会话开在原会话的目录里,名字是它的标题;你说过的话和 Claude 的正文按原来的时间补进来(Claude Code 自己插进来的通知,比如后台任务做完了,不算你说的),最下面一条系统行写来源和省掉了几次工具调用(工具调用不逐条导入)。第一轮从原会话开一个分支(resume 加 forkSession),终端里的原会话不变,你回终端还能接着用;之后每一轮接着这个分支。应用里新开的会话由 SDK 起,终端的 /resume 不列它们。第一次启动时,向导的最后一步也能这样挑一个接着聊(见「Bot 模板和第一次启动」)。

像在终端里一样:Claude Code 读你的用户、项目和本地设置与 CLAUDE.md,用它自己的系统提示,应用不加人设和工具;每一轮只发你的新话和它带的图片、文件,历史它自己记着。一轮在跑时你再说话,那句话送进这一轮,它在下一步读到。图片作为图片放在你的话前面,和在 Claude Code 里粘贴一样;别的文件和太大的图片写成「附件:」加它在这台电脑上的绝对路径(文件存在 inbox/,不在项目目录里;读文件在哪种权限模式下都直接放行)。工作区路径和线程回复会被拒。

应用只管权限、账号、模型、思考等级和 Stop:每个工具按应用的权限模式走(项目会话没有自己的模式),判定和 Claude Agent Bot 一样:改动先问下出一张批准卡,按「允许」或「拒绝」;只读下改动直接被拒;Claude Code 自己的设置和凭据一律碰不到,只有它对这个项目的记忆(账号配置目录下 projects/<项目>/memory/,项目按 git 仓库根算)用文件工具打得开:读随时可以,写按权限模式,命令仍然进不去;设置里的 MCP 工具和没列出的工具被拒;AskUserQuestion 不开。干活时和 Bot 一样:会话末尾是一个正在写的气泡,里面是它这一轮已经说的话,跑过的命令折成一张卡片,最后一行是它正在做的那一步(比如「运行 npm test」)、这一步用了多久和这一轮的总用时;要你批准时,气泡下面是一张批准卡。Stop 在输入框里、发送旁边,和 Bot 私聊一样:结束这一轮和它起的所有进程,干活时照样可以接着发话。它到那时已经说的话留在对话里,成为它的一行,排在你接着发的话前面;出错停下时也一样。输入框底部选模型:列的是这个会话的账号在 Claude Code 自己的 /model 里能选的那些(比如 Default (recommended)、Opus 5.5、Fable 5.1、Sonnet 5.5、Haiku 5.5,名字和说明照它的原样),由 daemon 不带提示词地启动一次 Claude Code 问来(GET /v1/runtime/claude-code/models,每个账号记 10 分钟,不花用量);其中 Default 就是不指定、照你的设置;问不到时退回 sonnet、opus、haiku、fable 这几个别名;别处设的完整 id 也留作一项。旁边选思考等级:「默认思考」照你的设置,可选的档位是所选模型支持的那些,不支持思考等级的模型不出这一项。两个都是选了从下一步起生效,正在跑的那一轮当场换,之后每一轮都带上(sessions.project_model、sessions.project_effort)。配了不止一个 Claude 账号时,最前面还有账号(按登录邮箱列出):换了从下一轮起用新账号跑,换之前把这段 Claude Code 会话的文件连同子代理复制到新账号的目录下,Claude Code 才找得到它接着聊;正在跑的时候不能换(sessions.project_config_dir)。三样都是每个会话自己的,记在会话上。三样合成输入框底部的一个级联选择器:收起时写着模型和思考等级,账号跟在后面、字小一号,窄了先省略它;点开后一级一级展开:先只有账号一列(只有一个账号时直接是模型),指向或点一个账号,右边展开它的模型(名字下面是 Claude Code 对它的说明),再指向或点一个模型,右边展开它的思考等级;会话现在选的那一项打着勾。只有下面没有下一级的才是选定:点一个思考等级,或点一个不支持思考等级的模型,就把到这一行为止的选择一次定下;展开新的一列不会挪动前面的列。第一列贴着输入框;之后每一列从点出它的那一行旁边展开,第一行和那一行齐平,往那边放不下时往回挪,最多贴回输入框那一边。方向键也能走:上下换行,右或回车展开下一级并进去,左退回上一列,在最后一级上回车选定。正在跑时另一个账号点不了,账号那一列下面写着原因。手机上是从底部升起的面板,一级一级点进去:先是账号,点一个进到它的模型,再点一个模型进到它的思考等级,点一个就定下;标题写着点进来的那一项,返回回到上一级。设置里配了语音识别服务时,输入框右下角也有麦克风,和 Bot 的输入框一样:说的话转成文字放进光标处,不会自己发出去(ADR 0073)。输入框也能带图片和文件,和 Bot 的一样:粘贴截图或文件,或点左下角的回形针选,发出前排在输入框上面;图片作为图片交给 Claude Code,别的文件交给它在这台电脑上的路径。工作、规划、流程图、整理、读句、收尾契约、交付审查、监督器、回看和叫停都不进项目会话;打「停下」只是一句话,停要按 Stop。

额度用完(ADR 0110 的补记):Claude Code 会话的一次请求被套餐额度挡下时,这个账号记为用完(和 Bot 共用这份记录),会话自己换到「几个账号」里另一个用 Claude 套餐登录、没用完的账号:等上一个 Claude Code 退出,像你在输入框里换账号那样把会话复制过去,贴一行「Claude 账号 <原目录> 的用量额度用完了(… 重置),这个会话换到 <新目录> 接着做」,然后自己开一轮,告诉它刚才因为额度停下、接着做没做完的事,并带上你还没得到回复的话;不出「出错停下了」。之后会话留在新账号上,要换回去在输入框里换。你说话时会话的账号还记着用完,也先换再跑。所有账号都用完时照旧停下,失败行写明什么时候自动接着做;到了那个时间过一分钟自己开一轮接着做,这之间你说过话、清了记录或删了会话就不再接着做。Codex 会话不换账号,它报了重置时间时同样到点接着做。

计划模式(ADR 0098):输入框底部的「计划」开关,或者在输入框里按 Shift+Tab(和终端一样),打开这个会话的计划模式:Claude Code 先看、把计划写好,你批准之后才动手。开着时每一轮都以计划模式起跑;跑到一半打开或关上,从它的下一步起生效(sessions.project_mode)。计划模式下文件工具只写计划:计划写在账号配置目录下的 plans/ 里,每种权限模式下都直接写;别处的写一律拒绝;命令和计划模式关着时一样按权限模式走(自动、全部允许下直接跑,改动先问下出批准卡,只读下拒绝),让它只看不动的是 Claude Code 自己的计划模式;读、搜索、待办清单和子代理照常。计划交上来是一张自己的卡:计划按 markdown 画出来,长了在卡里滚动,下面是「批准,开始做」和「接着改」。卡头右边的按钮让它铺满整个窗口,正文收在便于阅读的宽度,读到哪还在哪,两个按钮仍在下面;Esc 或手机的返回退出,会话的滚动位置不变;批准、接着改、点开计划里提到的文件,都先退出全屏,要改哪里也是退出后在输入框里说。批准后 Claude Code 离开计划模式接着干,开关自动关上,之后按应用的权限模式走;「接着改」让它留在计划模式接着改;卡等着时你直接发的话就是要改的地方,照常送进这一轮。计划文件夹和记忆一样,文件工具随时能读,命令进不去。

斜杠命令(ADR 0098):一句以 / 开头的话原样交给 Claude Code,和在终端里一样执行:/compact、/context、/clear、/review、你的 skill 和插件命令都行。打 / 时输入框上面列出这个会话能用的命令(GET /v1/project-sessions/:id/commands:daemon 按会话的账号、在它的目录里不带提示词地起一次 Claude Code 问来,读你的设置,按账号和目录记 10 分钟,不花用量),名字或别名开头对得上的在前,名字里含有的在后;↑↓ 选,Tab 补全,Enter 直接执行,Esc 关上,点一行补全。终端专用的(doctor 等)、输入框选择器管着的 model 和 effort、侧栏管着的 rename 不列;打了照样发出去,只是 /model 只改这一轮,选择器不知道。没话回的命令(/compact、/clear)在会话里留一行系统行说已执行;/compact 进行中,工作行写「正在压缩上下文」;/clear 让 Claude Code 从空的上下文重新开始,这里的记录还在。命令不给会话起名:会话名取第一句不是命令的话。Codex 会话的命令见下一段。

Codex(ADR 0099):新开面板里选 Codex,就在那个目录里和你本机的 Codex 对话,和 Codex 自己的应用一样:每一轮起一个 codex app-server(设置 › Agent 里找到的那个),第一轮开一个 Codex 自己存着的线程,之后每一轮接着它;它读你的 config.toml、AGENTS.md、MCP 服务器和 skill,应用不加指令和工具。权限和 Claude Code 的一样由应用管:Codex 的每条命令和每次改文件都先来问应用(线程开着只读沙箱、untrusted 批准),自动和全部允许下直接放行,改动先问下出批准卡,只读下拒绝(Codex 读文件也走命令,只读下连读也不行);各个 Agent 的凭据碰不到。输入框底部选的是 Codex 自己列出的模型(和 Bot 面板同一份,GET /v1/runtime/agents)和这个模型支持的思考等级,没选就照你的 Codex 设置;改了从下一个 turn 起生效。一个 turn 在跑时你再说话,用 Codex 的 steer 送进这个 turn。图片按路径交给 Codex,别的文件写路径。打 / 列出的是应用能替 Codex 执行的命令和它的 skill(Codex 的 app-server 不执行斜杠命令,/status 这类发过去它只当成普通的话):/compact 压缩上下文,进行中工作行写「正在压缩上下文」,完了留一行系统行;/review 审查未提交的改动,后面写了字就按你写的审查,回复是审查结果。审查时 Codex 自己跑只看不改的命令(只读沙箱),不来问应用,所以开始前按权限模式决定一次:自动、全部允许下直接开始,改动先问下先出一张卡、批准才开始,只读下不执行。审查期间应用的规则管不到这些命令,凭据那一条也一样:沙箱只挡写不挡读,项目外的文件它也读得到。/new(或 /clear)开一个新的 Codex 线程,之后的轮次接着它,这里的记录还在,后面写的字是新线程的第一句话;/ 加 skill 的名字按 Codex 自己的 $名字 用那个 skill(列表来自 Codex 的 skills/list:你的、插件的、项目的和 Codex 自带的,按目录记 10 分钟)。别的 / 开头的话原样当文字发给 Codex。Codex 在干活时发的命令不插进这一轮,等它完了再执行。Codex 会话还没有计划模式、选账号、导入终端会话和任务地图的回放(地图只画实时的调用)。出错时会话里写「Codex 出错停下了:」加 Codex 自己的话,比如你设置里的模型这个账号用不了,这时在输入框底部选一个列出来的模型。

文件链接:Claude Code 回复里提到的文件和 Bot 的一样画成文件链接,点开在预览里看。它写的路径相对它当时干活的地方,不是应用的工作区:可能就在项目目录下,也可能是目录里某个仓库下的 src/lib/api.ts,或者只有文件名 server.go。所以点开前先问电脑它在哪(GET /v1/project-sessions/:id/locate?path=):绝对路径或 ~/ 开头的照写;项目目录下有这个路径就是它;没有就在项目目录里一层层找路径以它结尾的文件或文件夹(按整段比,不进点开头的文件夹、node_modules 和链接过去的文件夹,最多看两万项),取最浅的那一个。找不到,或最浅的有好几个,弹一条提示说明,不开预览;分支名这类带 / 的词也会画成链接,点了说「在项目目录里没找到」。找到的位置这个会话里记着,没找到的下次点再问。预览旁边是项目目录的文件树,和工作区浏览器一样一层层读:通往这个文件的文件夹从外到里打开,文件本身选中;点别的文件在同一个预览里打开,点文件夹只展开或收起;手机上预览顶部的列表按钮写着项目目录的名字。宽屏上这个预览是项目的,不是这个会话的:同一个目录里各个会话点开的文件都进同一个「<目录名>项目目录」标签,在那里换文件,不另开;以前按会话各开一个、存在布局里的,打开应用后并成一个(留离键盘最近的那个)。标签记着最后从哪个会话打开,那个会话删掉时它也关上。点开头的文件夹和 node_modules 不在树里,里面的文件照样打得开,只是树里没有选中的行。项目目录以外的文件(~/Downloads/…、/tmp/…、你贴进对话的图片)旁边也是项目目录的文件树(ADR 0095 决定 29),从顶层列起,树里没有它自己的行;能不能保存、批注照旧看它在哪。这是 NSH 版;信使旁边还是这句话提到的那几个文件。

批注(ADR 0095 决定 28):项目目录里的文件可以批注,和 Bot 私聊里一样在预览栏里加、在列表里看、攒一批一起发、在对话里成卡片;只有 NSH 版有入口,信使的预览照旧只读。批注挂在文件的绝对路径和 Agent 的一条回复上:从回复里点开的挂那一条,在文件树里切到的、从侧栏打开项目目录后点的挂这个会话里它最新的一条;它还没说过话就批不了,预览里写明原因。项目目录外的文件(贴进来的图片、/tmp 里的)批不了。一批发出就是你在这个会话里的一句话,不引用、不 @,什么都没补充时这句话只有卡片;交给 Agent 时,你的话后面跟一行「下面是我在文件上写的批注……」,再把每条写全(路径、种类、位置、引文、意见),框选的裁图作为图片一起给(Codex 的先写到系统临时目录,按路径给)。它没有应用的工具,所以只有你标已处理;文件改了照样标「原文已变」或重新定位;清空和删除会话时一起删。

消息索引:对话左缘和 Bot 的对话一样有一列消息索引:已载入的每一句一道短刻度,你的用强调色,agent 和应用的是灰色;悬停弹出这一句的摘要、谁说的、时间和第几句,点刻度或那张卡片就滚到这一句;方向键逐条走,Esc 关卡片。亮着的刻度跟着读到哪儿走,在最底下时是最后一句;点过去以后,新来的话和 agent 的进度不再把你拉回底部。顶上的箭头载入更早的一页。至少两句(或还有更早的)才出现,对话窄到手机宽度时不显示。

记录:每一轮记在 agent_runs(状态、等你批准的那一项、正在做什么、出错原因、后台任务和它们的状态),守护进程重启时还在跑的记作中断。花费记进花费账本、单列「项目会话」,也算进每日上限(见花费);用量照样算在 Claude 账号上,用量挂件里看得到。Claude Code 没找到、没登录或目录不在了,这一轮失败,会话里有一条系统行写明原因。右键菜单能置顶、打开项目目录、在项目目录打开终端、重命名、清空历史、归档和删除;后三样都先 Stop 正在跑的那一轮。清空历史后下一轮从头开一个新会话;删除只去掉应用里的会话和消息,Claude Code 那边的会话文件和目录里的文件都还在。记忆在 Claude Code 自己的会话文件里,那个文件被删,下一轮会因为找不到会话失败。手机经同样的路由(GET /v1/runtime/claude-code/sessions、POST /v1/project-sessions、GET /v1/project-sessions/:id/run、GET /v1/project-sessions/:id/locate、GET /v1/project-sessions/:id/commands、PATCH /v1/project-sessions/:id、POST /v1/agent-runs/:id/approve|deny|stop)。

给任务地图的:每个工具调用开始和结束各发一个工具帧(turn_id 是这一轮的 id,agent_run 写着子代理、地点、做这一步的模型和成没成),不落库。GET /v1/project-sessions/:id/replay 从 Claude Code 自己的会话文件读回整段:每个工具调用的时间、主线还是哪个子代理、地点、做它的模型、成没成、耗时和 Claude Code 记下的放行决定(钩子放行是 hook,卡上允许是 user_temporary,卡上拒绝是 user_reject),子代理,你说的话和你对它提问的回答。地点是项目里的相对路径、项目外的路径(~/.claude* 单列)、测试或类型检查、git;命令、文件内容和结果都不带出来。目前只支持 Claude Code。

后台任务(ADR 0095 决定 25):Claude Code 在项目会话里能像在终端里一样把命令放到后台、用 Monitor 盯着一个命令或连接、派子代理;Monitor 的命令和别的命令一样按权限模式走。这些和 Bot 私聊里的工作一样读。工作气泡一直在,回复之后只有后台任务时末行写「N 个后台任务运行中」,侧栏和窗格写「后台任务运行中」,你说的话马上答;任务结束时 Claude Code 通常会自己接着说一句。末行点开是正在做的事,在跑的命令和监视带实时输出。结束的进「N 条命令」卡片,输出点开看;这一轮结束后,它们折叠留在启动它们的那一轮的回复下面,早先几轮的也在。子代理和 Bot 之间的私聊一样,回复下面一个入口,点开是弹窗(手机上是整页):交给它的任务、它说的话和每个工具调用,运行中跟着走。Stop 只在输入框:有后台任务时那个按钮是停止菜单,全部停下或停其中一个;守护进程重启也会结束它们,它们不会接着跑。Codex 会话没有这些,Bot 也仍然不许后台任务。

任务地图(ADR 0096):项目会话右键菜单里的「打开任务地图」,或者它窗格顶栏和标签 ⋯ 里的「地图」,在旁边开一个窗格,把这段会话画成一个等距的小镇。调用多的目录各是一栋楼(最多 10 栋,形状按目录名挑,比如 docs 是图书馆),另有项目根、测试场、版本库、外部服务(MCP,所有服务一座中继站)、Claude 会话库和项目外;分区在打开时排好,之后实时来的调用按目录归进已有的楼,不重排(新会话还没有一栋代码楼时,头几次调用进来就排)。Claude Code 是主角,它派出的子代理是小一号的角色,只在干活期间出现;角色头顶的名牌是 Agent 的 logo、名字和这一步的模型(比如 Opus 5.5)。拖动平移,右键或 Shift+拖动旋转,滚轮缩放,横向滑动也能转;转盘可以拖,也可以点一个朝向。天色跟着回放的钟走:太阳东升西落,夜里换成月亮和星星,墙面明暗和影子随之变化,天黑后路灯亮起。没人在的楼,牌子只有颜色点和来过的次数,鼠标移上去、点开或放大到 1.5 倍以上才写出名字。点一栋楼的牌子看它到这一刻被去过几次、谁去的、失败几次、最近碰过的文件,能跳到上一次和下一次来访;点角色跟着它走。下面的时间轴能播放(1、4、8、32 倍)和拖动,每个角色一条轨道,红点是失败;超过 15 分钟的空档压成 4 秒。侧栏写着它在哪做什么、你交代给它的事和值得看的时刻(派出分身、问你等了多久、长时间没动静、被拦下、你在卡上允许的改动、失败、半分钟以上的调用、两地来回),点一个跳过去。交代给它的事和值得看的时刻平分 Bot 卡片下面剩下的高度:一边短就只占它那几行,另一边用余下的,两边都长各一半,各自在卡里滚动。会话在跑时地图跟着最新一步走,标着「实时」;拖回去看之前的,按「回到实时」回来;一轮结束和重新连上后重读一次回放。只有宽窗口有地图,手机和窄窗口还没有。

Bot 对话的任务地图(ADR 0097):私聊和群也有地图,入口一样(右键菜单「打开任务地图」,窗格顶栏和标签 ⋯ 的「地图」),文件投送没有。应用记下 Bot 每次工具调用在哪干的(tool_places):文件工具的路径从工作区根算,shell 按它的 cwd(没写就是这一轮的工作目录)读命令里的路径,MCP 工具落在它的服务上,发消息、提问、排任务这类算在工作区;只记地点、文件名、模型和结果,不记参数、命令和内容。等你批准的调用和卡片关联,你允许或拒绝的那次都在图上。地图上每个干过活的 Bot 都是主角,从头到尾都在、一样大,每个 Bot 是从吉祥物布丁和麻薯长出来的一个角色:同一副身体,各有口味配色和行头(布丁戴天线;麻薯戴毛线帽端着热饮;芋泥戴耳机拿写字板;樱花戴贝雷帽拿调色盘和画笔;抹茶戴厨师帽拿打蛋器;焦糖戴安全帽拿锤子;芝麻戴眼镜、耳后夹铅笔、抱着书;蓝莓戴巫师帽拿魔杖),一张图里不重样,总是脸朝你;头像是 folk 的 Bot,就是它头像上那个角色(前面已有 Bot 占了就另分一个),眼睛和嘴照它头像的,其余是布丁本来的脸;胸前别着一枚圆徽章,里面是它的头像;在一处干活时各干各的(布丁敲键盘、天线收信号;麻薯喝冒热气的饮料;芋泥跟着耳机点头、在写字板上打勾;樱花挥笔甩出彩色笔触;抹茶打蛋;焦糖抡锤砸下、火花四溅;芝麻看书翻页、推眼镜;蓝莓飘起来挥魔杖洒星星),走在路上时摆手,几个站在同一个门口时每个站在右边那个的前面、手上的活露出来;回复时张嘴说话、等你时蹦跳挥手、出错时撇嘴,平时会眨眼,颜色随地图的时辰变暗变暖;名牌最前面也是它的头像,后面是名字、它模型来源的 logo(端点的厂商、Claude Agent 的火花、本机 Agent 的 logo)和这一步的模型;侧栏每个 Bot 一张卡,用它的头像。地图按「这件事」画,和流程一个口径:没指定时是这段对话最新的那件工作,上方的切换器能换,流程页顶栏的「地图」打开的就是这件事的;它的工作是它所有轮次的调用,不管在群、你和 Bot 的私聊还是 Bot 之间的私聊里(GET /v1/tasks/:id/replay),每个 Bot 的卡片写着它这一步在哪段对话、为你哪一句干活,「交代给它的事」每句标出在哪说的,一个 Bot 第一次在某段对话里做这件事是一个值得看的时刻,顶上写着它在几段对话里;一段对话还没有一件事时,地图画它里面的全部工作。根在这里叫「工作区」,工作区以外叫「工作区外」,调用少的目录叫「工作区别处」,小镇以这件事的文件夹命名(没有一件事时是工作区的);宣布一轮结束(end_turn)不算一步,等过你卡片的调用不算长调用。GET /v1/sessions/:id/replay 读回最新的 5000 次调用、你说的话和你对 Bot 提问的回答。这一版之前的调用没有记地点,画不出来。删掉或清空一段对话时,它的记录一起删;Bot 读不到这份记录。

回避:把任务地图叫成流程图, 让实时调用重排已经排好的楼, 在地图的记录里存调用参数, 管这件事叫「事件」

会话(Session)

私聊、群或项目会话的对话容器。消息、轮次、判断和花费都挂在它上面;Bot↔Bot 私聊也是会话,你不是参与者,能在弹窗里看但发不了言;它不在侧栏里列。

回避:频道, 房间, conversation(对外不说), 把线程当会话

来源(Origin)

一条 Bot↔Bot 私聊是被哪条消息开起来的:叫醒发起方那一轮的那条消息。入口挂在那条消息下方;那条消息会话里不显示时(作业做完的通知、回看行这类只给 Bot 读的行),挂在它之前最近一条显示的消息下方。也只从这里进去:点开在当前会话上弹出这条私聊,弹窗里标出来源并可点回去。来源会话被清空或删除后,这条私聊就没有来源了,照常能看。

回避:父会话, 线程, 把 Bot 自己那句「我去问问 X」当来源

线程(Thread)

针对一条主转录消息的引用回复,回复仍在主转录中,不是新群或独立会话。委派按「两个 Bot × 规划」复用的协作线程是私聊,不要与这种引用回复混为一谈。

回避:引用回复是新群, 引用回复藏进侧栏, 引用用户自动点名用户, 把协作私聊当一条消息的回复

回应(Reaction)

对一条消息的轻量确认,从固定表情集合里挑,不能自定义。不承担改指令或安全相关决定;那些必须写字回复或点批准。v1 只有你会贴;Bot 不回应。

回避:用表情当批准, 自定义表情, 用 ✅/❌ 当允许或拒绝

判断日志(Judgement log)

当前对话设置里可见的下场 / 旁观记录。不进主转录。

回避:把判断当轮次, 主转录刷屏