Apache Maka:第一个进入Apache基金会的Agent工作台
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 工作台也走上了这条路。
本文提纲
- 核心设计:Log is the Runtime
- Context is not History
- 三个入口:Desktop / TUI / Eval
- 一套执行权威:Runtime Host
- SQLite 作为唯一操作权威
- 安全边界:凭证金库 + 权限引擎
- 恢复模型:中断不丢数据
- 内置 Eval:实验不是事后补丁
- 为什么是 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 | maka、maka 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:#000000AgentRun 是 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):
- 一个 spec 展开成 task × repetition × subject 的实验单元
- 每个单元有不可变的执行尝试(immutable per-cell attempts)
- 基础设施替换 + 最早有效选择
- 结果内核:分数、归一化用量、可归因成本、持续时间、状态、失败原因、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 工作台的治理正在走向开放。
参考文档与链接
- GitHub: apache/maka - 1,980 stars,TypeScript,Apache 2.0,Incubating
- Maka 后端架构 - 系统地图、代码边界、六篇双语深度解读
- Maka 产品设计 - 产品设计文档
- 安全策略 - 安全报告和策略
- Apache 基金会孵化器 - Maka 的治理背景
- Desktop 下载 - macOS Apple Silicon 签名版
你更信任公司开源还是基金会治理?评论区聊聊你的选择。觉得有用点个赞让更多人看到。
作者: itech001 来源: 公众号:AI人工智能时代 网站: https://www.theaiera.cn/ 每日分享最前沿的AI新闻资讯和技术研究。
本文首发于 AI人工智能时代,转载请注明出处。