Создание собственных скиллов для OpenClaw
Пишем кастомные скиллы на TypeScript. От простого Hello World до интеграций с внешними API.
Создание скиллов для OpenClaw
Примечание: OpenClaw ранее назывался MoltBot и Clawdbot. Все команды взаимозаменяемы (
openclaw,moltbot,clawdbot). Скиллы — это модульные расширения OpenClaw. Хочешь интеграцию с умным домом? Скилл. Трекинг криптовалют? Скилл. Любую автоматизацию можно упаковать в скилл.
Структура скилла
my-skill/
├── SKILL.md # Инструкции для AI
├── package.json # Метаданные и зависимости
├── src/
│ └── index.ts # Точка входа
└── scripts/ # Вспомогательные скрипты (опционально)
Быстрый старт: Hello World
Создаём папку
mkdir -p ~/.openclaw/skills/hello-world
cd ~/.openclaw/skills/hello-world
SKILL.md
Это главный файл — инструкции для AI, когда и как использовать скилл:
# Hello World Skill
Используй этот скилл когда пользователь просит поздороваться
или хочет проверить что скиллы работают.
## Команды
### say_hello
Вызови скрипт `scripts/hello.sh` с именем пользователя.
Пример:
- "Скажи привет" → `./scripts/hello.sh "User"`
- "Поздоровайся с Машей" → `./scripts/hello.sh "Маша"`
scripts/hello.sh
#!/bin/bash
NAME="${1:-World}"
echo "👋 Привет, $NAME! OpenClaw работает отлично!"
chmod +x scripts/hello.sh
Тестируем
Пишем боту:
“Скажи привет”
Бот должен выполнить скрипт и ответить.
Продвинутый скилл: Погода
Структура
weather-skill/
├── SKILL.md
├── package.json
└── scripts/
└── weather.ts
SKILL.md
# Weather Skill
Получает текущую погоду и прогноз для любого города.
## Когда использовать
- Пользователь спрашивает о погоде
- Упоминает город + "погода/weather/температура"
- Просит прогноз
## Команды
### get_weather
```bash
npx ts-node scripts/weather.ts "Название города"
Возвращает JSON с температурой, описанием, влажностью.
Примеры
- “Какая погода в Москве?” → get_weather “Москва”
- “Будет ли дождь в Париже?” → get_weather “Paris”
### scripts/weather.ts
```typescript
import https from 'https';
const city = process.argv[2] || 'London';
const apiKey = process.env.OPENWEATHER_API_KEY || 'demo';
const url = `https://api.openweathermap.org/data/2.5/weather?q=${encodeURIComponent(city)}&appid=${apiKey}&units=metric&lang=ru`;
https.get(url, (res) => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
try {
const weather = JSON.parse(data);
console.log(JSON.stringify({
city: weather.name,
temp: weather.main.temp,
feels_like: weather.main.feels_like,
description: weather.weather[0].description,
humidity: weather.main.humidity,
wind: weather.wind.speed
}, null, 2));
} catch (e) {
console.error('Ошибка парсинга:', e);
}
});
});
package.json
{
"name": "weather-skill",
"version": "1.0.0",
"description": "Погода для OpenClaw",
"scripts": {
"weather": "ts-node scripts/weather.ts"
},
"dependencies": {
"ts-node": "^10.9.0",
"typescript": "^5.0.0"
}
}
Best Practices
1. Чёткий SKILL.md
AI читает SKILL.md чтобы понять когда использовать скилл. Пиши конкретно:
❌ Плохо:
Этот скилл делает разные вещи с погодой.
✅ Хорошо:
Используй этот скилл когда пользователь:
- Спрашивает текущую погоду в городе
- Просит прогноз на N дней
- Интересуется температурой, осадками, ветром
2. Обработка ошибок
try {
const result = await doSomething();
console.log(JSON.stringify({ success: true, data: result }));
} catch (error) {
console.log(JSON.stringify({
success: false,
error: error.message
}));
process.exit(1);
}
3. Environment Variables
Не хардкодь API ключи:
const apiKey = process.env.MY_API_KEY;
if (!apiKey) {
console.error('MY_API_KEY не установлен');
process.exit(1);
}
4. Timeout’ы
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 10000);
try {
const response = await fetch(url, { signal: controller.signal });
} finally {
clearTimeout(timeout);
}
Публикация на ClawHub
Хочешь поделиться скиллом с сообществом?
Подготовка
- Добавь
README.mdс описанием - Добавь
LICENSE(MIT рекомендуется) - Убедись что нет захардкоженных секретов
Публикация
# Установи clawhub CLI
npm install -g clawhub
# Авторизуйся
clawhub login
# Публикуй
clawhub publish
Версионирование
# Обнови версию
npm version patch # 1.0.0 → 1.0.1
npm version minor # 1.0.0 → 1.1.0
npm version major # 1.0.0 → 2.0.0
# Опубликуй обновление
clawhub publish
Примеры скиллов из сообщества
| Скилл | Описание |
|---|---|
todoist | Интеграция с Todoist |
google-calendar | Управление Google Calendar |
homeassistant | Управление умным домом |
crypto-prices | Курсы криптовалют |
github-notifications | Уведомления GitHub |
whoop-stats | Данные с WHOOP |
Установка:
clawhub install todoist
Debugging
Включаем verbose логи
# openclaw.yaml
logging:
level: debug
skills: true
Тестируем скрипт вручную
cd ~/.openclaw/skills/my-skill
./scripts/my-script.sh "test argument"
Смотрим что видит AI
openclaw debug skill my-skill
Итог
Скиллы — мощный способ расширить OpenClaw. Начни с простого bash-скрипта, потом добавляй сложность.
Ключевое:
- SKILL.md — чёткие инструкции для AI
- Скрипты — делают реальную работу
- JSON output — для структурированных данных
- Обработка ошибок — graceful degradation