You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Support grouped skill folders while keeping skill invocation flat via frontmatter names.
Includes bounded nested SKILL.md discovery, refresh/watch coverage for grouped folders, plugin symlink containment, and docs for grouped skill organization.
Verification:
- Node 24 targeted skill discovery and refresh tests passed locally.
- Docs checks passed locally and in CI.
- Autoreview clean.
- Crabbox live OpenAI proof showed nested foo/bar skills listed and visible in the agent system prompt.
- CI run 26595118581 passed.
Copy file name to clipboardExpand all lines: docs/tools/skills.md
+27-3Lines changed: 27 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -29,6 +29,19 @@ OpenClaw loads skills from these sources, **highest precedence first**:
29
29
30
30
If a skill name conflicts, the highest source wins.
31
31
32
+
Skill roots can be organized with folders. A skill is discovered when a
33
+
`SKILL.md` appears under a configured skills root, so these are both valid:
34
+
35
+
```text
36
+
<workspace>/skills/research/SKILL.md
37
+
<workspace>/skills/personal/research/SKILL.md
38
+
```
39
+
40
+
The folder path is only for organization. The skill's visible name, slash
41
+
command, and allowlist key come from `SKILL.md` frontmatter `name` (or the skill
42
+
directory name when `name` is missing), so a nested skill with `name: research`
43
+
is still invoked as `/research`, not `/personal/research`.
44
+
32
45
Codex CLI's native `$CODEX_HOME/skills` directory is not one of these OpenClaw
33
46
skill roots. In Codex harness mode, local app-server launches use isolated
34
47
per-agent Codex homes, so skills in the operator's personal `~/.codex/skills`
@@ -149,9 +162,11 @@ all local agents unless agent skill allowlists narrow visibility. The separate
149
162
`clawhub` CLI also installs into `./skills` under your current working
150
163
directory (or falls back to the configured OpenClaw workspace). OpenClaw picks
151
164
that up as `<workspace>/skills` on the next session.
152
-
Configured skill roots also support one grouping level, such as
153
-
`skills/<group>/<skill>/SKILL.md`, so related third-party skills can be
154
-
kept under a shared folder without broad recursive scanning.
165
+
Configured skill roots also support grouped layouts, such as
166
+
`skills/<group>/<skill>/SKILL.md`, so related third-party skills can be kept
167
+
under shared folders without broad recursive scanning. Use flat frontmatter
168
+
names when grouping, for example `skills/imported/research/SKILL.md` with
169
+
`name: research`.
155
170
156
171
Git and local directory installs expect a `SKILL.md` at the source root. The
157
172
install slug comes from `SKILL.md` frontmatter `name` when it is a valid slug,
@@ -196,6 +211,11 @@ Prefer sandboxed runs for untrusted inputs and risky tools. See
196
211
</Warning>
197
212
198
213
- Workspace, project-agent, and extra-dir skill discovery only accepts skill roots whose resolved realpath stays inside the configured root unless `skills.load.allowSymlinkTargets` explicitly trusts a target root. Bundled skills always stay contained. Managed `~/.openclaw/skills` and personal `~/.agents/skills` roots may contain symlinked skill folders installed by ClawHub or another local skill manager, but every `SKILL.md` realpath must still stay inside its resolved skill directory.
214
+
- Nested discovery is bounded. OpenClaw scans grouped skill folders under
215
+
skills roots such as `<workspace>/skills`, `<workspace>/.agents/skills`,
216
+
`~/.agents/skills`, and `~/.openclaw/skills`, but skips hidden directories,
217
+
`node_modules`, oversized `SKILL.md` files, escaped symlinks, and suspiciously
218
+
large directory trees.
199
219
- Gateway private archive installs are off by default. When explicitly enabled,
200
220
they require a committed zip upload containing `SKILL.md` and reuse the same
201
221
archive extraction, path traversal, symlink, force, and rollback protections as
@@ -488,6 +508,10 @@ layouts where a skill root contains a symlink, for example
488
508
symlinks from local skill managers by default, but the target list is still
489
509
matched after realpath resolution and should stay narrow when configured.
490
510
511
+
The watcher covers nested `SKILL.md` files under grouped skill roots. Adding or
512
+
editing `skills/personal/foo/SKILL.md` refreshes the snapshot the same way as
513
+
editing `skills/foo/SKILL.md`.
514
+
491
515
### Remote macOS nodes (Linux gateway)
492
516
493
517
If the Gateway runs on Linux but a **macOS node** is connected with
0 commit comments