Plugins
Plugin майстерні навичок
Skill Workshop є експериментальним. Він вимкнений за замовчуванням, його евристики захоплення та підказки для рецензента можуть змінюватися між релізами, а автоматичні записи слід використовувати лише в довірених робочих просторах після попереднього перегляду виводу pending-mode.
Skill Workshop — це процедурна пам’ять для навичок робочого простору. Він дає агенту змогу перетворювати
повторно використовувані робочі процеси, виправлення користувача, важко здобуті рішення та повторювані пастки
на файли SKILL.md у:
<workspace>/skills/<skill-name>/SKILL.md
Це відрізняється від довгострокової пам’яті:
- Пам’ять зберігає факти, уподобання, сутності та минулий контекст.
- Skills зберігають повторно використовувані процедури, яких агент має дотримуватися в майбутніх завданнях.
- Skill Workshop — це міст від корисного ходу до сталої навички робочого простору з перевірками безпеки та необов’язковим схваленням.
Skill Workshop корисний, коли агент вивчає процедуру, як-от:
- як перевіряти зовнішньо отримані анімовані GIF-ресурси
- як замінювати ресурси знімків екрана та перевіряти розміри
- як запускати специфічний для репозиторію QA-сценарій
- як налагоджувати повторюваний збій провайдера
- як виправляти застарілу нотатку локального робочого процесу
Він не призначений для:
- фактів на кшталт "користувачу подобається синій"
- широкої автобіографічної пам’яті
- архівування сирих транскриптів
- секретів, облікових даних або прихованого тексту підказок
- одноразових інструкцій, які не повторюватимуться
Стан за замовчуванням
Вбудований Plugin є експериментальним і вимкнений за замовчуванням, якщо його
явно не ввімкнено в plugins.entries.skill-workshop.
Маніфест Plugin не встановлює enabledByDefault: true. Значення enabled: true
за замовчуванням у схемі конфігурації Plugin застосовується лише після того, як запис Plugin уже
було вибрано й завантажено.
Експериментальний означає:
- Plugin достатньо підтримується для тестування з явним увімкненням і внутрішнього використання
- сховище пропозицій, пороги рецензента та евристики захоплення можуть розвиватися
- очікування схвалення є рекомендованим початковим режимом
- автоматичне застосування призначене для довірених особистих налаштувань або робочих просторів, а не для спільних чи ворожих середовищ з великою кількістю вхідних даних
Увімкнення
Мінімальна безпечна конфігурація:
{
plugins: {
entries: {
"skill-workshop": {
enabled: true,
config: {
autoCapture: true,
approvalPolicy: "pending",
reviewMode: "hybrid",
},
},
},
},
}
З цією конфігурацією:
- інструмент
skill_workshopдоступний - явні повторно використовувані виправлення ставляться в чергу як очікувані пропозиції
- проходи рецензента на основі порогів можуть пропонувати оновлення навичок
- жоден файл навички не записується, доки очікувану пропозицію не буде застосовано
Використовуйте автоматичні записи лише в довірених робочих просторах:
{
plugins: {
entries: {
"skill-workshop": {
enabled: true,
config: {
autoCapture: true,
approvalPolicy: "auto",
reviewMode: "hybrid",
},
},
},
},
}
approvalPolicy: "auto" усе одно використовує той самий сканер і шлях карантину. Він
не застосовує пропозиції з критичними знахідками.
Конфігурація
| Ключ | За замовчуванням | Діапазон / значення | Значення |
|---|---|---|---|
enabled |
true |
boolean | Вмикає Plugin після завантаження запису Plugin. |
autoCapture |
true |
boolean | Вмикає захоплення/рецензування після ходу для успішних ходів агента. |
approvalPolicy |
"pending" |
"pending", "auto" |
Ставити пропозиції в чергу або автоматично записувати безпечні пропозиції. |
reviewMode |
"hybrid" |
"off", "heuristic", "llm", "hybrid" |
Вибирає захоплення явних виправлень, LLM-рецензента, обидва варіанти або жоден. |
reviewInterval |
15 |
1..200 |
Запускати рецензента після такої кількості успішних ходів. |
reviewMinToolCalls |
8 |
1..500 |
Запускати рецензента після такої кількості спостережених викликів інструментів. |
reviewTimeoutMs |
45000 |
5000..180000 |
Тайм-аут для вбудованого запуску рецензента. |
maxPending |
50 |
1..200 |
Максимальна кількість очікуваних/карантинних пропозицій, що зберігаються на робочий простір. |
maxSkillBytes |
40000 |
1024..200000 |
Максимальний розмір згенерованого файлу навички/підтримки. |
Рекомендовані профілі:
// Conservative: explicit tool use only, no automatic capture.
{
autoCapture: false,
approvalPolicy: "pending",
reviewMode: "off",
}
// Review-first: capture automatically, but require approval.
{
autoCapture: true,
approvalPolicy: "pending",
reviewMode: "hybrid",
}
// Trusted automation: write safe proposals immediately.
{
autoCapture: true,
approvalPolicy: "auto",
reviewMode: "hybrid",
}
// Low-cost: no reviewer LLM call, only explicit correction phrases.
{
autoCapture: true,
approvalPolicy: "pending",
reviewMode: "heuristic",
}
Шляхи захоплення
Skill Workshop має три шляхи захоплення.
Пропозиції інструменту
Модель може напряму викликати skill_workshop, коли бачить повторно використовувану процедуру
або коли користувач просить її зберегти/оновити навичку.
Це найявніший шлях, і він працює навіть із autoCapture: false.
Евристичне захоплення
Коли autoCapture увімкнено, а reviewMode дорівнює heuristic або hybrid, Plugin
сканує успішні ходи на явні фрази виправлення від користувача:
next timefrom now onremember tomake sure toalways ... use/check/verify/record/save/preferprefer ... when/for/instead/usewhen asked
Евристика створює пропозицію з останньої відповідної інструкції користувача. Вона використовує тематичні підказки, щоб вибирати назви навичок для поширених робочих процесів:
- завдання з анімованими GIF ->
animated-gif-workflow - завдання зі знімками екрана або ресурсами ->
screenshot-asset-workflow - завдання QA або сценаріїв ->
qa-scenario-workflow - завдання GitHub PR ->
github-pr-workflow - резервний варіант ->
learned-workflows
Евристичне захоплення навмисно вузьке. Воно призначене для чітких виправлень і повторюваних нотаток процесу, а не для загального підсумовування транскриптів.
LLM-рецензент
Коли autoCapture увімкнено, а reviewMode дорівнює llm або hybrid, Plugin
запускає компактного вбудованого рецензента після досягнення порогів.
Рецензент отримує:
- текст останнього транскрипту, обмежений останніми 12 000 символів
- до 12 наявних навичок робочого простору
- до 2 000 символів із кожної наявної навички
- інструкції лише у форматі JSON
Рецензент не має інструментів:
disableTools: truetoolsAllow: []disableMessageTool: true
Рецензент повертає або { "action": "none" }, або одну пропозицію. Поле action має значення create, append або replace - надавайте перевагу append/replace, коли відповідна навичка вже існує; використовуйте create лише тоді, коли жодна наявна навичка не підходить.
Приклад create:
{
"action": "create",
"skillName": "media-asset-qa",
"title": "Media Asset QA",
"reason": "Reusable animated media acceptance workflow",
"description": "Validate externally sourced animated media before product use.",
"body": "## Workflow\n\n- Verify true animation.\n- Record attribution.\n- Store a local approved copy.\n- Verify in product UI before final reply."
}
append додає section + body. replace замінює oldText на newText у названій навичці.
Життєвий цикл пропозиції
Кожне згенероване оновлення стає пропозицією з:
idcreatedAtupdatedAtworkspaceDir- необов’язковим
agentId - необов’язковим
sessionId skillNametitlereasonsource:tool,agent_endабоreviewerstatuschange- необов’язковими
scanFindings - необов’язковим
quarantineReason
Статуси пропозицій:
pending- очікує затвердженняapplied- записано до<workspace>/skillsrejected- відхилено оператором/моделлюquarantined- заблоковано критичними знахідками сканера
Стан зберігається окремо для кожного робочого простору в каталозі стану Gateway:
<stateDir>/skill-workshop/<workspace-hash>.json
Очікувані та ізольовані пропозиції дедуплікуються за назвою skill і
payload зміни. Сховище зберігає найновіші очікувані/ізольовані пропозиції до
maxPending.
Довідник інструмента
Plugin реєструє один інструмент агента:
skill_workshop
status
Порахувати пропозиції за станом для активного робочого простору.
{ "action": "status" }
Форма результату:
{
"workspaceDir": "/path/to/workspace",
"pending": 1,
"quarantined": 0,
"applied": 3,
"rejected": 0
}
list_pending
Показати список очікуваних пропозицій.
{ "action": "list_pending" }
Щоб показати список для іншого стану:
{ "action": "list_pending", "status": "applied" }
Допустимі значення status:
pendingappliedrejectedquarantined
list_quarantine
Показати список ізольованих пропозицій.
{ "action": "list_quarantine" }
Використовуйте це, коли автоматичне захоплення, здається, нічого не робить, а в журналах згадується
skill-workshop: quarantined <skill>.
inspect
Отримати пропозицію за id.
{
"action": "inspect",
"id": "proposal-id"
}
suggest
Створити пропозицію. З approvalPolicy: "pending" (типово) вона ставиться в чергу замість запису.
{
"action": "suggest",
"skillName": "animated-gif-workflow",
"title": "Animated GIF Workflow",
"reason": "User established reusable GIF validation rules.",
"description": "Validate animated GIF assets before using them.",
"body": "## Workflow\n\n- Verify the URL resolves to image/gif.\n- Confirm it has multiple frames.\n- Record attribution and license.\n- Avoid hotlinking when a local asset is needed."
}
Примусовий безпечний запис (apply: true)
{
"action": "suggest",
"apply": true,
"skillName": "animated-gif-workflow",
"description": "Validate animated GIF assets before using them.",
"body": "## Workflow\n\n- Verify true animation.\n- Record attribution."
}
Примусово залишити очікування за автоматичної політики (apply: false)
{
"action": "suggest",
"apply": false,
"skillName": "screenshot-asset-workflow",
"description": "Screenshot replacement workflow.",
"body": "## Workflow\n\n- Verify dimensions.\n- Optimize the PNG.\n- Run the relevant gate."
}
Додати до іменованого розділу
{
"action": "suggest",
"skillName": "qa-scenario-workflow",
"section": "Workflow",
"description": "QA scenario workflow.",
"body": "- For media QA, verify generated assets render and pass final assertions."
}
Замінити точний текст
{
"action": "suggest",
"skillName": "github-pr-workflow",
"oldText": "- Check the PR.",
"newText": "- Check unresolved review threads, CI status, linked issues, and changed files before deciding."
}
apply
Застосувати очікувану пропозицію.
{
"action": "apply",
"id": "proposal-id"
}
apply відмовляється застосовувати ізольовані пропозиції:
quarantined proposal cannot be applied
reject
Позначити пропозицію як відхилену.
{
"action": "reject",
"id": "proposal-id"
}
write_support_file
Записати допоміжний файл усередині наявного або запропонованого каталогу skill.
Дозволені допоміжні каталоги верхнього рівня:
references/templates/scripts/assets/
Приклад:
{
"action": "write_support_file",
"skillName": "release-workflow",
"relativePath": "references/checklist.md",
"body": "# Release Checklist\n\n- Run release docs.\n- Verify changelog.\n"
}
Файли підтримки мають область дії робочого простору, перевіряються за шляхом, обмежуються за байтами через
maxSkillBytes, скануються та записуються атомарно.
Записи Skill
Skill Workshop записує лише в:
<workspace>/skills/<normalized-skill-name>/
Імена Skill нормалізуються:
- переводяться в нижній регістр
- послідовності символів не з
[a-z0-9_-]стають- - початкові/кінцеві неалфавітно-цифрові символи видаляються
- максимальна довжина становить 80 символів
- кінцева назва має відповідати
[a-z0-9][a-z0-9_-]{1,79}
Для create:
- якщо Skill не існує, Skill Workshop записує новий
SKILL.md - якщо він уже існує, Skill Workshop додає тіло до
## Workflow
Для append:
- якщо Skill існує, Skill Workshop додає вміст до запитаного розділу
- якщо він не існує, Skill Workshop створює мінімальний Skill, а потім додає вміст
Для replace:
- Skill уже має існувати
oldTextмає бути наявним точно- замінюється лише перший точний збіг
Усі записи атомарні й одразу оновлюють знімок Skills у пам’яті, тому новий або оновлений Skill може стати видимим без перезапуску Gateway.
Модель безпеки
Skill Workshop має сканер безпеки для згенерованого вмісту SKILL.md і файлів
підтримки.
Критичні знахідки поміщають пропозиції в карантин:
| Ідентифікатор правила | Блокує вміст, який... |
|---|---|
prompt-injection-ignore-instructions |
наказує агенту ігнорувати попередні/вищі інструкції |
prompt-injection-system |
посилається на системні промпти, повідомлення розробника або приховані інструкції |
prompt-injection-tool |
заохочує обходити дозвіл/затвердження інструментів |
shell-pipe-to-shell |
містить curl/wget, передані через pipe в sh, bash або zsh |
secret-exfiltration |
схоже, надсилає дані env/process env через мережу |
Попереджувальні знахідки зберігаються, але самі по собі не блокують:
| Ідентифікатор правила | Попереджає про... |
|---|---|
destructive-delete |
широкі команди стилю rm -rf |
unsafe-permissions |
використання дозволів стилю chmod 777 |
Пропозиції в карантині:
- зберігають
scanFindings - зберігають
quarantineReason - з’являються в
list_quarantine - не можуть бути застосовані через
apply
Щоб відновитися після пропозиції в карантині, створіть нову безпечну пропозицію з видаленим небезпечним вмістом. Не редагуйте JSON сховища вручну.
Настанови для промптів
Коли ввімкнено, Skill Workshop вставляє короткий розділ промпта, який каже агенту
використовувати skill_workshop для довготривалої процедурної пам’яті.
Настанови наголошують на:
- процедурах, а не фактах/уподобаннях
- виправленнях від користувача
- неочевидних успішних процедурах
- повторюваних помилках
- виправленні застарілих/тонких/хибних Skill через append/replace
- збереженні повторно використовуваної процедури після довгих циклів інструментів або складних виправлень
- короткому наказовому тексті Skill
- відсутності дампів стенограми
Текст режиму запису змінюється залежно від approvalPolicy:
- режим pending: ставити пропозиції в чергу; застосовувати лише після явного затвердження
- режим auto: застосовувати безпечні оновлення Skill робочого простору, коли вони явно придатні для повторного використання
Витрати та поведінка під час виконання
Евристичне захоплення не викликає модель.
LLM-рецензування використовує вбудований запуск на активній/типовій моделі агента. Воно порогове, тому за замовчуванням не запускається на кожному ході.
Рецензент:
- використовує той самий налаштований контекст провайдера/моделі, коли доступно
- повертається до типових значень агента під час виконання
- має
reviewTimeoutMs - використовує полегшений початковий контекст
- не має інструментів
- нічого не записує напряму
- може лише створити пропозицію, яка проходить звичайний шлях сканера та затвердження/карантину
Якщо рецензент завершується з помилкою, перевищує час очікування або повертає недійсний JSON, Plugin записує попереджувальне/налагоджувальне повідомлення й пропускає цей прохід рецензування.
Робочі патерни
Використовуйте Skill Workshop, коли користувач каже:
- "next time, do X"
- "from now on, prefer Y"
- "make sure to verify Z"
- "save this as a workflow"
- "this took a while; remember the process"
- "update the local skill for this"
Добрий текст Skill:
## Workflow
- Verify the GIF URL resolves to `image/gif`.
- Confirm the file has multiple frames.
- Record source URL, license, and attribution.
- Store a local copy when the asset will ship with the product.
- Verify the local asset renders in the target UI before final reply.
Поганий текст Skill:
The user asked about a GIF and I searched two websites. Then one was blocked by
Cloudflare. The final answer said to check attribution.
Причини, чому погану версію не слід зберігати:
- має форму стенограми
- не є наказовою
- містить шумні одноразові деталі
- не каже наступному агенту, що робити
Налагодження
Перевірте, чи Plugin завантажено:
openclaw plugins list --enabled
Перевірте кількість пропозицій з контексту агента/інструмента:
{ "action": "status" }
Перегляньте пропозиції в очікуванні:
{ "action": "list_pending" }
Перегляньте пропозиції в карантині:
{ "action": "list_quarantine" }
Поширені симптоми:
| Симптом | Імовірна причина | Перевірка |
|---|---|---|
| Інструмент недоступний | Запис Plugin не ввімкнено | plugins.entries.skill-workshop.enabled і openclaw plugins list |
| Автоматична пропозиція не з’являється | autoCapture: false, reviewMode: "off" або пороги не досягнуто |
Конфігурація, статус пропозицій, журнали Gateway |
| Евристика не захопила | Формулювання користувача не збіглося з патернами виправлення | Використайте явний skill_workshop.suggest або ввімкніть LLM-рецензента |
| Рецензент не створив пропозицію | Рецензент повернув none, недійсний JSON або перевищив час очікування |
Журнали Gateway, reviewTimeoutMs, пороги |
| Пропозицію не застосовано | approvalPolicy: "pending" |
list_pending, потім apply |
| Пропозиція зникла з очікування | Повторну пропозицію використано повторно, спрацювало обрізання max pending або її застосували/відхилили/помістили в карантин | status, list_pending із фільтрами статусу, list_quarantine |
| Файл Skill існує, але модель його пропускає | Знімок Skill не оновлено або gating Skill його виключає | статус openclaw skills і придатність Skill робочого простору |
Релевантні журнали:
skill-workshop: queued <skill>skill-workshop: applied <skill>skill-workshop: quarantined <skill>skill-workshop: heuristic capture skipped: ...skill-workshop: reviewer skipped: ...skill-workshop: reviewer found no update
QA-сценарії
QA-сценарії з репозиторію:
qa/scenarios/plugins/skill-workshop-animated-gif-autocreate.mdqa/scenarios/plugins/skill-workshop-pending-approval.mdqa/scenarios/plugins/skill-workshop-reviewer-autonomous.md
Запустіть детерміноване покриття:
pnpm openclaw qa suite \
--scenario skill-workshop-animated-gif-autocreate \
--scenario skill-workshop-pending-approval \
--concurrency 1
Запустіть покриття рецензента:
pnpm openclaw qa suite \
--scenario skill-workshop-reviewer-autonomous \
--concurrency 1
Сценарій рецензента навмисно окремий, бо він вмикає
reviewMode: "llm" і виконує вбудований прохід рецензента.
Коли не вмикати автоматичне застосування
Уникайте approvalPolicy: "auto", коли:
- робочий простір містить чутливі процедури
- агент працює з недовіреним введенням
- Skills спільно використовуються широкою командою
- ви все ще налаштовуєте промпти або правила сканера
- модель часто обробляє ворожий веб-/email-вміст
Спочатку використовуйте режим pending. Перемикайтеся в режим auto лише після перегляду типу Skills, які агент пропонує в цьому робочому просторі.