Ephemeral-AI-Lab/layerfs
Ephemeral Workspaces, durable shared history. LayerFS gives every agent a complete, writable filesystem Workspace over shared committed history, without copying the base. Agents work in parallel, commit what changed as deduplicated checkpoints, then branch, rewind or merge. Try it with LayerFS × DSH.
LayerFS – 面向 AI 代理工作区的 SQLite 后端、内容寻址的“时间机器”
它是什么
- 一个库、CLI 和基于 FUSE 的文件系统,让 AI 代理(或任何接触文件系统的工具)在临时工作区内工作。
- 当代理完成一个步骤时,工作区可以被提交——将整个文件系统快照转换为不可变的提交。
- 提交存储在 LayerStack 中:使用三种经典技术构建的层历史:
- 内容寻址存储 (CAS) – 对象以其字节的哈希命名,因此相同的数据只存储一次。
- 内容定义分块 (CDC) – 文件被分割成稳定的块;微小的编辑只创建新块,而不是整个文件的新副本。
- 写时复制 (COW) – 发布新层时,只重写更改的目录和文件。
- 整个历史存储在一个单一的 SQLite 数据库(Store)中。该数据库对代理是只读的;只有 LayerFS 运行时在发布提交时写入它。
为什么对 AI 很重要
- 现代自主代理(LLM 驱动的规划器、基于人类反馈的强化学习循环、多代理模拟)需要尝试代码、数据或配置的许多假设变体。
- 为每次试验重新创建大型工作区的完整副本是浪费的。LayerFS 让代理可以分叉先前的层(零复制)并运行多个并行展开,然后提升最佳分支。
- 由于历史是不可变且内容寻址的,系统可以在数千次试验中消除大量重复数据,大幅减少存储和 I/O。
关键组件(截至 v0.1.6 开发者预览版)
| 组件 | 角色 |
|---|---|
| 存储引擎 | 管理 CAS、CDC、COW、对象验证和 SQLite Store。 |
| SDK | Rust 库,暴露 Client、LayerStack、Branch、Workspace 等类型以及创建/提交/查询它们的函数。 |
CLI (layerfs-cli) |
用于创建 Store、初始化 LayerStack、生成工作区、提交和检查历史的命令行界面。 |
| 文件系统投影 | 提供挂载点(通过主机物化或 FUSE 容器),对代理显示为普通目录。 |
| 容器运行时 | 使用 FUSE 启动轻量级 Linux 容器,将可变工作区保留在容器内,而持久 Store 保留在主机上。 |
典型工作流程
- 创建 Store –
layerfs db create store.sqlite。 - 初始化 LayerStack –
layerfs layerstack init --name demo --empty创建创世层。 - 启动工作区 –
layerfs workspace exec <branch>启动一个进程(或容器),具有文件系统的私有视图。 - 执行工作 – 代理运行其工具、写入文件等。
- 提交 –
layerfs commit <workspace>将可变状态转换为不可变提交,并将其附加到当前分支。 - 分支 / 分叉 – 从任何先前的提交创建新分支,以探索替代方案而无需复制数据。
性能亮点 (v0.1.6)
- 向 32 MiB 文件添加 10 字节仅使逻辑存储大小增加 ≈ 0.026 MiB(得益于 CDC)。
- 跨工作区的六次确定性编辑使逻辑存储增长 ≈ 0.225 MiB。
- 所有测量来自真实 FUSE 基准测试套件;底层 SQLite 页面可能增长更多,但逻辑内容保持微小。
限制(重要须知)
- 仅限开发者预览版 – 无崩溃或断电持久性保证;请备份重要数据。
- 每个客户端一个 Store;尚无跨主机同步。
- 提交不自动 fsync;沙箱的可变状态在提交发布前仅存在于内存中。
- 只有单个构建工作者构建不可变对象,使大型批量导入比早期版本慢。
- 无显式压缩;旧存储保持可读,但系统不会自动回收空间。
- CLI JSON 输出是临时格式,不是稳定 API。
入门
# 克隆 v0.1.6 标签(预览代码位于 `crates/` 下)
git clone https://github.com/Ephemeral-AI-Lab/layerfs.git
cd layerfs && git checkout v0.1.6
# 构建 CLI(需要 Rust 1.85+,macOS/Linux)
cargo build --release -p layerfs-cli
export LAYERFS_BIN=$PWD/target/release/layerfs
export LAYERFS_CONTEXT=$PWD/.layerfs/context
mkdir -p $PWD/.layerfs
# 创建 SQLite 存储和演示 LayerStack
$LAYERFS_BIN db create $PWD/.layerfs/store.sqlite
$LAYERFS_BIN context use --store $PWD/.layerfs/store.sqlite
$LAYERFS_BIN layerstack init --name demo --empty
$LAYERFS_BIN query layerstacks
继续阅读版本特定的快速入门指南,了解分支创建、工作区执行和可选的 FUSE 容器使用。
路线图快照
- 0.2.0(计划) – 可移植投影层(reflink/clonefile,未来支持 OverlayFS)。
- 稍后 – 跨主机存储导出/导入、同步和更丰富的运行时集成。
社区与支持
- Discord: https://discord.gg/DrgJ4DX9E
- 微信群(仓库中有二维码)– 邀请定期过期。
- 在 X 上关注项目负责人: @yifanxu_ephai
许可证 – MIT。
LayerFS 是一个研究级工具,面向构建需要廉价、版本化文件系统状态的自主 AI 代理的开发者。它还不是生产级存储系统,但为实验“临时工作区 + 持久共享历史”模式提供了具体平台。
写过它的文章
相关
- 项目
- 项目
- 项目
- 项目
- Dispatch