这不是一个产品,是一次学习工程。 目标是通过亲手构建一个完整的 CodeAgent,摸透业界主流实现(Claude Code、Codex CLI 等)在 agent harness 上的工程实践,并形成"复杂度应该放在哪里"的第一手判断。
- 模型与 harness 严格解耦。模型是可替换的决策核心,harness 负责环境感知、工具执行与状态维持;换模型不重写 harness。
- 事件日志是唯一事实来源。上下文、会话恢复、回放、评估全部从同一条 append-only 事件流派生(事件溯源)。
- 核心循环保持小。loop 本身几百行就该写完;一切新能力以工具/策略/插件的形式挂在循环外,而不是改循环。
前置:Node.js ≥ 22,以及一个 Anthropic 兼容端点的 API key(默认对接 GLM 的 Anthropic 兼容端点;任何兼容端点都可通过 MO_BASE_URL 替换)。
git clone <repo-url> mo && cd mo
npm install
cp .env.example .env # 编辑 .env,填入 MO_API_KEY
npm run mo # 交互式 REPL;一次性执行:npm run mo -- -p "任务描述"常用入口(完整参数见 mo --help 或 src/args.ts):
npm run mo -- --preset minimal -p "..." # 极简形态(bash + editor 两工具)
npm run mo -- --permission auto -p "..." # 权限模式:ask | auto | edit-only
npm run mo -- --sandbox seatbelt -p "..." # macOS Seatbelt 系统级沙箱
npm run mo -- --resume traces/<sid>.jsonl # 进程被杀后从事件流无损恢复
npm run mo -- --replay traces/<sid>.jsonl # 本地确定性回放校验(不调 API)
npm test && npm run typecheck # 测试与类型检查| 路径 | 内容 |
|---|---|
docs/adr/ |
架构决策记录(不可逆决策的背景/决策/备选/后果) |
docs/decisions/ |
轻量决策日志(一般性结论的落盘位置) |
docs/plan/roadmap.md |
总路线图:里程碑、贯穿性纪律、风险对策 |
docs/plan/milestones/ |
每个里程碑的 spec(范围、Not-in-scope、DoD)与 retro |
docs/notes/reading-list.md |
按里程碑组织的源码阅读与资料清单 |
docs/eval/ |
评估纪律、任务集格式、trace 归档规则 |
M1–M6 已完成(minimal agent → 可观测与可恢复 → 能力扩展 → 插件化 → 沙箱与权限 → 评估闭环,详见 docs/eval/runs/ 与 roadmap)。
M4 — 插件化(已完成,2026-08-25):--preset minimal|standard 纯配置切运行形态(核心 loop 零改动),--plugin <path> 装配期加载第三方工具,--config <json> 声明式自定义组合。minimal 形态重跑 M1 任务集 5/5(与 M1 基线一致)、standard 6/6。接口文档见 docs/plugins.md。
M5 — 沙箱与权限(已完成,2026-08-26):ADR-0007 的权限通道上构建两轴体系——权限决策层(bash 命令静态解析 + 规则引擎 verdict 三态 × 模式矩阵 --permission ask|auto|edit-only,ADR-0008 uncertain fail-closed)与 macOS Seatbelt 系统级沙箱(--sandbox seatbelt,workspace-write 式,与权限模式正交)。五类危险命令(递归删除/网络外传/写敏感路径/后台驻留/混淆)全部前置拦截且审计事件可归因(source + 命中规则)。对照笔记见 docs/notes/m5-sandbox-notes.md。
M6 — 评估闭环(已完成,2026-08-27):评估 harness 成体系——24 个任务的 mini-eval 集合(20 个自建 + 4 个 vendored Terminal-Bench 任务,Apache-2.0,来源与改动见各任务 SOURCE.md),runner 产出结构化 run JSON,compare-runs.mjs 生成同口径对比报告(口径告警 / 翻转明细 / per-task 指标);验收器洁净副本执行 + 考卷哈希钉死。评估纪律与任务集格式见 docs/eval/。
- ADR 纪律:任何"改起来疼"的决策,动手前必须先有 ADR。
- 里程碑流程:spec → 实现 → tag(
m1-minimal…)→ retro 复盘。 - 评估门禁:从 M1 起维护固定的 mini-eval 任务集(初版 5 个,M6 扩至 24 个),每个里程碑收尾必跑。
- 三次法则:第一次写死,第二次抽接口,第三次才泛化。插件化(M4)由前三个里程碑的真实痛点驱动,不凭想象抽象。
- 狗粮:M1 完成后,用 mo 开发 mo。
TypeScript + Node.js(ADR-0001),极简 CLI、内核渲染分离(ADR-0002)。
MIT。docs/eval/tasks/TB*/ 下 4 个 vendored 任务来自 terminal-bench(Apache-2.0),来源与改动记录在各任务 SOURCE.md。