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
6 changes: 0 additions & 6 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,22 +39,18 @@ jobs:
ROCKETCHAT_USER_ID: ${{ secrets.ROCKETCHAT_USER_ID }}
ROCKETCHAT_TOKEN: ${{ secrets.ROCKETCHAT_TOKEN }}

# Add dist/ to git staging (include in publish)
- name: Stage dist for publish
run: |
git add dist/ --force
git config user.name "GitHub Actions"
git config user.email "actions@github.com"
git commit -m "build: dist for v$(node -p 'require(\"./package.json\").version')" || true

# Authenticate with ClawHub
- name: Authenticate with ClawHub
env:
CLAWHUB_TOKEN: ${{ secrets.CLAWHUB_TOKEN }}
run: pnpm dlx clawhub login --token "$CLAWHUB_TOKEN"

# Compare package.json version against the current ClawHub latest;
# only publish when the version actually changed (skips duplicates).
- name: Check for new version
id: check
run: |
Expand All @@ -74,7 +70,6 @@ jobs:
echo "current=$CURRENT latest=$LATEST publish_new=$SHOULD"
echo "should_publish=$SHOULD" >> "$GITHUB_OUTPUT"

# Publish to ClawHub (always on a version tag, only on new versions otherwise)
- name: Publish to ClawHub
id: publish
if: ${{ startsWith(github.ref, 'refs/tags/') || steps.check.outputs.should_publish == 'true' }}
Expand All @@ -86,7 +81,6 @@ jobs:
--source-ref ${{ github.ref_name }} \
--wait

# Create GitHub release (optional but nice, only for version tags)
- name: Create GitHub Release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v1
Expand Down
65 changes: 56 additions & 9 deletions docs/SKILLS.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,51 @@
# Skill Installation & Management Guide
# OpenClaw Skills & Management Guide

OpenClaw supports installing skills both **globally** for all bots and **per-agent** for isolated bots.
Skills let you extend what your OpenClaw agent can do—from scheduling reminders and automation to integrating with third-party services like email, calendars, and external APIs.

OpenClaw supports creating custom skills manually in your workspace as well as installing package-managed skills from ClawHub.

---

## 1. Creating a Custom Skill Manually

To create your own custom skill:

### Step 1: Create the Skill Folder

Skills live inside an agent's workspace folder under `skills`:

```bash
# For a specific agent (e.g., main or rc-newb2)
mkdir -p ~/.openclaw/workspace/main/skills/my-custom-skill
```

### Step 2: Add `SKILL.md`

Inside the skill folder, create a `SKILL.md` file detailing what the skill does and its rules:

```markdown
---
name: my-custom-skill
description: A brief summary of what this custom skill does
---

## 1. Global Skill Installation (For ALL Bots)
# My Custom Skill

Write instructions, required parameters, environment variables, or CLI usage rules here for the agent.
```

A `SKILL.md` must include:

- A YAML frontmatter block (`---` containing `name` and `description`).
- Usage instructions and rules that the AI model follows when executing the skill.

---

## 2. Installing Skills via ClawHub CLI

OpenClaw supports installing pre-built community skills directly from ClawHub.

### Global Installation (Available to ALL Bots)

To install a skill **globally** so that every bot on your server (`main`, `rc-newb2`, etc.) can access it:

Expand All @@ -13,33 +54,32 @@ openclaw skills install <skill-name> --global
```

- **Target Directory**: `~/.openclaw/skills/`
- **Scope**: All present and future agents automatically gain access.
- **Flag Required**: `--global` (or `-g`). Does **not** require `--agent`.
- **Access**: Available to all present and future bots.

---

## 2. Per-Agent Skill Installation (Isolated Bot Workspace)
### Per-Agent Installation (Isolated Bot Workspace)

To install a skill **specifically for one agent** (so other bots cannot access it):

```bash
openclaw skills install <skill-name> --agent <agent-id>
```

> ⚠️ **Note on Syntax**: Always use `--agent <agent-id>` (e.g. `--agent main` or `--agent rc-newb2`). Do not pass `--main` as a boolean flag.
> ⚠️ **Note**: Always use `--agent <agent-id>` (e.g., `--agent main` or `--agent rc-newb2`).

**Examples:**

```bash
# Install for the main agent
# Install for default main agent
openclaw skills install @otman-ai/google-calender-maton --agent main

# Install for a dedicated Rocket.Chat bot agent
openclaw skills install @porteden/email-gmail-outlook --agent rc-newb2
```

- **Target Directory**: `~/.openclaw/workspace/<agent-id>/skills/`
- **Scope**: Isolated to that specific agent only.
- **Access**: Isolated to that specific agent only.

---

Expand Down Expand Up @@ -70,3 +110,10 @@ When multiple agents exist (e.g., `main` and `rc-newb2`), OpenClaw operates in *
| **List Skills** | `openclaw skills list` | `openclaw skills list --agent <agent-id>` |
| **Check Skills** | `openclaw skills check` | `openclaw skills check --agent <agent-id>` |
| **Uninstall Skill** | `openclaw skills uninstall <skill> --global` | `openclaw skills uninstall <skill> --agent <agent-id>` |

---

## 6. Resources & Community Skills

- 🔗 **Official Documentation**: [https://docs.openclaw.ai/tools/skills](https://docs.openclaw.ai/tools/skills)
- 🔗 **ClawHub Registry**: Search skills using `openclaw skills search <query>`
119 changes: 0 additions & 119 deletions docs/SKILLS/Cron.md

This file was deleted.

51 changes: 0 additions & 51 deletions docs/SKILLS/doc.md

This file was deleted.

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.17",
"version": "1.2.19",
"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.17",
"version": "1.2.19",
"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
3 changes: 0 additions & 3 deletions src/cli/config-updater.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,6 @@ export function getAgentWorkspaceDir(agentId: string): string {
return resolve(SHARED_WORKSPACE_DIR, agentId);
}

// ensureSystemAgent was removed: agents.defaults.systemAgent is a legacy retired key
// in OpenClaw 2026.9.x and causes "Unrecognized key" config validation errors.

export type ExistingAccount = {
accountId: string;
serverUrl: string;
Expand Down
4 changes: 0 additions & 4 deletions src/service/inbound.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,6 @@ export async function dispatchInboundEventWithChannelRuntime(params: {
},
});

// Core 2026.9+ SQLite stores are bound to a registered agent id (usually "main").
// Account `agentId` (e.g. rc-oc) is only a plugin label — it is not in agents.entries.
// Passing it into resolveStorePath opens an rc-* store, then dispatch still requests
// "main" and Core throws: store path belongs to rc-oc; requested agent main.
const coreAgentId = route.agentId || "main";

const botAwareSessionKey = `${route.sessionKey}:${params.accountId}:${params.event.senderId}`;
Expand Down
Loading