> 即插即用 · 核心锁定 · 零配置
每个 Skill 可在 SKILL.md frontmatter 中声明 level:
---
name: my-skill
level: core # core | protected | dynamic(默认 dynamic)
---
| 级别 | 标识 | 自动加载器行为 | 适用场景 |
|---|---|---|---|
| ------ | ------ | --------------- | --------- |
| 🔒 core | core | 完全跳过,不触碰 | 内存管理、行为审计、安全监控 |
| 🛡️ protected | protected | 不自动卸载,加载需显式确认 | 心跳机制、风控、proactive-agent |
| 🔄 dynamic | dynamic | 自由加载/卸载 | 天气、股票分析、文案生成等 |
未声明 level 的 Skill 默认为 dynamic。
即使 Skill 未声明 level,以下类型的 Skill 始终视为 core:
memory 的 Skill(如 memory-distiller)audit 或 security 的 Skillproactive 的 Skill此白名单可通过配置文件覆盖。
按 OpenClaw 标准目录结构扫描,不硬编码任何路径:
# 优先级从高到低:
L1: {workspace}/.agents/skills/*/SKILL.md # Agent 专属
L2: ~/.agents/skills/*/SKILL.md # 全局共享
L3: {openclaw_install}/skills/*/SKILL.md # OpenClaw 内置
L4: {openclaw_install}/extensions/*/skills/*/SKILL.md # 扩展 Skill
路径解析规则:
{workspace} = 当前工作目录(自动检测)~ = 用户主目录(跨平台兼容){openclaw_install} = OpenClaw 安装目录(通过 npm root -g 或环境变量检测)读取每个 SKILL.md 的 frontmatter:
name - Skill 名称description - 功能描述(用于意图匹配)level - 保护等级(默认 dynamic)version - 版本号(可选)只解析 frontmatter,不读取全文(节省 token)。
可加载列表 = 所有 Skill - core Skill - protected Skill(除非显式请求)
根据用户消息,从可加载列表中匹配:
匹配策略(优先级从高到低):
| 优先级 | 策略 | 说明 |
|---|---|---|
| -------- | ------ | ------ |
| P1 | 触发词匹配 | 消息包含 Skill description 中的触发词 |
| P2 | 语义匹配 | 消息意图与 description 语义相近 |
| P3 | 领域匹配 | 消息领域与 Skill 领域一致 |
冲突解决:
找到匹配 Skill 后:
SKILL.mdscripts/ 或 references/ 下的资源如果任务不属于当前 Agent 的职责范围,尝试动态路由给其他 Agent:
路由流程:
agents_list 获取当前可用 Agent 列表SOUL.md 或 IDENTITY.md 判断职责匹配度sessions_send 转发任务路由失败处理:
以下情况视为"无法发现其他 Agent":
agents_list 返回空列表(单 Agent 部署)agents_list 报错(服务异常)此时应直接回复用户,告知路由失败:
这个任务更适合 [目标 Agent 类型,如:A股量化专家/P哥] 处理。
但当前环境无法自动路由:[具体原因]
- 原因 A:当前是单 Agent 部署,未发现其他 Agent
- 原因 B:其他 Agent 未配置或不在线
- 原因 C:无法读取其他 Agent 的职责描述
**你可以:**
1. 直接 @[目标 Agent 名] 联系他
2. 让我在当前 Agent 尝试处理(可能不够专业)
3. 检查其他 Agent 是否已启动并配置正确
为什么不静默 fallback?
文件:auto-skill-loader.config.yaml
位置:Skill 目录内 或 workspace 根目录
# auto-skill-loader.config.yaml
# 所有字段可选,均有合理默认值
# 额外标记为 core 的 Skill(名称列表)
coreSkills: []
# - my-custom-audit-skill
# - my-critical-skill
# 排除不参与自动加载的 Skill(名称列表)
skipSkills: []
# - deprecated-skill
# 是否启用 Agent 路由(默认 true)
enableRouting: true
# 匹配模式:strict(仅触发词)| normal(触发词+语义)| fuzzy(全部)
matchMode: normal
# 日志级别:silent | info | debug
logLevel: info
不创建此文件 = 使用全部默认值 = 直接能用。
用户:北京今天天气怎么样?
→ 匹配 weather skill(dynamic)
→ 自动加载 weather/SKILL.md
→ 按其指导获取天气
用户:关闭记忆管理
→ 检测到 memory-distiller 是 core 级
→ 拒绝操作,提示:此 Skill 为核心级,不可自动卸载
用户:帮我写一首诗
→ 无 Skill 匹配
→ 正常回复(不加载任何 Skill)
预览匹配结果,不实际加载:
在消息中包含 --dry-run 或在配置中设置:
dryRun: true # 全局 dry run
输出格式:
🔍 Auto Skill Loader - Dry Run
任务: "北京今天天气怎么样"
匹配: weather (dynamic, L3, score: 0.95)
候选: [weather, summarize]
操作: 将加载 weather/SKILL.md
| 环境 | 支持 |
|---|---|
| ------ | ------ |
| Windows | ✅ |
| macOS | ✅ |
| Linux | ✅ |
| 单 Agent | ✅ |
| 多 Agent | ✅ |
| ClawHub 安装 | ✅ |
| 手动安装 | ✅ |
共 1 个版本