206 lines
9.7 KiB
Markdown
206 lines
9.7 KiB
Markdown
# 1
|
||
|
||
我看到后台日志中有` [skills] Skipping skill path that resolves outside its configured root.`这样的警告信息。
|
||
这个原因是什么?
|
||
我昨天给Claude Code安装技能时,Claude Code顺便也装了一些链接的给到OpenClaw,但是OpenClaw用不了么?
|
||
|
||
这个怎么解决?在OpenClaw里重新装一遍么?
|
||
|
||
只需要回答我的问题,确定好问题和解决方案后,经过我确认再做操作。
|
||
|
||
|
||
|
||
这个警告的意思是:OpenClaw 在加载技能时,发现某个技能的路径指向了它允许的根目录之外的位置,所以跳过了它。
|
||
|
||
**原因分析:**
|
||
Claude Code 和 OpenClaw 有各自的技能目录配置。Claude Code 安装时把技能放到了它的目录,而链接指向的位置可能超出了 OpenClaw 配置的 `skills.root` 范围,所以 OpenClaw 拒绝加载。
|
||
|
||
**解决方案:**
|
||
不需要在 OpenClaw 里重新装一遍。问题出在路径配置上——只要把技能的链接/安装位置放到 OpenClaw 能找到的地方就行。
|
||
|
||
我先看一下你当前的技能目录结构,确认具体是哪个技能出了问题,以及它实际安装在哪里。好,我看到了。警告出现了 17 次,说明有 17 个技能路径指向了 OpenClaw 的允许范围之外。从列表来看,当前只有 **32/74** 个技能ready,其他都跳过了。
|
||
|
||
让我看看具体的技能目录结构,找出哪些路径出了问题:
|
||
|
||
找到原因了。
|
||
|
||
**问题根源:**
|
||
|
||
- `C:\Users\admin\.openclaw\skills\` 里有 **18 个技能**,但它们都是 **Junction(目录联接)**,指向 `C:\Users\admin\.agents\skills\` 里的实际位置
|
||
- 当 OpenClaw 尝试加载这些技能时,它会解析 Junction 的真实路径,发现指向 `C:\Users\admin\.agents\skills` —— 这个路径在 OpenClaw 的 workspace 根目录(`D:\OpenClaw-Workspace`)之外
|
||
- OpenClaw 的安全策略是:**workspace 技能目录下的技能,其真实路径必须在 workspace 根目录内**。因此这些 Junction 技能全部被跳过
|
||
|
||
**好消息:** 这 17 个技能其实已经正常加载了——它们来自 `~/.agents/skills`(显示为 `agents-skills-personal` 源),不在 workspace 内,所以不受该路径限制。
|
||
|
||
**解决方案:** 删除 `C:\Users\admin\.openclaw\skills` 里那 17 个指向 `~/.agents/skills` 的 Junction。OpenClaw 会继续从 `~/.agents/skills` 正常加载它们,警告就会消失。
|
||
|
||
需要我执行这个清理操作吗?
|
||
|
||
# 2
|
||
|
||
确认一下
|
||
> OpenClaw 会继续从 `~/.agents/skills` 正常加载它们
|
||
|
||
这个在哪里进行的描述?
|
||
|
||
在技能文档里,叫 **"Personal agent skills"**:
|
||
|
||
> `~/.agents/skills` — Personal agent skills, apply across workspaces on that machine
|
||
|
||
以及加载优先级:
|
||
|
||
> `<workspace>/skills` → `<workspace>/.agents/skills` → `~/.agents/skills` → `~/.openclaw/skills` → bundled skills → `skills.load.extraDirs`
|
||
|
||
`~/.agents/skills` 的优先级高于 `~/.openclaw/skills`,所以即使你删掉 `~/.openclaw/skills` 里的 Junction,OpenClaw 仍然会从 `~/.agents/skills` 加载它们 —— Junction 只是重复了一份,不会丢失任何技能。
|
||
|
||
# 3
|
||
|
||
那么当前OpenClaw的workspace设置在`C:\Users\admin`么?
|
||
|
||
不是。根据配置文件:
|
||
|
||
```json
|
||
"agents": {
|
||
"defaults": {
|
||
"workspace": "D:\\OpenClaw-Workspace"
|
||
}
|
||
}
|
||
```
|
||
|
||
workspace 是 `D:\OpenClaw-Workspace`。`C:\Users\admin` 只是用户主目录(`~`),OpenClaw 的配置和个人数据放在那里,但 workspace 是单独指定的。
|
||
|
||
# 4
|
||
|
||
> `<workspace>/skills` → `<workspace>/.agents/skills` → `~/.agents/skills` → `~/.openclaw/skills` → bundled skills → `skills.load.extraDirs`
|
||
|
||
那么写全路径的话,按优先级划分:
|
||
1. D:\OpenClaw-Workspace\skills
|
||
2. D:\OpenClaw-Workspace\agents\skills
|
||
3. C:\Users\admin\agents\skills
|
||
4. C:\Users\admin\.openclaw\skills
|
||
|
||
|
||
这些路径下的Skills都会加载,我这样理解对么?有没有补充?
|
||
|
||
基本正确,但有一点需要纠正:
|
||
|
||
**当前实际存在的路径(根据我的检查):**
|
||
|
||
| # | 路径 | 实际存在? | 说明 |
|
||
|---|------|-----------|------|
|
||
| 1 | `D:\OpenClaw-Workspace\skills` | ✅ | 有 `find`、`skill-vetter-1-0-0`、`xiucheng-self-improving-agent` |
|
||
| 2 | `D:\OpenClaw-Workspace\.agents\skills` | ❌ | 不存在 |
|
||
| 3 | `C:\Users\admin\.agents\skills` | ✅ | 有 17 个技能(`agent-browser`、`slack` 等) |
|
||
| 4 | `C:\Users\admin\.openclaw\skills` | ✅ | 有 18 个 Junction,指向 #3 |
|
||
|
||
所以你列表里的 **#2**(`D:\OpenClaw-Workspace\.agents\skills`)实际上不存在,没有加载任何东西。
|
||
|
||
真正在加载的就是 #1、#3、和 #4(只是 #4 的 Junction 被跳过了)。
|
||
|
||
# 5
|
||
|
||
好的,你的检查没有问题。
|
||
那么这四个路径的意义是什么?#2 的我知道,这里是和Claude Code共用的,其他的呢?
|
||
|
||
| 路径 | 意义 | 当前状态 |
|
||
|------|------|----------|
|
||
| `D:\OpenClaw-Workspace\skills` | **项目级技能**,只属于当前 workspace | ✅ 有内容(`find`、`skill-vetter` 等) |
|
||
| `D:\OpenClaw-Workspace\.agents\skills` | **Per-agent 技能**,属于 workspace 下的特定 agent | ❌ 不存在(空目录) |
|
||
| `C:\Users\admin\.agents\skills` | **用户级个人技能**,该用户所有 agent 共享,会同步到其他机器 | ✅ 有内容(17 个) |
|
||
| `C:\Users\admin\.openclaw\skills` | **机器级托管技能**,该机器上所有 agent 共享,通过 ClawHub 安装 | ✅ 有内容(18 个 Junction,指向 #3) |
|
||
|
||
几个补充说明:
|
||
|
||
- **#1 和 #2** 是 workspace 内部的,**#3 和 #4** 是全局的(跨 workspace)
|
||
- `#3`(`.agents/skills`)设计为跟随用户漫游(同步到其他机器),`.openclaw/skills` 是机器本地共享的
|
||
- 之前你提到的 Claude Code 共用的是 **#3**(`~/.agents/skills`),因为 Claude Code 也读这个路径,所以安装到这里两边都能用
|
||
- **#4** 的 Junction 是之前从 #3 复制过来的,现在属于冗余(跳过了但不影响功能)
|
||
|
||
# 6
|
||
|
||
明白了,那么现在
|
||
1. 删除 `C:\Users\admin\.openclaw\skills` 里那 17 个指向 `~/.agents/skills` 的 Junction。
|
||
2. `D:\OpenClaw-Workspace\skills`下面的三个技能,也应当归属于公共技能,移动到`C:\Users\admin\.openclaw\skills`下
|
||
|
||
警告没了。现在 `openclaw skills list` 不再出现 "Skipping skill path" 警告,17 个 Junction 已清理,三个技能已移动到 `C:\Users\admin\.openclaw\skills`。
|
||
|
||
结果汇总:
|
||
- **`D:\OpenClaw-Workspace\skills`**:只剩 `agent-browser-clawdbot`(项目独有技能)
|
||
- **`C:\Users\admin\.openclaw\skills`**:原有 `agent-browser-clawdbot` + 新移入的 `find`、`skill-vetter-1-0-0`、`xiucheng-self-improving-agent`(共 4 个)
|
||
|
||
# 7
|
||
|
||
现在把本次讨论的内容做一个总结,包括四层技能路径的用途,现在主要集中在后两层上的技能做一个介绍。
|
||
这个总结是给我/用户用的,以便我了解现在哪些技能已经安装了。
|
||
格式markdown
|
||
|
||
```markdown
|
||
# OpenClaw 技能系统总结
|
||
|
||
## 四层技能路径(按优先级从高到低)
|
||
|
||
| 层级 | 路径 | 用途 | 当前状态 |
|
||
|:---:|------|------|---------|
|
||
| 1 | `D:\OpenClaw-Workspace\skills` | **项目级技能** — 仅属于当前 workspace,绑定项目 | ⚠️ 几乎空(仅剩 `agent-browser-clawdbot`) |
|
||
| 2 | `D:\OpenClaw-Workspace\.agents\skills` | **Per-agent 技能** — workspace 下特定 agent 共享,Claude Code 共用 | ❌ 不存在 |
|
||
| 3 | `C:\Users\admin\.agents\skills` | **用户级个人技能** — 该用户所有 agent 共享,会同步到其他机器 | ✅ 17 个技能 |
|
||
| 4 | `C:\Users\admin\.openclaw\skills` | **机器级托管技能** — 该机器所有 agent 共享,通过 ClawHub 安装 | ✅ 4 个技能(含 1 个重复) |
|
||
|
||
> 加载优先级:1 > 2 > 3 > 4 > bundled > extraDirs
|
||
|
||
---
|
||
|
||
## 当前已安装的技能
|
||
|
||
### 用户级技能 — `~/.agents/skills`(17 个)
|
||
|
||
**编程 & 部署**
|
||
- `agent-browser` — 浏览器自动化(基于 Vercel agent-browser CLI)
|
||
- `agentcore` — AWS Bedrock AgentCore 云浏览器
|
||
- `deploy-to-vercel` — 部署到 Vercel
|
||
- `electron` — 自动化 Electron 桌面应用(VS Code、Slack、Discord 等)
|
||
- `pdf` — PDF 读写操作
|
||
- `skill-creator` — 创建和优化技能
|
||
- `vercel-cli-with-tokens` — Vercel CLI(token 认证)
|
||
|
||
**React / 前端**
|
||
- `frontend-design` — 创建生产级前端界面
|
||
- `vercel-composition-patterns` — React 组合模式
|
||
- `vercel-react-best-practices` — React/Next.js 性能优化
|
||
- `vercel-react-native-skills` — React Native 最佳实践
|
||
- `vercel-react-view-transitions` — React View Transition API
|
||
- `vercel-sandbox` — Vercel Sandbox 浏览器自动化
|
||
- `web-design-guidelines` — Web 界面规范审查
|
||
|
||
**工具类**
|
||
- `dogfood` — Web 应用 QA 测试 / 找 Bug
|
||
- `find-skills` — 发现和安装新技能
|
||
- `slack` — Slack 工作区交互
|
||
|
||
---
|
||
|
||
### 机器级技能 — `~/.openclaw/skills`(4 个)
|
||
|
||
| 技能 | 说明 |
|
||
|------|------|
|
||
| `agent-browser-clawdbot` | agent-browser 的自定义封装,专注 AI Agent 工作流 |
|
||
| `find` | 多源渐进式搜索定位 |
|
||
| `skill-vetter-1-0-0` | 技能安全审查(安装前检查风险) |
|
||
| `xiucheng-self-improving-agent` | 自我改进 Agent 系统 |
|
||
|
||
---
|
||
|
||
## 本次操作记录
|
||
|
||
1. **清理了 17 个冗余 Junction**:`~/.openclaw/skills` 下指向 `~/.agents/skills` 的目录联接(导致 "Skipping skill path" 警告)
|
||
2. **重组了项目技能**:将 `D:\OpenClaw-Workspace\skills` 下的 `find`、`skill-vetter-1-0-0`、`xiucheng-self-improving-agent` 移至 `~/.openclaw/skills`
|
||
|
||
---
|
||
|
||
## 建议
|
||
|
||
- **新增技能**优先安装到 `~/.agents/skills`(#3),可跨机器同步
|
||
- **项目特有技能**才放到 `D:\OpenClaw-Workspace\skills`(#1)
|
||
- `~/.openclaw/skills`(#4)适合存放仅本地使用的技能或不需同步的定制封装
|
||
```
|