{"slug":"cm-ai","title":"cm-ai","summary":"用户明确说“规格已确认，开始实现”或要求按已审批 CM specs 开发时使用。新任务默认由 JS workflow 驱动 N1-N8，完成开发、独立审查、QA 与文档同步；模糊点子、未审规格和单独一句“继续”不能触发编码批准。","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-24T15:42:59.815368Z","repo":{"url":"https://github.com/kingxiaozhe/cm-workflow","stars":27,"forks":0,"license":"MIT","updatedAt":"2026-09-24T10:35:03Z"},"bodyHtml":"<hr>\n<h2>name: cm-ai\ndescription: 用户明确说“规格已确认，开始实现”或要求按已审批 CM specs 开发时使用。新任务默认由 JS workflow 驱动 N1-N8，完成开发、独立审查、QA 与文档同步；模糊点子、未审规格和单独一句“继续”不能触发编码批准。</h2>\n<h1>cm-ai — 自动开发</h1>\n<p>执行前读取 <code>../../runtime/project-context.md</code>、<code>../../runtime/orchestration.md</code>、\n<code>../../runtime/task-gates.md</code>、<code>../../runtime/review.md</code> 与\n<code>../../runtime/model-efficiency.md</code>、<code>../../runtime/logging.md</code>。Codex 入口为\n<code>$cm-ai</code>；Claude Code 跨平台入口为 <code>/cm-ai</code>，macOS/Linux 另有历史别名 <code>/cm:ai</code>。</p>\n<p>用户明确要求外部专家，或为本次开发任务开启 AUTO 时，按\n<code>../../runtime/external-expert.md</code> 执行 <code>../external-expert/SKILL.md</code> 的任务路由。\n编码、命令、测试执行、页面 QA、Git 与 N4 永远 LOCAL；AUTO 只能把可分离的复杂\n研究、测试设计或方案批判路由到 CONSULT/VERIFY。外部建议由本地应用、测试与裁决，\n其 <code>.external/</code> 证据不得满足 N4/N5。</p>\n<p><code>用户本轮输入</code> — specs 文件夹路径 + 代码项目路径。</p>\n<pre><code>$cm-ai specs在~/projects/my-app-specs，代码在~/code/my-app\n$cm-ai ~/projects/specs 前端~/code/fe 后端~/code/api\n</code></pre>\n<h2>流程图</h2>\n<h3>执行路由（新任务默认 JS）</h3>\n<p>先按下列顺序选择执行方式；用户无需额外说“使用 JS workflow”。路由选择不替代规格审批或实际调用授权。</p>\n<ol>\n<li><strong>恢复已有运行</strong>：先读取原运行记录。已有 JS host/batch 沿原身份与配置恢复；已配置 QA 因命令配置错误卡住时，按 <code>references/js-host.md</code> 的“QA 配置修订”显式授权，不重开已完成任务。\n已确认的旧兼容任务沿原流程续接，不因升级迁移状态。记录缺失、冲突或无法确定归属时只读核对，不能猜测或另开运行绕过历史。</li>\n<li><strong>新任务</strong>：默认读取 <code>references/js-host.md</code>，由共享 JS 入口驱动阶段；当前会话只执行其工具请求。\n只有用户明确选择旧兼容流程、且确认不是已有 JS 运行时，才进入下文兼容执行步骤；不新增 CLI 参数。</li>\n<li><strong>JS 准入失败或不支持</strong>：报告具体宿主、Node 版本、目录、配置或业务能力缺口并停止依赖该能力的执行；\n不静默回退兼容流程，不改 runId、runtime 或手工完成路径规避阻断。原生 Windows 尚不支持，Linux 支持声明不等于实机验收。</li>\n</ol>\n<p>JS 路由中的状态、日志、handoff、Review 凭证与任务勾选由原 JS owner 和唯一完成门禁负责；\n不得执行下文兼容步骤中的同类手工写入。节点参考的业务约束仍适用，默认路由不扩大开发、审查、QA、Git 或发布权限。</p>\n<h3>N1–N8 业务概览与兼容执行步骤</h3>\n<p>下列流程图说明共同业务顺序；JS 的执行操作以 <code>references/js-host.md</code> 为准。\n仅已选定兼容流程时，按下文及 <code>references/</code> 节点执行手工步骤；入口更新不代表已安装副本或全阶段实机验收。</p>\n<pre><code>START\n  │\n  ▼\n[N1: 初始化] ── 解析输入、扫描 features、加载上下文\n  │\n  ▼\n┌─► [N2: 进入 Feature] ── 读取 specs、分析依赖、输出执行计划\n│     │\n│     ▼\n│   ┌─► [N3: 执行 Task] ── 检查 skill → 开发\n│   │     │\n│   │     ▼\n│   │   [N4: Review] ── 主执行者自审 → 独立审查\n│   │     │\n│   │     ▼\n│   │   [N5: 标记完成] ── tasks.md 标 [x]、写 LESSONS.md\n│   │     │\n│   │     ▼\n│   │   [N6: QA 评估] ── 评分决定是否触发 cm-qa-engineer\n│   │     │\n│   │     ▼\n│   │   [N7: 上下文管理] ── 从磁盘重读 specs 与项目约束\n│   │     │\n│   │     ▼\n│   │   还有未完成 task? ──YES──┘\n│   │     │\n│   │    NO\n│   │     │\n│   │     ▼\n│   └── Feature 完成 → 重建下一 Feature 的上下文\n│         │\n│         ▼\n│       还有下一个 Feature? ──YES──┘\n│         │\n│        NO\n│         │\n│         ▼\n      [N8: 完成] ── 调用 cm-doc-syncer → 输出总结\n        │\n        ▼\n       END\n</code></pre>\n<h2>全局规则</h2>\n<p><strong>暂停（仅灾难级）：</strong> 不可逆破坏（删数据、动线上、不可回滚迁移）、资金/密钥/合规风险、交付形态级架构错向、环境阻塞到无法继续。\n<strong>不暂停（多方案自主决策）：</strong> 执行中出现多个可选方案时——技术选型、实现路径、库/工具选择、审查意见分歧——<strong>自己分析利弊选最优解直接执行，不询问</strong>。代价是留痕义务：把「选了什么 / 为什么 / 放弃了什么」写进任务汇报，方向性取舍追记 LESSONS.md——人可以事后翻案，但流程不为选择题停车。业务逻辑歧义按需求文档最合理解释执行并显式记录所做假设，仅当触及灾难级清单才暂停。\n<strong>节点间不停车：</strong> 除上述灾难级与各节点显式卡点（入口闸/降级知情/形态确认/涉合规走查）外，任何节点完成后<strong>直接进入下一节点</strong>——不得以\"我将要…是否继续?\"、\"完成了 X,需要我继续吗?\"这类问句收尾等待。阶段性汇报写在输出里照常可见,但回合不能停在等确认上（实跑反馈:执行器习惯性在节点末尾问一句,用户被迫每阶段点头,自动化名存实亡）。\n<strong>度量：</strong> 每次暂停问人，恢复后在当前任务的 METRICS.md 记录里人工介入计 1 次并注明原因（见 N5）。\n<strong>状态落盘（供状态条/看板实时点亮节点）：</strong> 每进入一个节点（N1–N8），覆盖写入 <code>{SPECS_DIR}/.cm-status.json</code> 单行 JSON：\n<code>{\"node\":\"N4\",\"feature\":\"1.xxx\",\"task\":\"T-005\",\"detail\":\"一句话当前动作\",\"state\":\"running\",\"at\":\"HH:MM:SS\"}</code>\n——<strong>detail 必须写大白话</strong>，标准是\"路过的非工程师扫一眼能懂\"：写\"正在开发数据接口\"不写\"cm-backend-engineer 执行 T-004\"；写\"第2轮代码审查\"不写\"对抗式子agent复审\"；写\"确认一下：原型里有3个按钮点了没反应,要做吗?\"不写\"原型死区待确认\"。节点号/任务号由状态条自动放在行尾角标，detail 里不要再写。\n——暂停等人时 <code>state</code> 改为 <code>paused_for_human</code>（detail 写等什么），全部完成时 N8 写 <code>run_done</code>。N1 时可将 specs 绝对路径同步到当前运行时的状态镜像（Claude 兼容运行时为 <code>~/.claude/cm-current-specs</code>，Codex/OMX 为对应 session 状态），但 <code>{SPECS_DIR}/.cm-status.json</code> 始终是跨运行时真相。每节点至少写入一次；长步骤可在同一节点更新真实检查点，不得跳过。\n<strong>运行日志（事后复盘与工作流优化的原始证据）：</strong> 按\n<code>runtime/logging.md</code> 调用统一写入器；它先追加 <code>{SPECS_DIR}/运行日志.jsonl</code>，再把\n同一 <code>event_id</code> 镜像到 <code>~/.cm-workflow/logs/</code>。<code>at</code> 一律 ISO 8601 带时区偏移，\ndetail 用一句大白话；不直接拼 JSON，避免跨会话格式漂移。\n<strong>必记事件（event 取值固定）</strong>：<code>run_start</code>、<code>node_enter</code>、<code>task_start</code> /\n<code>task_done</code>、<code>review</code>、<code>degrade</code>、<code>pause</code> / <code>resume</code>、<code>decision</code>、<code>warning</code>、\n<code>error</code>、<code>progress</code>、<code>resource</code>、<code>qa</code>、<code>test_run</code>、<code>external_expert</code>、\n<code>spec_lifecycle</code>、<code>delivery</code>、<code>run_done</code>。写日志与状态落盘同节奏，不得跳过；详细\n测试/审查/外部回答只写专项凭证，不灌主日志。长步骤和临时资源严格按\n<code>runtime/logging.md</code> 配对，禁止用后台心跳制造虚假活跃。</p>\n<p><strong>角色路由投影：</strong> N1 用代码项目根读取有效配置；N3 每个实现任务解析 <code>coder</code>，N3\n任务检查解析 <code>tester</code>，N4 解析 <code>reviewer</code>，并在 N6 QA 解析 <code>tester</code>。使用：</p>\n<pre><code>node {CM_WORKFLOW_ROOT}/scripts/cm-workflow-config.mjs \\\n  --project {CODE_PROJECT} --role coder --runtime {codex|claude} --print-role\n</code></pre>\n<p>把返回的 <code>adapter</code>、<code>model</code>、<code>source</code>、<code>route_state</code> 注入当前角色提示和任务摘要，\n并按 <code>runtime/workflow-routing.md</code> 写 <code>decision</code>/<code>phase: route</code>。每次 N7 恢复或进入\n新角色边界都从磁盘重读；配置缺失使用默认路由。<code>declared-adapter</code> 只表示项目请求了\n当前运行时未观察到的适配器，必须写 <code>warning</code>/<code>degrade</code>，不能声称该模型已执行；它\n也不能绕过本地编码、测试、Git 或 N4 独立审查。\n<code>managed-adapter</code> 只通过 <code>runtime/model-efficiency.md</code> 的内置调用边界返回文本角色结果；\n主执行者仍负责本地改码、命令与证据，适配器回答本身不得满足 N4。版本 1 因此拒绝\n<code>reviewer.adapter: openai-compatible</code>，N4 只使用 <code>runtime/review.md</code> 列出的本地审查通道。</p>\n<p>每个角色调用按 <code>runtime/model-efficiency.md</code> 重建当前任务的最小包：N3 coder 只接收\n当前 task/AC/相关设计与文件，tester 只接收测试合同和必要失败证据，N4 reviewer\n接收 task-only handoff/diff 与验证摘要。稳定规则前缀不混入动态 diff/日志；角色只返回\n既有 handoff、测试或 findings-first 结构，不复述输入。上下文缩小不得删减 N4 包的\n强制证据，也不得减少测试、审查轮次或人工门禁。</p>\n<p><strong>任务状态镜像：</strong> <code>tasks.md</code> 是唯一权威任务源。运行时支持任务面板时，可将未完成任务镜像到 Codex/OMX 计划或 Claude 任务清单；N3/N5 同步状态。断点恢复必须由磁盘重建镜像：<code>[x]</code> 跳过或标为 completed，<code>[DROPPED]</code> 不镜像，不得重复创建条目。</p>\n<p><strong>执行策略：</strong> 遵守 <code>runtime/orchestration.md</code>；串行默认，只有无依赖、文件边界不重叠、契约已稳定且环境确实支持时才可并行。</p>\n","files":[{"path":"references/js-host.md","sizeBytes":28085,"isText":true},{"path":"references/N1-init.md","sizeBytes":9610,"isText":true},{"path":"references/N2-enter-feature.md","sizeBytes":2788,"isText":true},{"path":"references/N3-execute-task.md","sizeBytes":10090,"isText":true},{"path":"references/N4-review.md","sizeBytes":6420,"isText":true},{"path":"references/N5-mark-done.md","sizeBytes":8273,"isText":true},{"path":"references/N6-qa-eval.md","sizeBytes":7328,"isText":true},{"path":"references/N7-context.md","sizeBytes":1063,"isText":true},{"path":"references/N8-finish.md","sizeBytes":6497,"isText":true},{"path":"SKILL.md","sizeBytes":9803,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-24T15:43:39.483495Z","sha256":"3B17DD39BB020174041140CD3411B7A82C0881FC50BD588E50C9343B32FC402C","sizeBytes":49915},"review":null,"source":{"repositoryUrl":"https://github.com/kingxiaozhe/cm-workflow","path":"skills/cm-ai","license":"MIT","commit":"3f79f657e2e9e21f1300efe8e5c0bd5d4d6d208c","subtreeSha":"F648CE800290C9D6C23EA863774708FA36200DFD4CFFD991C64CAC11A60FB4AD","lastSyncedAt":"2026-09-24T15:42:59.811488Z"},"reviewedAt":"2026-09-24T15:45:38.296354Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/kingxiaozhe/cm-workflow/tree/main/skills/cm-ai"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install kingxiaozhe-cm-workflow@llmmart"},{"target":"git","command":"git clone https://github.com/kingxiaozhe/cm-workflow.git"}]}