Plugins
Plugin ورشة المهارات
Skill Workshop تجريبي. وهو معطل افتراضيًا، وقد تتغير استدلالات الالتقاط ومطالبات المراجع بين الإصدارات، ويجب استخدام عمليات الكتابة التلقائية فقط في مساحات العمل الموثوقة بعد مراجعة مخرجات وضع الانتظار أولًا.
Skill Workshop هو ذاكرة إجرائية لمهارات مساحة العمل. يتيح للوكيل تحويل سير العمل القابل لإعادة الاستخدام، وتصحيحات المستخدم، والإصلاحات المكتسبة بصعوبة، والمزالق المتكررة، إلى ملفات SKILL.md ضمن:
<workspace>/skills/<skill-name>/SKILL.md
وهذا يختلف عن الذاكرة طويلة الأمد:
- تخزن الذاكرة الحقائق والتفضيلات والكيانات والسياق السابق.
- تخزن Skills الإجراءات القابلة لإعادة الاستخدام التي يجب على الوكيل اتباعها في المهام المستقبلية.
- Skill Workshop هو الجسر من دورة مفيدة إلى مهارة دائمة في مساحة العمل، مع فحوصات أمان وموافقة اختيارية.
يكون Skill Workshop مفيدًا عندما يتعلم الوكيل إجراءً مثل:
- كيفية التحقق من أصول GIF المتحركة المستمدة من مصادر خارجية
- كيفية استبدال أصول لقطات الشاشة والتحقق من الأبعاد
- كيفية تشغيل سيناريو ضمان جودة خاص بالمستودع
- كيفية تصحيح فشل متكرر لدى موفر
- كيفية إصلاح ملاحظة سير عمل محلية قديمة
وهو غير مخصص لـ:
- حقائق مثل "المستخدم يحب اللون الأزرق"
- ذاكرة ذاتية واسعة
- أرشفة النصوص الخام للمحادثة
- الأسرار أو بيانات الاعتماد أو نصوص المطالبات المخفية
- تعليمات لمرة واحدة لن تتكرر
الحالة الافتراضية
الـ 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 |
قيمة منطقية | يمكّن الـ Plugin بعد تحميل إدخال الـ Plugin. |
autoCapture |
true |
قيمة منطقية | يمكّن الالتقاط/المراجعة بعد الدورة عند نجاح دورات الوكيل. |
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-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 في المهارة المسماة.
دورة حياة المقترح
يصبح كل تحديث منشأ مقترحًا يتضمن:
idcreatedAtupdatedAtworkspaceDiragentIdاختياريًاsessionIdاختياريًاskillNametitlereasonsource:toolأوagent_endأوreviewerstatuschangescanFindingsاختياريًاquarantineReasonاختياريًا
حالات المقترح:
pending- في انتظار الموافقةapplied- كُتبت إلى<workspace>/skillsrejected- رُفضت بواسطة المشغّل/النموذجquarantined- حُظرت بسبب نتائج ماسح حرجة
تُخزَّن الحالة لكل مساحة عمل ضمن دليل حالة Gateway:
<stateDir>/skill-workshop/<workspace-hash>.json
تُزال التكرارات من المقترحات المعلّقة والمحجورة حسب اسم skill وحمولة
التغيير. يحتفظ المخزن بأحدث المقترحات المعلّقة/المحجورة حتى
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
اجلب مقترحًا حسب المعرّف.
{
"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."
}
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
طبّق مقترحًا معلّقًا.
{
"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>/
تُطبَّع أسماء المهارات:
- تُحوَّل إلى أحرف صغيرة
- تتحول سلاسل غير
[a-z0-9_-]إلى- - تُزال المحارف غير الأبجدية الرقمية من البداية والنهاية
- الحد الأقصى للطول هو 80 حرفًا
- يجب أن يطابق الاسم النهائي
[a-z0-9][a-z0-9_-]{1,79}
بالنسبة إلى create:
- إذا لم تكن المهارة موجودة، يكتب Skill Workshop ملف
SKILL.mdجديدًا - إذا كانت موجودة بالفعل، يضيف Skill Workshop المتن إلى
## Workflow
بالنسبة إلى append:
- إذا كانت المهارة موجودة، يضيف Skill Workshop إلى القسم المطلوب
- إذا لم تكن موجودة، ينشئ Skill Workshop مهارة بالحد الأدنى ثم يضيف إليها
بالنسبة إلى replace:
- يجب أن تكون المهارة موجودة بالفعل
- يجب أن يكون
oldTextموجودًا حرفيًا - يُستبدل أول تطابق حرفي فقط
كل عمليات الكتابة ذرية وتحدّث لقطة Skills الموجودة في الذاكرة فورًا، لذلك يمكن أن تصبح المهارة الجديدة أو المحدّثة مرئية دون إعادة تشغيل Gateway.
نموذج السلامة
يحتوي Skill Workshop على ماسح سلامة لمحتوى SKILL.md المُنشأ وملفات الدعم.
النتائج الحرجة تعزل المقترحات:
| معرّف القاعدة | يحظر المحتوى الذي... |
|---|---|
prompt-injection-ignore-instructions |
يطلب من الوكيل تجاهل التعليمات السابقة/الأعلى |
prompt-injection-system |
يشير إلى مطالبات النظام أو رسائل المطور أو التعليمات المخفية |
prompt-injection-tool |
يشجع على تجاوز إذن/موافقة الأداة |
shell-pipe-to-shell |
يتضمن تمرير curl/wget إلى sh أو bash أو zsh |
secret-exfiltration |
يبدو أنه يرسل بيانات env/بيئة العملية عبر الشبكة |
تُحتفظ بنتائج التحذير لكنها لا تحظر بمفردها:
| معرّف القاعدة | يحذر عند... |
|---|---|
destructive-delete |
أوامر واسعة بنمط rm -rf |
unsafe-permissions |
استخدام أذونات بنمط chmod 777 |
المقترحات المعزولة:
- تحتفظ بـ
scanFindings - تحتفظ بـ
quarantineReason - تظهر في
list_quarantine - لا يمكن تطبيقها عبر
apply
للتعافي من مقترح معزول، أنشئ مقترحًا آمنًا جديدًا بعد إزالة المحتوى غير الآمن. لا تعدّل JSON المخزن يدويًا.
إرشادات المطالبات
عند التفعيل، يحقن Skill Workshop قسم مطالبة قصيرًا يخبر الوكيل
باستخدام skill_workshop للذاكرة الإجرائية الدائمة.
تركز الإرشادات على:
- الإجراءات، وليس الحقائق/التفضيلات
- تصحيحات المستخدم
- الإجراءات الناجحة غير البديهية
- العثرات المتكررة
- إصلاح المهارات القديمة/الضعيفة/الخاطئة عبر الإضافة/الاستبدال
- حفظ إجراء قابل لإعادة الاستخدام بعد حلقات أدوات طويلة أو إصلاحات صعبة
- نص مهارة قصير بصيغة الأمر
- عدم تفريغ النصوص الكاملة للمحادثات
يتغير نص وضع الكتابة مع approvalPolicy:
- وضع الانتظار: ضع الاقتراحات في قائمة الانتظار؛ ولا تطبقها إلا بعد موافقة صريحة
- الوضع التلقائي: طبّق تحديثات مهارات مساحة العمل الآمنة عندما تكون قابلة لإعادة الاستخدام بوضوح
التكاليف وسلوك وقت التشغيل
لا يستدعي الالتقاط الاستدلالي نموذجًا.
تستخدم مراجعة LLM تشغيلًا مضمنًا على نموذج الوكيل النشط/الافتراضي. وهي قائمة على العتبات لذلك لا تعمل في كل دور افتراضيًا.
المراجع:
- يستخدم سياق المزوّد/النموذج نفسه عند توفره
- يعود إلى الإعدادات الافتراضية لوكيل وقت التشغيل
- لديه
reviewTimeoutMs - يستخدم سياق تمهيد خفيف
- لا يملك أدوات
- لا يكتب شيئًا مباشرة
- يمكنه فقط إصدار مقترح يمر عبر مسار الماسح العادي والموافقة/العزل
إذا فشل المراجع أو انتهت مهلته أو أعاد JSON غير صالح، يسجل Plugin رسالة تحذير/تصحيح ويتخطى مرور المراجعة ذلك.
أنماط التشغيل
استخدم Skill Workshop عندما يقول المستخدم:
- "في المرة القادمة، افعل X"
- "من الآن فصاعدًا، فضّل Y"
- "تأكد من التحقق من Z"
- "احفظ هذا كسير عمل"
- "استغرق هذا وقتًا؛ تذكّر العملية"
- "حدّث المهارة المحلية لهذا"
نص مهارة جيد:
## 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.
نص مهارة ضعيف:
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 |
| اختفى المقترح من المعلّقات | أُعيد استخدام مقترح مكرر، أو تقليم الحد الأقصى للمعلّقات، أو طُبّق/رُفض/عُزل | status، و list_pending مع مرشحات الحالة، و list_quarantine |
| ملف المهارة موجود لكن النموذج يفوته | لم تُحدّث لقطة المهارات أو أن بوابة المهارات تستبعده | حالة openclaw skills وأهلية مهارات مساحة العمل |
السجلات ذات الصلة:
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 عبر فريق واسع
- ما زلت تضبط المطالبات أو قواعد الماسح
- يتعامل النموذج كثيرًا مع محتوى ويب/بريد إلكتروني عدائي
استخدم وضع الانتظار أولًا. انتقل إلى الوضع التلقائي فقط بعد مراجعة نوع Skills التي يقترحها الوكيل في مساحة العمل تلك.