用文件做文档,版本可以锚定到链上
2026年
这是一套给个人和团队用的文档站。文档就是普通文件,每一次保存都留下一个版本;版本号由作者、时间、说明、内容清单和上一个版本一起哈希得到,所以 锚定其中一个版本,等于固定了它之前的整条历史 。界面和实现都不对外使用产品名,下面只讲结构和能力。
截图来自本机跑起来的开发环境,用的是仓库自带的模拟登录,账户地址是占位符。页面上原来的产品名和标识已经去掉。

文档站编辑页:个人空间里的 README,点进去就能改,会自动保存版本
文件、版本和协作
每个空间是一条版本线,文件按内容的 sha256 寻址。网页保存时对当前头做 compare-and-swap:能三路合并的单个文件就合并,否则返回冲突,不会悄悄覆盖。可以看历史、做 diff、把某一版恢复成新版本,也可以导出带完整历史的 zip,用来重算这条链。
编辑器是块编辑器。同一页上的人走实时协作(未保存的输入会在房间里同步),各自的输入仍由各自保存成版本;agent 经 MCP 写入,或有人用纯 Markdown 编辑时,再按三路合并进共享页面。打开的文件可以听版本流:谁在写、哪个版本刚到来。HTML 页面会自行刷新,只读页会把改过的块点亮。
Agent 和沙箱页面
每个空间可以签发 MCP 令牌(只读或读写,可过期、可撤销,只显示一次,存储时是哈希)。agent 用它列目录、读写、搜索、看历史和 diff,也可以取出用于上链锚定的清单哈希。写操作会记成「某个 agent 名」留下的版本。
HTML 页面跑在单独的内容域上,用绑定了空间和版本的短时签名 URL 打开,套着固定的沙箱和 CSP;那个域不读、也不种登录 cookie。还有只读分享链接,以及把单篇文档授权给其他账户或群组的机制。

空间设置:MCP 令牌、分享链接,以及把空间清单哈希记到链上
记到链上
浏览器侧把当前空间的清单哈希(路径和每个文件的 sha256,排序后再哈希一次)交给账户所在的门户合约调用。文档服务自己只负责算出这个哈希,不经手链上密钥。因为版本 id 已经串成哈希链,锚定一个头就固定了此前所有版本,包括 agent 写下的那些。
Tank Xu
Product Designer / Creator