几个月前,我发现了一个 GitHub 仓库,当时它的 star 数还在十几万,现在已经飙到了 22.6 万——affaan-m/ECC。
ECC 的定位很特别。它不是一个新的 AI 模型,不是一个新的框架,而是定位为 "Agent Harness Operating System"——Agent 的"马笼头"操作系统。
当时我正在用自己的一套 Agent 系统做日常开发。Skills 系统有了,记忆能力有了,定时任务也有了。看起来该有的都有了。但当我深入阅读 ECC 的架构文档时,我发现自己缺了一个东西——系统思维。
我一直在"加功能":加一个 skill、加一条记忆、加一个工具。而 ECC 在做的,是把 Agent 当成一个操作系统来设计。它有明确的分层、标准化的接口、完整的生命周期管理。
这个视角转换,比任何单个功能都更重要。
ECC 2.0 的参考架构文档定义了一个清晰的分层模型。下面是我从中提炼的五层结构,每一层解决一个核心问题。
每一层都有明确的职责边界,下层为上层提供能力,上层不越界干涉下层实现。这个设计让我意识到,我之前的"All-in-One"思路——把所有功能塞进一个系统——是没有可扩展性的。
ECC 让我印象最深的设计,不是功能多丰富,而是它对移植性的执念。
这句话的意思是:一个 Skill(工作流定义)应该能在任何平台上跑——Claude Code 能跑、Codex 能跑、OpenCode 能跑、Cursor 也能跑。而适配层只做三件事:
这意味着什么?你写一次工作流,就能在所有 Agent 工具上复用。
对比我们的现状:Hermes 的 skills 只能用在 Hermes,Claude Code 的 skills 只能用在 Claude Code。每个工具都在造自己的轮子。ECC 给我们展示了一个更好的方式:把可复用的逻辑放在中间层,把适配的工作交给边缘层。
ECC 定义了一个 ecc.session.v1 的 JSON schema,用来统一所有会话的状态:
{
"schemaVersion": "ecc.session.v1",
"session": { "id": "session-123", "kind": "history", "state": "recorded" },
"workers": [{ "id": "worker-1", "state": "running", "health": "healthy" }]
} 为什么要费这个劲?因为会话数据太重要了。调试要查、分析要查、自动化要查、改进要查。但如果每个工具的会话格式都不一样,这些事就没法系统化地做。
| 不做标准化的后果 | 做标准化的好处 |
|---|---|
| 跨会话分析靠 grep | 结构化查询 |
| 自动化无法获取上下文 | 统一接口 |
| 换工具数据全丢 | Schema 适配即可 |
| 无法做模式挖掘 | 可直接做连续学习 |
我强烈建议每个做 Agent 系统的团队,都在早期就定义自己的会话标准格式。别等到几千条会话数据堆在那里才想起来要统一。
ECC 把安全放在了第五层(最底层)。这不是说安全不重要,而是说安全应该是基础设施,不是功能。
ECC 的 AgentShield 有 1282 个测试、102 条规则。它覆盖:
对比很多系统的现状:安全是靠"用户手工确认"来保证的——执行危险命令要确认,敏感操作要确认。这不是安全架构,这是人工审批流程。
一个成熟的 Agent 系统,安全不应该依赖人的警惕性,而应该依赖系统层面的策略引擎。
这是我对几个主流系统的粗略定位(基于公开资料和个人使用经验):
| 系统 | 用户交互层 | 跨平台兼容 | 运行时标准 | 可观测性 | 安全层 |
|---|---|---|---|---|---|
| Claude Code | CLI + 插件 | ❌ 仅 Claude | ❌ 无 | 部分有 | ❌ 无 |
| Codex | CLI + 编辑器 | ❌ 仅 Codex | ❌ 无 | 部分有 | ❌ 无 |
| OpenCode | CLI | ❌ 仅自身 | ❌ 无 | 部分有 | ❌ 无 |
| ECC | CLI + TUI + Statusline | ✅ 跨 10+ 工具 | ✅ ecc.session.v1 | ✅ Traces + Audit | ✅ AgentShield |
| Hermes | 微信/QQ/Telegram + CLI | ❌ 仅自身 | ❌ 非结构化 | 部分有 | ❌ 人工确认 |
注意:这不是"谁好谁差"的对比,而是设计重点不同。Claude Code 专注于模型交互体验,Hermes 专注于多平台接入,ECC 专注于系统架构。但 ECC 的架构设计确实提供了一个很好的参考框架——尤其是它的分层思维。
不要在架构图里画了分层,代码里还是一团。每一层都应该有对应的:
如果在代码里找不到"适配器层"、"运行时层"的实体,那架构图就只是装饰。
ECC 的 SKILL.md 能在 10 种工具上运行,不是靠后期适配,而是靠从一开始就克制地写在 SKILL.md 里——不写平台独有命令、不嵌凭据、不依赖特定 hook。
对我们来说,这意味着:写一个 skill 时,不要假设它在哪个平台运行。用通用的 Markdown 描述工作流,把平台相关的部分隔离到配置中。
真正成熟的安全应该是:
如果你还在靠"弹窗确认"来做安全,你的系统还处在早期阶段。
1. 审查你的技能库的平台依赖。 打开你的所有 skill 文件,看看有没有硬编码了特定平台的写法。如果有,开始做隔离:工作流逻辑放一个文件,平台适配放另一个文件。
2. 定义一个最简单的 Session 格式。 不一定要像 ecc.session.v1 那么完整。先从"会话 ID + 时间 + 关键操作摘要"开始,把格式固定下来。你会在做跨会话分析时感谢自己。
3. 建一个安全检查清单。 列出你的 Agent 系统能执行的所有危险操作——文件删除、数据库写入、远程连接。不要只靠人工确认,看哪些可以用规则自动拦截。
找一份你的 Agent 系统的架构图,对照五层模型做一次差距分析。把你已经有的层标绿,缺失的层标红。你会发现自己的系统的真实状态。
💬 评论