关于 mo-setup
mo-setup 是用于按 Meta-O 契约检查和配置项目的 Agent 技能。它强调基于证据的验证、敏感决策需人工确认,并报告缺口而不擅自更改策略。
主要功能
- 01检查项目契约与 QC
- 02验证知识层与历史记录
- 03校验待办清单格式
- 04检查 Orca 与 CI 配置
- 05敏感变更需人工确认
适用场景
- 01配置修复前审查项目
- 02在克隆中验证知识标识
- 03检查 CI 覆盖与待办关闭流程
- 04发现 Orca 能力或凭据缺口
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ shkarupa-alex/ meta-o --skill mo-setup安装后在 Claude Code 中输入/mo-setup确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/ci/github-actions.ymlgitlab-ci.ymlevals/cases.jsonlicenses/character-entities-LICENSE.txtdecode-named-character-reference-LICENSE.txtjs-yaml-LICENSE.txtmdast-util-from-markdown-LICENSE.txtmdast-util-to-string-LICENSE.txtmicromark-core-commonmark-LICENSE.txtmicromark-factory-destination-LICENSE.txtmicromark-factory-label-LICENSE.txtmicromark-factory-space-LICENSE.txtmicromark-factory-title-LICENSE.txtmicromark-factory-whitespace-LICENSE.txtmicromark-LICENSE.txtmicromark-util-character-LICENSE.txtmicromark-util-chunked-LICENSE.txtmicromark-util-classify-character-LICENSE.txtmicromark-util-combine-extensions-LICENSE.txtmicromark-util-decode-numeric-character-reference-LICENSE.txtmicromark-util-decode-string-LICENSE.txtmicromark-util-encode-LICENSE.txtmicromark-util-html-tag-name-LICENSE.txtmicromark-util-normalize-identifier-LICENSE.txtmicromark-util-resolve-all-LICENSE.txtmicromark-util-sanitize-uri-LICENSE.txtmicromark-util-subtokenize-LICENSE.txtunist-util-stringify-position-LICENSE.txtreferences/backend-contract.mdissue-routing.md详细介绍
为 Meta-O 设置项目
仅当用户提到 mo-setup 时才开始;一般性的环境或工具问题不会触发设置变更。
完整阅读项目设置契约、 后端契约、 方法论反馈、 已确认外部工作的路由和 用途与架构契约。 对于 Python 项目,阅读Python QC 配置;对于 JavaScript/TypeScript 项目,阅读 TypeScript QC 配置。混合项目则两者都要阅读。
检查实质内容:业务/架构标识符、术语表、README、内容逐字节相同的 Agent 契约、临时功能待办事项、验收/E2E、用途、成熟语言门禁和一个确定性且不修改内容的汇总 QC。对于已确认的行为缺陷,要求提供最小回归测试;对于涉及所有权/并发/信任/安全/兼容性/事务/资源生命周期的重大修复,要求提供不变量注释。 在普通目标项目中,不要在没有明确使用方的情况下创建后端夹具文档。
先使用随附的
scripts/mo-knowledge-layer.mjs --candidate <HEAD sha>读取知识层,并逐字报告其输出:从未启用该层的项目会返回 Knowledge-Layer: state=not_enabled reason=never_enabled;曾启用该层但丢失某项信号的项目会返回 Knowledge-Layer: state=needs_attention,并附上该工具给出的原因。
是否启用知识层由用户决定:根据用户的答复,在 AGENTS.md 中单独一行写入 Knowledge-Layer: enabled 或 Knowledge-Layer: disabled,绝不能替他们做决定。只有在移除闭合命令、问题点文档和历史记录后,disabled 才有效。
找到项目文档中说明的待办事项路径和闭合命令,并确保声明它们的那一行包含字面量 MO-BACKLOG/1:知识层工具通过该字面量查找命令。
在一次性夹具中验证 MO-BACKLOG/1:已提交对象的字节级一致性、空列表、非空列表、带类型的未知项、声明路径有未提交更改、无关文件有未提交更改、格式错误的 UTF-8/架构/模式,以及不修改内容。要求项目契约包含 G0/GC/G1/G2。常规 QC 应测试读取器/架构,但不得断言当前分支为空。
阅读知识标识符历史契约,并将当前树的一致性检查与历史检查分开进行。使用随附的 scripts/mo-knowledge.mjs check 和项目自身的声明检查当前树——包括业务文档、架构目录、每份已声明文档和一方根目录,以及精确的排除项——其 MO-KNOWLEDGE/1 status=… 表示 current_tree;项目无需为这项可移植核心功能自行实现检查器。绝不猜测:从二级标题中包含
Knowledge id history 的章节获取已声明阶段;该章节必须恰好包含一条带围栏的单行命令、恰好一行指定权威 QC 命令,以及恰好一条 history_cutoff_sha 记录。使用 Markdown AST 解析。任何数量不符合要求的情况都应返回 history=unknown 和 cutoff=none。同一契约必须指出标识符所在位置:业务文档,以及该阶段读取的架构目录。未命名、含糊不清或相互矛盾的位置都应返回 history=unknown cutoff=none,并且完全不写入任何夹具——基于猜测位置构建的夹具会为无人检查的文档背书,或随机修改克隆。
必须通过阶段自身的行为证明该阶段,而非通过项目的完整 QC;且只能在一次性克隆中验证:在一次性 TMPDIR 下执行 git clone --no-hardlinks --no-local <path> <tmp>,不联网。绝不以写入方式打开候选工作树。整个探测的预算为 600 s,单次阶段运行的预算为 120 s;超出任一预算都记为 unknown,并注明耗尽的预算,绝不能记为 gate_missing。该阶段必须属于已声明的 QC 命令——要么在命令中原样出现,要么由同一行指定为其阶段,且存在于该行所指向的已跟踪运行器定义中;否则记为 gate_missing:不在权威检查中的阶段,就是无人运行的阶段。在干净克隆中运行基线若为红色,则记为 gate_failing,并停止探测。
接着,仅在克隆中创建两个夹具,只改动已声明的位置,且只改动 AST 实际在这些位置找到的定义。删除一个标识符定义,并在不添加尾注的情况下提交:该阶段必须以非零状态退出,并打印类型化标记,可以是 MO-KNOWLEDGE-HISTORY/1 status=violations,也可以是项目文档规定的等效标记;若退出状态为零或未打印标记,则记为 gate_missing。执行 git reset --hard 和 git clean -xdff 重置克隆,然后修改一个字面量,并添加正确的尾注及匹配的 knowledge_id_change 记录:该阶段必须通过;若失败,则记为 gate_failing。只有严格性而无容错,或只有容错而无严格性,都只能证明一半。
务必在 finally 中删除克隆;其路径仅限机器本地使用,绝不报告。
报告一条记录,其中 qc 为 JSON 或 none,且不得包含本地路径:
Knowledge-IDs/1 current_tree=<ok|violations|unknown> history=<gate_present|gate_missing|gate_failing|unknown> stale=<yes|no|unknown> qc=<json|none> cutoff=<sha|none>
通过计算哈希来判断 stale,而非相信版本字符串:按文档规定的规则计算你发布的捆绑包的哈希,并与副本最后一行 MO-KNOWLEDGE-HISTORY-SOURCE 注释中的哈希比较。相同则为 stale=no;不同则为 stale=yes,并在报告中写出两个 <semver> 值;该行缺失、重复或无法解析则为 stale=unknown,但供应方项目本身除外——其 package.json 中的包名与此捆绑包的来源包名相同;在该项目中,阶段运行的是构建该捆绑包所依据的源代码,记录为 stale=no。版本仅用于向人解释差异,绝不能据此判定。
按内容查找命令与易踩坑文档,而不仅限于 docs/papercut.md,并报告 Papercut/1 path=<json|none> linked=<yes|no>,其中 linked 表示 AGENTS.md 实际链接到了该文档。层辅助程序可通过路径 docs/papercut.md 或关联文件名中包含 papercut 来识别该文档;若文档名称为其他名称,则必须在写入标记的同一人类答复中,通过 AGENTS.md 中的 Knowledge-Layer-Papercut: <path> 行声明,否则辅助程序会报告部分集合。可接受的修复须以 命令与易踩坑模板 为起点。
已接受的修复会将三个随附的套件副本复制到项目中,每个副本都带有自己的
tools/licenses/,此后三者都属于该项目。
scripts/mo-knowledge.mjs 放到 tools/mo-knowledge.mjs,QC 阶段会使用该项目自己的声明调用其 check。scripts/mo-backlog.mjs
放到 tools/mo-backlog.mjs,调用它的闭环命令必须指定该项目自己的 --path、--title、--open-heading、标题与开放部分之间每个段落各一个 --intro(按顺序),以及每个 --entry-field;标题和每个段落都必须是渲染后的文本,不带 Markdown 标记,并且空白字符已折叠:缺少完整架构时,检查器会用该项目的俄语措辞检查外部笔记本,而部分架构则属于调用错误。scripts/mo-knowledge-history.mjs 放到
tools/mo-knowledge-history.mjs,并保留其版本行;调用它的阶段会将该项目自己的 QC 与该项目自己的截止点结合起来,而 AGENTS.md 会增加声明部分以及包含动词 remove|reuse|editorial 的尾部语法。绝不要复制其他项目的边界或提交 ID:外部截止点会恰好豁免目标项目需要检查的历史。不要提出任何命名了此修复未创建路径的 CI 作业。
分别通过 git check-ignore -v --no-index 检查 .orca/ 和 spec/;只有匹配项来自已跟踪的仓库忽略文件,且已通过 git ls-files --error-unmatch 证明时,才接受该匹配。另行要求 git ls-files -- .orca/ spec/ 的结果为空:忽略匹配绝不能证明已经编入索引的私有工作区字节不存在。
解析一个绝对路径的 Orca 二进制文件。通过 orca skills list/get --json 要求存在非空且版本匹配的捆绑 orchestration 和 orca-cli 指南;绝不安装指南副本。分别证明原生状态/项目身份、提供商身份验证、账户新鲜度、所选运行环境的启动、普通提示与信任 UI/Shell、稳定标题功能、无沙箱状态的唯一所有者,以及受支持的阻塞等待时长。
将 orca/orca-cli 与上游的 orchestration 配套组件分开检查。还要检查成熟的 jq 和 flock 依赖项。
读取 ProjectRegistrationSet/1 和 OwnedResourceSet/1。没有项目的文件夹工作区,若不存在现有的同项目隔离路径,即属于设置缺口。绝不要将临时路径注册为评审变通方案。任何项目/仓库注册或个人信任/状态更改都需要单独的人类确认;用户在本次调用中指定的项目根目录,以及本次运行自己的资源,已经构成该确认。
实时探测指定的项目根目录,并报告一行:
Harness-Trust/1 harness=claude path=<json> state=<trusted|accepted|needs_human|unknown> screen_version=<id>
只有满足全部三个所有权条件时才报告 accepted:终端由本次运行创建并记录在 OwnedResourceSet/1 中,对话框中路径的真实路径与该终端工作树的真实路径一致,并且该工作树是本次运行的资源或用户指定的根目录。确认对话框意味着对该文件夹中的内容作出回应,因此缺少任何条件都应报告 needs_human 并附上操作步骤——打开标签页 <title> 并选择 Yes, I trust this folder——绝不能重试。
以只读方式检查当前托管/CI 设置。仅使用 js-yaml 解析 GitHub Actions 或 GitLab CI,并遵循字面指定的已跟踪本地 include/可复用工作流。返回一条 CI-Coverage/1 记录,包含 provider、repository、entrypoint、resolved graph、job/step、events、required policy、outcome、unresolved,以及 history=<full|shallow|unknown> 和 backlog_job=<yes|no|unknown>:浅克隆会导致历史阶段静默跳过,而闭环需要一个与普通 QC 分开的作业。结果为 covered|config_present|no_ci_surface|unknown;动态/远程构造和不可读取的设置不能判定为 covered。与 assets/ci/ 中随附的示例进行比较,并展示精确的拟议 YAML 补丁,但未经单独请求,绝不更改已跟踪的 CI 或服务器保护设置。
如果接受受跟踪的修复,请基于当前的 develop 创建独立的 feature/meta-o-setup 分支;绝不要把设置修复混入当前功能分支。保留无关工作。分别报告每个缺失的控制项、配套项、能力、凭据和策略,并为每项提供一个由人工执行的可操作后续步骤:给出确切的安装、登录、信任或配置命令,且其中不得包含任何机密值。绝不要索取或收集凭据本身。
Meta-O 调用
- 无