技术

把 Agent Skill 接到 Omnilude 里

AAnonymous
10分钟阅读

引言

之前我写过一篇介绍 Skill 与 Agent Workflow 的文章。

读那篇文章的时候,我一直在想,如果把技能接到 AI 聊天里,应该会非常有用。

这篇文章就是从这个想法开始的实现记录。我想把 Skill 从 Claude Code、Codex 这样的工具里拿出来,让 Agent 在真实的工作流中调用它,看看会发生什么变化。如果这件事做得顺,也许配置没那么高的 LLM 也能一点点更接近 Jarvis。

用一句话解释 Skill

最简短的说法是,skill 就是 一个把特定任务的处理顺序和判断标准,重复地教给代理的工作包

Anthropic 公布的 skill 指南也把 skill 描述为一个以 SKILL.md 为中心、按需要附带 scriptsreferencesassets 的文件夹。真正重要的不是外形,而是原理。与其每次都把所有知识硬塞进 prompt,不如让代理只在需要的时候,按阶段打开 skill 本体和参考文件。

这一点比看上去更重要。通用代理很聪明,但一遇到重复任务就容易摇摆。即使在同一个仓库、同一个任务、同一个人的请求下,输出的语气、结构和遗漏点也可能不同。skill 就是用来减少这种波动的装置。

다이어그램 렌더링 중입니다.

我尤其看重三个原则。第一是 progressive disclosure,也就是只在必要时再打开更深的文档。第二是 composability,也就是一个 skill 不试图独自解决全部问题,而是与其他 skill 一起工作。第三是 portability,也就是不要把它绑死在某个界面或某个工具上。

我正在实现的 Skill 链

在我的本地仓库里,.codex/skills 下已经有 25 个 skill。文档生成、API 实现、后台 CRUD、SSE、故事流水线、翻译、评审、提交等重复性工作,都由它们分别负责。.agents/skills 里则放着同一套目录,以便在另一种 surface 上复用。

另外,我总是在提 Claude Code,却突然开始说 Codex,也是有原因的。最近在韩国,通过 Kakao 出现了一次接近 90% 折扣的 OpenAI Pro 活动。机会不错,所以我现在已经切到 Codex 了。

回到正题,在这些 skill 里,我最常用的主轴其实很清楚。prd-generator 接收需求并生成符合文档规则的 PRD,endpoint-implement-skill 则把从 Entity 到 Controller 的实现模式固定下来。需要时,frontend-task-handover 会继续生成前端交接文档,而 branch-review 会在最后重新检查回归与风险。

也就是说,我更常把 skill 看成一条 ,而不是单独的功能。

다이어그램 렌더링 중입니다.

实际上,CLAUDE.md 里已经写明了针对不同工作类型,优先应该连接哪些 skill。比如 API 开发走的是 prd-generator -> endpoint-implement-skill -> frontend-task-handover,后台开发走的是 prd-generator -> backoffice-crud-skill -> frontend-task-handover。到了这个阶段,skill 已经不太像一个辅助功能,而更像工作运行规则本身。

有意思的是,这篇文章本身也建立在同样的哲学上。我现在正在使用的 blog-post-writer skill,被设计成一次性对齐博客分类、reading time、tone、excerpt 长度、canonical URL、缩略图提示词,以及 import JSON schema。就连写作本身,也不再只是凭感觉,而是被打包进一种可重复的输出格式里。

技能与助手

当 skill 进入产品之后,它就不再能只靠 SKILL.md 来解释了。以 current-weather-checker 的详细蓝图为参照,真正的 skill 更接近一个运行时单元,它不仅包含说明文和参考文档,还绑定了可执行代码、元数据、网络策略和触发策略。所以现在我看待 skill 时,已经不只看文件夹结构,而是会一起看 存了什么执行了什么、以及 它如何连接到助手

技能结构总览

沿着 current-weather-checker 这份蓝图看下去,就会发现 skill 的实体比表面上更立体。屏幕上先看到的是名称和说明,但在背后还挂着 Instructions、Scripts、References、Assets、Metadata、Runtime Policy。正是因为有这套结构,某些 skill 才能只增强上下文,某些 skill 才能直接在 sandbox 中执行,还有某些 skill 能安全地控制外部网络访问。

다이어그램 렌더링 중입니다.

总结一下,skill 并不只是一个 prompt 文件,它更接近一个把 说明文本 + 执行资源 + 运行策略 绑在一起的定义对象。尤其对于 script skill 来说,networkPolicyallowedDomains 这样的执行策略会直接决定真实权限。只看 body,并不足以理解这个 skill 真正能做什么。这正是蓝图文档有价值的地方,因为它能一次性还原屏幕背后的结构。

助手联动总览

下一步真正重要的,不是 skill 本身,而是 谁拥有这个 skill、它在什么条件下被调起、以及被选中之后会沿着什么路径执行。在 Omnilude 这套结构里,skill 不是松散地挂在 agent 上,而是映射到 assistant 上,再由 orchestrator 读取 mapping 和 trigger 信息,决定实际的执行路径。可执行 skill 会流向 sandbox,一些仅用于补充上下文的 material 则会流向最终回答的 prompt。

다이어그램 렌더링 중입니다.

隔离执行环境

可执行 skill 的脚本并不会直接在 assistant 进程内部运行。AssistantSkillScriptExecutor 会通过 sandbox-bridge 把执行委托给独立的 sandbox pod,而脚本就在这个隔离环境里接收 stdin JSON 输入,并返回 stdout JSON 结果。这样的结构把助手本体和执行代码分开,同时也能用 networkPolicyallowedDomains 控制外部访问范围。

简单来说,assistant 负责决定 执行什么,sandbox 则是 安全处理执行的地方。随着 skill 越来越多,这种分离会越来越重要。它能隔离执行失败,更细粒度地拆分网络权限,也更容易在事后追踪哪个 script 是在什么策略下运行的。

从这个流程来看,skill 与其说是 assistant 的附属文档,不如说是 assistant 在需要时选择并执行的模块。所以 attached skill 越强,真正重要的就越不是 说明写得有多长,而是 mappingtriggerexecutionobservability 设计得有多清楚。最终,一个好的 skill 不是一篇写得漂亮的文档,而是一个能被助手稳定调用的结构化执行表面。

结尾

如果 2026 年 2 月 18 日那篇 workflow 文章讲的是 代理是如何流动的,那这篇文章讲的就是,如何把这条流动通过 skill 固定成一种稳定结构。

Skill 不是魔法按钮。但它依然是一个相当有力的工具,可以把个人和团队的重复工作、工作标准、参考上下文、输出格式与执行路径,收束成同一个单元。

下一次,我想带来一些更具体的实现与运维案例,继续讨论 skill 与 assistant 的组合,究竟能怎样提升真实的代理体验。