开源Eva软件工厂:用JSONL流水账代替写代码


一个自称“软件工厂”的项目,目前只干了一件事:把聊天记录存成本地文件!

这就是 Eva!2026 年 8 月,Missing Studio 在 GitHub 上开源了它。README 第一行写的是“一个自主的、多租户的、AI 原生的软件工厂”。当前只有8 个星星,0 个复刻。项目主页上挂着一句免责声明:“Eva 还很早期。今天它只是一个终端聊天客户端。它不能读你的文件,不能跑你的测试,也不能碰你的终端——目前没有任何工具。”

等等,软件工厂?

一个连文件都读不了的“软件工厂”?

事情没那么简单。

> 一个把“先写下来再显示”当作品牌承诺的终端聊天工具,正在重新定义 AI 编程助手的底层逻辑——不是回答得快,而是记得准。

大家以为它在造工厂,它其实在写日记

Eva 的 README 里写着一个核心承诺:每一个问题、每一个回答、每一次重试、每一个 Token,都会在发生时写入你磁盘上的一个文件。屏幕上看到的内容,是从那个文件里读回来的。

这不是“聊天记录”那个级别的功能。

普通的终端 AI 工具,流程是这样的:你打字,模型回答,文本流式显示在屏幕上,然后——如果你运气好——工具会把这段对话存到一个历史文件里。屏幕是真相,历史记录是附赠品。

Eva 把顺序反过来了。

问题先写入 ~/.eva/trace.jsonl。输出先写入同一个文件。重试、Token 用量、缓存命中——全都在那里。终端界面只是读取这份记录,然后显示给你看。

这不是“多存一个日志文件”的小差异。

事件里带着运行 ID、会话 ID、父级关联、序号。调用方可以从同一份数据里重新构建对话、筛选失败、计算用量、关联未来的子任务。缓存读取和缓存写入的 Token 分开保存——两者价格不一样,不能为了好看合并成一个数字。

这就怪了。

一个连文件都读不了的“软件工厂”,在“记账”这件事上做得比大多数成熟工具都细致。

它缺的东西,恰恰是它存在的原因

Eva 目前缺的东西,列出来是一份让人摇头的清单:不能读文件、不能跑测试、不能碰终端、没有任何工具。

但仔细看它的提交历史,会发现一个有趣的现象。

2026 年 8 月 9 日,一次重构把六个模块合并成了一个。cmd/ 放二进制文件,internal/ 放所有层,层之间的依赖关系由 depguard 强制执行而不是靠模块边界。同一天,一次构建更新移除了两个可触及的漏洞。

2026 年 8 月 12 日,文档规定提交信息、文档、注释、命令行文本、报告全部使用简化技术英语。同一天,发布流程获得了书面决策程序:什么东西值得发布,什么时候值得花一个发布候选版本。

2026 年 8 月 13 日,注释预算变成了一个检查项。注释块不能超过六行。注释在代码树中的占比不能超过某个阈值。

2026 年 8 月 14 日,编辑器的测试运行加上了竞态检测器。make test 和 CI 都跑竞态检测并打乱顺序,但编辑器之前两个都没跑。

这些提交在说什么?

它们在说:这个项目在工具还没做出来之前,先把“怎么做软件”的规则写好了。

多租户这个词,在 Eva 的语境里跟你想的不一样

README 里的“多租户”——这个词在企业软件里通常意味着“一个系统服务多个客户,数据相互隔离”。

但 Eva 当前的实现里没有“服务器”这个概念。它是一个本地终端工具。

那“多租户”是什么意思?

看它的配置设计:eva init 写一份 ~/.eva/config.toml。仓库里可以放一份 .eva/config.toml 来共享团队的配色和快捷键。一个“允许列表”阻止仓库配置改变任何其他东西。

多租户在这里的含义是:同一个二进制文件,可以为不同的人、不同的项目、不同的上下文服务,而配置的生效范围是被严格控制的。

这不是传统意义上的多租户。这是“配置作用域”的多租户。

再看它的认证设计:支持 Anthropic 和 OpenAI。Anthropic 是默认选项,所以一个 API 密钥就是全部配置。OpenAI 那边,ChatGPT 或 Codex 订阅也可以工作。eva login 处理订阅登录。eva auth status 告诉你 Eva 将使用哪个凭证。密钥永远不会出现在设置文件、日志或历史文件里。

认证信息是租户隔离的。配置作用域是租户隔离的。Trace 文件按事件追加,每个事件带着运行和会话标识。

一个本地工具,在“多租户”这件事上做的,是把不同人的凭证、不同项目的配置、不同会话的数据——在同一个二进制文件里——互相隔离。

先写下来再显示,这个顺序改变了什么

普通的终端 AI 工具,屏幕输出是唯一的真相。脚本拿 stdout,人眼看屏幕,日志文件是事后补的。

Eva 的 Trace 文件是唯一的真相。屏幕只是它的一个视图。

这个顺序的颠倒,带来了三个后果。

第一,可复核性变成了默认属性。一段文本对应哪个提问、模型是否中途失败或重试、Token 用量和缓存读写分别是多少——这些信息不是“附加的”,而是“内置的”。

第二,脚本可以消费同一份数据。eva -p "" 一次回答后退出,返回非零退出码表示失败。脚本可以检查 Trace 文件来确认回答的完整性,而不仅仅是依赖退出码。

第三,审计和成本分析不是事后工作。缓存读取和缓存写入的 Token 分开保存。如果提供商没有返回推理 Token 或美元成本,字段保持未报告状态而不是填成 0。

这个设计有一个隐含的前提:模型输出要进入脚本、审计、成本分析或未来的 Agent 平台时,不能把瞬时屏幕文本误当成唯一事实来源。

Eva 目前没有工具。但它为“有工具之后”设计的数据结构已经在那里了。

十八个决策和一个注释预算

Eva 的文档里有一个 docs/decisions.md,把所有决策放在一页上。CONTEXT.md 是术语表。一个概念,一个名字。

2026 年 8 月 13 日的一次提交,标题是“docs: the service seam, and the decisions that shape it”。这次提交加了 19 个架构决策记录。关于 Harness 作为一个层、Wire 作为公共表面、一个 API 两种传输方式、什么是 Local 事实。又加了三个关于审查结果的决策。Assembly 在这个进程中响应 API。Harness 持有构建时给它的东西,并被传入一个 Prompt。打开 Run 的层就是关闭 Run 的层。

两个已提交的决策带着“已被取代”的条款而不是重写——因为可能已经有人读过它们并视为定论。

注释预算变成了一个检查项。注释块不能超过六行。“六行足够命名一个不变量、一个陷阱或一个被拒绝的备选方案,但不足以论证一个方案。”

注释在代码树中的占比不能超过某个阈值。这是一个“后盾而不是闸门”。

一个连工具都还没有的项目,在注释上设置了比大多数成熟项目更严格的规则。

“软件工厂”这个标签,贴早了还是贴对了

回到最初的问题:一个连文件都读不了的终端聊天工具,凭什么自称“软件工厂”?

Eva 的 README 里有一个链接指向 docs/explanation/the-ladder.md。标题是“下一步往哪走”。这个文件没有出现在素材里,但它的存在说明了一件事:项目维护者有一个路线图,而当前状态只是阶梯的第一级。

再看看 Eva 的依赖和工具链:Go 1.26。golangci-lint 带着 depguard 强制执行层之间的依赖规则。goreleaser 负责发布。cosign 做签名验证。Homebrew 提供安装包。安装脚本检查下载文件的校验和。

这些是一个“软件工厂”的基础设施,不是一个“聊天玩具”的基础设施。

Eva 缺的是工具——文件读写、测试运行、终端命令。但它有的是一套为“有工具之后”设计的架构:事件溯源式的 Trace 文件、严格分层的内部包结构、书面化的决策记录、量化的代码规范。

“软件工厂”这个标签,在当前状态下看,更像是一个“占位符”——它标记了目的地,而不是当前位置。

但换个角度看:一个项目在第一个版本里先把“怎么记账”和“怎么组织代码”的规则定死,再去考虑“能做什么”——这种顺序本身,就是一种工厂式的思维。

它不是一个人的玩具,是一个团队的宣言

Eva 的贡献者列表有三个人:Praveen Yadav、Claude(是的,就是那个 Claude)、以及 Dependabot。提交记录里大量出现“Co-Authored-By: Claude Opus 5”。

一个人类和一个 AI 结对编程,用 AI 辅助写了一个 AI 工具——这个工具的设计原则之一是“先写下来再显示”。

这不是巧合。

Eva 的整个设计都在回应一个问题:当 AI 生成的内容越来越多、越来越快,我们怎么确保这些内容是可追溯、可审计、可组合的?

大多数 AI 工具的回答是:“我给你看屏幕,你自己复制。”

Eva 的回答是:“我先写文件,你再决定怎么看。”

这个区别,在一个人单独使用的时候,感觉不到。在一个团队使用的时候,开始变得重要。在一个自动化流水线使用的时候,变得至关重要。

Eva 目前没有工具。但 Eva 的数据结构,是为“有工具之后的自动化流水线”设计的。

8 个星星和一份 JSONL

2026 年 8 月 14 日,Eva 在 GitHub 上有 8 个星星。

8 个星星的项目,通常不会有人专门写一篇文章来分析它。

但 Eva 有意思的地方不在于它有多少星星。而在于它在 8 个星星的时候,已经想清楚了大多数项目在 800 个星星的时候还没想清楚的事:

  • 屏幕不是真相,文件才是!
  • 回答快不重要,记得准才重要!
  • 工具可以后补,数据结构必须先定!

这就是 Eva 在 2026 年 8 月的样子:一个 8 星星的“软件工厂”,目前只做了一件事——把聊天记录存成本地 JSONL 文件。

但这个 JSONL 文件里,藏着它对“AI 原生软件工厂”的全部理解。

等工具补上的那一天,我们再回来看这份 JSONL——它可能早就准备好了。



总结:Eva 是一个自称“软件工厂”的终端聊天工具,目前没有任何文件或 shell 操作能力,但它用事件溯源式的 Trace 设计,重新定义了 AI 输出的可复核性——先写文件再显示,而不是先显示再记日志。

一个连文件都读不了的“软件工厂”,却在“记账”这件事上做得比大多数成熟工具都细致——这大概就是 2026 年 AI 工具赛道的缩影:大家都在比谁跑得快,只有它在比谁记得清。