
你的AI Agent能写代码,但能"工程管理"吗?ECC把它变成一个会计划、会测试、会Review、会记忆的完整工程系统。
一句话价值
ECC(affaan-m/ECC)是 MIT 开源的 Agent 编排系统,23.5 万 stars、日涨 636,已覆盖 Claude Code、Codex、Cursor、Gemini、Zed 等 7 个主流开发助手。它提供 67 个专业Agent、281 个可复用技能、AgentShield 安全扫描,让 AI 从"单轮对话"进化为"持续改进的工程团队"。
为什么需要 ECC
AI 编程助手现在几乎人手一个,但它们有一个共同问题:每次对话都从零开始。
你昨天让 Claude 修了一个 bug,今天又问它,它不知道;Codex 生成的代码从来没人 Review;Cursor 的改动在合并后才被同事发现风格不对。
这不是模型不够聪明的问题,而是缺少工程纪律。
ECC 的答案是:把人类团队的工程流程(计划 → 测试 → 实现 → Review → 验证 → 记忆 → 改进)固化成一个可复用的系统,让 AI 每次启动就自动遵守。
核心架构
ECC 不是又一个 prompt 模板库,它是一个完整的工程操作系统。
#mermaid-svg-ZJi0erLvLIBB0lDC{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ZJi0erLvLIBB0lDC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ZJi0erLvLIBB0lDC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ZJi0erLvLIBB0lDC .error-icon{fill:#552222;}#mermaid-svg-ZJi0erLvLIBB0lDC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZJi0erLvLIBB0lDC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ZJi0erLvLIBB0lDC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZJi0erLvLIBB0lDC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZJi0erLvLIBB0lDC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ZJi0erLvLIBB0lDC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZJi0erLvLIBB0lDC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZJi0erLvLIBB0lDC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZJi0erLvLIBB0lDC .marker.cross{stroke:#333333;}#mermaid-svg-ZJi0erLvLIBB0lDC svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZJi0erLvLIBB0lDC p{margin:0;}#mermaid-svg-ZJi0erLvLIBB0lDC .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-ZJi0erLvLIBB0lDC .cluster-label text{fill:#333;}#mermaid-svg-ZJi0erLvLIBB0lDC .cluster-label span{color:#333;}#mermaid-svg-ZJi0erLvLIBB0lDC .cluster-label span p{background-color:transparent;}#mermaid-svg-ZJi0erLvLIBB0lDC .label text,#mermaid-svg-ZJi0erLvLIBB0lDC span{fill:#333;color:#333;}#mermaid-svg-ZJi0erLvLIBB0lDC .node rect,#mermaid-svg-ZJi0erLvLIBB0lDC .node circle,#mermaid-svg-ZJi0erLvLIBB0lDC .node ellipse,#mermaid-svg-ZJi0erLvLIBB0lDC .node polygon,#mermaid-svg-ZJi0erLvLIBB0lDC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ZJi0erLvLIBB0lDC .rough-node .label text,#mermaid-svg-ZJi0erLvLIBB0lDC .node .label text,#mermaid-svg-ZJi0erLvLIBB0lDC .image-shape .label,#mermaid-svg-ZJi0erLvLIBB0lDC .icon-shape .label{text-anchor:middle;}#mermaid-svg-ZJi0erLvLIBB0lDC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ZJi0erLvLIBB0lDC .rough-node .label,#mermaid-svg-ZJi0erLvLIBB0lDC .node .label,#mermaid-svg-ZJi0erLvLIBB0lDC .image-shape .label,#mermaid-svg-ZJi0erLvLIBB0lDC .icon-shape .label{text-align:center;}#mermaid-svg-ZJi0erLvLIBB0lDC .node.clickable{cursor:pointer;}#mermaid-svg-ZJi0erLvLIBB0lDC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ZJi0erLvLIBB0lDC .arrowheadPath{fill:#333333;}#mermaid-svg-ZJi0erLvLIBB0lDC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ZJi0erLvLIBB0lDC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ZJi0erLvLIBB0lDC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZJi0erLvLIBB0lDC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ZJi0erLvLIBB0lDC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZJi0erLvLIBB0lDC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ZJi0erLvLIBB0lDC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ZJi0erLvLIBB0lDC .cluster text{fill:#333;}#mermaid-svg-ZJi0erLvLIBB0lDC .cluster span{color:#333;}#mermaid-svg-ZJi0erLvLIBB0lDC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ZJi0erLvLIBB0lDC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ZJi0erLvLIBB0lDC rect.text{fill:none;stroke-width:0;}#mermaid-svg-ZJi0erLvLIBB0lDC .icon-shape,#mermaid-svg-ZJi0erLvLIBB0lDC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZJi0erLvLIBB0lDC .icon-shape p,#mermaid-svg-ZJi0erLvLIBB0lDC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ZJi0erLvLIBB0lDC .icon-shape .label rect,#mermaid-svg-ZJi0erLvLIBB0lDC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZJi0erLvLIBB0lDC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ZJi0erLvLIBB0lDC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ZJi0erLvLIBB0lDC :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
否
是
用户输入任务
Plan Agent: 分解子任务
Implement Agent: 编写代码
TDD Skill: 写测试
Build Agent: 编译/修复
Review Agent: 独立Review
通过?
Build Repair Agent: 修复
Verify: 运行测试验证
Memory: 保存经验
Improve: 更新技能库
AgentShield: 安全检查
完成交付
这个流程里最关键的设计:Review Agent 是独立的。它不是生成代码的 Agent 自己检查自己,而是一个全新的上下文启动的 Agent,专门挑毛病。这模仿了人类团队中的 Peer Review 机制。
快速上手
Claude Code 安装(推荐)
# 在 Claude Code 中直接运行:
/plugin marketplace add https://github.com/affaan-m/ECC
/plugin install ecc@ecc
一行命令搞定,skills、agents、commands 全部安装完毕。
Codex 安装
git clone https://github.com/affaan-m/ECC.git
cd ECC
npm install
bash scripts/sync-ecc-to-codex.sh
同步脚本会备份你的 Codex 配置,然后把 ECC 的 AGENTS.md、skills、prompts 合并进去。
其他 harness
ECC 支持 7+ 个平台,安装方式类似:
# Cursor
./install.sh –profile minimal –target cursor
# Gemini CLI
./install.sh –profile minimal –target gemini
# OpenClaw
./install.sh –profile minimal –target openclaw
核心能力详解
67 个专业 Agent
ECC 内置了 67 个 Agent,每个都有明确的职责边界:
| Plan Agent | 任务分解、制定执行计划 |
| Implement Agent | 按计划编写代码 |
| Review Agent | 独立上下文,从"新视角"Review 代码 |
| Build Agent | 编译、修复构建错误 |
| Security Agent | 安全扫描、漏洞检测 |
| Architecture Agent | 架构评审、重构建议 |
| Domain Agent | 特定领域(前端/数据/ML等)的专业 Agent |
281 个可复用技能
技能(Skills)是 ECC 最有价值的资产。它们是可复用的工作流,比如:
- TDD:先写测试再写实现
- Security Review:自动检查安全漏洞
- Research:调研 + 文档生成
- Docs:自动生成技术文档
- Frontend / Data / ML / Operations:领域专用技能
每次执行成功后,成功的流程会被自动"记忆",下次遇到类似任务时效率更高。
AgentShield:安全内置
这是 ECC 的一个特色功能——Agent 安全扫描。它会检查:
- prompts 中是否包含敏感信息
- hooks 是否越权
- MCP 配置是否暴露密钥
- 文件权限是否合理
对于企业级使用,安全不是事后补丁,而是构建时检查。
技术深度:为什么这套方案有效
上下文隔离 = 真正的独立性
ECC 的 Review Agent 之所以比"让同一个 Agent 自检"更有效,核心在于上下文隔离。
普通做法:同一个对话里,Agent 写完代码后,你让它"检查一下自己"。问题是——它的上下文已经包含了"我是写代码的"这个身份,它会偏向"自我辩护"。
ECC 的做法:启动一个全新的 Agent 实例,给它"Review"身份,上下文从零开始,只看代码本身。这就是为什么 ECC 的 prompt 里大量使用"fresh context"这个词。
记忆系统的持续学习
SkillsMemoryReview AgentImplement AgentPlan Agent用户SkillsMemoryReview AgentImplement AgentPlan Agent用户#mermaid-svg-igtuiisTamKDcBvm{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-igtuiisTamKDcBvm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-igtuiisTamKDcBvm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-igtuiisTamKDcBvm .error-icon{fill:#552222;}#mermaid-svg-igtuiisTamKDcBvm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-igtuiisTamKDcBvm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-igtuiisTamKDcBvm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-igtuiisTamKDcBvm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-igtuiisTamKDcBvm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-igtuiisTamKDcBvm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-igtuiisTamKDcBvm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-igtuiisTamKDcBvm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-igtuiisTamKDcBvm .marker.cross{stroke:#333333;}#mermaid-svg-igtuiisTamKDcBvm svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-igtuiisTamKDcBvm p{margin:0;}#mermaid-svg-igtuiisTamKDcBvm .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-igtuiisTamKDcBvm text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-igtuiisTamKDcBvm .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-igtuiisTamKDcBvm .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-igtuiisTamKDcBvm .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-igtuiisTamKDcBvm .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-igtuiisTamKDcBvm #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-igtuiisTamKDcBvm .sequenceNumber{fill:white;}#mermaid-svg-igtuiisTamKDcBvm #sequencenumber{fill:#333;}#mermaid-svg-igtuiisTamKDcBvm #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-igtuiisTamKDcBvm .messageText{fill:#333;stroke:none;}#mermaid-svg-igtuiisTamKDcBvm .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-igtuiisTamKDcBvm .labelText,#mermaid-svg-igtuiisTamKDcBvm .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-igtuiisTamKDcBvm .loopText,#mermaid-svg-igtuiisTamKDcBvm .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-igtuiisTamKDcBvm .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-igtuiisTamKDcBvm .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-igtuiisTamKDcBvm .noteText,#mermaid-svg-igtuiisTamKDcBvm .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-igtuiisTamKDcBvm .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-igtuiisTamKDcBvm .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-igtuiisTamKDcBvm .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-igtuiisTamKDcBvm .actorPopupMenu{position:absolute;}#mermaid-svg-igtuiisTamKDcBvm .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-igtuiisTamKDcBvm .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-igtuiisTamKDcBvm .actor-man circle,#mermaid-svg-igtuiisTamKDcBvm line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-igtuiisTamKDcBvm :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}输入任务分解后的子任务成功模式记录Review发现更新技能库下次同类任务更快
每次成功的执行路径都会被记忆系统捕获,然后沉淀为可复用的技能。这意味着你的 ECC 系统会用得越久越聪明。
多 Harness 适配层
ECC 最难的技术挑战可能是跨平台适配。Claude Code 用插件机制,Codex 用 AGENTS.md,Cursor 用 .cursor/agents,Gemini 用 .gemini/config——每个平台的"规则加载方式"都不一样。
ECC 的解决方案是profile 系统:
# minimal:只装核心 skill 和 agent,不装 hooks
./install.sh –profile minimal –target cursor
# full:完整安装,含 hooks、rules、memory
./install.sh –profile full –target claude
这确保了在资源受限的平台(如 Cursor)上也能工作。
优缺点
优点
- 即装即用:一行命令搞定,不需要写任何 prompt
- 安全内置:AgentShield 是企业级刚需
- 持续学习:用得越多,系统越懂你的工作方式
- 多平台:一个代码库覆盖 7+ harness,迁移成本极低
缺点
- 学习曲线:281 个技能对于新用户来说太多,需要时间选择哪些对你有用
- Token 消耗:多 Agent 并行 + Review 流程会显著增加 token 使用量
- 单一维护者:目前是单人维护,虽然社区活跃,但长期稳定性值得关注
适用场景
- ✅ 团队开发,需要代码质量保障
- ✅ 安全敏感项目,需要 Agent 安全检查
- ✅ 跨平台协作,同时使用多个 AI 编程工具
- ❌ 偶尔用用 AI 写代码的个人开发者
- ❌ 只需要快速补 bug 不需要完整工程流程的场景
总结
ECC 代表了 AI 编程助手的一个重要方向:从工具到团队。
它不是让 AI 写更多代码,而是让 AI 写出更好的代码——通过计划、测试、Review、记忆这套工程纪律。如果你有团队在用 AI 编程助手,或者你对代码质量有严格要求,ECC 值得花一个下午研究一下。
23.5 万 stars、MIT 开源、每周更新——这不是一个实验性的 side project,而是一个正在被大量团队使用的工程系统。
一句话:如果你在用 Claude Code 或 Codex,ECC 应该在你的安装列表里。


