十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ECC /project-init 实战指南:基于栈检测的 DRY-RUN 安全接入规划

ECC /project-init 实战指南:基于栈检测的 DRY-RUN 安全接入规划 ECC /project-init 实战指南基于栈检测的 DRY-RUN 安全接入规划【免费下载链接】ECCThe agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.项目地址: https://gitcode.com/GitHub_Trending/ev/ECC导读本文讲解 ECCThe agent harness performance optimization system中的/project-init命令它扫描当前项目根目录的包管理器、语言清单与框架配置文件自动检测技术栈并借助仓库内的安装清单manifest与栈映射表生成一份默认只读、需显式批准后才落盘的 ECC 接入计划。读完本文你将掌握/project-init的全部参数、安全规则、六步规划流程、输出契约以及底层install-plan.js/install-apply.js的实现原理从而为任意新项目安全、可审计地完成 ECC 初始化。一、/project-init 是什么/project-init是 ECC 提供的项目接入入口命令其定位是“为当前项目创建一份安全、可评审的 ECC 接入onboarding计划”。它的两个核心设计原则是默认 dry-run试运行命令启动时不写入任何文件只有用户明确批准具体计划后才执行落盘。可审计、可回放计划中记录每一步将发生什么变化、涉及哪些目标路径方便在应用前评审。从源码契约看该命令被agent.yaml与 COMMAND-REGISTRY.json 注册属于 ECC 命令体系的一部分其英文规范文档位于 commands/project-init.md日文版即本文依据的 docs/ja-JP/commands/project-init.md。二、命令用法与参数速览/project-init支持以下调用形式来自文档“使い方”一节/project-init /project-init --dry-run /project-init --target claude /project-init --target cursor /project-init --skills continuous-learning-v2,security-review /project-init --config ecc-install.json各参数含义如下参数作用说明无参数全默认 dry-run 规划默认目标 harness 为claude栈检测后给出最小可用计划--dry-run强制试运行只生成计划与预览不写任何文件--target name指定目标 harness可选claude、cursor、codex、gemini、opencode、codebuddy、joycode、qwen不指定时默认claude--skills id,id,...指定要接入的技能例如continuous-learning-v2,security-review可同时传多个逗号分隔--config path从安装意图文件生成计划指向项目的ecc-install.json由它决定 profile/modules 选择说明--target的可选值集合与安装器运行时的目标枚举一致。在 scripts/install-apply.js 的帮助文本中可以看到完整的目标清单除文档列举的七个外还包括claude-project、antigravity、zed、hermes、kimi、openclaw、adal等详见下文“目标 harness 与安装目标”。三、安全规则把“先看后动”落实到命令设计/project-init的核心价值在于其安全约束。文档明确列出五条安全规则它们是使用该命令时必须遵守的行为契约默认 dry-run。在用户批准具体计划之前不得修改CLAUDE.md、配置文件、规则、技能或安装状态。保留既有项目指南。如果项目中已存在CLAUDE.md、.claude/settings.local.json、.cursor/、.codex/、.gemini/、.opencode/、.codebuddy/、.joycode/或.qwen/必须先检查其内容并提出合并/追加计划而不是直接覆盖。必须使用 ECC 的安装器与清单工具。禁止手工复制文件或 clone 任意远程仓库作为安装捷径。权限保持最小化。生成的配置要与检测到的构建/测试/Lint 工具相匹配避免授予宽泛的 shell 访问权限。应用前必须精确报告将改变什么。这五条规则与底层的设计是自洽的install-apply.js提供--dry-run模式previewInstallPlan在拷贝任何文件之前先输出完整的操作清单与警告而 schemas/ecc-install-config.schema.json 中additionalProperties: false、严格枚举target的做法也从配置层面限制了“意外的目标或属性”降低误写风险。四、检测输入项目栈信号的来源/project-init读取当前项目根目录从以下四类文件中检测栈信号包管理器文件package.json、package-lock.json、pnpm-lock.yaml、yarn.lock、bun.lockb语言清单pyproject.toml、requirements.txt、go.mod、Cargo.toml、pom.xml、build.gradle、build.gradle.kts框架文件next.config.*、vite.config.*、tailwind.config.*、Dockerfile、docker-compose.ymlECC 配置ecc-install.json可选栈映射ECC 仓库内的config/project-stack-mappings.json当 ECC checkout 可用时/project-init使用 config/project-stack-mappings.json 作为“栈 → 规则/技能”的引用依据如果该文件不可用则回退到已安装的 ECC 清单与用户的显式选择。4.1 栈映射表的结构config/project-stack-mappings.json是一个version: 1的映射清单核心结构为stacks数组每个栈包含五个维度{ id: python, name: Python, indicators: [ { file: pyproject.toml }, { file: requirements.txt } ], rules: [common, python], skills: [python-patterns, python-testing, tdd-workflow, verification-loop], commands: { build: [python -m build, pip install -e .], test: [pytest, python -m pytest], lint: [ruff check ., flake8, mypy .], format: [ruff format ., black .] }, permissions: { allow: [python *, pip install *, pytest *, ruff *, black *, mypy *, flake8 *], deny: [pip install --user *] } }字段语义indicators触发该栈的文件信号部分条目支持contains关键字做内容匹配如package.json中是否包含react:实现“文件存在 内容命中”双重判定rules接入该栈时挂载的规则目录对应rules/下的语言子目录skills推荐的技能集例如 Python 栈会同时推荐python-patterns、python-testing、tdd-workflow、verification-loopcommands构建、测试、Lint、格式化部分栈含dev的候选命令供生成CLAUDE.md起始模板使用permissions为该栈生成的权限白名单与黑名单用于落实“权限保持最小化”的安全规则——例如 Python 栈deny了pip install --user *而 JavaScript/TypeScript 栈deny了npm publishGo 栈则只allow明确的go build/go test/go mod等命令。当前映射表内置了 20 余个栈覆盖typescript、javascript、react、nextjs、golang、python、rust、java、springboot、kotlin、swift、dart-flutter、php-laravel、ruby、csharp-dotnet、cpp、perl、django、android、docker等主流技术栈基本可以覆盖绝大多数 Web、移动端、后端与容器化项目。五、规划流程从检测到批准的六步文档给出的规划流程如下识别目标 harness除非用户明确要求cursor、codex、gemini、opencode、codebuddy、joycode或qwen否则默认claude。从项目文件检测栈并展示每个匹配项的证据命中了哪个文件、哪条indicators。解析最小可用的 ECC 计划按优先级项目有ecc-install.json执行node scripts/install-plan.js --config ecc-install.json --json用户指定了 profile执行node scripts/install-plan.js --profile profile --target target --json用户指定了技能执行node scripts/install-plan.js --skills skill-ids --target target --json仅检测到语言栈使用对应语言名的 legacy 语言安装 dry-run。写入前先执行 dry-run 应用命令node scripts/install-apply.js --target target --dry-run --json language-or-profile-args汇总检测到的栈、选中的模块/组件/技能、目标路径、被跳过的未支持模块、将被更改的文件。批准后才执行非 dry-run 命令。5.1 计划解析的源码实现规划的第 3 步对应 scripts/install-plan.js其参数解析逻辑parseArgs支持--list-profiles、--list-modules、--list-components、--family、--profile、--modules、--skills含skill:前缀归一化、--with/--without、--config、--target、--json等选项。它本身“只读不改”——文件头注释即声明“Inspect selective-install profiles and module plans without mutating targets”。其核心调用链为parseArgs(process.argv) → loadInstallConfig(configPath) // 从 ecc-install.json 读取安装意图 → normalizeInstallRequest({...}) // 归一化 profile/modules/include/exclude/target → resolveInstallPlan({...}) // 基于 manifest 解析最终计划 → 输出 JSON 或人类可读计划当未传任何参数且当前目录存在默认的ecc-install.json时install-plan.js会自动加载它findDefaultInstallConfigPath这也解释了/project-init为什么能“零参数”工作。5.2 dry-run 与 apply 的分离规划的第 4 步与第 6 步分别对应install-apply.js的--dry-run与正式执行两种模式--dry-run时调用previewInstallPlan(rawPlan)输出“Dry-run install plan”包含 Mode、Target、Adapter、Install root、Install-state、Selected/Skipped/Excluded modules、Warnings 以及完整的 Planned file operations源相对路径 → 目标绝对路径正式执行时调用applyInstallPlan(rawPlan)并在落盘后通过projectCanonicalInstallState对安装状态做健康投影health projection把警告合并进结果输出同时将 install-state 写入安装状态文件。这意味着/project-init生成的计划与安装器实际执行的逻辑共用同一套计划对象createInstallPlanFromRequest因此“批准前预览”与“批准后执行”在文件操作层面保持严格一致不存在预览与实装漂移的问题。5.3 安装意图文件 ecc-install.json/project-init --config ecc-install.json依赖项目的安装意图文件其结构由 schemas/ecc-install-config.schema.json 约束。一个典型的ecc-install.json形如{ $schema: https://example.com/ecc-install-config.schema.json, version: 1, target: claude, profile: developer, modules: [framework-language, database], include: [lang:python, framework:react], exclude: [capability:media-generation], options: {} }关键约束version必须为整数1target是严格枚举与安装器支持的目标一致include/exclude条目必须匹配^(baseline|lang|framework|capability):[a-z0-9-]$模式即按“类别:标识”的冒号语法书写未知属性会被 schema 直接拒绝additionalProperties: false从源头防止拼写错误导致的意外行为。六、输出契约返回六类信息/project-init无论 dry-run 还是正式规划都必须向用户返回以下六类信息文档“出力契約”一节检测到的栈及其证据命中了哪些文件/内容建议的目标 harness实际使用的 dry-run 命令原文批准后将要执行的精确 apply 命令原文将被创建或修改的文件/目录清单关于既有文件、宽泛权限、缺失脚本、未支持目标的警告其中第 5、6 项与install-apply.js的输出结构一一对应plan.operations列出sourceRelativePath → destinationPath的每一个文件操作plan.warnings集中列出所有警告plan.skippedOperations记录因目标不匹配等原因被跳过的操作。因此/project-init的产出既适合人类评审也能在--json模式下被脚本消费。七、CLAUDE.md 起始模板的生成规则当用户要求生成CLAUDE.md起始模板时文档要求与安装器计划分开生成并且保持最小化。模板只包含在检测到的情况下构建命令build测试命令testLint / 类型检查命令lint/typecheck开发服务器命令dev server来自既有 package scripts 或 manifest 的仓库专属备注这些命令的来源正是栈映射表中每个栈的commands字段见 4.1 节例如 Next.js 栈的dev命令为[npm run dev, npx next dev]Go 栈的test为[go test ./...]。因此生成出的CLAUDE.md是“项目真实可用命令的最小集合”而不是大而全的模板。同时有一条硬性规则不得在未展示 diff 并获得批准的情况下替换既有的CLAUDE.md——这与安全规则第 2 条保留既有项目指南、合并而非覆盖保持了一致。八、与周边命令和工具的关系/project-init处于 ECC 接入流程的前置位置与其协作的组件包括组件路径职责栈映射表config/project-stack-mappings.json提供栈 → 规则/技能/命令/权限的映射提示计划解析器scripts/install-plan.js确定性计划解析只读不改安装执行器scripts/install-apply.jsdry-run 预览与正式应用操作安装意图 schemaschemas/ecc-install-config.schema.json约束ecc-install.json的字段与枚举安装 profilemanifests/install-profiles.json预置minimal/core/developer/security/research/full等模块组合交互式发现命令/ecc-guide安装前的交互式功能发现文档见 commands/ecc-guide.md8.1 目标 harness 与安装目标/project-init的--target选择会直接影响计划解析结果。底层install-apply.js支持更完整的目标枚举包括claude默认写入~/.claude/规则管理在rules/ecc、技能平铺在skills/、claude-project写入项目内./.claude/、cursor写入./.cursor/、antigravity写入./.agents/、codex写入~/.codex/、gemini写入./.gemini/、opencode写入OPENCODE_CONFIG_DIR或~/.config/opencode/、codebuddy./.codebuddy/、joycode./.joycode/、qwen~/.qwen/以及zed、hermes、kimi、openclaw、adal等。不同目标的落盘路径差异是/project-init汇总“目标路径”时必须精确列出的内容。8.2 与 profile 的组合当检测到栈但用户希望按预置组合接入时/project-init可委托install-plan.js --profile name。例如 manifests/install-profiles.json 中的developerprofile 会安装rules-core、agents-core、commands-core、hooks-runtime、platform-configs、workflow-quality、framework-language、database、orchestration九个模块securityprofile 则额外引入security模块minimalprofile 刻意不包含 hook 运行时。--skills则按目录 ID 精确安装单个技能如continuous-learning-v2、security-review并在内部归一化为skill:id组件形式。九、实战建议新项目一律先/project-init --dry-run在完全不了解项目的情况下先让命令展示检测证据与计划再决定是否批准。优先使用--config ecc-install.json驱动接入把安装意图显式化、可版本化团队内可复用schema 会在提交前校验字段合法性。既有项目务必走合并路径若项目已存在.cursor/、.codex/、CLAUDE.md等检查/project-init给出的 merge/append 计划与 diff再行批准。善用--skills做增量接入只安装当前阶段需要的技能如security-review保持接入面最小后续再逐步扩展。关注输出契约中的警告项plan.warnings中的“缺失脚本”“未支持目标”等提示往往反映了项目健康度问题应在接入前解决。十、小结/project-init是 ECC 接入流程中“先检测、先预览、后落盘”的安全入口它以项目真实文件为证据源以config/project-stack-mappings.json为映射基准以install-plan.js做确定性计划解析、install-apply.js做 dry-run 预览与正式应用最终产出一份人类可评审、机器可消费的六项输出契约。理解它的安全规则与规划流程就能在任何新项目或存量项目中把 ECC 接入变成一次低风险、可回放、权限克制的受控操作。【免费下载链接】ECCThe agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.项目地址: https://gitcode.com/GitHub_Trending/ev/ECC创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表