返回博客列表

Apache Maka:第一个进入Apache基金会的Agent工作台

2026-08-15T05:00:00+08:00
ApacheMakaAgentEvent SourcingLocal-firstEvalTypeScript

Apache Maka:第一个进入 Apache 基金会的 Agent 工作台

看完你会发现,你对「Agent框架归属」的理解可能要更新了。

Agent 框架的归属权正在从公司转移到基金会。

DeepSeek Harness 是 DeepSeek 公司的开源项目。Claude Code 是 Anthropic 的产品。Cursor 是 Anysphere 的商业产品。NVIDIA NOOA 是 NVIDIA Labs 的研究项目。这些项目的控制权都在单一公司手里——公司可以改方向、改协议、甚至关停。

Apache Maka 不一样。它是 Apache 基金会孵化器(Incubating)里的项目——1,980 Stars,240 Forks,TypeScript 实现,Apache 2.0 协议。这意味着它的治理权属于 Apache 社区,不属于任何一家公司。

这不只是法律区别。Apache 的治理模式意味着:项目方向由社区共识决定,商标和代码版权由基金会持有,任何公司都无法单方面改变项目走向。这是 Linux、Kubernetes、Spark 走过的路——现在 Agent 工作台也走上了这条路。

本文提纲

  1. 核心设计:Log is the Runtime
  2. Context is not History
  3. 三个入口:Desktop / TUI / Eval
  4. 一套执行权威:Runtime Host
  5. SQLite 作为唯一操作权威
  6. 安全边界:凭证金库 + 权限引擎
  7. 恢复模型:中断不丢数据
  8. 内置 Eval:实验不是事后补丁
  9. 为什么是 Apache

核心设计:Log is the Runtime

Maka 的架构宣言只有一句:Log is the Runtime(日志即运行时)。

所有运行时事件——模型消息、工具调用、工具返回、权限决策、终止事实——都进入一个只追加日志(append-only log),叫 Runtime Event Log。Session、UI、模型上下文、恢复机制全部是这个日志的投影(projection)。

这是事件溯源(Event Sourcing)模式。不是 Maka 发明的——金融系统、数据库 WAL、Git 的 commit log 都是事件溯源。但把它用在 Agent 运行时上,这是一个精准的设计选择。

为什么用事件溯源?

可恢复性。 日志记录了每一步发生的事实。系统崩溃了?重放日志,恢复到崩溃前的精确状态。不需要 checkpoint,不需要快照——日志就是真相。

可审计性。 每个决策(为什么调了这个工具?为什么 LLM 返回了这个结果?权限是怎么判定的?)都在日志里。这不是 Trace 的附加功能,是架构的天然产物。

上下文可控。 因为上下文是日志的投影,你可以对投影做操作——剪枝、压缩、重组——而不修改原始事实。这就是 Maka 说的「Context is not History」。

Context is not History

大多数 Agent 框架把对话历史当作上下文:你说了什么、Agent 说了什么、工具返回了什么——全部拼成一个大字符串,传给 LLM。

Maka 不这么干。它的设计原则:上下文不是历史

具体做法是两层操作:

Tool Result 剪枝(Pruning)。 一个工具返回了 500 行 JSON,但下一步 LLM 只需要其中 2 个字段。Maka 在写入日志时保留完整结果(事实不丢),但在构造下一次推理的上下文时只投影需要的部分。上下文变小了,token 消耗降低了,但日志里的原始数据完好无损。

LLM 压缩(Compaction)。 对话太长了,上下文窗口要满。传统做法是截断——丢掉前面的消息。Maka 做的是压缩——用 LLM 把前面的对话浓缩成关键信息。原始消息还在日志里(投影变了,事实没变)。

这个设计直接解决了 Agent 上生产环境的两个痛点:上下文窗口溢出和 token 成本失控。不是靠更大的窗口,是靠更聪明的上下文管理。

三个入口:Desktop / TUI / Eval

Maka 提供三个入口,共享同一个 Runtime Host:

入口 适合场景 当前能力
Desktop 日常交互、文件和 Artifact 工作流、模型和权限设置 Electron + React,流式会话、工具时间线、分支、搜索、恢复
TUI / CLI 在当前项目目录使用或跑一个非交互 Turn makamaka run,共享工作空间和模型连接
Eval 可复现的基准实验 maka eval run <spec> --out <dir>

三个入口共享同一个 Runtime Host,意味着:Desktop 里配好的模型连接和权限设置,CLI 里直接用。CLI 跑的会话,Desktop 里能看到。Eval 执行的 Agent 和 Desktop 里用的是同一个运行时。

Desktop 目前只支持 macOS Apple Silicon(签名 + 公证),Windows x64 是无签名预览版。CLI 和 TUI 跨平台。

一套执行权威:Runtime Host

Maka 的架构有一个核心设计决策:一个执行权威

Runtime Host 拥有 Session、Turn、Agent 生命周期、续接、工具和事件的全部控制权。Eval 只拥有实验语义和结果——不构造 Runtime,不读 Runtime 存储,Maka 的 Eval subject 连接的是一个已存在的 Runtime Host。

这和很多框架的做法不同——很多框架让 Eval 独立运行一个 Agent 实例,结果 Eval 环境和生产环境不一致。Maka 的设计消除了这种不一致:Eval 跑的 Agent 和你日常用的 Agent 是同一个 Runtime Host,只是入口不同。

graph TB
    A["Desktop / TUI / CLI"] --> B["Runtime Host"]
    C["Eval Experiments"] --> B
    B --> D["SessionManager"]
    D --> E["AgentRun"]
    E --> F["Model + Tool Runtime"]
    F --> G["Runtime Event Log"]
    G --> H["Context / Session / UI Projections"]
    style B fill:#FF6B6B,color:#000000
    style G fill:#4ECDC4,color:#000000
    style H fill:#45B7D1,color:#000000

AgentRun 是 Runtime Host 内部的执行单元。一个 AgentRun 拥有:多模型连接、流式输出、思考过程、用量统计、provider 错误归一化。本地工具包括 Read、Write、Edit、Bash、Glob、Grep——和 Claude Code 的工具集高度重合。

SQLite 作为唯一操作权威

Maka 的所有操作状态存在一个文件里:runtime.sqlite

这个数据库拥有:RuntimeEvents、会话元数据和消息历史、Agent Graph 控制、核心执行状态、工作流状态、用量和定价、Artifact 元数据、Automations、Daily Review、Runtime 续接记录。

Artifact 的实际文件(图片、文档等)存在 artifacts/ 目录下,但元数据在 SQLite 里。连接、凭证、设置、MCP 配置、Skills 是独立的配置文件。

单文件权威的好处:

  • 备份只需要备份一个 SQLite 文件 + artifacts 目录
  • 恢复只需要还原这两个东西
  • 不依赖外部数据库(不需要 PostgreSQL、Redis)
  • 数据可移植——SQLite 文件跨平台,可以直接拷贝

Maka 还实现了完整的备份/恢复协议:在线 SQLite 备份 API、Artifact payload 的 SHA-256 校验、文件大小验证、owner-only 文件权限、原子发布。

安全边界:凭证金库 + 权限引擎

Maka 的安全模型分三层:

凭证存储。 API key、OAuth token、请求头、web-search key、代理密码存在本地 credential-vault.json,POSIX 目录权限 0700、文件权限 0600,在 OS 账户边界保护下。Renderer 进程不接收明文凭证。

权限引擎。 文件写入、Shell 执行、危险工具调用都要经过权限引擎。不是 Agent 想干什么就干什么——权限引擎是 Agent 和系统之间的守卫。

Runtime Host 客户端凭证。 和连接凭证分开存储,在 runtime-host-client/credentials.json。预存的 Electron safeStorage 加密凭证不会被导入——需要重新认证。这个数据丢失边界是有意的设计。

这和我们之前讨论的 Guardrails 三层模型完全对应:输出验证(权限引擎)→ 行为约束(工具 schema 验证)→ OS 级隔离(POSIX 权限 + OS 账户边界)。Maka 没有做容器级隔离,但用 OS 账户边界 + 文件权限做了基础防护。

恢复模型:中断不丢数据

Agent 执行中可能被中断——网络断了、进程崩了、用户关了应用。Maka 的恢复模型保证不丢数据。

启动恢复。 Runtime Host 启动时从 Runtime Event Log 重放,恢复到中断前的精确状态。

Turn Evidence。 每个 Turn 的证据(推理过程、工具调用、返回结果)作为事实记录在日志里。恢复时不需要重新执行——直接从日志投影。

Safe Resume(可选)。 环境变量 MAKA_RUNTIME_SAFE_BOUNDARY_RESUME=1 开启中断 Turn 的安全续接。Desktop 的中断 Turn 恢复、CLI/TUI 的 /resume、Desktop 启动时自动恢复。注意:续接可能调用模型 provider 并消耗 token——所以是 opt-in 不是默认。

阶段化恢复。 Phase 2 提供了持久的写侧边界和 fail-closed 安全边界续接。Phase 3 的模糊工具副作用调解还没实现——不确定的工具结果保持 parked 状态,不自动重试。这是安全设计:不确定就停下,不盲猜。

内置 Eval:实验不是事后补丁

Maka 把 Eval 做成了内置功能,不是外部工具。

maka eval run  --out 

Eval 的设计是声明式多臂实验(declarative multi-arm experiments):

  1. 一个 spec 展开成 task × repetition × subject 的实验单元
  2. 每个单元有不可变的执行尝试(immutable per-cell attempts)
  3. 基础设施替换 + 最早有效选择
  4. 结果内核:分数、归一化用量、可归因成本、持续时间、状态、失败原因、Artifacts

关键设计:Maka subject 只通过 Runtime Host 执行。外部竞争者用通用外部 subject 适配器。这意味着 Eval 跑的 Maka Agent 和日常用的 Maka Agent 是同一个运行时——不存在 Eval 环境和生产环境不一致的问题。

这和 HarnessEval-W 的思路一致——评测的可信度取决于评测环境和生产环境的一致性。但 Maka 走得更远:不是让一个外部评测 Agent 来评判,是让同一个 Runtime Host 在实验模式下执行。

为什么是 Apache

把 Maka 放在 Agent 框架的版图里看,它的独特性不在于技术——Event Sourcing、本地优先、内置 Eval 都是业界已知模式。它的独特性在于治理

项目 治理方 风险
Claude Code Anthropic 公司 公司可改协议、改定价、关停
Cursor Anysphere 公司 同上,且已被 SpaceX 收购
DeepSeek Harness DeepSeek 公司 开源但公司控制方向
NVIDIA NOOA NVIDIA Labs 研究项目,可能随时停更
Diagram Design Cathryn Lavery 个人 个人项目,可持续性存疑
Apache Maka Apache 社区 社区共识治理,商标版权基金会持有

Apache 治理意味着:

  • 没有单一控制方。 任何方向变更需要社区讨论和投票。
  • 商标和版权独立。 不属于任何公司,不会被收购转移。
  • 中性基础设施。 Apache 基金会提供 CI/CD、邮件列表、issue tracker,不依赖单一公司的 GitHub org。
  • 供应商中立。 多家公司可以贡献代码,但没有公司能独占方向。

这是企业级部署最看重的属性。当一个公司要选 Agent 框架作为内部标准时,Apache 项目的风险模型比任何公司项目都好——不会因为母公司被收购或战略调整而消失。

Maka 还在孵化阶段(Incubating),意味着它还没毕业——代码质量、社区活跃度、发布流程都还在建立中。273 个 Open Issues 也说明项目还很活跃但不够稳定。但它的方向是对的:Agent 工作台的治理正在走向开放。

参考文档与链接

你更信任公司开源还是基金会治理?评论区聊聊你的选择。觉得有用点个赞让更多人看到。


作者: itech001 来源: 公众号:AI人工智能时代 网站: https://www.theaiera.cn/ 每日分享最前沿的AI新闻资讯和技术研究。

本文首发于 AI人工智能时代,转载请注明出处。

分享给朋友