Langsung ke konten utama
Skill Workshop bersifat eksperimental. Fitur ini nonaktif secara default, heuristik capture dan prompt reviewer-nya dapat berubah antar rilis, dan penulisan otomatis seharusnya digunakan hanya pada workspace tepercaya setelah meninjau output mode pending terlebih dahulu. Skill Workshop adalah memori prosedural untuk Skills workspace. Fitur ini memungkinkan agen mengubah alur kerja yang dapat digunakan ulang, koreksi pengguna, perbaikan yang susah didapat, dan jebakan berulang menjadi file SKILL.md di bawah:
<workspace>/skills/<skill-name>/SKILL.md
Ini berbeda dari memori jangka panjang:
  • Memory menyimpan fakta, preferensi, entitas, dan konteks masa lalu.
  • Skills menyimpan prosedur yang dapat digunakan ulang yang seharusnya diikuti agen pada tugas masa depan.
  • Skill Workshop adalah jembatan dari giliran yang berguna ke skill workspace yang tahan lama, dengan pemeriksaan keamanan dan persetujuan opsional.
Skill Workshop berguna ketika agen mempelajari suatu prosedur seperti:
  • cara memvalidasi aset GIF animasi yang bersumber secara eksternal
  • cara mengganti aset tangkapan layar dan memverifikasi dimensinya
  • cara menjalankan skenario QA khusus repo
  • cara men-debug kegagalan provider yang berulang
  • cara memperbaiki catatan alur kerja lokal yang basi
Fitur ini tidak dimaksudkan untuk:
  • fakta seperti “pengguna menyukai warna biru”
  • memori autobiografis yang luas
  • pengarsipan transkrip mentah
  • secret, kredensial, atau teks prompt tersembunyi
  • instruksi sekali pakai yang tidak akan berulang

State default

Plugin bawaan ini bersifat eksperimental dan nonaktif secara default kecuali diaktifkan secara eksplisit di plugins.entries.skill-workshop. Manifes Plugin tidak menyetel enabledByDefault: true. Default enabled: true di dalam skema config Plugin hanya berlaku setelah entri Plugin sudah dipilih dan dimuat. Eksperimental berarti:
  • Plugin cukup didukung untuk pengujian opt-in dan dogfooding
  • penyimpanan proposal, ambang reviewer, dan heuristik capture dapat berkembang
  • persetujuan tertunda adalah mode awal yang direkomendasikan
  • penerapan otomatis ditujukan untuk penyiapan pribadi/workspace tepercaya, bukan environment bersama atau bermusuhan yang berat input

Aktifkan

Config aman minimal:
{
  plugins: {
    entries: {
      "skill-workshop": {
        enabled: true,
        config: {
          autoCapture: true,
          approvalPolicy: "pending",
          reviewMode: "hybrid",
        },
      },
    },
  },
}
Dengan config ini:
  • alat skill_workshop tersedia
  • koreksi eksplisit yang dapat digunakan ulang dimasukkan ke antrean sebagai proposal tertunda
  • lintasan reviewer berbasis ambang dapat mengusulkan pembaruan skill
  • tidak ada file skill yang ditulis sampai proposal tertunda diterapkan
Gunakan penulisan otomatis hanya di workspace tepercaya:
{
  plugins: {
    entries: {
      "skill-workshop": {
        enabled: true,
        config: {
          autoCapture: true,
          approvalPolicy: "auto",
          reviewMode: "hybrid",
        },
      },
    },
  },
}
approvalPolicy: "auto" tetap menggunakan scanner dan jalur karantina yang sama. Kebijakan ini tidak menerapkan proposal dengan temuan kritis.

Konfigurasi

KeyDefaultRange / valuesMeaning
enabledtruebooleanMengaktifkan Plugin setelah entri Plugin dimuat.
autoCapturetruebooleanMengaktifkan capture/review pasca-giliran pada giliran agen yang berhasil.
approvalPolicy"pending""pending", "auto"Masukkan proposal ke antrean atau tulis proposal aman secara otomatis.
reviewMode"hybrid""off", "heuristic", "llm", "hybrid"Memilih capture koreksi eksplisit, reviewer LLM, keduanya, atau tidak keduanya.
reviewInterval151..200Jalankan reviewer setelah sejumlah giliran berhasil ini.
reviewMinToolCalls81..500Jalankan reviewer setelah sejumlah pemanggilan alat teramati ini.
reviewTimeoutMs450005000..180000Timeout untuk run reviewer tersemat.
maxPending501..200Jumlah maksimum proposal tertunda/dikarantina yang disimpan per workspace.
maxSkillBytes400001024..200000Ukuran maksimum skill/file pendukung yang dihasilkan.
Profil yang direkomendasikan:
// Konservatif: hanya penggunaan alat eksplisit, tanpa capture otomatis.
{
  autoCapture: false,
  approvalPolicy: "pending",
  reviewMode: "off",
}
// Tinjau dulu: tangkap secara otomatis, tetapi memerlukan persetujuan.
{
  autoCapture: true,
  approvalPolicy: "pending",
  reviewMode: "hybrid",
}
// Otomasi tepercaya: tulis proposal aman segera.
{
  autoCapture: true,
  approvalPolicy: "auto",
  reviewMode: "hybrid",
}
// Biaya rendah: tanpa panggilan reviewer LLM, hanya frasa koreksi eksplisit.
{
  autoCapture: true,
  approvalPolicy: "pending",
  reviewMode: "heuristic",
}

Jalur capture

Skill Workshop memiliki tiga jalur capture.

Saran alat

Model dapat langsung memanggil skill_workshop ketika melihat prosedur yang dapat digunakan ulang atau ketika pengguna memintanya untuk menyimpan/memperbarui skill. Ini adalah jalur yang paling eksplisit dan tetap berfungsi bahkan dengan autoCapture: false.

Capture heuristik

Saat autoCapture diaktifkan dan reviewMode adalah heuristic atau hybrid, Plugin memindai giliran yang berhasil untuk frasa koreksi pengguna yang eksplisit:
  • next time
  • from now on
  • remember to
  • make sure to
  • always ... use/check/verify/record/save/prefer
  • prefer ... when/for/instead/use
  • when asked
Heuristik membuat proposal dari instruksi pengguna terbaru yang cocok. Heuristik ini menggunakan petunjuk topik untuk memilih nama skill bagi 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 GitHub PR -> github-pr-workflow
  • fallback -> learned-workflows
Capture heuristik sengaja sempit. Ini ditujukan untuk koreksi yang jelas dan catatan proses yang dapat diulang, bukan untuk peringkasan transkrip umum.

Reviewer LLM

Saat autoCapture diaktifkan dan reviewMode adalah llm atau hybrid, Plugin menjalankan reviewer tersemat yang ringkas setelah ambang tercapai. Reviewer menerima:
  • teks transkrip terbaru, dibatasi hingga 12.000 karakter terakhir
  • hingga 12 Skills workspace yang ada
  • hingga 2.000 karakter dari setiap skill yang ada
  • instruksi hanya-JSON
Reviewer tidak memiliki alat:
  • disableTools: true
  • toolsAllow: []
  • disableMessageTool: true
Reviewer mengembalikan salah satu dari { "action": "none" } atau satu proposal. Field action adalah create, append, atau replace — pilih append/replace saat skill yang relevan sudah ada; gunakan create hanya ketika tidak ada skill yang ada 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 yang disebutkan.

Siklus hidup proposal

Setiap pembaruan yang dihasilkan menjadi proposal dengan:
  • id
  • createdAt
  • updatedAt
  • workspaceDir
  • agentId opsional
  • sessionId opsional
  • skillName
  • title
  • reason
  • source: tool, agent_end, atau reviewer
  • status
  • change
  • scanFindings opsional
  • quarantineReason opsional
Status proposal:
  • pending - menunggu persetujuan
  • applied - ditulis ke <workspace>/skills
  • rejected - ditolak oleh operator/model
  • quarantined - diblokir oleh temuan scanner kritis
State disimpan per workspace di bawah direktori state Gateway:
<stateDir>/skill-workshop/<workspace-hash>.json
Proposal pending dan quarantined dideduplikasi berdasarkan nama skill dan payload perubahan. Store menyimpan proposal pending/quarantined terbaru hingga maxPending.

Referensi alat

Plugin mendaftarkan satu alat agen:
skill_workshop

status

Hitung proposal berdasarkan state untuk workspace aktif.
{ "action": "status" }
Bentuk hasil:
{
  "workspaceDir": "/path/to/workspace",
  "pending": 1,
  "quarantined": 0,
  "applied": 3,
  "rejected": 0
}

list_pending

Daftarkan proposal pending.
{ "action": "list_pending" }
Untuk mendaftar status lain:
{ "action": "list_pending", "status": "applied" }
Nilai status yang valid:
  • pending
  • applied
  • rejected
  • quarantined

list_quarantine

Daftarkan proposal yang dikarantina.
{ "action": "list_quarantine" }
Gunakan ini saat capture otomatis tampak tidak melakukan apa-apa dan log menyebut 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."
}
{
  "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."
}
{
  "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

Terapkan proposal pending.
{
  "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 dibatasi ke workspace, diperiksa path-nya, dibatasi byte oleh maxSkillBytes, dipindai, dan ditulis secara atomik.

Penulisan skill

Skill Workshop menulis hanya di bawah:
<workspace>/skills/<normalized-skill-name>/
Nama skill dinormalisasi:
  • huruf kecil semua
  • rangkaian non [a-z0-9_-] menjadi -
  • non-alfanumerik di awal/akhir dihapus
  • panjang maksimum 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.md baru
  • jika sudah ada, Skill Workshop menambahkan body ke ## Workflow
Untuk append:
  • jika skill ada, Skill Workshop menambahkan ke section yang diminta
  • jika belum ada, Skill Workshop membuat skill minimal lalu menambahkan
Untuk replace:
  • skill harus sudah ada
  • oldText harus ada persis
  • hanya kecocokan persis pertama yang diganti
Semua penulisan bersifat atomik dan segera me-refresh snapshot Skills di memori, sehingga skill baru atau yang diperbarui dapat terlihat tanpa restart Gateway.

Model keamanan

Skill Workshop memiliki scanner keamanan pada konten SKILL.md yang dihasilkan dan file pendukung. Temuan kritis mengarantina proposal:
Rule idBlocks content that…
prompt-injection-ignore-instructionsmenyuruh agen mengabaikan instruksi sebelumnya/lebih tinggi
prompt-injection-systemmerujuk prompt sistem, pesan developer, atau instruksi tersembunyi
prompt-injection-toolmendorong bypass izin/persetujuan alat
shell-pipe-to-shellmenyertakan curl/wget yang dipipe ke sh, bash, atau zsh
secret-exfiltrationtampak mengirim data env/process env melalui jaringan
Temuan peringatan dipertahankan tetapi tidak memblokir dengan sendirinya:
Rule idWarns on…
destructive-deleteperintah gaya rm -rf yang luas
unsafe-permissionspenggunaan izin gaya chmod 777
Proposal yang dikarantina:
  • mempertahankan scanFindings
  • mempertahankan quarantineReason
  • muncul di list_quarantine
  • tidak dapat diterapkan melalui apply
Untuk memulihkan proposal yang dikarantina, buat proposal aman baru dengan konten yang tidak aman dihapus. Jangan edit JSON store secara manual.

Panduan prompt

Saat diaktifkan, Skill Workshop menyuntikkan bagian prompt singkat yang memberi tahu agen untuk menggunakan skill_workshop sebagai memori prosedural yang tahan lama. Panduan tersebut menekankan:
  • prosedur, bukan fakta/preferensi
  • koreksi pengguna
  • prosedur sukses yang tidak jelas
  • jebakan yang berulang
  • perbaikan skill yang basi/tipis/salah melalui append/replace
  • menyimpan prosedur yang dapat digunakan ulang setelah loop alat yang panjang atau perbaikan sulit
  • teks skill imperatif yang singkat
  • tidak ada dump transkrip
Teks mode penulisan berubah dengan approvalPolicy:
  • mode pending: antrekan saran; terapkan hanya setelah persetujuan eksplisit
  • mode auto: terapkan pembaruan skill workspace yang aman saat jelas dapat digunakan ulang

Biaya dan perilaku runtime

Capture heuristik tidak memanggil model. Review LLM menggunakan run tersemat pada model agen aktif/default. Review ini berbasis ambang sehingga secara default tidak berjalan pada setiap giliran. Reviewer:
  • menggunakan konteks provider/model yang sama saat tersedia
  • fallback ke default agen runtime
  • memiliki reviewTimeoutMs
  • menggunakan konteks bootstrap yang ringan
  • tidak memiliki alat
  • tidak menulis apa pun secara langsung
  • hanya dapat mengeluarkan proposal yang melewati scanner normal dan jalur persetujuan/karantina
Jika reviewer gagal, timeout, atau mengembalikan JSON tidak valid, Plugin mencatat pesan peringatan/debug dan melewati lintasan review tersebut.

Pola operasional

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 yang buruk tidak boleh disimpan:
  • berbentuk transkrip
  • tidak imperatif
  • menyertakan detail sekali pakai yang berisik
  • tidak memberi tahu agen berikutnya apa yang harus dilakukan

Debugging

Periksa apakah Plugin dimuat:
openclaw plugins list --enabled
Periksa jumlah proposal dari konteks agen/alat:
{ "action": "status" }
Periksa proposal pending:
{ "action": "list_pending" }
Periksa proposal yang dikarantina:
{ "action": "list_quarantine" }
Gejala umum:
SymptomLikely causeCheck
Alat tidak tersediaEntri Plugin tidak diaktifkanplugins.entries.skill-workshop.enabled dan openclaw plugins list
Tidak ada proposal otomatis munculautoCapture: false, reviewMode: "off", atau ambang belum tercapaiConfig, status proposal, log Gateway
Heuristik tidak menangkapKata-kata pengguna tidak cocok dengan pola koreksiGunakan skill_workshop.suggest eksplisit atau aktifkan reviewer LLM
Reviewer tidak membuat proposalReviewer mengembalikan none, JSON tidak valid, atau timeoutLog Gateway, reviewTimeoutMs, ambang
Proposal tidak diterapkanapprovalPolicy: "pending"list_pending, lalu apply
Proposal hilang dari pendingProposal duplikat digunakan ulang, pruning max pending, atau sudah applied/rejected/quarantinedstatus, list_pending dengan filter status, list_quarantine
File skill ada tetapi model melewatkannyaSnapshot skill tidak di-refresh atau gating skill mengecualikannyastatus openclaw skills dan kelayakan skill workspace
Log yang 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.md
  • qa/scenarios/plugins/skill-workshop-pending-approval.md
  • qa/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 lintasan reviewer tersemat.

Kapan tidak mengaktifkan auto apply

Hindari approvalPolicy: "auto" saat:
  • workspace berisi prosedur sensitif
  • agen bekerja pada input yang tidak tepercaya
  • skill dibagikan ke tim yang luas
  • Anda masih menyetel prompt atau aturan scanner
  • model sering menangani konten web/email yang bermusuhan
Gunakan mode pending terlebih dahulu. Beralih ke mode auto hanya setelah meninjau jenis skill yang diusulkan agen di workspace tersebut.

Dokumentasi terkait