Plugins
Plugin lokakarya Skill
Skill Workshop bersifat eksperimental. Fitur ini dinonaktifkan secara default, heuristik pengambilan dan prompt peninjaunya dapat berubah antar-rilis, dan penulisan otomatis sebaiknya digunakan hanya di ruang kerja tepercaya setelah meninjau output mode tertunda terlebih dahulu.
Skill Workshop adalah memori prosedural untuk Skills ruang kerja. Fitur ini memungkinkan agen mengubah alur kerja yang dapat digunakan kembali, koreksi pengguna, perbaikan yang diperoleh dengan susah payah, dan kendala berulang menjadi berkas SKILL.md di bawah:
<workspace>/skills/<skill-name>/SKILL.md
Ini berbeda dari memori jangka panjang:
- Memory menyimpan fakta, preferensi, entitas, dan konteks sebelumnya.
- Skills menyimpan prosedur yang dapat digunakan kembali yang harus diikuti agen pada tugas mendatang.
- Skill Workshop adalah jembatan dari satu giliran yang berguna ke skill ruang kerja yang tahan lama, dengan pemeriksaan keselamatan dan persetujuan opsional.
Skill Workshop berguna ketika agen mempelajari prosedur seperti:
- cara memvalidasi aset GIF animasi yang bersumber dari luar
- cara mengganti aset tangkapan layar dan memverifikasi dimensi
- cara menjalankan skenario QA khusus repo
- cara men-debug kegagalan penyedia yang berulang
- cara memperbaiki catatan alur kerja lokal yang basi
Fitur ini tidak ditujukan untuk:
- fakta seperti "pengguna menyukai warna biru"
- memori autobiografis yang luas
- pengarsipan transkrip mentah
- rahasia, kredensial, atau teks prompt tersembunyi
- instruksi sekali pakai yang tidak akan berulang
Status default
Plugin bawaan ini bersifat eksperimental dan dinonaktifkan secara default kecuali diaktifkan secara eksplisit di plugins.entries.skill-workshop.
Manifes Plugin tidak menetapkan enabledByDefault: true. Default enabled: true di dalam skema konfigurasi Plugin hanya berlaku setelah entri Plugin sudah dipilih dan dimuat.
Eksperimental berarti:
- Plugin didukung secukupnya untuk pengujian opt-in dan penggunaan internal
- penyimpanan proposal, ambang peninjau, dan heuristik pengambilan dapat berkembang
- persetujuan tertunda adalah mode awal yang direkomendasikan
- penerapan otomatis ditujukan untuk pengaturan pribadi/ruang kerja tepercaya, bukan lingkungan bersama atau tidak tepercaya yang padat input
Mengaktifkan
Konfigurasi aman minimal:
{
plugins: {
entries: {
"skill-workshop": {
enabled: true,
config: {
autoCapture: true,
approvalPolicy: "pending",
reviewMode: "hybrid",
},
},
},
},
}
Dengan konfigurasi ini:
- alat
skill_workshoptersedia - koreksi eksplisit yang dapat digunakan kembali diantrekan sebagai proposal tertunda
- pemeriksaan peninjau berbasis ambang dapat mengusulkan pembaruan skill
- tidak ada berkas skill yang ditulis sampai proposal tertunda diterapkan
Gunakan penulisan otomatis hanya di ruang kerja tepercaya:
{
plugins: {
entries: {
"skill-workshop": {
enabled: true,
config: {
autoCapture: true,
approvalPolicy: "auto",
reviewMode: "hybrid",
},
},
},
},
}
approvalPolicy: "auto" tetap menggunakan pemindai dan jalur karantina yang sama. Ini tidak menerapkan proposal dengan temuan kritis.
Konfigurasi
| Kunci | Default | Rentang / nilai | Makna |
|---|---|---|---|
enabled |
true |
boolean | Mengaktifkan Plugin setelah entri Plugin dimuat. |
autoCapture |
true |
boolean | Mengaktifkan pengambilan/peninjauan pasca-giliran pada giliran agen yang berhasil. |
approvalPolicy |
"pending" |
"pending", "auto" |
Mengantrekan proposal atau menulis proposal aman secara otomatis. |
reviewMode |
"hybrid" |
"off", "heuristic", "llm", "hybrid" |
Memilih pengambilan koreksi eksplisit, peninjau LLM, keduanya, atau tidak keduanya. |
reviewInterval |
15 |
1..200 |
Menjalankan peninjau setelah jumlah giliran berhasil ini. |
reviewMinToolCalls |
8 |
1..500 |
Menjalankan peninjau setelah jumlah panggilan alat yang diamati ini. |
reviewTimeoutMs |
45000 |
5000..180000 |
Batas waktu untuk proses peninjau tertanam. |
maxPending |
50 |
1..200 |
Maksimum proposal tertunda/dikarantina yang disimpan per ruang kerja. |
maxSkillBytes |
40000 |
1024..200000 |
Ukuran maksimum berkas skill/pendukung yang dihasilkan. |
Profil yang direkomendasikan:
// Konservatif: hanya penggunaan alat eksplisit, tanpa pengambilan otomatis.
{
autoCapture: false,
approvalPolicy: "pending",
reviewMode: "off",
}
// Dahulukan peninjauan: ambil secara otomatis, tetapi wajibkan persetujuan.
{
autoCapture: true,
approvalPolicy: "pending",
reviewMode: "hybrid",
}
// Otomatisasi tepercaya: tulis proposal aman segera.
{
autoCapture: true,
approvalPolicy: "auto",
reviewMode: "hybrid",
}
// Biaya rendah: tanpa panggilan LLM peninjau, hanya frasa koreksi eksplisit.
{
autoCapture: true,
approvalPolicy: "pending",
reviewMode: "heuristic",
}
Jalur pengambilan
Skill Workshop memiliki tiga jalur pengambilan.
Saran alat
Model dapat memanggil skill_workshop secara langsung ketika melihat prosedur yang dapat digunakan kembali atau ketika pengguna memintanya untuk menyimpan/memperbarui skill.
Ini adalah jalur yang paling eksplisit dan berfungsi bahkan dengan autoCapture: false.
Pengambilan heuristik
Ketika autoCapture diaktifkan dan reviewMode adalah heuristic atau hybrid, Plugin memindai giliran yang berhasil untuk frasa koreksi pengguna eksplisit:
next timefrom now onremember tomake sure toalways ... use/check/verify/record/save/preferprefer ... when/for/instead/usewhen asked
Heuristik membuat proposal dari instruksi pengguna terbaru yang cocok. Ini menggunakan petunjuk topik untuk memilih nama skill untuk alur kerja umum:
- tugas GIF animasi ->
animated-gif-workflow - tugas tangkapan layar atau aset ->
screenshot-asset-workflow - tugas QA atau skenario ->
qa-scenario-workflow - tugas PR GitHub ->
github-pr-workflow - cadangan ->
learned-workflows
Pengambilan heuristik sengaja dibuat sempit. Ini ditujukan untuk koreksi yang jelas dan catatan proses yang dapat diulang, bukan untuk peringkasan transkrip umum.
Peninjau LLM
Ketika autoCapture diaktifkan dan reviewMode adalah llm atau hybrid, Plugin menjalankan peninjau tertanam yang ringkas setelah ambang tercapai.
Peninjau menerima:
- teks transkrip terbaru, dibatasi hingga 12.000 karakter terakhir
- hingga 12 skill ruang kerja yang sudah ada
- hingga 2.000 karakter dari setiap skill yang sudah ada
- instruksi khusus JSON
Peninjau tidak memiliki alat:
disableTools: truetoolsAllow: []disableMessageTool: true
Peninjau mengembalikan { "action": "none" } atau satu proposal. Bidang action adalah create, append, atau replace - utamakan append/replace ketika skill yang relevan sudah ada; gunakan create hanya ketika tidak ada skill yang cocok.
Contoh 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 menambahkan section + body. replace menukar oldText dengan newText di skill bernama.
Siklus hidup proposal
Setiap pembaruan yang dihasilkan menjadi proposal dengan:
idcreatedAtupdatedAtworkspaceDiragentIdopsionalsessionIdopsionalskillNametitlereasonsource:tool,agent_end, ataureviewerstatuschangescanFindingsopsionalquarantineReasonopsional
Status proposal:
pending- menunggu persetujuanapplied- ditulis ke<workspace>/skillsrejected- ditolak oleh operator/modelquarantined- diblokir oleh temuan scanner kritis
Status disimpan per workspace di bawah direktori status Gateway:
<stateDir>/skill-workshop/<workspace-hash>.json
Proposal tertunda dan dikarantina didedupplikasi berdasarkan nama skill dan payload
perubahan. Penyimpanan menyimpan proposal tertunda/dikarantina terbaru hingga
maxPending.
Referensi tool
Plugin mendaftarkan satu tool agent:
skill_workshop
status
Hitung proposal berdasarkan status untuk workspace aktif.
{ "action": "status" }
Bentuk hasil:
{
"workspaceDir": "/path/to/workspace",
"pending": 1,
"quarantined": 0,
"applied": 3,
"rejected": 0
}
list_pending
Cantumkan proposal tertunda.
{ "action": "list_pending" }
Untuk mencantumkan status lain:
{ "action": "list_pending", "status": "applied" }
Nilai status yang valid:
pendingappliedrejectedquarantined
list_quarantine
Cantumkan proposal yang dikarantina.
{ "action": "list_quarantine" }
Gunakan ini saat penangkapan otomatis tampaknya tidak melakukan apa pun dan log menyebutkan
skill-workshop: quarantined <skill>.
inspect
Ambil proposal berdasarkan id.
{
"action": "inspect",
"id": "proposal-id"
}
suggest
Buat proposal. Dengan approvalPolicy: "pending" (default), ini mengantrekan alih-alih menulis.
{
"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."
}
Force a safe write (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."
}
Force pending under auto policy (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."
}
Append to a named section
{
"action": "suggest",
"skillName": "qa-scenario-workflow",
"section": "Workflow",
"description": "QA scenario workflow.",
"body": "- For media QA, verify generated assets render and pass final assertions."
}
Replace exact text
{
"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
Terapkan proposal tertunda.
{
"action": "apply",
"id": "proposal-id"
}
apply menolak proposal yang dikarantina:
quarantined proposal cannot be applied
reject
Tandai proposal sebagai ditolak.
{
"action": "reject",
"id": "proposal-id"
}
write_support_file
Tulis file pendukung di dalam direktori skill yang sudah ada atau yang diusulkan.
Direktori pendukung tingkat atas yang diizinkan:
references/templates/scripts/assets/
Contoh:
{
"action": "write_support_file",
"skillName": "release-workflow",
"relativePath": "references/checklist.md",
"body": "# Release Checklist\n\n- Run release docs.\n- Verify changelog.\n"
}
File pendukung dicakupkan ke ruang kerja, diperiksa jalurnya, dibatasi byte oleh
maxSkillBytes, dipindai, dan ditulis secara atomik.
Penulisan Skill
Skill Workshop hanya menulis di bawah:
<workspace>/skills/<normalized-skill-name>/
Nama Skill dinormalisasi:
- diubah menjadi huruf kecil
- rangkaian non
[a-z0-9_-]menjadi- - non-alfanumerik di awal/akhir dihapus
- panjang maksimum adalah 80 karakter
- nama akhir harus cocok dengan
[a-z0-9][a-z0-9_-]{1,79}
Untuk create:
- jika skill belum ada, Skill Workshop menulis
SKILL.mdbaru - jika sudah ada, Skill Workshop menambahkan isi ke
## Workflow
Untuk append:
- jika skill ada, Skill Workshop menambahkan ke bagian yang diminta
- jika belum ada, Skill Workshop membuat skill minimal lalu menambahkannya
Untuk replace:
- skill harus sudah ada
oldTextharus ada secara persis- hanya kecocokan persis pertama yang diganti
Semua penulisan bersifat atomik dan langsung menyegarkan snapshot skill dalam memori, sehingga skill baru atau yang diperbarui dapat terlihat tanpa memulai ulang Gateway.
Model keamanan
Skill Workshop memiliki pemindai keamanan pada konten SKILL.md yang dihasilkan dan file
pendukung.
Temuan kritis mengarantina proposal:
| ID aturan | Memblokir konten yang... |
|---|---|
prompt-injection-ignore-instructions |
menyuruh agen mengabaikan instruksi sebelumnya/lebih tinggi |
prompt-injection-system |
merujuk prompt sistem, pesan developer, atau instruksi tersembunyi |
prompt-injection-tool |
mendorong bypass izin/persetujuan tool |
shell-pipe-to-shell |
menyertakan curl/wget yang dipipe ke sh, bash, atau zsh |
secret-exfiltration |
tampak mengirim data env/process env melalui jaringan |
Temuan peringatan dipertahankan tetapi tidak memblokir sendiri:
| ID aturan | Memperingatkan pada... |
|---|---|
destructive-delete |
perintah luas bergaya rm -rf |
unsafe-permissions |
penggunaan izin bergaya chmod 777 |
Proposal yang dikarantina:
- menyimpan
scanFindings - menyimpan
quarantineReason - muncul di
list_quarantine - tidak dapat diterapkan melalui
apply
Untuk memulihkan dari proposal yang dikarantina, buat proposal aman baru dengan konten tidak aman dihapus. Jangan edit JSON penyimpanan secara manual.
Panduan prompt
Saat diaktifkan, Skill Workshop menyisipkan bagian prompt singkat yang memberi tahu agen
untuk menggunakan skill_workshop bagi memori prosedural yang tahan lama.
Panduan menekankan:
- prosedur, bukan fakta/preferensi
- koreksi pengguna
- prosedur berhasil yang tidak jelas
- jebakan berulang
- perbaikan skill yang usang/tipis/salah melalui append/replace
- menyimpan prosedur yang dapat digunakan ulang setelah loop tool panjang atau perbaikan sulit
- teks skill imperatif singkat
- tanpa dump transkrip
Teks mode penulisan berubah dengan approvalPolicy:
- mode pending: antrekan saran; terapkan hanya setelah persetujuan eksplisit
- mode auto: terapkan pembaruan skill ruang kerja yang aman saat jelas dapat digunakan ulang
Biaya dan perilaku runtime
Penangkapan heuristik tidak memanggil model.
Tinjauan LLM menggunakan run tertanam pada model agen aktif/default. Ini berbasis ambang batas sehingga secara default tidak berjalan pada setiap giliran.
Reviewer:
- menggunakan konteks provider/model terkonfigurasi yang sama saat tersedia
- fallback ke default agen runtime
- memiliki
reviewTimeoutMs - menggunakan konteks bootstrap ringan
- tidak memiliki tool
- tidak menulis apa pun secara langsung
- hanya dapat menerbitkan proposal yang melewati jalur pemindai normal dan persetujuan/karantina
Jika reviewer gagal, timeout, atau mengembalikan JSON tidak valid, plugin mencatat pesan peringatan/debug dan melewati pass tinjauan tersebut.
Pola operasi
Gunakan Skill Workshop saat pengguna mengatakan:
- "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"
Teks skill yang baik:
## 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.
Teks skill yang buruk:
The user asked about a GIF and I searched two websites. Then one was blocked by
Cloudflare. The final answer said to check attribution.
Alasan versi buruk tidak boleh disimpan:
- berbentuk transkrip
- tidak imperatif
- menyertakan detail sekali pakai yang bising
- tidak memberi tahu agen berikutnya apa yang harus dilakukan
Debugging
Periksa apakah plugin dimuat:
openclaw plugins list --enabled
Periksa jumlah proposal dari konteks agen/tool:
{ "action": "status" }
Inspeksi proposal tertunda:
{ "action": "list_pending" }
Inspeksi proposal yang dikarantina:
{ "action": "list_quarantine" }
Gejala umum:
| Gejala | Kemungkinan penyebab | Periksa |
|---|---|---|
| Tool tidak tersedia | Entri Plugin tidak diaktifkan | plugins.entries.skill-workshop.enabled dan openclaw plugins list |
| Tidak ada proposal otomatis muncul | autoCapture: false, reviewMode: "off", atau ambang batas tidak terpenuhi |
Konfigurasi, status proposal, log Gateway |
| Heuristik tidak menangkap | Susunan kata pengguna tidak cocok dengan pola koreksi | Gunakan skill_workshop.suggest eksplisit atau aktifkan reviewer LLM |
| Reviewer tidak membuat proposal | Reviewer mengembalikan none, JSON tidak valid, atau timeout |
Log Gateway, reviewTimeoutMs, ambang batas |
| Proposal tidak diterapkan | approvalPolicy: "pending" |
list_pending, lalu apply |
| Proposal hilang dari pending | Proposal duplikat digunakan ulang, pemangkasan pending maksimum, atau diterapkan/ditolak/dikarantina | status, list_pending dengan filter status, list_quarantine |
| File skill ada tetapi model melewatkannya | Snapshot skill tidak disegarkan atau gating skill mengecualikannya | status openclaw skills dan kelayakan skill ruang kerja |
Log relevan:
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
Skenario QA
Skenario QA berbasis repo:
qa/scenarios/plugins/skill-workshop-animated-gif-autocreate.mdqa/scenarios/plugins/skill-workshop-pending-approval.mdqa/scenarios/plugins/skill-workshop-reviewer-autonomous.md
Jalankan cakupan deterministik:
pnpm openclaw qa suite \
--scenario skill-workshop-animated-gif-autocreate \
--scenario skill-workshop-pending-approval \
--concurrency 1
Jalankan cakupan reviewer:
pnpm openclaw qa suite \
--scenario skill-workshop-reviewer-autonomous \
--concurrency 1
Skenario reviewer sengaja dipisahkan karena mengaktifkan
reviewMode: "llm" dan menguji pass reviewer tertanam.
Kapan tidak mengaktifkan penerapan otomatis
Hindari approvalPolicy: "auto" ketika:
- ruang kerja berisi prosedur sensitif
- agen sedang menangani input tidak tepercaya
- skills dibagikan ke tim yang luas
- Anda masih menyetel prompt atau aturan pemindai
- model sering menangani konten web/email yang bermusuhan
Gunakan mode pending terlebih dahulu. Beralih ke mode auto hanya setelah meninjau jenis skills yang diusulkan agen di ruang kerja tersebut.