Apache Maka:把"日志即运行时"做到底的本地优先 Agent 工作区
阅读时间: 大约 11 分钟
Apache Maka:把”日志即运行时”做到底的本地优先 Agent 工作区

2026 年,一个名为 Maka 的 Agent 工作区项目进入 Apache 软件基金会(ASF)孵化器,即 Apache Maka (Incubating)。它既不是又一个聊天框,也不是一个把云厂商 SDK 包一层的 GUI,而是一个本地优先的 Agent 运行环境:在你自己的机器上、用你自己的模型,把 Agent 做过的每一件事都完整记录下来。据其 GitHub 页面,项目官方称星标约 3.9k、下载量约 15k。本文基于其官方 README,对这一项目做一次拆解。
一、出发点:Agent Harness 该用”完成了多少任务”来衡量
Maka 对自己的定位很直接:一个 agent harness(智能体外壳)存在的唯一目的就是完成任务,衡量标准只有一个——完成了多少任务、代价多大。为此它立了四条规矩:
- Measured, not claimed(实测而非宣称):在相同模型、相同官方 verifier 下,与其他 harness 对比跑分,逐任务结果随报告一起公开,放在
docs/eval/; - The log is the runtime(日志即运行时):每一条模型消息、工具调用、权限决策、终止事件,都是一条 append-only 的 RuntimeEvent。UI、下一轮提示词、崩溃恢复,都是这份日志的投影,而不是唯一副本;
- Your machine, your model(你的机器、你的模型):会话、设置、运行记录都留在本地;模型你自己带——云 API、本地模型、兼容网关都行;
- One Runtime Host(单一运行宿主):桌面端、TUI、CLI、Eval 都是同一个执行权威的瘦客户端。
二、核心设计:append-only 日志作为唯一事实源
上面这张官方图把核心思想画得很清楚:一个回合一共有七个 RuntimeEvent——模型说”我重跑一下失败的测试”、跑 Bash · npm test、申请离开沙箱的权限、你批准、拿到结果(exit 1,输出裁剪但保留)、改 resume.ts 文件、回合结束。底部写着公式:State(t) = Project(Log[0…t])——任何时刻的系统状态,都是从日志重放投影出来的。
这个设计和大多数 Agent 工具的做法相反:常见实现里 UI 状态、模型上下文、工具结果是分散在不同内存结构里的,一旦崩溃或想”回到某一步”就很麻烦。Maka 的选择是只写日志,然后从日志投影一切——旧的工具输出可以从下一轮提示词里”消失”,但永远不会从日志里消失。这在工程上的好处是:崩溃恢复、审计、回放、Eval 都变成了同一件事的不同视图,不需要额外维护一套平行状态。
三、架构:单 Runtime Host + 多瘦客户端
README 给出的后端主干是:
Desktop / TUI / CLI → Runtime Host → SessionManager → AgentRun
↓
Model + Tool Runtime → Runtime Event Log
↓
Context / Session / UI projections
Experiment → Cells → Attempts → Results仓库是一个 pnpm/npm workspaces 风格的 monorepo,主要包:
| 目录 | 职责 |
|---|---|
apps/desktop/ | Electron 主进程 / preload / React 渲染层 |
packages/core/ | Sessions、Events、Permissions、Connections 的纯契约 |
packages/storage/ | SQLite 操作状态、配置与负载存储 |
packages/runtime/ | AgentRun、模型适配、工具、上下文与恢复 |
packages/runtime-host/ | 单属主 Runtime Host 生命周期与协议 |
packages/eval/ | 实验 cells、attempts、results 与执行器适配 |
packages/computer-use/ | Computer-use 后端选择与协议适配 |
packages/cli/ | TUI 与非交互式 CLI |
native/ | Rust:Runtime Host 的 direct-peer 原生插件与 gitoxide 辅助 |
本地数据默认存在 Electron userData 下的 workspaces/default/,包括 runtime.sqlite(活记录)、credential-vault.json、settings.json 和 artifacts/。
四、安全与隐私:沙箱边界 + 密钥不进渲染层
Maka 在安全上有几个明确设计:
- 密钥本地存放:API key 等密钥存在本地明文文件
credential-vault.json,仅操作系统账户可读,渲染进程(renderer)永远看不到; - 沙箱边界:要写文件或跑 shell 的工具,必须先通过沙箱边界;申请离开沙箱时要你显式批准(就是图里那一步);
- 本地优先:会话与运行记录不出本机;官方文档专门写了 workspace 隐私说明。
需要注意的是它对”恢复”的默认态度:中断回合的恢复默认关闭,需要显式设 MAKA_RUNTIME_SAFE_BOUNDARY_RESUME=1 才开启——因为恢复会再次调用模型、花 token。这是一种把”省钱/省 token”放在”省事”前面的克制。
五、现状与门槛:还在孵化,没有正式 Apache 发布
官方对现状说得很诚实:
- 尚未有 Apache 正式发布:在出现正式签名源码包之前,别处分发的安装包都只是便利产物;目前主要靠从源码构建或开发版试用;
- 平台支持:macOS(arm64)为主要支持平台,Windows 为 preview,Linux 官方标注 “soon”;
- 构建要求:Node.js 22.19+(CI 用 24)、npm 11、Git、ripgrep;启用 Peer/native 插件还需要 Rust 1.98+;
- 首次使用:不内置共享模型账号,首次启动要自己去 Settings 里加 API/本地模型/账户连接并测试;
- Graph 模式:CLI 支持
--graph跑多步任务,会用隔离的 Git worktree,因此源码项目必须是干净的 Git worktree。
六、客观分析:优势与局限
优势:
- 架构范式清晰且工程正确:append-only 日志作为唯一事实源,让恢复、审计、Eval 三者统一,是长任务 Agent 走向可托付的关键一步;
- 实测文化:主动把逐任务跑分公开、用官方 verifier,而不是只喊”最快最聪明”,在 Agent 工具普遍自吹的当下难得;
- 本地优先 + 自带模型:不锁定云厂商、不内置共享账号,数据与密钥留在本机;
- Apache 孵化背书:Apache-2.0、孵化器治理,长期中立性优于单一公司主导的 Agent 工具。
局限与存疑:
- 孵化早期、无正式发布:数据格式、CLI 命令、实验性功能都还可能变,生产使用为时过早;
- 平台覆盖不全:主力是 macOS arm64,Windows/Linux 还在 preview/soon,跨平台体验未验证;
- 上手门槛不低:要自己配模型连接、从源码构建(Node + Rust + ripgrep),不是”下载即用”;
- 跑分仍是自家发布:虽然强调”用官方 verifier”,但报告由项目方自己产出,独立第三方复现尚待观察;
- 与 Claude Code/Cursor 等成熟产品正面竞争:在已有大量成熟 Agent 客户端的市场里,Maka 的”日志即运行时”理念能否转化为真实体验优势,需要用户用脚投票。
七、谁该关注
- 正在自研 Agent 框架、想参考”事件溯源/日志即状态”工程范式的团队;
- 重视审计、回放、崩溃恢复,需要把每一步都留痕的企业/研究场景;
- 愿意在 macOS 上尝鲜、帮 Apache 孵化器项目打磨早期版本的开发者。
如果你只是想要一个”开箱即用、今天就能干活”的编程 Agent,现阶段 Claude Code 等成熟产品仍然更稳妥;但如果你关心 Agent 的可靠性与可观测性这个底层命题,Maka 是目前把”日志即运行时”这件事贯彻得最彻底的开源样本之一,值得长期跟踪。