Snowflake CoCo 推出技能与插件目录,实现技能共享与治理
DataHot 速览
Snowflake 为旗下智能体 AI 助手 CoCo(原 Cortex Code)推出技能与插件共享预览功能,将本地 SKILL.md 技能转化为账户级、可治理、带版本的对象,底层由 Cortex Extension SQL 构造支撑。用户可通过链接共享技能、浏览他人共享的技能目录,管理员还能对优质技能进行认证并打上信任徽章。文章以实际 SQL 代码分步讲解了技能的编写、共享、发现与认证全生命周期。技能是无需写代码的 Markdown 操作手册,可让智能体执行成本报告对账、高管指标周报等可重复任务。
为什么值得关注:对数据从业者而言,这展示了 Data Agent 能力的工程化治理路径:将一次性提示词沉淀为可版本化、可认证、可分发的一等数据对象,是企业级 Agent 落地与复用的关键机制。
本文目录 8 节
译文
AI 逐段翻译Snowflake 全新 Skills & Plugins Catalog 演练

引言
如果你曾经在 CoCo(Snowflake 的智能体式 AI 助手,此前名为 Cortex Code)中花过一些时间,你很可能已经写过一两个 SKILL.md —— 一份可复用的小型操作手册,教你的智能体如何完成某项特定且可重复的工作,比如核对 Snowflake 成本报告,或构建每周高管指标摘要。但维护这些技能并与更广泛的团队共享一直很麻烦 —— 直到现在。
Snowflake 刚刚通过 技能与插件共享 弥补了这一空白 —— 这是一项预览功能,可将本地技能转变为账户范围内、可治理、带版本的对象,并由一个名为 Cortex Extension 的一等 SQL 构造提供支持。你可以通过链接分享它,浏览其他人共享技能的目录,而且 —— 如果你有管理员权限 —— 可以认证其中的优质技能,使其显示信任徽章。
本文解释整个生命周期:如何编写技能、共享它、发现它、认证它 —— 并附上每一步代表你运行的 SQL 代码,以便你理解实际发生了什么(如果你愿意,也可以自己编写脚本)。

首先,什么是技能(以及什么是插件)?
一个 技能 是一份 Markdown 操作手册 —— 一个 SKILL.md 文件,开头是一段简短的头信息(名称、描述、让 CoCo 加载它的触发条件),然后是一个正文,逐步引导智能体完成一个工作流。不需要编写代码,不过技能可以指向它希望 CoCo 运行的脚本。
CoCo 自带大量 内置技能,涵盖数据治理审计、动态表故障排查、成本智能或设置 Cortex Agent 等内容。这些由 Snowflake 编写和维护,随产品一起版本化,每个用户都会自动获得。用户创建的技能 才是本文真正要讨论的内容:在有人编写之前并不存在于任何地方的技能。与内置技能不同,它们需要一种分发方式。
那么,什么样的情况适合创建用户创建的技能?以下是一些经验法则:
- 你已经做过不止两次。 诊断信用额度激增、排查卡住的动态表管道、核对月度消耗报告 —— 任何足够可重复、以至于你已经在脑中把它脚本化的事情。
- 这些步骤需要判断,而不仅仅是一个查询。 如果它 纯粹 是一个固定的 SQL 查询,那么保存的工作表或视图就能胜任。当存在分支时 —— “如果 X,接下来检查 Y;如果那没问题,再看看 Z” —— 这种你原本需要向新员工解释的事情,技能才值得存在。
- 它编码了部落知识。 你们团队使用的命名约定、哪个仪表板是事实来源、记在便利贴上的业务规则 —— 这些目前存在于某个人脑中或某个再也找不到的 Slack 线程里的东西。
插件 是新的 Skills & Plugins Catalog 支持的另一种产物类型。插件是一个包含隐藏的 .cortex-plugin/plugin.json 清单的目录,可以将 多个 技能与其他 CoCo 扩展点 —— 钩子、MCP 服务器和自定义智能体 —— 打包成一个带版本、可安装的单元。当你不仅仅是教智能体一个工作流,而是要打包更广泛的能力时,请考虑创建插件而不是单个技能:若干相关技能,以及生命周期自动化(例如钩子),或通过 MCP 服务器提供的外部工具和数据连接。
心智模型:三个层次
在我们开始演练之前,先区分三件容易混淆的事情会有所帮助:
- 本地技能 —— 只是一个包含 SKILL.md 的文件夹。它存在于你放置它的任何地方:项目目录、你的主目录、Snowflake 工作区。
- Cortex Extension —— 当你共享时创建的 Snowflake 对象。每个共享的技能或插件对应一个扩展。它具有版本、RBAC 授权和一个可发现性标志。
- 认证 —— 仅管理员可对扩展的 特定版本 加盖的印记,表示“这个才是受信任的”。与“已共享”不同。共享是自助式的;认证是治理。

下面的所有内容都对应这三个层次之一。
第 1 步 —— 编写技能
你已经完成了弄清楚某件复杂事情的工作。假设你在 Snowsight 中为此使用了 CoCo,并且你的来回交流都在 CoCo 聊天中。你希望 CoCo 下次在最少指导下运行相同的步骤,所以你让它创建一个技能 —— 通过口头或点击 Create Skill。

CoCo 调用其技能创建工作流并构建出一个 SKILL.md 文件:

技能的位置决定了其作用范围:
- 在 Snowsight 中,CoCo 会将其直接写入 Snowflake 工作区(.snowflake/cortex/skills/<name>/SKILL.md)。
- 在 CoCo Desktop 或 CoCo CLI 中,项目根目录下的 .cortex/skills/<name>/(类似 .git)将技能的作用范围限定在该项目;$HOME/.snowflake/cortex/skills/<name>/ 则使其在你机器上的每个项目中都可用。
无论位置如何,此时该技能 100% 是本地的。它并不作为任何类型的对象存在于 Snowflake 中 —— 它只是 CoCo 从磁盘或工作区暂存区读取的一个文件。
第 2 步 —— 共享它(创建 Cortex Extension)
以前,要让技能可供他人使用需要各种变通方法。现在,你可以提示 CoCo“共享此技能”,然后会发生以下情况:
1. CoCo 在你的个人数据库中寻找(或创建)一个用于共享技能的家。 每个用户都有一个隐式的 USER$<username> 数据库。你第一次共享技能时,CoCo 会在其中配置一个 SKILL_SHARING schema,并授予 PUBLIC 使用权限,以便该对象可被访问:
CREATE SCHEMA IF NOT EXISTS "USER$DARIA"."SKILL_SHARING"
COMMENT = $$Skill catalog schema auto-created by system$$;
GRANT USAGE ON DATABASE "USER$DARIA" TO ROLE PUBLIC;
GRANT USAGE ON SCHEMA "USER$DARIA"."SKILL_SHARING" TO ROLE PUBLIC;2. CoCo 暂存技能文件并创建一个 Cortex Extension。 它创建一个临时暂存区,上传你的 SKILL.md,然后直接从该暂存区创建扩展 —— 以其 frontmatter 中的 name 字段命名(warehouse-cost-triage → WAREHOUSE_COST_TRIAGE)。临时暂存区随后立即被清理。
CREATE OR REPLACE TEMPORARY STAGE
"USER$DARIA"."SKILL_SHARING"."COCO_SYNC_1788898908467";
PUT file:///workspace/.snowflake/cortex/skills/warehouse-cost-triage/SKILL.md
@"USER$DARIA"."SKILL_SHARING"."COCO_SYNC_1788898908467"/skills/warehouse-cost-triage/
AUTO_COMPRESS = FALSE OVERWRITE = TRUE;
CREATE CORTEX EXTENSION "USER$DARIA"."SKILL_SHARING"."WAREHOUSE_COST_TRIAGE"
FROM @"USER$DARIA"."SKILL_SHARING"."COCO_SYNC_1788898908467"
VERSION V1
COMMENT = 'Diagnose a spike in warehouse credit spend...';
DROP STAGE IF EXISTS
"USER$DARIA"."SKILL_SHARING"."COCO_SYNC_1788898908467";当你之后再次共享(推送更新后的 SKILL.md)时,CoCo 会重新运行共享工作流,上传新文件并自动递增版本 —— 产生 VERSION$2、VERSION$3,依此类推。
3. CoCo 授予读取权限,以便他人可以安装它:
GRANT READ ON CORTEX EXTENSION
"USER$DARIA"."SKILL_SHARING"."WAREHOUSE_COST_TRIAGE"
TO ROLE "PUBLIC";向 PUBLIC 授予 READ 权限,使该技能可被账户中的所有人安装。该扩展默认 DISCOVERABLE = TRUE,意味着它也会在用户浏览目录时出现。如果你想要一种"仅共享链接"的体验(可安装但不可浏览),你需要显式地将 DISCOVERABLE 设为 FALSE。
第 3 步 — 发现它
从这里开始,有两条发现路径:
- 获取并向用户共享一个链接。 DESCRIBE CORTEX EXTENSION 会返回一个 snow://skill_catalog/... URI,你可以与团队成员共享。
snow://skill_catalog/USER$DARIA.SKILL_SHARING.WAREHOUSE_COST_TRIAGE- 浏览目录。 在 Snowsight 中,即 Horizon Catalog 下的 Catalog → Skills & Plugins。

点击技能旁的 USE 按钮会将其添加到聊天中,以便你运行它:

在 CoCo Desktop 中,你可以通过前往 Settings → + 菜单 → Add from Skills Catalog,从链接安装共享的技能。

第 4 步 — 认证
认证将一个技能从"团队中某人上传的"转变为"这是官方认可的版本"。已认证的技能在浏览目录的任何地方都会获得一个绿色徽章。你需要 accountadmin 权限才能认证一个技能。
在 Snowsight 中,进入 Horizon catalog → Skills and Plugins,选择一个技能并点击 Add certification。同一页面还提供其他治理操作 — RBAC、所有权转移、删除 — 全部由 ALTER CORTEX EXTENSION 原语支持。

当管理员认证一个共享技能时,会发生两件事:
- 治理提升。Snowflake 将 Cortex Extension 从作者的个人数据库复制到一个专用的、集中治理的数据库中。首次执行任何治理操作时,管理员会被提示选择该数据库。作者在其 SKILL_SHARING schema 中的原始副本保持不变 — 这是复制,不是移动。
CREATE CORTEX EXTENSION governed_db.governed_schema.WAREHOUSE_COST_TRIAGE
FROM 'snow://skill_catalog/USER$DARIA.SKILL_SHARING.WAREHOUSE_COST_TRIAGE';
GRANT READ ON CORTEX EXTENSION governed_db.governed_schema.WAREHOUSE_COST_TRIAGE
TO ROLE PUBLIC;2. 版本范围的认证。管理员将某个特定版本标记为已认证:
ALTER CORTEX EXTENSION governed_db.governed_schema.WAREHOUSE_COST_TRIAGE
VERSION VERSION$1
SET TAG SNOWFLAKE.CORE.CERTIFICATION_STATUS = 'CERTIFIED';认证的范围是一个版本,而不是整个扩展。一个不带版本的 snow://skill_catalog/... 链接会解析到最新的 已认证 版本(如果存在的话),并且只有在没有任何版本被认证时才回退到最新版本。因此,当作者推送 VERSION$2 和 VERSION$3 时,对消费者而言没有任何变化 — 已认证的链接仍然提供 VERSION$1,直到管理员审查并认证更新的版本。
这才是这里真正的转变。认证不是一个一次性的标签 — 它是一项关于哪个版本是生产版本的持续决策,独立于作者正在积极迭代的内容而做出。
几点实用说明 如果你计划将其推广到团队:
- 提前设置好受治理的数据库 ,已认证的技能将存放在那里,而不是让第一次认证操作临时提示你去选择一个。
- 安全扫描尚不可用。 这是一项预览功能,针对共享技能和插件的内容扫描尚不可用。认证是对 作者 的信任声明,而不是对 内容 的自动检查 — 请相应地审查你所认证的内容。
稍微拉远一点看,值得注意的是这个领域成熟得有多快。一年前,我们中很少有人知道技能是什么。现在它是一个受治理、有版本、有 RBAC 的 Snowflake 对象,拥有自己的认证工作流。随着我们越来越多的日常工作通过智能体运行,围绕这些智能体的工具 — 技能、插件、它们所在的目录 — 正在变成真正的基础设施,而不仅仅是一个便利层。对这一层的治理应该是一等业务,而不是事后补上的东西,就像访问控制对于任何其他生产系统一样。
在 Snowflake CoCo 中共享和治理技能 最初发表于 Snowflake Builders Blog: Data Engineers, App Developers, AI, & Data Science 在 Medium 上,人们通过高亮和回应这个故事来继续对话。
这篇内容对你有用吗?
反馈只用于改善内容筛选,不等同于收藏