
我的判断是:不是同一回事,但边界不在复杂度。
这有点像在问:一个库里已经有线程池、重试、缓存、调度器,它还算库吗?
多数情况下,算。
前提是,它仍然是被某个运行时主体调用的东西。复杂 Skill 和微型 Agent 的区别,不看里面有没有 Loop,也不看它会不会拆任务、调 Sub-agent、做验证重试。
我更关心四件事:目标解释权、计划权、权威状态、责任边界。
先限定一下范围。这里说的 Skill,不是所有厂商文档里叫 Skill 的东西,而是“被某个 Agent 或运行时加载、调用的能力封装”。有些平台会把 workflow、插件、触发器也叫 Skill,那是命名习惯,不是我这里讨论的边界。
一、先别按复杂度分
在讨论 MCP、Skills、Agent 工具链时,常见误解是:Skill 很简单,Agent 很复杂。
这个分法不稳。
Skill 完全可以很复杂。它可以拆任务、调用多个子能力、失败重试,甚至内部放一个 Master-agent 做调度。做到这一步,它确实有很强的 agentic 味道。
但“像 Agent”不等于“是 Agent”。
数据库驱动内部有连接池、健康检查和自动重连,它不会因此变成一个独立应用。它还是被应用程序加载的库。
Skill 也是这样。
二、Skill 的本质是能力封装
我更愿意把 Skill 看成一种“可复用能力包”。
它回答的问题是:当一个 Agent 要完成某类任务时,怎么把知识、步骤、约束和工具调用方式打包给它?
比如一个“代码评审 Skill”,里面可以有检查清单、风险分级、自动重试、多个子检查器。它很复杂。但如果它只是被 IDE 里的主 Agent 点一下调用,跑完给出评审结果,那它仍然是 Skill。
它的聪明服务于调用者。
它通常不决定“为什么现在做这件事”,也不拥有最终验收标准。失败之后,是调用它的主体决定重试、换策略,还是放弃。
三、Agent 的本质是运行时主体
Agent 不是“更复杂的 Skill”。
它更像一个拥有运行边界的执行主体。专业一点说,它应该能作为一个独立 run 被调度、观测、取消、重试和归因。
几个判断点会更落地:
- 目标解释权:它不是只执行外部写死的动作,而是要把目标翻译成步骤。
- 计划权:它能在约束内决定先做什么、后做什么,用什么工具。
- 权威状态:不只是写缓存或中间文件,而是拥有这次 run 的进度、失败历史和恢复语义。
- 后续策略责任:出错后,是它进入自己的重试/降级/求助流程,而不是只把错误码丢回调用者。
- 权限与审计边界:它有可独立审计的工具权限、资源范围和执行日志,不一定长期持有权限,但边界清楚。
这里要小心一个坑:状态“物理上存在哪”不是重点。Skill 也可以写缓存,Agent 的状态也可以存在外部数据库里。关键是:谁解释这份状态,谁决定下一步怎么恢复。
四、内含 Master-agent 的 Skill,算什么?
这是最容易混淆的地方。
如果一个 Skill 里已经包含 Master-agent 任务拆解、Sub-agent 调度、执行、验证、重试,那它在实现上确实很像一个微型 Agent 系统。
我会叫它:agentic skill,或者“带自治循环的复合 Skill”。
但外层身份要看它怎么被系统使用。
如果使用方式是:主 Agent 决定调用它,它在一次调用范围内执行完整 Loop,返回结果,主 Agent 验收并继续下一步。那外层仍然是 Skill。
注意,是“外层”。
一个 Skill 可以封装 Agent 组件。里面的 Master-agent 在实现层面可以是 Agent,但这个包被系统当作一次能力调用来管理时,包的身份仍然是 Skill。
换个例子更直观。
同一套代码评审能力,如果作为 IDE 命令被点击一次,读当前 diff,输出建议,它是 Skill。若它变成一个常驻 Review Bot,自己接收队列任务,维护失败历史,决定何时重跑,能被平台单独暂停、恢复、审计,那它就更像 Agent。
代码可能差不多。
系统语义变了。
五、我会怎么判断
我现在不会问“它能不能调用完就结束”。这个问题不够准。一次性运行的 Agent 也可能完成任务后退出。
我会换成这几个问题:
第一,它只是完成外部定义好的能力动作,还是要自己解释目标?
前者更像 Skill,后者更像 Agent。
第二,它有没有计划权?
如果步骤基本由 Skill 定义写死,只是在内部稳定执行,那是复合能力。若它能根据上下文重排步骤、换工具、改变策略,就开始接近 Agent。
第三,谁拥有权威状态和恢复语义?
缓存、日志、中间产物不算。真正要看的是:失败之后,谁知道现在跑到哪一步,谁决定从哪里恢复。
第四,错误由谁解释?
Skill 错误通常由调用者解释和处置。Agent 错误会进入它自己的运行状态,触发重试、降级、求助,或交给上级调度。
第五,它有没有独立审计边界?
不是长期持有什么权限,而是它的工具范围、资源边界、日志和责任归属能不能被单独看清。
这几个问题,比争“有没有 Loop”更有用。
六、别把中间形态都叫 Agent
还有个容易被忽略的点:Skill 和 Agent 之间不是只有一条线。
工程里有很多中间形态。

| 形态 | 更适合叫什么 | 关键特征 |
|---|---|---|
| 一次性能力复用 | Skill | 外部主体调用,完成一个能力动作 |
| 多步骤但目标固定 | Compound Skill | 内部有编排和重试,但验收来自外部 |
| 固定 DAG / 流程编排 | Workflow | 有状态流转,但策略基本预定义 |
| 后台批处理 | Job / Service | 独立运行,但不一定有自主决策 |
| 独立目标 + 计划权 + 权威状态 + 审计边界 | Agent | 能作为运行时主体被调度和归因 |
这张表比“是不是复杂”更实用。
如果你把复杂 Skill 当 Agent 管,系统会变重:多一层调度,多一层状态同步,多一层观测成本。
反过来,把真正的 Agent 塞进 Skill 里,风险也不小。状态藏在内部,权限边界说不清,失败后没人知道该重试哪一步。
工程上最怕这种灰区。
所以我的结论是:
复杂 Skill 和微型 Agent 可以在机制上高度相似,但设计哲学不同。Skill 是能力的模块化,Agent 是责任主体的模块化。
前者解决“怎么把一类任务做得更可靠”。
后者解决“谁来独立承担一段任务”。
如果非要压成一句话:别先争名字,先画清运行边界。