Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions docs/SKILLS/Collections.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,20 @@ Skills let you extend what your OpenClaw agent can do from sending emails to sch

## 1. Create the skills folder

Skills live **outside** your workspace, in your home directory root:
Skills live inside your OpenClaw workspace, in the `skills` subfolder:

```bash
mkdir -p ~/.openclaw/skills
mkdir -p ~/.openclaw/workspace/skills
```

Each skill gets its own subfolder inside `~/.openclaw/skills/`.
Each skill gets its own subfolder inside `~/.openclaw/workspace/skills/`.

## 2. Add a skill

Inside each skill's folder, add a `SKILL.md` file describing what the skill does and how to use it.

```
~/.openclaw/skills/
~/.openclaw/workspace/skills/
├── email/
│ └── SKILL.md
├── cron/
Expand All @@ -43,7 +43,7 @@ Two ready-made example skills are included to get you started:

These two are directly accessible from the **command menu**.

> Copy the contents of the reference file into `~/.openclaw/skills/<skill-name>/SKILL.md` to use it as-is, or edit it to fit your setup.
> Copy the contents of the reference file into `~/.openclaw/workspace/skills/<skill-name>/SKILL.md` to use it as-is, or edit it to fit your setup.

## 4. Skills beyond the command menu

Expand Down
2 changes: 1 addition & 1 deletion openclaw.plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"id": "rocketchat",
"name": "Rocket.Chat",
"description": "Rocket.Chat channel plugin with DDP/websocket outbound/inbound",
"version": "1.2.9",
"version": "1.2.10",
"kind": "channel",
"channels": [
"rocketchat"
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dodaa08/openclaw-plugin-test",
"version": "1.2.9",
"version": "1.2.10",
"description": "A fully unified plugin for integrating Rocket.Chat with OpenClaw. This plugin eliminates the need for an external bridging server, providing a direct, single-place architecture for inbounds, outbounds, session management, and CLI configuration.",
"main": "dist/index.js",
"peerDependencies": {
Expand Down
11 changes: 5 additions & 6 deletions src/service/channel.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import type { InboundEvent } from "../types.js";
import type { ChannelRuleOptions } from "../types.js";
import { DM_SCOPE, CommandParser } from "../utils.js";
import { DM_SCOPE, CommandParser, resolveOpenClawDir } from "../utils.js";
import { RocketChatClient } from "../client/rest.js";
import type { RCLoginResult } from "../types.js";
import { readdirSync, readFileSync, existsSync, statSync } from "node:fs";
import { resolve } from "node:path";
import { homedir } from "node:os";
import { resolve, join } from "node:path";
import {
readConfig,
readDefaultModel,
Expand Down Expand Up @@ -491,9 +490,9 @@ function parseSkillFrontmatter(content: string): { name?: string; description?:
}

function runSkills(showOwnerOnly: boolean): string {
const skillsDir = resolve(homedir(), ".openclaw", "skills");
const skillsDir = join(resolveOpenClawDir(), "workspace", "skills");
if (!existsSync(skillsDir)) {
return "No skills installed (expected at ~/.openclaw/skills).";
return "No skills installed (expected at ~/.openclaw/workspace/skills).";
}
const entries = readdirSync(skillsDir).filter((name) => {
const full = resolve(skillsDir, name);
Expand All @@ -518,7 +517,7 @@ function runSkills(showOwnerOnly: boolean): string {
skills.push({ name: fm.name, description: fm.description ?? "" });
}
if (skills.length === 0) {
return "No skills installed (expected at ~/.openclaw/skills).";
return "No skills installed (expected at ~/.openclaw/workspace/skills).";
}
const cap = (s: string, n = 80): string => (s.length > n ? s.slice(0, n).trimEnd() + "…" : s);
const lines = ["**Skills**"];
Expand Down
Loading