GitHub 趋势 · 第 44 期
5,208 个 star 却发不出一个正式版:Apache Maka 把编程 Agent 的日志做成了运行时
#编程Agent#事件溯源#Apache孵化
这一期讲一个矛盾体。它的星标涨得比绝大多数新项目都快——5,208 star、484 fork,本月净增 3,941;但你去它的 GitHub Releases 页面,会发现那里是空的。README 自己写着「Maka has not made an Apache release yet」,对 releases/latest 的请求直接返回 404。热度已经跑到流程前面去了。所以本文的判断是:值得读它的架构,但现在还不适合装;真要尝鲜,下面那 9 个坑请先看完。
跑长任务的人都踩过这个坑
让 Agent 干一个小时的活,中途断了。恢复回来,它不记得刚才做到哪一步,你只能自己回忆着重新交代一遍。更难受的是事后审计:你想知道它为什么删了那个文件、为什么跑了那条命令,翻聊天记录翻不到,因为那些决定当时只存在于内存里。
很多人把这归因于模型不行、上下文太短。但 Apache Maka 给出的另一个解释是:状态活在内存和对话里,日志只是顺手打印出来的副产品——副产品当然对不上账。
Maka 的做法是把因果关系掉个个儿:先有日志,再有运行时。
它到底是什么
一句话:一个本地优先的编程 Agent 工作台。它由 Apache 孵化器孵化(2026 年 5 月 27 日建仓),主语言 TypeScript,另有一个 Rust 写的 native addon。入口有三个——桌面端、TUI/CLI、以及 Eval 评测——但这三个都只是同一个 Runtime Host 的瘦客户端。
它给自己的衡量标准只有两条,README 原话是:how many it completes and at what cost(完成了多少任务,花了多少成本)。围绕这两条,它有四个明确主张:
- ▪Measured, not claimed:在同一个模型上跟其他 harness 对比,用官方 verifier 打分,逐任务的结果随每份报告一起发布在 docs/eval/ 目录里。
- ▪The log is the runtime:每条模型消息、工具调用、权限决定和终止事件,都是一个 append-only 的 RuntimeEvent。UI、下一轮 prompt、崩溃恢复都是这份日志的投影,从来不是唯一副本;旧的工具输出可以离开下一轮 prompt,但不会离开日志。
- ▪Your machine, your model:会话、设置、运行记录都留在本地;模型你自己带——云 API、本地模型或兼容网关都行。
- ▪One Runtime Host:桌面端、CLI 和 Eval 共用一个执行权威;Eval 只负责实验本身和分数。
日志就是运行时,这句话得拆开看
事件溯源(event sourcing)这个词听着很重,但 Maka 的用法很具体:日志不是用来给人看的调试输出,而是唯一的事实来源。其余一切都是从它算出来的。
RuntimeEvent 日志(append-only,唯一副本) │ ├─▶ UI 渲染 ← 投影 ├─▶ 下一轮 prompt ← 投影(旧工具输出可离开 prompt) └─▶ 崩溃恢复 ← 投影(从日志重建,不靠状态快照)
这件事的工程含义是:崩溃恢复不需要状态快照,它把那一段日志重放一遍就够了;上下文管理也不需要「另存一份摘要」,因为旧工具输出只是从下一轮 prompt 里被摘掉,本体还在日志里躺着。它的后端骨架在 README 里就画成这样:
Desktop / TUI / CLI → Runtime Host → SessionManager → AgentRun
↓
Model + Tool Runtime → Runtime Event Log
↓
Context / Session / UI projections仓库里有什么
README 的仓库布局一节把边界写得很清楚,直接抄下来:
| 目录 | 职责 |
|---|---|
| apps/desktop/ | Electron main / preload / React renderer |
| packages/core/ | Sessions、Events、Permissions、Connections 的纯契约 |
| packages/storage/ | SQLite 运行状态、配置与 payload 存储 |
| packages/mcp/ | 与供应商无关的 MCP 客户端集成 |
| packages/runtime/ | AgentRun、模型适配器、工具、上下文与恢复 |
| packages/runtime-host/ | 单属主的 Runtime Host 生命周期、协议与客户端引导 |
| packages/eval/ | 实验 cell、attempt、结果,以及 executor/subject 适配器 |
| packages/cli/ | TUI 与非交互式 CLI |
| native/ | Rust:Runtime Host 的 direct-peer addon 与 gitoxide helper |
文档这边也值得单独提一句:docs/README.md 是一份文档权威表,明确写了文档与实现冲突时,以代码和契约测试为最终权威;已完成的方案会被移进 docs/archive/,并且注明归档文档不算当前实现指引。这种把「哪份文档说了算」写明白的做法,在开源项目里并不常见。
上手:先别用那个最顺手的命令
照 README 走是这样装的——注意后面那个 @nightly,它不是一个可有可无的修饰:
npm install --global maka-agent@nightly maka --version maka --help
只想试一次、不想全局安装,可以用 npx:
npx --yes --package maka-agent@nightly maka
然后进到你想让它干活的项目目录里:
cd path/to/project maka maka run "Summarize this project and identify its highest-risk area"
想直接跑桌面端,就从源码构建(需要 Node.js 22.19 以上,CI 用的是 Node 24):
git clone https://github.com/apache/maka.git cd maka npm ci npm run dev
我的判断:适合谁,不适合谁
适合:想研究「一个 Agent harness 该怎么长得像个正经系统」的工程师。ARCHITECTURE.md 加 docs/ 里那批契约文档,是这一轮趋势榜项目里材料最厚的一份,而且有中文版。另外两类人也合适:已经被上下文和恢复问题折磨过、想看另一条路的资深用户;以及需要在自有机器上留全量审计记录的团队——append-only 日志天然就是审计材料。
不适合:想要装完就用的人,原因见下面的坑;把 API key 托付给系统钥匙串的人——它的凭据是本地明文文件 credential-vault.json,CLI README 原文写的是 It is not an OS keychain,POSIX 上只靠「仅属主可读」的权限位保护;以及打算把它直接拼进商业产品的团队,先看 Disclaim 那条。
装之前必须知道的 9 个坑
- ▪npm 上有两条线,容易装错。nightly 才是完整 CLI,latest 指向一个 0.0.0-alpha.0 的早期占位,命令只剩 doctor、help、version 三个。所以别用 npm install -g maka-agent 这种不带 tag 的写法,更别用 npm update --global maka-agent——它跟的是 latest,会把安装切到那条残缺的线上。
- ▪升级也不能抄版本号。要先用 npm view 解出当期 nightly 版本,再把精确值传给 update;updater 拒绝降级,抄来的号一过期就报错。而且 --target 只认 latest、next 或精确版本,没有 nightly 这个通道名。
- ▪旧数据不会自动搬。runtime.sqlite 才是 live record,旧的 JSONL transcript 与 Electron safeStorage 凭据文件都不导入——升级后工作区可能显示空会话,凭据得重填一遍。
- ▪恢复中断的 turn 默认是关的。要设 MAKA_RUNTIME_SAFE_BOUNDARY_RESUME=1 才会启用,而且恢复动作会真的去调模型、消耗 token。
- ▪别随便用 --yolo。maka run --yolo 会把文件与网络权限全开,README 的措辞是「only be used in an environment you are prepared to let the task modify」。
- ▪Graph 模式要求干净的 git worktree。它的实现算子跑在隔离的 Git worktree 里,所以源项目必须是 clean 状态。
- ▪两套 profile 不互通。源码仓库里的 CLI 用 Maka Dev profile,正式 maka 二进制用 Maka profile,README 明说两者不会自动复制或同步,混着用会看到两套配置。
- ▪孵化器的自我披露。DISCLAIMER-WIP 写着 software grant 与 committer ICLAs 尚未完成,且 releases may have incomplete or un-reviewed licensing conditions;想把这份代码并进自己产品的人,README 建议做一次彻底的许可审查。另外许可文件在标准 Apache-2.0 正文之后,追加了一整段 THIRD-PARTY COMPONENTS 归属声明。
- ▪star 数不代表维护带宽。481 个 open issue、484 个 fork,但 watch 这个仓库的人只有 25 个。星标来自榜单曝光,真正的维护压力在 issue 池里。
平台这件事要说清楚
目前没有 Apache 正式 release,能装的是每天从 main 构建的 Desktop Nightly,它明确写着 not an ASF release、not intended for production use,Windows 与 Linux 的桌面构建还是未签名的 preview。官方 release gate 里真正验过的组合是这样:
| 平台 | 架构 | Node.js | TUI/CLI/Host | 真实 Eval |
|---|---|---|---|---|
| Linux | x64 | 22.19 | 已验 | 仅 preflight |
| Linux | x64 | 24 | 已验 | 已验 |
| Linux | arm64 | 24 | 已验 | 仅 preflight |
| macOS | arm64 | 24 | 已验 | 仅 preflight |
| Windows | x64 | 24 | 已验 | 仅 preflight |
换句话说,M 系列 Mac 配 Node 24 正好落在被验过的行里;而真实 Eval 执行器目前只在 Linux x64 + Node 24 上跑通,其余平台只做到预检。
仓库:apache/maka · https://github.com/apache/maka
官网与下载:https://maka.apache.org/en/ · 中文 README:https://github.com/apache/maka/blob/main/README.zh-CN.md
Star 5,208 · Fork 484 · Open issues 481 · Watchers 25 · 语言 TypeScript
许可:Apache License 2.0(LICENSE 在标准正文后追加 THIRD-PARTY COMPONENTS 归属章节)
孵化状态:Apache Incubator 项目,尚未发布正式 release(releases/latest 返回 404);nightly 开发 tag 最新为 v0.2.0-dev.27.20260910
数据来源:GitHub Trending 月榜 + GitHub API · 抓取时间:2026-09-11 18:50
你更想要哪一种 Agent 运行时:把状态藏进对话里、还是摊开成一份可重放的日志?评论区说说你的答案,也欢迎把踩过的坑补进来。
下一期大概率写 Lakr233/vphone-cli(11,549 star,本月 +3,892,Swift)或 modular/modular(29,677 star,本月 +3,080,Mojo 与 MAX)。
#编程Agent#事件溯源#Apache孵化