
OpenMetadata 第三方 Agent Skill 的 Vendoring 机制从 VENDORED.md 来源记录到规则分层与 CI 门禁【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata本文以 VENDORED.md 为切入点讲解 OpenMetadata 仓库如何把上游vercel-labs/agent-skills的第三方技能原样入库vendoring每个字段记录什么、为什么选择 vendored 而非npx skills add、维护者必须遵守哪些约定以及这些技能如何与自动加载的.claude/rules/规则和确定性的ui-checkstyle门禁形成三层分工。读完之后你能够独立维护这条 vendoring 链看懂来源记录、执行一次上游刷新、并判断一条 UI 约束应该写在 skill、rules 还是 checkstyle 里。为什么是 vendored把第三方技能原样放进仓库VENDORED.md 的核心决策只有一句话vendored rather than installed vianpx skills add—— 技能不是通过运行时安装获得而是逐字复制verbatim进仓库。这样做的直接收益在 skills/vendor/README.md 中写得很清楚Skills copied verbatim from external repositories, kept in-tree so every contributor and CI run has them with no install or network step.也就是说任何贡献者在任何 CI 环境拉下这份仓库就已经完整拥有这三个上游技能不需要执行安装命令、不依赖网络可达性也不存在本地装了一版、CI 是另一版的漂移。当前skills/vendor/目录下收录了三个技能全部来自同一个上游仓库vercel-labs/agent-skillsMIT 许可技能说明来自各技能自身的 SKILL.md 与目录结构react-best-practices规则最重的一个rules/下按 advanced / async / bundle / client / js / rendering / rerender / server 等分区存放了 70 余个单条规则文件如 rerender-functional-setstate.mdweb-design-guidelines本文主角UI 合规评审技能见下文composition-patternsReact 组件组合模式compound components、explicit variants、state 解耦等 8 条规则外加 AGENTS.md 汇总文档这三个技能与 OpenMetadata 自研的技能一起通过 skills/.claude-plugin/plugin.json 声明为openmetadata-skills插件v2.0.0的一部分可经claude plugin install skills/整体安装在仓库内开发则无需安装——.claude/settings.json 提供项目级 hooksskills/目录本身即按 Agent Skills 开放标准组织。VENDORED.md 记录了什么一张五字段的来源表以 skills/vendor/web-design-guidelines/VENDORED.md 原文为基准这份文件的正文就是一张五字段表格加两段维护说明字段本文件中的值它保证什么Upstreamvercel-labs/agent-skills上游仓库内容出处可回溯到具体项目Pathskills/web-design-guidelines在上游仓库中的确切子路径刷新时知道从哪抄Commit7c180d9044c9ae2b442b567aad4e42a28dd5ed62内容被精确钉死在上游某一个提交上而不是一个会变动的分支Vendored on2026-07-30入库时间戳与提交号一起构成完整的取货凭证LicenceMIT上游 README 声明上游仓库本身未附带 LICENSE 文件许可合规依据。注意原文特别标注了上游没有 LICENSE 文件这一事实许可信息以上游 README 的声明为准一个值得注意的细节三个技能目录下的 VENDORED.mdreact-best-practices、composition-patterns、web-design-guidelines内容几乎逐字相同——同一上游提交、同一入库日期。这说明该目录是整批从7c180d9一次性复制的每个子目录各留一份凭证使任何一个目录都能独立说明自己的来源而不依赖读者跨目录比对。许可合规的约束链路在 skills/vendor/README.md 中写明MIT permits redistribution inside this Apache-2.0 repository provided the attribution above is retained.即MIT 允许把代码重分发进本 Apache-2.0 仓库前提是保留上述归属信息VENDORED.md 本身。这就是为什么该文件虽然只有 15 行却不能随意删除或改写——它同时承担来源凭证和许可归属声明两个角色。三条不可违背的维护约定VENDORED.md 表格之后的两段文字定义了整个skills/vendor/的维护纪律这三条约定对三个技能同样生效1. 禁止编辑 vendored 文件。原文Do not edit these files— local changes are lost on the next refresh.因为刷新refresh的动作是从上游重新复制任何本地修改都会被下一次复制静默覆盖。这条约定把 vendored 目录变成了只读的上游快照。2. 仓库自身的约束写在.claude/rules/且优先级更高。原文Repo-specific guidance belongs in.claude/rules/, which auto-loads by path and takes precedence.这里涉及一个机制差异skill 只有在 Agent 主动调用/读取时才生效而.claude/rules/*.md按文件路径 glob 自动加载。从 skills/vendor/README.md 可以看到这个分层在仓库中是真实落地的——上游指导中承重的子集被提炼成了 .claude/rules/frontend-performance.md 和 .claude/rules/frontend-a11y.md两个文件的 frontmatter 中都声明了作用路径paths: openmetadata-ui/src/main/resources/ui/**/*.{ts,tsx}编辑匹配文件时规则自动注入无需任何人记得去读 vendored 技能。3. 刷新流程是换提交、改凭证。原文最后一句To refresh: re-copy from upstream at a newer commit and update the SHA and date above.即在上游选择一个更新的 commit把对应路径重新复制到本目录然后更新 VENDORED.md 中的 Commit 与 Vendored on 两个字段。凭证与内容必须同步更新否则来源记录与实际内容脱节。被 vendored 的 web-design-guidelines 技能本体一个运行时拉规则的薄指针理解 VENDORED.md 的价值需要先看它所登记的对象。skills/vendor/web-design-guidelines/SKILL.md 的 frontmatter 声明了技能的元信息name: web-design-guidelines description: Review UI code for Web Interface Guidelines compliance. Use when asked to review my UI, check accessibility, audit design, review UX, or check my site against best practices. metadata: author: vercel version: 1.0.0 argument-hint: file-or-pattern它的触发方式由 description 中的自然语言意图决定review my UI、check accessibility、audit design 等调用时接受一个文件或 pattern 参数。更关键的是它的工作流程这解释了为什么 vendored 目录里这个技能只有 SKILL.md 一个文件每次评审前先从上游拉取最新指南——技能明确要求 fetch 上游 guidelines 仓库的command.md原文以 raw 文件 URL 给出属运行时网络依赖读取用户指定的文件未指定则询问用拉取到的全部规则逐条检查以简洁的file:line格式输出发现项。这是一个技能逻辑被钉死、规则内容保持鲜活的设计vendored 快照固定的是评审流程与触发语义而具体规则集在每次调用时取上游最新版。这也意味着该技能是三个 vendored 技能中唯一保留运行时网络依赖的——vendored 解决的是技能本身离线可用不解决它内部引用的外部资源。三层分工skill 是辅助rules 是注入checkstyle 是门禁VENDORED.md 只描述了怎么进来而 skills/vendor/README.md 回答了更关键的进来之后是什么地位These areauthoring-time aids: they inform an agent while it writes code. They arenotthe gate. Enforcement is deterministic and lives inui-checkstyle— seedocs/ui-code-quality-gate.md. A skill only fires if an agent reads it, and a human reviewing by hand never will, which is precisely why the checks that matter are scripts rather than prose.这段论述给出了仓库内 UI 质量约束的三层模型也是维护 vendored 技能时判断一条约束该写在哪的依据层载体生效条件示例写作期辅助skills/vendor/*及自研技能Agent 主动读取才生效人工评审不会触发web-design-guidelines/SKILL.md自动加载规则.claude/rules/按路径 glob 匹配文件时自动注入无需调用.claude/rules/frontend-a11y.md 要求优先使用基于 react-aria-components 的openmetadata/ui-core-components并说明eslint-plugin-jsx-a11y以 error 级别启用 24 条规则确定性门禁ui-checkstyleCI 强制不通过则 PR 失败skills/ui-checkstyle/SKILL.md 描述的UI Checkstyleworkflow 对 PR 变更文件执行 ESLint Prettier organize-imports、许可证头检查、i18n 同步、app-docs 生成共六项检查任一步产生 diff 即失败这个分层的工程含义是vendored 技能的上游刷新风险被门禁兜底了。即使某个 vendored 技能被刷新后表述变化甚至某次刷新失败真正卡住 PR 的仍是确定性脚本docs/ui-code-quality-gate.md 记录了完整的门禁设计。反过来.claude/rules/中的规则是从上游指导中提炼出的承重子集所以它优先于 vendored 原文——原文VENDORED.md中 takes precedence 一句指的就是这个方向。CI 校验与插件装配vendored 内容如何被守护vendored 目录并非无人看守。从源码结构看仓库为skills/建立了两道守护CI lintskills/.github/workflows/lint-standards.yml 在修改skills/的 PR 上运行校验标准文档的 markdown lint、JSON 文件合法性以及 symlink 完整性skills/README.md 的 CI 一节描述了这条 workflow。插件清单与 hooksskills/.claude-plugin/plugin.json 将整套技能、agents 与 hooks/hooks.json 声明为openmetadata-skills插件插件的 SessionStart hook 会自动加载openmetadata-workflow元技能来路由任务PreToolUse hook 还会阻止跳过 pre-commit 校验。结合 skills/README.md 的安装说明完整的使用姿势是插件方式用claude plugin install skills/仓库内开发则零配置.claude/settings.json与.claude/rules/直接生效其他 Agent 工具Cursor、Codex、Copilot、Windsurf 等则直接把skills/目录加入工作区上下文——三种途径读到的 vendored 内容都来自同一份 git 跟踪的快照这正是vendored 而非安装要达到的最终状态。实操清单如何安全地维护这条 vendoring 链把 VENDORED.md 原文的约定与上述仓库事实合并维护者应遵循的操作序列是确认上游变更在上游仓库选定一个新的 commit记住完整 SHA。整目录重复制按 VENDORED.md 中的 Path 字段把上游该 commit 的对应目录内容重新复制到skills/vendor/skill/覆盖旧快照不要做增量合并以免遗留已删除的上游文件。同步更新凭证把该目录下 VENDORED.md 的 Commit 字段改为新 SHAVendored on 改为当日日期。同一批刷新应保持一致维持三个目录凭证同款的现状。保留归属声明不要删除或改写来源表格——它是 MIT 许可重分发条件attribution retained的落点skills/vendor/README.md。仓库特化需求不进 vendor任何 OpenMetadata 特有的约束一律写进 .claude/rules/依靠路径 glob 自动加载并压过 vendor 原文确定性的检查则交给ui-checkstyledocs/ui-code-quality-gate.md。提交后走 CI确保lint-standardsworkflow 通过确认 markdown/JSON/symlink 校验无告警。一句话总结VENDORED.md 看起来只有一张表格但它是 OpenMetadata 第三方技能入库契约的最小完整单元——提交号定内容、日期定批次、许可字段定合规、维护说明定边界而 skill 层辅助而非门禁的定位则由自动加载规则和确定性 CI 检查共同兜底。【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考