← 返回主页
Harness Engineering Multi-Agent Sandbox 自我进化 Skill Kotlin

Harness Engineering:企业级多Agent协同项目实战——Multi-Agent + Sandbox + 自我进化的 Skill

2026.08 · by Easin

Framework 是你 import 的代码结构;Harness 是围绕一个模型循环的生产运行时产品。这五个组件,缺一个都别上生产。

这个词从哪来

2026 年 2 月,OpenAI 发了篇工程博文《Harness Engineering: Leveraging Codex in an Agent-First World》(Ryan Lopopolo),第一次把这个行业暗语钉在了明面上:harness 是连接模型与工具、权限、环境的那一层,用 OODA 循环(Observe / Orient / Decide / Act)刻画。往前追溯,Anthropic 的《Effective Harnesses for Long-Running Agents》是它的思想前身;往后,Lilian Weng 写了《Harness Engineering for Self-Improvement》,martinfowler.com 和 Addy Osmani 跟进同题——半年内它从暗语变成了正式学科。

头部格局:DSH 189k★(TS)、LangGraph 40k★(Python)、autoresearch 94k★(Python)、microsandbox(Rust)、E2B/Daytona(Go)。Kotlin 空无一人——所以我用 Kotlin 写了一个参考实现:bayshier/harness-engineering,五个组件全部可运行,demo 离线可跑(不需要 LLM key)。

组件一:显式 Agent 循环 + token 记账

OpenAI 那篇文章有个狠词:非结构化的工具输出是"上下文腐烂"。所以工具事件必须是结构化的(ToolStart/ToolFinish/ToolDenied),每一步记账。

更狠的是 Anthropic 的生产数据:多 Agent 系统比单 Agent 好 90.2%,代价是 15 倍 token——且 token 预算解释了 80% 的结果方差。预算不是监控指标,是一等旋钮,超限就该大声爆炸,而不是月底看账单。

组件二:Sandbox 接缝,fail-closed

沙箱谱系从轻到重:Seatbelt/bwrap/Landlock(进程级,Claude Code 和 Codex 生产在用)→ microsandbox/Firecracker(microVM)→ E2B/Daytona(云,Daytona 已 71.9k★)。

关键认知:JVM 没有原生安全沙箱(Security Manager 随 JEP 486 永久禁用)。正确姿势和 DSH 一样——在 confine(argv, policy) 接缝后面 spawn OS 级运行器,配 deny-then-escalate:被拒的动作只有一次用户批准的升级机会,第二次终拒。

独家踩坑:macOS 26 的 sandbox-exec 已经废了

实测发现:macOS 26 上 sandbox-exec 语法照常解析,但真实 exec 直接 SIGABRT。逐条排查(posixshm-read* 语法不存在、补 file-read-metadata 无济于事)后确认不可救。于是实现里加了功能自检:probe 一个 /bin/echo,失败则所有调用返回 SANDBOX_UNAVAILABLE 明确拒绝——demo 里那句 "execution DENIED (fail-closed)" 就是本机真实状态。fail-closed 不是退化,是设计:沙箱不可用时,唯一正确的答案是拒绝执行,而不是假装隔离。

组件三:自我进化的 Skill——git 是所有人都缺的那块

三个蓝本拼出完整闭环:

我的实现把三者合一:观察失败 → 蒸馏本能(两次以上观察才成熟)→ eval 门控 → 真实 git commit → 可 revert 回滚。demo 里你能看到技能在 2ed1d67 提交、在回滚后回到 22262a6——进化是可审计的,不是破坏。

另一个来自论文的警告(autoresearch/MCE 数据):给生成的技能加过严的过滤测试,反而降低了下游性能。别过度过滤自我改进。

组件四:Orchestrator-Worker + 任务 DAG + 文件工件

Anthropic 明确否决了共享内存黑板和全自主蜂群,生产形态是编排者-工人。两个工程细节值千金:

已命名的翻车现场还有:任务描述含糊导致重复劳动、Agent 互相打扰、为不存在的信息无限搜索、简单问题爆出 50 个 subagent。Faros AI 的报告更扎心:Agent 普及后每 PR 事故率 +242.7%(相关性,非因果)。

组件五:诚实的边界

必须把反方观点刻在墙上——HumanLayer 那篇 394 分的《harness engineering is not enough》:测试的反馈以秒计,而坏架构的代价以月计,你无法把事故率反向传播回决策。所以这个项目定位是 harness 的工程演示,不是"harness 解决质量"的宣言。

跑起来

git clone https://github.com/bayshier/harness-engineering.git
cd harness-engineering
./gradlew installDist
./build/install/harness-engineering/bin/harness-engineering

五分钟内你会看到:DAG 认领 → 沙箱判定 → deny-then-escalate 的一次与终拒 → 技能进化的 commit 与回滚 → token 预算面板。9/9 单测覆盖每条规则。

写在最后

这是我 Agent 工具链的第六块拼图:kline-mcp 喂数据、kline-vision 管视觉、t1-replay 管规则、android-mcp 管设备——而 harness-engineering 是把它们串成生产系统的那层运行时。Kotlin 在这个赛道是空白,空白的另一面是机会。

Easin's Code Lab · 作者:Easin ← 返回主页 · 上一篇:AI 看K线猜形态 · GitHub ↗