Версия: 1.2.0 | Дата: 2026-04-28 | Обновлён: 2026-05-20 | Статус: ACTIVE
Авторы: Элис, Денис | Источник правды: Wiki.js /ru/kb/standards/skill-creation-standard
Основан на: Skill Creator (OpenClaw), критериях S1-S10, практическом аудите 13 скиллов 28.04.2026
Скиллы (AgentSkills) — модульные пакеты, расширяющие возможности агентов: специализированные знания, workflow, интеграции с инструментами. Этот стандарт определяет, как мы находим, проверяем, создаём и обслуживаем скиллы для агентов poreklame.tech.
Ключевой принцип: безопасность превыше скорости. Ни один skill не попадает в систему без прохождения чек-листа S1-S10.
Нужен skill
│
├─► Поиск на ClawHub (https://clawhub.ai) и в репозиториях OpenClaw
│ │
│ ├─► Найден ──► Проверка S1-S10 ──► Прошёл ──► Установка ✅
│ │ │
│ │ └─► Не прошёл ──► Можно адаптировать?
│ │ │
│ │ Да ──► Форк + фикс + свой аудит
│ │ Нет ──► Создаём свой ↓
│ │
│ └─► Не найден ──► Создаём свой ↓
│
└─► Создание своего skill'а (раздел 3)
Правило: готовый skill экономит время, но только если он безопасен. Лучше потратить час на создание своего, чем поставить дырявый.
Каждый skill — готовый или свой — проходит эти 10 проверок перед установкой. Ни один критерий нельзя пропускать.
| # | Критерий | Что проверяем | Как проверяем | PASS / FAIL |
|---|---|---|---|---|
| S1 | Источник | Кто автор? Официальный репозиторий/ClawHub? История коммитов? Контрибьюторы известны? | Проверить источник, git log, автора | |
| S2 | Exec-команды | Есть ли bash, curl | bash, eval, exec без валидации параметров? Инжектируемые shell-вызовы? |
grep -r 'bash\|eval\|exec\|system\|popen' по SKILL.md и scripts/ |
|
| S3 | Сетевые вызовы | Куда ходит skill? Не эксфильтрует ли данные на неизвестные сервера? Все ли URL документированы? | Анализ всех URL, endpoint'ов, IP-адресов в коде | |
| S4 | Файловый доступ | Какие пути читает/пишет? Не лезет ли в /etc, /etc/passwd, ~/.ssh, ~/.openclaw/*.json, переменные окружения с секретами? |
Анализ файловых операций, путей | |
| S5 | Привилегии | Требует ли sudo/root? docker.sock? Зачем? Можно ли без? Есть ли chown, chmod 777? |
grep -r 'sudo\|chown\|chmod 777\|docker.sock' |
|
| S6 | Зависимости | Что ставится в систему? apt install, pip install, npm install -g — с какими флагами? Не тянет ли deprecated/уязвимые пакеты? |
Инвентаризация всех requires, версий |
|
| S7 | Secrets | Нет ли хардкод-токенов, паролей, API-ключей в примерах и коде? Не логирует ли секреты? | grep -r 'token\|password\|secret\|api_key\|Bearer' |
|
| S8 | Ingress | Не открывает ли порты наружу (0.0.0.0)? Не меняет ли правила файрвола без явной необходимости? |
grep -r '0.0.0.0\|ufw\|iptables\|firewall' |
|
| S9 | Provenance | Есть ли SBOM? Checksum? Подписан ли .skill пакет? Совпадает ли хеш с заявленным? | Проверка сигнатуры, shasum | |
| S10 | Impact | Что произойдёт в худшем случае? Обратим ли ущерб? Нужен ли бекап перед установкой? | Сценарный анализ: что сломается? |
Вердикт:
Запрещено: ставить skill с непройденным S1-S10. Даже если «ну очень надо». Даже если «автор известный».
Дополняет чек-лист раздела 2 конкретными инструментами и красными флагами. Основано на аудите 13 скиллов.
Минимум: автор, лицензия, source-ссылка, дата обновления, число скачиваний.
Красные флаги (автоматический стоп):
grep -rE '(bash|sh|eval|exec|system|popen|child_process|curl\|bash|curl\|sh|wget.*\|.*sh)' SKILL.md scripts/
Красные флаги: curl | bash, git clone + автозапуск, auto-fix без --dry-run, child_process без валидации аргументов.
Допустимо: systemctl, sed -i — если есть предупреждение + --dry-run + бэкап конфига.
grep -rE '(https?://|curl|wget|fetch|axios|requests\.(get|post))' SKILL.md scripts/
| URL | Риск |
|---|---|
| docs.docker.com, man-страницы, apt-репозитории | ✅ OK |
| ifconfig.me, api.ipify.org | ⚠️ LOW |
| get.docker.com pipe | ❌ HIGH |
| github.com/ без аудита | ❌ HIGH |
| S3/OSS upload endpoints | ❌ CRITICAL |
Критические пути (не должен трогать): /etc/shadow, /etc/passwd, ~/.ssh/*, docker.sock, ~/.openclaw/openclaw.json, ~/.openclaw/credentials.
Допустимые: /etc/ssh/sshd_config, /etc/nginx/, /etc/systemd/system/ (с обоснованием).
| Уровень | Описание | Вердикт |
|---|---|---|
| 0 — без привилегий | user-space | ✅ OK |
| 1 — read-only sudo | sudo ufw status, sudo ss |
⚠️ LOW |
| 2 — пакетный менеджер | sudo apt install pkg |
⚠️ MEDIUM |
| 3 — конфигурация | sudo sed -i, sudo systemctl |
⚠️ HIGH |
| 4 — полный root | sudo su, docker.sock |
❌ ТРЕБУЕТ ОБОСНОВАНИЯ |
grep -rE '(token|password|secret|api_key|apiKey|private_key|Bearer|Authorization|passphrase|GPG_KEY|AWS_ACCESS)' SKILL.md scripts/
Различать: хардкод реального токена (❌) vs пример с плейсхолдером (⚠️ допустимо).
grep -rE '(0\.0\.0\.0|ufw enable|iptables|firewall-cmd|docker.*-p.*:.*:)' SKILL.md scripts/
Критично: ufw enable без ufw allow ssh → lockout.
На 28.04.2026: 0 из 13 скиллов прошли S9. Системная проблема — ClawHub не имеет инфраструктуры подписи. S9 FAIL при остальных PASS не блокирует установку, но должен быть зафиксирован как известный риск.
Вопросы: что сломается в худшем случае? Обратимо? Нужен бэкап перед установкой?
Примеры: host-hardening → ufw enable + PasswordAuthentication no = lockout risk → бэкап sshd_config + вторая SSH-сессия. local-healthcheck → read-only = нет ущерба.
| Категория | Пример | Паттерн исправления |
|---|---|---|
| Auto-fix | ufw enable, sed -i sshd_config без спроса |
Удалить. Read-only аудит безопасен, remediation — ручной |
| Heredoc bug | << 'EOF' блокирует ${VAR} |
→ << EOF + комментарий # NOTE: no quotes |
| Binary check | systemd unit без проверки бинарника | which binary || exit 1 перед созданием юнита |
| Vendor lock-in | Cloudflare Tunnel вместо generic | Удалить vendor-specific, заменить на generic |
| Metadata mismatch | description ≠ реальное содержимое | Исправить description + документировать реальные requires |
shared/skills/<name>/openclaw skills status---
**Skill Name vX.Y.Z-poreklame**
Adapted from <author/skill> (<license>). Changes: <список>.
Canonical source: <URL>
Основан на методологии Skill Creator из OpenClaw. 6 шагов.
description (YAML frontmatter) — это триггерАртефакт: список use cases, согласованный с CEO
Для каждого use case ответить:
| Вопрос | Пример (для docker skill) |
|---|---|
| Нужны ли скрипты? | scripts/docker_health.sh — многократно переиспользуется |
| Нужны ли references? | references/docker_commands.md — справочник команд |
| Нужны ли assets? | assets/docker-compose.tmpl.yml — шаблон |
| Какой уровень свободы? | Medium: основные паттерны заданы, параметры вариативны |
# Запустить init_skill.py из skill-creator
~/.openclaw/tools/.../skills/skill-creator/scripts/init_skill.py <skill-name>
Создаётся структура:
skill-name/
├── SKILL.md ← обязательный
├── scripts/ ← опционально: .py, .sh
├── references/ ← опционально: .md
└── assets/ ← опционально: шаблоны, картинки
SKILL.md структура:
name + description (description = триггер)Правила написания:
~/.openclaw/tools/.../skills/skill-creator/scripts/package_skill.py <path/to/skill-folder> [output-dir]
Скрипт валидирует и создаёт .skill файл. Если валидация не прошла — фиксим ошибки.
---
name: my-skill-name
description: Краткое описание (это ТРИГГЕР). Use when agent needs to [конкретные сценарии].
---
# Skill Name
## Quick start
[Минимальный пример, как использовать]
## Workflow
### Step 1: ...
### Step 2: ...
## Advanced
- **Feature X**: See [references/feature-x.md](references/feature-x.md)
- **Feature Y**: See [references/feature-y.md](references/feature-y.md)
## Scripts
- `scripts/do_something.py` — [что делает, когда вызывать]
## Safety
[Если применимо: что skill НЕ делает, ограничения]
| Стадия | Где лежит |
|---|---|
| Разработка | shared/skills/<skill-name>/ |
| Пакет | shared/skills/<skill-name>.skill |
| Установка | ~/.openclaw/skills/<skill-name>/ (или через clawhub install) |
| Публикация | ClawHub (опционально, после внутреннего аудита) |
Правило: skills в разработке — в shared/skills/, доступны всем агентам. Установленные — стандартным путём OpenClaw.
references/nginx_templates.md — шаблоны конфиговscripts/nginx_test.sh — валидация конфига перед reloadinit_skill.py nginx-reverse-proxy
SKILL.md: workflow (проверить → написать конфиг → nginx -t → reload)
references/: полные шаблоны server blocks, WebSocket, SSL
package_skill.py nginx-reverse-proxy/
# → nginx-reverse-proxy.skill
ClawHub — SPA (Single Page Application). web_fetch получает HTML с JavaScript-бандлом, контент доступен не всегда.
Решение:
openclaw skills search <query><title>, <meta description>, серверно-рендеренный текстgithub.com/<author>/<skill>)# ❌ Не работает
openclaw skills install ppiankov/host-hardening
# ✅ Работает
openclaw skills install host-hardening
Не доверять description на ClawHub. Всегда читать SKILL.md и scripts/ перед аудитом.
| Флаг | Действие |
|---|---|
| SUSPICIOUS HIGH CONFIDENCE | ❌ НЕ СТАВИТЬ (автоматический стоп) |
| FLAGGED | ❌ НЕ СТАВИТЬ без ручного аудита кода |
| Suspicious (только VT) | ⚠️ Допустимо после S1-S10 |
| Нет флагов | ✅ OK |
# ❌ БАГ: ${SSH_PORT} не подставится
cat > /etc/fail2ban/jail.d/openclaw.conf << 'EOF'
port = ${SSH_PORT}
EOF
# ✅ ИСПРАВЛЕНО
cat > /etc/fail2ban/jail.d/openclaw.conf << EOF # NOTE: no quotes — vars expand
port = ${SSH_PORT}
EOF
# ✅ Добавить перед созданием systemd unit
if ! which openclaw > /dev/null 2>&1; then
echo "ERROR: openclaw binary not found. Install OpenClaw first."
exit 1
fi
Auto-fix удаляется полностью. Remediation — только ручной с явными командами.
Сравнить metadata.openclaw.requires с реальными вызовами в scripts/:
grep -oE '(which|command -v) [a-z_]+' scripts/*
grep -rE '^\s*(lsof|jq|node|curl|systemctl|docker)' scripts/*
openclaw skills search <query> # поиск
openclaw skills install <skill-name> # установка (короткий slug!)
openclaw skills install /path/to/skill # из локальной директории
openclaw skills status # проверка статуса
✓ ready — активенopenclaw-workspace — установлен в workspace (доступен этому агенту)builtin — встроенный скилл OpenClaw~/.openclaw/workspace/skills/<name>/<workspace>/skills/<name>/shared/skills/<name>/openclaw skills status | grep <name> # 1. статус
ls ~/.openclaw/workspace/skills/<name>/ # 2. файлы на месте
head -5 .../SKILL.md # 3. SKILL.md читается
ls -la .../scripts/ # 4. скрипты (если есть)
grep -r 'rm -rf\|ufw enable\|sed.*ssh' .../ # 5. нет destructive без просмотра
Рестарт агента после установки НЕ требуется для workspace-скиллов.
| Метрика | Значение |
|---|---|
| Найдено на ClawHub | 13 |
| Прошли S1-S10 полностью | 0 (S9 — системная проблема) |
| СТАВИТЬ | 3 |
| АДАПТИРОВАТЬ | 3 |
| НЕ СТАВИТЬ | 7 |
| Установлено итого | 6 |
| Типовых багов | 4 категории |
~/.openclaw/tools/.../skills/skill-creator/SKILL.md| Версия | Дата | Изменения |
|---|---|---|
| 1.0.0 | 2026-04-28 | Первая версия. S1-S10, дерево решений, 6 шагов создания, case study |
| 1.1.0 | 2026-04-28 | Аудит знаний (Элис + Денис). Добавлены разделы: 2.1 (HOWTO S1-S10), 2.2 (классификация багов + форк-фикс), 7 (поиск на ClawHub), 8 (типовые баги), 9 (установка и верификация), статистика аудита |
Документ создан как локальная копия (Wiki.js API недоступен — задача #61 на Денисе).
После починки Wiki.js — залить через GraphQL API в /ru/kb/standards/skill-creation-standard.
Добавлено: 20.05.2026 | Инцидент: Wiki.js API токен (4 дубликата за неделю)
Placeholder с троеточием (напр. eyJhbG…5UEg или d7fb7b…0668) выглядит как реальный токен. Агент копипастит шаблон скилла → получает 403 → думает «токен протух» → создаёт новый. Цикл повторяется.
Прецедент: Элис создала 4 одинаковых API-ключа Wiki.js (28.04, 03.05, 03.05, 04.05), каждый раз думая что предыдущий «протух». На деле все 4 работали.
ЗАМЕНИ_ТОКЕН, YOUR_API_KEY, ВСТАВЬ_СЮДА_ТОКЕН. Никаких eyJhbG…5UEg — это маскируется под реальный JWT.shared/company/...), переменной окружения, или явного параметра.TOKEN = "ЗАМЕНИ_НА_ТОКЕН_ИЗ_SHARED"
Не:
TOKEN = "eyJhbG…5UEg" # ❌ выглядит как JWT
Не:
TOKEN = "***" # ❌ выглядит как замаскированный секрет