ECC 新手教程

ECC 新手教程 · 在 Cursor 中使用

ECC(Everything Claude Code)是一套给 AI 编码代理用的「工程纪律操作系统」:技能、规则、钩子、记忆、安全扫描一次装齐。这份教程只讲一件事——怎么把它装进 Cursor,装完之后 Agent 的行为会发生什么变化。

1这是什么

一句话:ECC 是「代理工具的操作系统」——官方原话是 "The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond."。它来自 Anthropic 黑客马拉松的获胜项目,经过 10 个月以上的高强度日常开发打磨,如今是一份 4 万星的开源仓库。

它解决的问题是:你装了 Cursor,Agent 很聪明,但没有纪律——不先规划就动手、写完不验证、每次会话都失忆、把密钥粘进提示词也没人拦。ECC 把一整套工程实践(先规划、测试先行、审查、记忆、安全扫描)做成可安装的配置层,装上之后 Agent 默认就按这套流程干活。

40,000+GitHub Stars(2026 年 1-2 月首破 4 万)
286可复用技能(skills)
68子代理(agents)
94斜杠命令(Claude Code 侧)
34Cursor 规则(9 通用 + 25 语言)
15Cursor Hook 事件(16 个脚本)

它不做什么(反向界定)

  • 不是模型,也不是 MCP 服务器。本体是 Markdown 文件 + Node.js 脚本的配置层;MCP 连接器默认只开 1 个(chrome-devtools),其余全部 opt-in。
  • 不给 Cursor 提供斜杠命令。94 条 /命令 是 Claude Code 的原生体系;在 Cursor 里,这些能力由规则(常驻注入)和技能(按需点名)承接。
  • 不承诺与 Claude Code 功能对等。官方明确标注 Cursor 适配器是 Beta project adapter——文件放置和指令可移植性经过测试,但别期待 1:1 体验。
  • 不上传任何数据。规则、技能、记忆全部是本地 Markdown,可检查、可 git diff、可版本化。
版本本教程基于 v2.2.1(2026 年 9 月),MIT 许可证,2,670+ 次提交,默认分支 main。

2为什么需要

先想想你(或你身边同事)可能已经尝试过的三种做法——它们各自会怎么失败。

你可能已经在做的常见结局ECC 的替代方案
把所有要求塞进一个巨型 .cursorrules 文件越写越长、规则互相打架,而且每一轮对话都全量吃上下文 34 条规则按「9 通用 + 6 语言 × 5 条」模块化,按项目挑着装;每条只管一件事
靠嘴提醒:「先测试再写码」「别忘了 review」 人肉纪律三天就衰减,Agent 第三天就回归自由发挥 工作流写进规则常驻生效;重复动作交给 hooks 在生命周期里强制执行(自动格式化、审计、拦截)
MCP 服务器全装上,多多益善 上下文窗口被工具定义吃掉——官方速览指南给出的实测经验是 200k 上下文能被压到 70k,性能肉眼可见地退化 默认只开 1 个连接器;每个 MCP 都要论证「为什么原生能力做不到」,逐个 opt-in

ECC 的核心洞察只有一句话,也是它 README 里反复出现的口号:

核心理念「优化上下文窗口,持久化其他一切」(Optimize the context window. Persist everything else.)——易逝的东西交给窗口,重复的成功固化成技能,重要的事写进记忆文件。

围绕这句话,它把 Agent 的默认工作循环定义为:plan → test → implement → review → verify → remember → improve。这不是口号——每一步都有对应的规则、技能或钩子在背后托着(第 3 节展开)。

3核心概念与工作循环

ECC 有五个概念要分清,它们在 Cursor 里的「存在形式」各不相同:

概念是什么在 Cursor 里的形式
Skills 技能可复用工作流:TDD、安全审查、深度研究等。主要工作流界面,按需加载.cursor/skills/ 下 11 个精选技能,对话中点名引用
Instincts 本能从真实会话里学到的模式,带置信度评分(Continuous Learning v2)由记忆钩子自动沉淀,/instinct-status 等命令在 Claude Code 侧管理
Memory 记忆统一、本地、可检查的 Markdown 记忆库(Memory Vault),跨工具交接记忆钩子自动读写;项目记忆在 .ecc/memory/,用户记忆在 ~/.ecc/memory/
Security 安全AgentShield:把 Agent 配置本身当攻击面扫描(提示词、hooks、MCP、权限、密钥)npx -y ecc-agentshield scan --path . 随时可跑
Research-first 研究优先编码前先研究的工作流(search-first 技能)对话里要求「先查资料再动手」即触发其行为模式

把五个概念串起来,就是 ECC 定义的默认工作循环——每个环节都有配置层在托底,而不是靠 Agent 自觉:

规划 plan · 等确认 先写测试 test · TDD 最小实现 implement 审查 review 验证 verify · 跑测试 记住 remember · 记忆 改进 improve · 沉淀 新学到的模式回流成规则与技能 规划 plan 先出计划,等你确认 先写测试 test TDD · 80%+ 覆盖率 最小实现 implement 审查 review 按语言规则逐条过 验证 verify 真的跑了测试才算 记住 remember 写进本地记忆库 改进 improve 模式沉淀回技能
为什么重要在 Claude Code 里这个循环靠斜杠命令显式触发;在 Cursor 里它主要靠规则常驻注入(每轮对话都带上)+ hooks 强制执行(你想跳都跳不掉)。所以 Cursor 用户的正确姿势是:把规则装好,然后正常对话——纪律会自己来。

4Cursor 里装的是什么

ECC 仓库为 Cursor 准备了一整套适配层。安装器会把选定内容写进你项目根目录的 .cursor/ 文件夹——五类东西:

写入位置内容规模在 Cursor 里如何生效
.cursor/rules/34 条规则:9 条通用(编码风格、安全、测试、Git 工作流、性能、模式、hooks、代理、开发流程)+ 6 种语言各 5 条(TS/Python/Go/Kotlin/Swift/PHP)Cursor 项目规则。每条带 frontmatter(如 alwaysApply: true),符合条件的每轮对话自动注入
.cursor/hooks.json + .cursor/hooks/15 个生命周期事件、16 个 Node.js 脚本Cursor hooks 体系:会话开始/结束、Shell 执行前后、文件编辑前后、MCP 调用前后、上下文压缩前、会话终止时自动执行
.cursor/agents/48 个子代理定义(ecc-*.md)专门角色的提示词定义(规划、审查、构建修复等),供 Agent 参考与编排
.cursor/skills/11 个精选技能(documentation-lookup、unified-memory、mcp-server-patterns、nextjs-turbopack 等)对话中点名引用,或让 Agent 按需读取
.cursor/ecc-install-state.json安装状态(schema ecc.install.v1)记录装了什么、装到哪、每个文件的摘要——doctor / repair / uninstall 全靠它,卸载不靠猜

Hook 事件都干了什么

15 个事件按职责分六组,安全相关的占了一半以上——这是 ECC 最「值回票价」的部分:

分组事件代表行为(来自 hooks.json 原文描述)
会话管理sessionStart / sessionEnd / preCompact加载上次上下文;持久化会话状态;压缩上下文前先存档
提示词防线beforeSubmitPrompt检测提示词里的密钥模式(sk-、ghp_、AKIA)
Shell 拦截beforeShellExecution / afterShellExecution拦截 git --no-verify 绕过钩子;tmux 长命令提醒;git push 前审查
文件防护beforeReadFile / beforeTabFileRead / afterFileEdit / afterTabFileEdit读 .env / .key / .pem 前告警;Tab 补全不许碰密钥文件;编辑后自动格式化 + TS 检查 + console.log 告警
MCP 审计beforeMCPExecution / afterMCPExecutionMCP 调用审计日志;不可信服务器警告
编排观测subagentStart / subagentStop / stop子代理启停记录;会话终止时审计所有改动文件里的 console.log
与 Claude Code 的差异Claude Code 装到用户级 ~/.claude/、有 94 条原生斜杠命令;Cursor 装到项目级 ./.cursor/、没有斜杠命令(由规则 + 技能承接)、记忆通过 ECC_AGENT_DATA_HOME 独立隔离(默认 ~/.claude,经 .cursor/ecc-agent-data.json 可改),两者可以共存不冲突。

5安装

给 Cursor 装 ECC 只有一条一等公民路径:克隆仓库 → 在你的项目目录里运行安装脚本。先认识三条路,别走岔:

路径命令适用
源码安装脚本(Cursor 主线)./install.sh --profile minimal --target cursorCursor 用户唯一官方支持路径
插件市场安装/plugin marketplace add https://github.com/affaan-m/ECC仅 Claude Code,Cursor 没有 /plugin
手动复制文件cp -r rules/... 目标目录/任何工具的兜底(见官方 MANUAL-ADAPTATION-GUIDE)
易混淆点引导向导 npx ecc-universal install --guided 只覆盖 Claude Code、Codex、Kimi Code 三家——Cursor 不在其中。看到别人发这条命令时别照抄,Cursor 必须走源码脚本。

三步装进你的项目

假设你的项目在 ~/projects/demo(路径换成你自己的):

# 1. 克隆 ECC 到本地工具目录(别放进项目里)
git clone https://github.com/affaan-m/ECC.git ~/tools/ECC

# 2. 进入你的目标项目
cd ~/projects/demo

# 3. 运行安装器 —— 写入当前项目的 ./.cursor/
bash ~/tools/ECC/install.sh --profile minimal --target cursor

想先看会动哪些文件再决定,加 --dry-run;自动化脚本里加 --yes 免交互。Windows 用户等价命令:

# 在你的项目目录里运行
pwsh -File ~/tools/ECC/install.ps1 --profile minimal --target cursor
作用域务必分清--target cursor 是项目级作用域:「在哪个目录运行,就写进哪个目录的 .cursor/」。README 官方示例是先 cd ECC 再运行——那会把 .cursor/ 写进 ECC 仓库自身。想给自己项目装,就像上面这样:在你自己的项目目录里运行脚本。装错位置也别慌,第 13 节的卸载命令能按安装状态精确清理。

profile 怎么选

profile装什么适合
minimal核心规则 + 基础运行时,最省上下文新手第一次装、上下文敏感的大项目
core核心配置,可再按需加模块想要 hooks 但不要全家桶
full全部组件(agents 48 / 规则 34 / hooks 15 事件 / 技能)想完整体验 ECC 的项目

6环境自检

装完别急着用,先花一分钟确认三件事:文件在、状态对、诊断绿。

# 1. 目录结构在不在(在你的项目根目录)
ls .cursor/
#   预期看到: rules/  hooks/  hooks.json  agents/  skills/  ecc-install-state.json

# 2. 安装状态是否完整记录
cat .cursor/ecc-install-state.json

# 3. 用 ECC 自带诊断器体检(源码检出路径)
node ~/tools/ECC/scripts/ecc.js doctor --target cursor
node ~/tools/ECC/scripts/ecc.js list-installed

doctor 会比对每个受管文件的实际内容与安装状态里记录的摘要,缺了、漂了都会指出来;repair 能按状态文件原样重建。这是 ECC 2.0 「确定性安装」的底座——卸载、修复都不靠猜。

平台支持与已知限制

平台状态已知限制
Linux核心支持可选功能可能需要 Bash / Python / 特定提供商工具
macOS核心支持个别可选功能与系统自带 Bash 3.2 不兼容,存在评分解析缺陷(issue #2674)
Windows + WSL核心支持走 Linux 路径,推荐 Windows 用户用这条
Windows 原生有限支持持续学习 v2 观察者守护进程与记忆库写入存在原生缺陷(#2489、#2626)

Node 与记忆的两个前提

  • hooks 全是 Node.js 脚本——确保 node 在 PATH 里(node -v 能出版本号即可)。
  • 记忆默认写到 ~/.claude——这是有意设计(ECC_AGENT_DATA_HOME,issue #2066):让 ECC 记忆钩子不与 Claude Code 自己的记忆冲突。想改位置,用项目里的 .cursor/ecc-agent-data.json 指定(支持相对路径,从项目根解析)。

7第一次实战

下面六个动作在 15 分钟内做完,每个都有明确的预期结果——做完整套,你就亲眼看过了 ECC 的三层能力(规则、钩子、工作流)各自怎么发力。

第 1 步:装进一个实验项目

mkdir -p ~/projects/ecc-demo && cd ~/projects/ecc-demo
git init
bash ~/tools/ECC/install.sh --profile minimal --target cursor --dry-run   # 先看清单
bash ~/tools/ECC/install.sh --profile minimal --target cursor             # 确认后真装

第 2 步:让 Cursor 重新加载

重启 Cursor,或在命令面板执行 Reload Window。项目规则与 hooks 都在会话/窗口启动时加载——热改不生效,先重启再说。

第 3 步:感受规则常驻

在 Agent 对话里说:「写一个管理购物车的小模块,用 Python」。留意它是否主动:把函数拆小(规则要求 <50 行)、不原地改对象而是返回新对象、每个系统边界做输入校验、文件控制在几百行内。这些不是模型自觉——是 common-coding-style 规则里的 Code Quality Checklist 在每轮对话里被注入。

第 4 步:亲眼见一次 hook 拦截

对 Agent 说:「帮我提交代码,用 git commit --no-verify」。before-shell-execution-block-no-verify.js 会拦下这条命令——它是专门防 Agent 绕过你仓库 pre-commit / commit-msg / pre-push 钩子的。被拦了,说明 hooks 链路通了。

第 5 步:测试密钥防线

在提示词里粘一条假密钥(比如 sk-test1234567890abcdef)。beforeSubmitPrompt 的密钥模式检测(sk- / ghp_ / AKIA)应当告警。真密钥再也不会「顺手」溜进对话上下文。

第 6 步:走一轮完整循环

提一个真实小需求,并显式说:「先别写代码,先给我实施计划和风险点,我确认后再动手」——这就是循环里 plan 环节的正确打开方式。确认后让它按 TDD 走:先写失败测试,再最小实现,最后按语言规则自查一遍。整个过程里 afterFileEdit 会自动做格式化和类型检查,会话结束时 session-end 钩子把状态写进记忆。

验收标准第 3 步行为变克制、第 4 步能拦截、第 5 步能告警——三个都成立,ECC 在你的 Cursor 里就是活的。哪一步不符合,直接翻第 12 节 FAQ 对号入座。

8产物结构与设计原则

装完之后项目里多了什么、为什么这么放:

your-project/
├── .cursor/
│   ├── rules/                    # 34 条规则:common-* 9 条 + 每语言 5 条
│   │   ├── common-coding-style.md      # 不可变、小文件、错误处理、输入校验
│   │   ├── common-security.md          # 密钥管理、依赖审计、边界校验
│   │   ├── common-testing.md           # 测试策略与覆盖率要求
│   │   ├── common-git-workflow.md      # 提交规范与分支纪律
│   │   └── python-coding-style.md ...  # TS/Python/Go/Kotlin/Swift/PHP 各 5 条
│   ├── hooks.json                # 15 个事件 → 16 个脚本的注册表
│   ├── hooks/                    # Node.js 脚本本体(session-start.js 等)
│   ├── agents/                   # 48 个 ecc-*.md 子代理定义
│   ├── skills/                   # 11 个精选技能目录
│   └── ecc-install-state.json    # 安装状态(卸载/修复的依据)

三条设计原则,理解了就知道该怎么和它相处:

  • 项目本地,跟仓库走。所有内容都在项目里,git commit 后全团队共享同一套纪律——这正是团队统一规范最省事的路径。
  • 规则是常量,技能是变量。规则每轮都在(所以必须精炼);技能按需加载(所以可以写得很厚)。别把长流程塞进规则——官方速览指南的忠告是「持久逻辑应该活在技能里」。
  • 一切受管、一切可逆。每个写入的文件都在 ecc-install-state.json 里有记录(含内容摘要),doctor 查漂移、repair 修复、uninstall 只删自己装过的——不会碰到你项目里的其他文件。

9日常怎么用

日常不需要记命令,记住一个映射就够:你说意图,配置层出动作。五个高频场景:

场景你怎么说背后谁在干活
开新功能「先出实施计划和风险点,我确认再写码」开发流程规则(plan 先行)+ 规划类子代理
写完一段代码「按审查规则把本次改动过一遍」语言审查规则(安全、并发、空安全各按语言来)
构建挂了直接把报错贴进去构建修复规则 + 对应语言的 build-fix 子代理
查最新 API 用法「用 documentation-lookup 技能查官方文档」.cursor/skills/documentation-lookup
一天结束「把本次会话要点存进记忆」记忆钩子持久化 + unified-memory 技能

规则是自动的,但你依然可以显式点名技能来加强约束——这是 Cursor 下最接近「斜杠命令」的用法:在对话里直接说「按 xxx 技能的流程来」,Agent 会去读 .cursor/skills/xxx/ 里的说明并照做。

会发生 vs 不会发生

✅ 会发生符合条件的规则每轮自动注入;hooks 在保存/执行/会话节点自动格式化、审计、拦截;记忆落在本地 Markdown,能 git diff;技能被点名后按其工作流执行。
❌ 不会发生不会出现 /plan 这类斜杠补全(那是 Claude Code 的体系);不会自动改你的 Cursor 模型配置或账户设置;不会把任何代码或记忆上传云端;不会在 .cursor/ 之外乱写文件(一切以安装状态为准)。

10进阶玩法

基础盘稳了之后,按需拧这四颗旋钮:

1. 换 profile / 增减模块

# 升级到 core,但不要 hooks 运行时
bash ~/tools/ECC/install.sh --profile core --without baseline:hooks --target cursor

# 事后补装 hooks
bash ~/tools/ECC/install.sh --target cursor --modules hooks-runtime --enable-hooks

# 精准点名技能
bash ~/tools/ECC/install.sh --target cursor --skills tdd-workflow,security-review

重跑安装脚本本身就是更新/改配置的方式;受管文件漂移了用 ecc.js repair 修。

2. 用官方的 MCP 连接器策略

ECC 对「装哪些 MCP」做过审计,结论写进 docs/MCP-CONNECTOR-POLICY.md:默认只保留 chrome-devtools,其余六个 opt-in,且每个都给出了「原生替代方案」:

MCP 服务器ECC 的替代方案
github用 gh CLI(github-ops 技能)
context7REST 文档查询(documentation-lookup 技能)
exa工具原生搜索
memory工具原生记忆 + ECC 本能/记忆库
playwrightplaywright CLI 技能
sequential-thinking原生扩展思考
为什么这么抠每个 MCP 服务器的工具定义都常驻上下文。速览指南的经验法则是:配置 20-30 个没关系,但启用要 <10 个、活跃工具 <80——否则 200k 窗口直接被砍半,Agent 变笨。

3. 跨工具记忆交接

ecc memory init      # 建项目/团队/用户记忆库
ecc memory save      # 存决策、事实、教训、偏好、runbook(正文走 --stdin)
ecc memory handoff   # 把有边界的工作状态从一个工具交接给另一个
ecc memory search    # 按文本/范围/类型检索
ecc memory doctor    # 查坏文件、重复 ID、断链

handoff 的价值在于:同一个项目今天在 Cursor 里做,明天换 Claude Code 接手时,上下文不是靠聊天记录搬运,而是一份可检查的 Markdown 交接文档。

4. 团队统一规范

把 .cursor/ 提交进仓库,规则、hooks、技能随代码分发;个人偏好放 ~/.ecc/(用户级记忆)。新人 clone 下来第一行命令都还没跑,Agent 纪律已经就位。

11上下文与性能

ECC 对性能的影响只有一个变量:常驻上下文多了多少字。hooks 本身是本地 Node 进程,毫秒级,不占模型上下文。它甚至给了你调节数字的手柄:

环境变量默认值管什么
ECC_SESSION_START_MAX_CHARS8000会话启动时注入记忆的字符上限
ECC_SESSION_RETENTION_DAYS30会话状态保留天数
ECC_MAX_INJECTED_INSTINCTS6单次最多注入几条「本能」
ECC_INSTINCT_CONFIDENCE_THRESHOLD0.7本能注入的置信度门槛
一句话结论开销大头是规则注入与记忆注入,而且全部有数字上限可调。按官方口径控制好 MCP 数量(启用 <10)、选 minimal 起步,上下文成本完全可控;换来的是规则约束 + 自动化钩子 + 本地记忆,这笔账通常是净赚的。

12FAQ / 踩坑

每条都给可执行的解法,按症状检索:

装完之后规则好像没生效,Agent 还是自由发挥

三个检查点:① Cursor 的项目规则要求特定格式——ECC 的规则文件带 frontmatter(alwaysApply: true),如果你的 Cursor 版本只认 .mdc 后缀,把 .cursor/rules/*.md 重命名为 .mdc;② 检查 Cursor 设置里项目规则开关是否打开;③ Reload Window——规则与 hooks 都在窗口启动时加载,改完不重启等于没改。

hooks 完全不执行,格式化和拦截都没动静

按顺序查:① node -v 能不能跑(hooks 全是 Node 脚本);② Cursor 版本是否已支持 .cursor/hooks.json 事件体系;③ 手动验证脚本本身:node .cursor/hooks/session-start.js,能正常退出说明脚本没问题,剩下的就是 Cursor 的 hooks 加载问题;④ 确认 hooks.json 在项目根的 .cursor/ 下,而不是别的嵌套目录。

我同时也在用 Claude Code,两边会打架吗

不会。ECC 专门做过隔离(issue #2066):记忆钩子通过 ECC_AGENT_DATA_HOME 做了 Cursor 感知解析,默认 ~/.claude 但不会撞车;Cursor 侧记忆位置可用 .cursor/ecc-agent-data.json 独立指定。MCP 配置则是共享的——这是特性,省一份维护。

装错目录了,.cursor/ 出现在了错误的项目里

在装错的项目目录里运行 node ~/tools/ECC/scripts/ecc.js uninstall --dry-run 先看会删什么(读的是该目录的 .cursor/ecc-install-state.json),确认无误去掉 --dry-run 再跑。它只删 ECC 受管文件,不碰你的东西。

我用了插件安装,又跑了一次完整安装脚本,技能重复了

这是官方 README 里专门加粗警告过的组合:插件已自动加载技能/命令/hooks,再跑 full 安装会把同一批内容复制到用户目录,导致重复与行为叠加。清理顺序:先移除插件安装 → 从受管目录跑 ECC 卸载 → 删掉手动复制的多余规则 → 只用一条路径重装。

macOS 上个别可选功能报错

已知问题:系统自带 Bash 3.2 与个别可选路径不兼容,存在评分解析缺陷(issue #2674)。核心功能不受影响;受影响的功能装个新 Bash 或走 WSL/Linux 容器。

Windows 原生环境下记忆写入异常

已知缺陷(#2489、#2626):持续学习 v2 的观察者守护进程与记忆库写入在 Windows 原生环境有问题。官方状态是「有限支持」——直接用 WSL,一切按 Linux 路径走。

Cursor 里怎么知道全部技能/命令有哪些

直接翻仓库:skills/ 目录是技能全集(286 个),COMMANDS-QUICK-REF.md 是 94 条命令的速查表(Claude Code 侧),.cursor/skills/ 是给 Cursor 精选的 11 个。仓库还提供 /ecc-guide 命令做导航——那是 Claude Code 侧的能力,Cursor 用户就用搜索和 README。

13卸载与合规

ECC 的卸载和它安装一样讲究:按状态文件精确清理,两步走。

# 在当初安装时的项目目录里运行
node ~/tools/ECC/scripts/ecc.js uninstall --dry-run   # 先看会删什么
node ~/tools/ECC/scripts/ecc.js uninstall             # 确认后执行

# 装过多个位置的话,先盘点再逐个清
node ~/tools/ECC/scripts/ecc.js list-installed

它只删除 ecc-install-state.json 里登记的受管文件——你自己写进 .cursor/ 的规则、项目代码、记忆文件都不在清理范围内。

合规与数据

  • 许可证:MIT,永久免费开源,商用无顾虑。
  • 数据本地性:规则、技能、记忆、会话状态全部是本地文件;不内嵌遥测上传。记忆文件的本质是「未经审查的上下文,不是可执行策略」——官方提醒得直白:别把它当成信任边界。
  • 配置来源:所有组件来自公开仓库,装之前可以逐文件审阅——这也正是 AgentShield 存在的意义:它扫描的就是「你装进 Agent 的配置本身」。

ECC 新手教程 · 基于 affaan-m/ECC v2.2.1(MIT)· 生成于 2026-09-10