TL;DR
OpenClaw's power lies in its extensibility through skills. With over 700 community-built skills available via ClawHub and the ability to create custom skills using SKILL.md files or TypeScript, you can transform your OpenClaw assistant into a specialized tool for virtually any task. This guide covers everything from installing existing skills to building and publishing your own.
Introduction
OpenClaw already provides powerful capabilities out of the box, but its true potential unlocked through skills. Whether you need specialized coding assistance, DevOps automation, research tools, or industry-specific functionality, there's likely a skill for that—and if not, you can build one.
With over 700 community-built skills available via ClawHub and the ability to create custom skills, OpenClaw becomes whatever AI assistant you need it to be.
In this comprehensive guide, we'll cover:
- How to find and install skills from ClawHub
- Managing and organizing your skills
- Building custom skills from scratch
- Publishing your skills for the community
- Security best practices
Understanding OpenClaw Skills
What Are Skills?
Skills are modular extensions that add specific capabilities to OpenClaw. Think of them as plugins that give your AI assistant new abilities—from sending specific types of emails to interacting with particular APIs.
Types of Skills
Natural Language Skills (SKILL.md)The simplest form—written in Markdown with YAML frontmatter. These define operational runbooks that OpenClaw follows when certain conditions are met.
TypeScript SkillsFull-featured skills built with TypeScript that can access APIs, execute complex logic, and integrate deeply with external services.
CLI-Based SkillsSkills that wrap command-line tools, allowing OpenClaw to use any tool available on your system.
How Skills Work
Skills are loaded dynamically when needed (just-in-time loading), which keeps memory usage manageable. When a user request matches a skill's triggers, OpenClaw executes the skill's defined actions.
Skill Categories
ClawHub hosts skills across numerous categories:
- Coding Agents & IDEs (133+ skills)
- DevOps & Cloud (212+ skills)
- Search & Research (253+ skills)
- AI & LLMs (287+ skills)
- Productivity (150+ skills)
- Data & Analytics (100+ skills)
- And many more...
Installing Skills from ClawHub
Finding Skills
Browse the ClawHub marketplace at clawhub.ai or search directly through OpenClaw:
# Search for skills openclaw skills search "github" # List popular skills openclaw skills popular # Browse a category openclaw skills browse devops Installing a Skill
Once you've found a skill you want, installing it is straightforward:
# Install a specific skill openclaw skills install github-actions # Install with a specific version openclaw skills install github-actions@1.2.0 # Install from a specific publisher openclaw skills install @username/skill-name Installing All Recommended Skills
# Install popular starter skills openclaw skills install-recommended Verifying Installation
# List all installed skills openclaw skills list # Check skill details openclaw skills info github-actions Managing Your Installed Skills
Enabling and Disabling Skills
# Disable a skill (keeps it installed but unused) openclaw skills disable github-actions # Enable a disabled skill openclaw skills enable github-actions Updating Skills
# Update a specific skill openclaw skills update github-actions # Update all skills openclaw skills update-all Removing Skills
# Uninstall a skill openclaw skills uninstall github-actions Skill Configuration
Many skills support custom configuration:
# Configure a skill openclaw skills config github-actions --set token=your-github-token Or edit the skill's configuration file directly:
# ~/.openclaw/skills/github-actions/config.yaml token: your-github-token default-branch: main auto-merge: false Building Custom Skills
When to Build Custom Skills
Build a custom skill when you need:
- Specific API integrations not covered by existing skills
- Custom automation workflows
- Industry-specific functionality
- Proprietary internal tools
Skill Structure
A basic skill consists of:
my-custom-skill/ ├── SKILL.md # Skill definition (for natural language skills) ├── config.yaml # Configuration schema └── icon.svg # Skill icon (optional) For TypeScript skills:
my-typescript-skill/ ├── src/ │ └── index.ts # Main skill code ├── package.json ├── tsconfig.json ├── config.schema.json └── skill.yaml # Skill manifest Creating SKILL.md Skills
Basic SKILL.md Structure
Here's a minimal SKILL.md file:
--- name: weather-alert description: "Get weather alerts for your location" triggers: - "weather" - "weather alert" - "forecast" requires: - location actions: - name: get_weather api: https://api.weather.com/v3 params: location: "{location}" --- # Weather Alert Skill This skill provides weather alerts and forecasts for your location. ## Configuration Set your location in the skill config: - city: Your city name - units: metric or imperial Full Example: Email Summary Skill
--- name: daily-email-summary description: Receive a daily summary of your important emails triggers: - "email summary" - "daily emails" - "summarize my emails" requires: - email_access - api_key actions: - name: fetch_emails method: gmail.users.messages.list params: q: "is:unread" maxResults: 10 - name: summarize model: gpt-4 prompt: "Summarize these emails in bullet points" --- # Daily Email Summary Skill Stay on top of your inbox with automated daily summaries. ## Features - Fetches unread emails from Gmail - Uses AI to summarize key points - Sends summary to your preferred channel ## Setup 1. Configure Gmail API access in your OpenClaw settings 2. Set your preferred summary time 3. Choose your delivery channel (Telegram, Discord, etc.) ## Example Usage You: Send me my email summaryOpenClaw: Here's a summary of your 8 unread emails: - Meeting request from John about Q3 planning - Order confirmation from Amazon - Newsletter from TechCrunch... Advanced Triggers
Use more sophisticated triggers:
--- name: smart-reminder triggers: # Exact phrases - "remind me to {action}" # Patterns - "remind me in {duration}" # Contextual context: - channel: work patterns: ["meeting", "deadline", "project"] --- # Smart Reminder Skill Handles all reminder requests with intelligent parsing. Building TypeScript Skills
For more complex integrations, TypeScript skills provide full control.
Setting Up Your Development Environment
# Create a new skill project openclaw skills create my-awesome-skill # Navigate to the skill directory cd my-awesome-skill # Install dependencies npm install # Start development server npm run dev TypeScript Skill Structure
// src/index.ts import { Skill, SkillContext, SkillResult } from '@openclaw/skill-sdk'; export default class MyAwesomeSkill implements Skill { name = 'my-awesome-skill'; description = 'A skill that does something awesome'; // Called when the skill is loaded async onLoad(context: SkillContext): Promise<void> { console.log('Skill loaded!'); } // Called when the skill matches a trigger async execute(context: SkillContext): Promise<SkillResult> { const { userMessage, config } = context; // Your skill logic here const result = await this.doSomethingAwesome(userMessage.content); return { message: result, actions: [] }; } private async doSomethingAwesome(input: string): Promise<string> { // Implement your skill logic return `You said: ${input}`; } } Skill Manifest (skill.yaml)
name: my-awesome-skill version: 1.0.0 description: A skill that does something awesome author: name: Your Name email: you@example.com triggers: - pattern: "do something awesome" type: exact config: apiKey: type: string required: true description: API key for the service permissions: - network - filesystem runtime: nodejs18 Configuration Schema (config.schema.json)
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "apiKey": { "type": "string", "description": "API key for the service" }, "enabled": { "type": "boolean", "default": true } }, "required": ["apiKey"] } Building and Testing
# Build the skill npm run build # Run tests npm test # Package for distribution npm run package Example: GitHub Integration Skill
Here's a more complete example showing API integration:
import { Skill, SkillContext, SkillResult } from '@openclaw/skill-sdk'; import axios from 'axios'; export default class GitHubSkill implements Skill { name = 'github'; description = 'Interact with GitHub repositories'; async execute(context: SkillContext): Promise<SkillResult> { const { userMessage, config } = context; const message = userMessage.content.toLowerCase(); if (message.includes('list repos')) { return this.listRepositories(config); } else if (message.includes('create issue')) { return this.createIssue(context); } return { message: 'I can help with listing repos, creating issues, and more.', actions: [] }; } private async listRepositories(config: any): Promise<SkillResult> { const response = await axios.get('https://api.github.com/user/repos', { headers: { Authorization: `token ${config.githubToken}` } }); const repos = response.data.slice(0, 5).map((r: any) => r.name).join('\n'); return { message: `Your recent repositories:\n${repos}`, actions: [] }; } private async createIssue(context: SkillContext): Promise<SkillResult> { // Extract issue details from user message return { message: 'I need more details to create an issue. Please specify the repository, title, and description.', actions: [ { type: 'request_input', fields: ['repo', 'title', 'description'] } ] }; } } Publishing Skills to ClawHub
Preparing Your Skill for Publishing
- Test thoroughly: Ensure your skill works in various scenarios
- Add documentation: Clear SKILL.md with examples
- Set proper permissions: Only request necessary access
- Add an icon: Create a simple SVG icon
- Versioning: Use semantic versioning (1.0.0, 1.1.0, etc.)
Publishing Process
# Login to ClawHub openclaw skills login # Check your skill is ready openclaw skills validate # Publish your skill openclaw skills publish Publishing Requirements
- Valid skill manifest (skill.yaml)
- Required: name, version, description, author
- At least one trigger defined
- virusTotal scanning (automatically performed)
- Identity verification
Version Management
# Bump version openclaw skills version patch # 1.0.0 -> 1.0.1 openclaw skills version minor # 1.0.0 -> 1.1.0 openclaw skills version major # 1.0.0 -> 2.0.0 # Publish new version openclaw skills publish Security Best Practices
Installing Third-Party Skills
Important Security Note: The ClawHavoc incident in early 2026 revealed malicious skills on ClawHub. Always follow these precautions:
- Verify publishers: Only install skills from trusted, verified publishers
- Review permissions: Check what permissions the skill requests
- Audit code: For TypeScript skills, review the source code
- Start isolated: Test skills in a separate environment first
# Check skill permissions before installing openclaw skills inspect github-actions Building Secure Skills
When building your own skills:
# Always specify minimum required permissions permissions: - network # Only if needed - filesystem # Only if needed // Never hardcode secrets // BAD: const apiKey = "sk-1234567890"; // GOOD: const apiKey = process.env.API_KEY; Recommended Security Configuration
# ~/.openclaw/security.yaml skill_security: require_virustotal: true require_verified_publisher: false # Set to true for production audit_permissions: true sandbox_mode: true Advanced Skill Development
Skill Dependencies
Skills can depend on other skills:
# skill.yaml dependencies: - name: github version: ">=1.0.0" - name: slack version: ">=2.0.0" Event-Driven Skills
React to OpenClaw events:
export default class EventSkill implements Skill { async onMessage(context: SkillContext): Promise<SkillResult> { // Called on every message } async onTimer(context: SkillContext): Promise<SkillResult> { // Called based on schedule } async onStartup(context: SkillContext): Promise<void> { // Called when OpenClaw starts } async onShutdown(context: SkillContext): Promise<void> { // Called when OpenClaw stops } } Using MCP with Skills
Combine skills with MCP servers:
# skill.yaml mcpServers: - name: filesystem command: npx @modelcontextprotocol/server-filesystem ./data - name: github command: npx @modelcontextprotocol/server-github Troubleshooting
Skill Not Loading
# Check skill status openclaw skills status my-skill # View skill logs openclaw logs --skill my-skill Common causes:
- Missing dependencies
- Invalid configuration
- Permission issues
Trigger Not Matching
# Test trigger matching openclaw skills test-trigger "your trigger phrase" Performance Issues
# Check skill resource usage openclaw skills monitor # Disable resource-heavy skills temporarily openclaw skills disable heavy-skill Conclusion
OpenClaw's skill system transforms it from a simple AI assistant into a powerful, extensible platform. Whether you're installing community-built skills from ClawHub or building your own custom solutions, the possibilities are virtually unlimited.
The OpenClaw ecosystem grows stronger with each new skill. Start building today!

