工作区(Workspace)
账户级一个本地目录。文件、产物、交接附件都在这里;所有 Bot 共用。Bot 之间不隔离。它管的是产物归在哪、统一管理所有 Bot 的产出,不是权限边界:Bot 能做什么由权限模式决定,和路径在不在工作区里无关(ADR 0092)。侧栏可打开整棵工作区目录(桌面端是一块窗格:文件树 + 预览,不占用对话框旁那条产物预览;窄屏和手机上仍是从右侧滑出的浮层);区内 UTF-8 文本可在查看器里改并保存回同一路径。
回避:云电脑, 每 Bot 一个目录, sandbox(除非以后另开)
工作目录(Work dir)
一个规划的文件夹,在工作区的 work/ 下,名字是目标(或开头那条要求)的前 12 码点 + 一小段 id,没有日期;它下面每个任务有自己的 NN-<标题>/。一轮的工作目录是它所在的任务目录,没归到任务就是规划目录;壳默认在里面跑,文件工具的路径仍相对工作区根。两层都有保留子目录:tool-results/ 和 scratch/ 都不会挂成产物;map.md 和 ticket.md 是应用的镜像文件,同样不算产物。细节见行为说明·工作目录。
行为细节
2 级归属:目录来自当前工作项的规划/任务,不继承唤醒方的任务,也不由整理跳盖章;未选归属的桌面不能有副作用。目录最多一次变化和继续的保护见桌面段。以下目录命名、保留文件和预览仍成立;「谁继承」、单一当前规划及先整理部分只描述 0/1 级旧路径。本次不把工作目录当沙箱,也不宣称已实施设计里所有跨任务写入限制。
一个规划的文件夹,在工作区的 work/ 下,名字是目标(或开头那条要求)的前 12 码点 + 一小段 id,没有日期,也不带 @(换成 -,引用里面的文件时才不会被读成点名;旧的带日期或带 @ 的目录不动);它下面每个任务有自己的 NN-<标题>/,标题里的 @ 同样换掉。一轮的工作目录是它所在的任务目录,没归到任务就是规划目录;壳默认在里面跑,文件工具的路径仍相对工作区根。谁继承:交接、点名、判断下场、Bot↔Bot 私聊、中断续跑和回看都用唤醒方那一轮的规划和任务,所以一件事跨 Bot、跨会话仍是同一处;你的消息由整理跳盖上规划和任务,它开的轮都落在那里。不按时钟切目录:一个会话的当前规划一直开着,直到整理跳判成换事、回到旧事、做完或搁置。日程有自己的常驻规划,每次到点新开一个任务。第一次真被用到才创建,只说话的轮次不留空壳。交付物不进来:你点名了路径就写在那儿,没点名的落本轮任务目录。两层都有保留子目录:tool-results/ 是守护进程存的大工具结果(关闭够久后自动清掉),scratch/ 是纯过程文件——都不会挂成产物;map.md 和 ticket.md 是应用的镜像文件,同样不算产物。删掉工作目录是你的事,应用只清 tool-results/。这件事在应用里按叫醒关系从上到下看经过,卡片上标着它干的是哪个任务,产物挂在交出它的那一轮上,点开走预览。
回避:每 Bot 一个目录, 产物库, 把它当沙箱, 应用替你删整个目录, 应用搬文件归档, 按日期或静默时长切目录
产物(Artifact)
一条消息里引用的工作区相对路径、写成绝对路径的本机文件或文件夹(可以在工作区外,只读),或 http/https 链接;文件本体在工作区、本机别处(或远端 URL)上,本轮写入的区内文件会自动出现在最终消息里(这一轮又删掉的除外)。点开后在聊天右侧预览面板查看(图 / 音视频 / PDF / 文本 / 单文件 HTML / Word / Excel / PowerPoint),其它种类给下载或用系统默认应用打开。交接时把路径写进给对方的那条消息,不另建种类;区内的产物可以批注(见「批注」)。细节见行为说明·产物。
行为细节
一条消息里引用的工作区相对路径、写成绝对路径的本机文件或文件夹(/Users/…、~/…、C:\…,可以在工作区外),或 http/https 链接。文件本体在工作区、本机别处(或远端 URL)上。工作区只框住 Bot 干活的范围,不框你能打开什么:工作区外的文件夹点开列出里面的东西,文件照常预览,但只读——源码视图里打不了字、不能批注、树里不能移到废纸篓(ADR 0090)。本轮写入的区内文件会自动出现在最终消息里;这一轮自己又删掉的不算(删掉的文件夹,里面的也不算)——2026-10-04 真模型跑时 Bot 先在工作区根写了 slogans.md、又在任务目录写了一份并删掉前一份,群里却出现两个 slogans.md 气泡,其中一个已经不存在。点开后在聊天右侧预览面板查看(图 / 音视频 / PDF / 文本 / 单文件 HTML / Word / Excel / PowerPoint);其它种类(字幕、压缩包……)写明不支持预览:本机窗口给「用系统默认应用打开」,手机和浏览器里给下载按钮。远程打开的每个文件都能下载:手机在预览顶栏右端,宽屏在文件上方那排按钮里,流程图的文件卡片在卡片头部。远程打开、下载和发附件都不限文件大小;桌面端这条预览也可以拖成自己的一块窗格。从消息打开时,面板左侧的树只列这条消息提到的文件——它的附件和正文里点名的路径,这件事别的消息引用过的不列;从流程图的文件卡片打开时,树列的是这件事引用过的全部路径——不是工作目录里的全部文件,相关指的是被引用过;这时树以工作目录为根,这件事在目录之外引用的路径和它并列平铺,这一步自己引用的那几个标出来。面板与聊天共用一栏、中间拖条改宽度;同一条消息多个路径或打开工作区时左侧是文件树,树和内容之间可拖。拖过的预览栏宽度和文件树宽度,退出后再开还在。文本用 Monaco + Shiki 编辑(行号、查找 / 替换走 ⌘F、匹配括号·标签·标题折叠、换行);预览自己不再放查找、换行、复制、保存、关闭这些按钮。Markdown 和单文件 HTML 默认看渲染结果,内容顶部正中有一个浮动按钮,不随正文滚动,在预览和源码之间切换;正文超过 50 万字的直接打开源码,没有这个按钮,顶部写明原因(渲染这么多字会卡住窗口好几秒,手机上更久;HTML 只算页面上显示的字,内联几 MB 图表脚本的报告照常渲染)。PDF 用内置的 pdf.js 渲染(翻页、缩放、适合宽度 / 整页、页内查找),不走系统的 PDF 查看器。区内 UTF-8 文本可 Cmd+S / 保存写回同一路径;不是 UTF-8 的文本按 GBK(GB18030)读,读不通的把认不出的字换成占位符,两种都只能看、不能在这里改,顶部写明(保存只写 UTF-8,会把文件改成另一种编码,或丢掉认不出的字节);未保存切文件或关面板先确认。桌面端预览没有自己的标题栏,文件名和关闭都在工作台标签上;窄屏和手机留一条返回加文件名。远程连过来的设备不管多宽也没有工作台标签(平板也一样):产物预览在那里盖满整屏打开,同样留一条返回加文件名,而不是聊天右侧的一栏——2026-10-08 之前那栏在这些宽屏上没有任何关法。文件树每一项右键是「在 Finder 中打开」和「用系统默认应用打开」,本机窗口才生效。Bot 或项目会话的 agent 在消息里写到的文件(行内的文件块,图片卡也算)右键也是这份菜单:「用系统默认应用打开」「在 Finder 中打开」和「复制绝对路径」;Bot 写的路径按工作区找,项目会话里按 agent 干活的目录找,找不到或找到几处就提示一句。目前只在原生(NSH)版 Mac 上的本机窗口里有:手机、浏览器和远程窗口里文件在另一台电脑上,Windows、Linux 版的外壳还不会打开文件,这些地方右键照旧是这条消息的菜单。树里的文件和文件夹(⌘ / Shift 多选的一起)可以直接拖到聊天框,停在框上时框会亮起,松开后在输入框上方排成附件,随下一条消息发出:挂的是工作区里的原路径,不上传、不复制进 inbox/,Bot 读到的是「附件:路径」,图片照常按像素交给模型;拖动时按 Esc 取消。文件投递那条会话、只读的会话和正在发送的聊天框不收;手机和触屏上不拖。交接时把路径写进给对方的那条消息,不另建种类。种类按扩展名在预览时推导。消息正文里点到的文件显示成一枚小胶囊,前面是按同样的种类挑的图标(文件夹、图片、音频、视频、PDF 和文档、表格、演示、Markdown、代码、压缩包),以 / 结尾的路径算文件夹;图片链接显示成缩略图卡片。区内的产物可以批注(见「批注」)。
回避:资产库, Artifact 表, 快照副本, 每 Bot 产物目录, @文件
批注(Annotation)
你对某个产物的某一处写的一句意见,挂在一个工作区相对路径、一个锚点和交出这个产物的那条消息上。先是草稿,Bot 看不见;攒够一批一起发出,合成一条引用交付消息的回复并 @ 交出它的 Bot;发出后是「待处理」,Bot 或你把它标成「已处理」,已处理的可以重新打开。批注不是产物的快照:只记下当时的引文、位置和文件哈希,不保存旧文件;只批工作区内的文件,链接类产物不能批注。项目会话里没有 Bot:批的是项目目录里的文件,挂在它的绝对路径和 Agent 的一条回复上,一批发出是你给它的一句话(不引用、不 @),只有你标已处理(ADR 0095 决定 28)。细节见行为说明·批注。
行为细节
你对某个产物的某一处写的一句意见。挂在一个工作区相对路径、一个锚点和交出这个产物的那条消息上。先是草稿,Bot 看不见;攒够一批一起发出,合成一条引用交付消息的回复,并 @ 交出它的 Bot。发出后是「待处理」,Bot 或你把它标成「已处理」;已处理的可以重新打开。一标成已处理就从文件上撤下——图上的框、代码页边的点、Markdown 里的标记、PDF 页上的框、HTML 的编号、时间轴上的标记——留在文件上的就是还没处理的;列表里照旧列着。列表按「全部 / 待处理 / 已处理 / 草稿」分页,每页标着条数,每种状态一个颜色——待处理是青色(和文件上画的标记一样),已处理是绿色,草稿是灰色虚线——标签上的点、每条左边的色条和状态标签都用它;空着的那页用应用统一的空状态,说明这里会出现什么。预览栏的「显示已处理」勾上才画回来,只对这块预览有效;从列表点一条已处理的去定位,那一条在定位期间画出来,再点一下取消选中就撤下来;对话里点它的卡片只打开列表停在那一条,不画回文件上。文件改了、锚点对不上时标「原文已变」,状态不变;文件不在了标「文件不在了」。批注不是产物的快照:只记下当时的引文、位置和文件哈希,不保存旧文件(选区长过引文上限时,另记整段的长度和指纹,用来判断这一段还在不在、变没变)。挂到谁:从某条消息打开的预览,就挂到那条消息和交出它的 Bot;在文件树里切到的、从流程图或工作区打开的文件,挂到同一会话里最近交出它的 Bot 消息(先找这件事里的);没有哪条 Bot 消息交出过(附件或单独一行的「附件:」),就照同样的顺序挂到在正文里给了它链接的那条——Bot 用命令剪出的成片常常不作为附件交出,只在回复里给个链接(2026-10-14 起;原来这种视频下面没有「在此处批注」,也不说为什么);交出的总比只链接的先,评审 Bot 链接了别人交出的文件,批注仍回到交出它的那位;两样都没有的文件不能批注,批注列表里写明原因;交付消息在你不在的 Bot↔Bot 私聊里时,这批发到你和交付 Bot 的私聊里,消息上记着来源。只批工作区内的文件,链接类产物不能批注。批注消息叫醒的每个 Bot 沿用它自己交出产物那一轮的工作目录(这批里它最近的一次交付),哪怕会话已经静默够久、那件事已经关了——改的是同一件交付物;这一轮只是在那个目录里干活,不把那件事重新打开,也不换掉会话的当前规划,那件事属于别的会话(Bot↔Bot 私聊交出的)时也一样,两边会话各自接着的事都不受影响。它就是一条普通的后续发言:落在交付那一轮上、进纠正链,不加权。一批最多 50 条,一条正文最多 2000 字。群里一批可以同时交给几个 Bot:上下文里每条批注都写明交给了哪个 Bot(交出那个产物的 Bot,删了就写「已删除的 Bot」),list_annotations 也带上;每个 Bot 只处理交给自己的,交给别的 Bot 的留给那个 Bot,可以提一句;交给已删除的 Bot 的没人接,归这批叫醒的 Bot 处理。Bot 能做的:逐条处理交给自己的,改了的用 resolve_annotation 标成已处理并写一句怎么改的(任何 Bot 都可以标——Bot 不是权限边界——记下是谁标的),用 list_annotations 查还没处理完的(路径和 read_file 一样解析,工作区外的路径直接报错),read_file 读到还有待处理批注的文件时会被提醒。Bot 不能做的:重新打开、删除、新建批注。清空历史、删会话时挂在这些消息上的批注一起删掉;删了文件不删批注。锚点种类:文本 / 代码行区间、Markdown 渲染态划词、图片框选、PDF 页内区域、HTML 元素、音视频时间点。
项目会话里(ADR 0095 决定 28):没有 Bot,批的是项目目录里的文件,挂在它的绝对路径和 Agent 的一条回复上,bot_id 为空;一批发出是你在那个会话里的一句话(不引用、不 @、不进工作),Agent 收到的是这句话加上每条批注写全的文字和裁图;只有你标已处理,Bot 的 resolve_annotation 拒绝它们,list_annotations 和 read_file 的提醒不算它们。细节见项目会话。
回避:评论(留给以后可能有的多人场景), 审阅, 新的消息种类, 批注存旧版本, 每条批注单独叫醒一次, Bot 给你批注
附件(Attachment)
聊天里你丢进来的文件,复制到工作区 inbox/,消息上保留指向该副本的链接。远程连接另有一条专门用来发文件的会话:发到那里的文件同样进 inbox/,也能发文字,文字只留在这条会话里;这条会话没有 Bot,不叫醒任何人。在普通会话里发的文件仍叫醒那条会话。Bot 把工作区里已有文件当产物挂上时也走同一套附件行,但不复制、不进 inbox/;你从文件树把工作区里的文件或文件夹拖进聊天框也是这样,发出时挂的是原路径(文件投递那条会话不收)。工作区是电脑,附件不是第二套文件系统。栅格图进轮次窗时按像素发给模型,但一轮最多带 20 张、20 MB:从触发消息起、由新到旧取,放不下的旧图只留路径;大图先缩到长边 1568、不透明的转 JPEG 再发。Bot 自己用 read_file 读工作区里的 PNG / JPEG / GIF / WebP 时,图也这样缩好,作为图像附在那一跳的工具结果之后:一跳最多 12 张、8 MB;这些图先占这一轮的 20 张、20 MB,转录窗口拿剩下的;后读的图放不下时,更早读的按先后移出、只留路径,要再看就重读。其它文件只给路径,要读走 read_file。
回避:只挂在消息上的幽灵文件
搜索(Search)
跨 Bot、群、文件和日程的查找,跳回原会话位置。v1 做本机检索,不是另一个 Bot。
回避:语义记忆层
镜像文件(Mirror files)
规划目录下的 map.md(要点 + 任务索引)和每个任务目录下的 ticket.md(这个任务的要点,附规划的验收和规则),每次整理或你改过要点之后由守护进程重写。是应用自己的文件:Bot 可以 read_file 读,不能改、不能交出,也不算产物;规划目录在第一次整理出要点时就会建。要改内容,在流程图里改要点或任务。
回避:手改镜像文件, 把镜像当交付物, 让 Bot 维护它, 用它当唯一事实来源(库才是)