إنتقل إلى المحتوى الرئيسي

دليل تطوير Skills

Skill هو حزمة توسعة لنظام Agent، مكونة من مطالبة + سكرپتات أدوات + مواد مرجعية. تتيح لك Skills حقن معرفة متخصصة وقدرات أدوات مخصصة في الذكاء الاصطناعي.

هيكل دليل Skill

my-skill/
├── SKILL.cat.md # إلزامي: البيانات الوصفية + المطالبة (ملف الدخول)
├── scripts/ # اختياري: سكرپتات أدوات SkillScript
│ ├── search.js
│ └── export.js
└── references/ # اختياري: ملفات المواد المرجعية
├── api-docs.md
└── examples.json

SKILL.cat.md هو ملف دخول Skill. عند التثبيت من رابط، يجلب ScriptCat هذا الملف أولاً، ثم يجلب الملفات الأخرى بمساراتها النسبية بناءً على scripts و references المُصرح عنهما في frontmatter.

صيغة SKILL.cat.md

يستخدم SKILL.cat.md frontmatter بصيغة YAML لتصريح البيانات الوصفية، مع كون نص Markdown بمثابة المطالبة المعطاة للذكاء الاصطناعي.

---
name: "weather-assistant"
description: "Weather lookup assistant, supports weather queries and forecasts for cities worldwide"
config:
apiKey:
title: "OpenWeather API Key"
type: "text"
secret: true
required: true
unit:
title: "Temperature unit"
type: "select"
values: ["celsius", "fahrenheit"]
default: "celsius"
detailed:
title: "Detailed mode"
type: "switch"
default: false
maxDays:
title: "Forecast days"
type: "number"
default: 7
---

# Weather assistant

You can use the following tools to look up weather information:

## Tool description

- **get_weather**: look up the current weather and forecast for a specified city
- The `city` parameter is the city name (Chinese and English names both supported)
- The `days` parameter is the number of forecast days

## Usage rules

1. When the user asks about weather, confirm the city name first
2. By default, return current weather + a 3-day forecast
3. Display temperature according to the configured unit

حقول البيانات الوصفية

الحقلالنوعإلزاميالوصف
namestringنعممعرف Skill فريد (الإنجليزية بنمط kebab-case موصى بها)
descriptionstringنعموصف قصير (يظهر في القائمة)
versionstringلاالإصدار (صيغة semver، مثل 1.0.0)، يستخدم لفحوصات التحديث
scriptsstring[]لاقائمة أسماء ملفات السكرپتات (مثل ["search.js"])؛ تُجلب تلقائياً من دليل scripts/ عند التثبيت عبر رابط
referencesstring[]لاقائمة أسماء ملفات المواد المرجعية (مثل ["api-docs.md"])؛ تُجلب تلقائياً من دليل references/ عند التثبيت عبر رابط
configobjectلاتعريفات حقول التكوين

أنواع حقول التكوين

النوعالوصفالخصائص الخاصة بالنوع
textإدخال نصsecret: يحدد ما إذا كان مخفياً في الواجهة
numberإدخال رقم
selectقائمة منسدلةvalues: قائمة الخيارات (string[])
switchمفتاح تبديل

الخصائص المشتركة:

الخاصيةالنوعالوصف
titlestringعنوان العرض
requiredbooleanيحدد ما إذا كان إلزامياً
defaultunknownالقيمة الافتراضية
secretbooleanيحدد ما إذا كانت معلومات حساسة

يملأ المستخدم قيم التكوين هذه في إعدادات Skill على صفحة الإدارة.

نص المطالبة

يُحقن نص Markdown كمطالبة نظام الذكاء الاصطناعي. نصائح الكتابة:

  • صف الأدوات التي يوفرها Skill والغرض منها
  • اشرح معنى معلمات كل أداة وقواعد استخدامها
  • أعط سيناريوهات الاستخدام النموذجية ونقاط الانتباه
  • إذا كانت هناك مواد مرجعية، اشرح كيفية الرجوع إليها

سكرپتات أدوات SkillScript

SkillScript هو سكرپت أداة يمكن للذكاء الاصطناعي استدعاءه. يُسجل كل ملف SkillScript كأداة LLM واحدة.

صيغة البيانات الوصفية

// ==SkillScript==
// @name get_weather
// @description Look up weather information for a specified city
// @param city string [required] City name, Chinese and English names both supported
// @param days number Number of forecast days, defaults to 3
// @param format string [json,text] Output format
// @grant CAT.agent.opfs
// @require https://cdn.example.com/utils.js
// @timeout 60
// ==SkillScript==

حقول البيانات الوصفية

الوسمالوصفمثال
@nameاسم الأداة (يستخدم عندما يستدعيها الذكاء الاصطناعي)get_weather
@descriptionوصف الأداة (يستخدمه الذكاء الاصطناعي لتحديد متى يستدعيها)Look up city weather
@paramتعريف المعامل (يمكن أن يظهر عدة مرات)انظر أدناه
@grantإذن واجهة GM API الذي يحتاجهCAT.agent.opfs
@requireرابط مكتبة خارجية (تُحمّل وتُخزن مؤقتاً)https://cdn.example.com/lib.js
@timeoutمهلة التنفيذ بالثواني60 (الافتراضي 300)

صيغة @param

@param paramName type[enumValues] [required] description

الأنواع: string, number, boolean

قيم التعداد (اختيارية): بين قوسين مربعين، مفصولة بفواصل

علامة الإلزام: [required] قبل الوصف

// Required string parameter
// @param city string [required] City name

// String parameter with an enum
// @param unit string [celsius,fahrenheit] Temperature unit

// Optional number parameter
// @param days number Number of forecast days

// Boolean parameter
// @param detailed boolean Whether to return detailed information

تُحول تعريفات المعاملات تلقائياً إلى JSON Schema ليستخدمها LLM عند استدعاء الأداة.

كتابة السكرپت

// ==SkillScript==
// @name get_weather
// @description Look up weather information for a specified city
// @param city string [required] City name
// @param days number Number of forecast days
// @timeout 30
// ==SkillScript==

// 1. Receive the parameters the AI passed in via arguments[0]
const { city, days = 3 } = arguments[0];

// 2. CAT_CONFIG provides the Skill configuration the user filled in on the management page
const apiKey = CAT_CONFIG.apiKey;
const unit = CAT_CONFIG.unit || "celsius";

// 3. Do the actual work
const url = `https://api.openweathermap.org/data/2.5/forecast?q=${city}&cnt=${days}&units=${unit === "celsius" ? "metric" : "imperial"}&appid=${apiKey}`;
const response = await fetch(url);

if (!response.ok) {
throw new Error(`API request failed: ${response.status}`);
}

const data = await response.json();

// 4. Return the result to the AI via `return`
return {
city: data.city.name,
country: data.city.country,
forecasts: data.list.map(item => ({
date: item.dt_txt,
temp: item.main.temp,
description: item.weather[0].description
}))
};

بيئة التنفيذ

الميزةالوصف
موقع التنفيذبيئة معزولة (بدون وصول إلى الـ DOM)
الحصول على المعاملاتarguments[0] — كائن المعاملات الذي مرره الذكاء الاصطناعي
الحصول على التكوينCAT_CONFIG — كائن عام للقراءة فقط يحتوي تكوين المستخدم
قيمة الإرجاعتعيد عبارة return قيمة قابلة للتسلسل JSON
دعم asyncasync/await و fetch و Promise مدعومة جميعاً
المكتبات الخارجيةتُحمّل عبر @require، وتُخزن مؤقتاً محلياً
المهلة300 ثانية افتراضياً، قابلة للتخصيص عبر @timeout
واجهة GM APIقابلة للاستخدام بمجرد التصريح عنها عبر @grant (مثل CAT.agent.opfs)

المكتبات الخارجية @require

// ==SkillScript==
// @name analyze
// @description Data analysis
// @require https://cdn.jsdelivr.net/npm/lodash@4/lodash.min.js
// ==SkillScript==

// A library loaded via @require can be used directly
const result = _.groupBy(data, "category");
return result;

تُخزن المكتبات الخارجية مؤقتاً عند التحميل الأول، وتستخدم عمليات التنفيذ اللاحقة النسخة المخزنة مباشرة.

المواد المرجعية

تعمل الملفات الموجودة في دليل references/ كمواد مرجعية يمكن للذكاء الاصطناعي الرجوع إليها. عندما يحتاجها الذكاء الاصطناعي، يقرأها عبر الأداة المدمجة read_reference.

محتوى مناسب للمواد المرجعية:

  • وثائق واجهات البرمجة
  • مواصفات صيغ البيانات
  • مجموعات أمثلة الاستخدام
  • وثائق المعرفة المتخصصة

مستودع الأمثلة

يوجد مستودع أمثلة Skills تتم صيانته رسمياً، يحتوي على عدة Skills جاهزة للاستخدام وأمثلة لواجهات برمجة السكرپتات:

scriptscat/skills

قائمة Skills:

الدليلالوصفالتثبيت
browser-automation/تحليل الصفحات، معالجة الـ DOM، تعبئة النماذج، لقطات الشاشة، التنقلتثبيت
scheduled-tasks/مهام Cron المجدولة (وضع داخلي + حدث)تثبيت
skill-creator/يساعد في إنشاء واختبار وتعبئة Skills جديدةتثبيت
file-parser/يحلل صيغ الملفات الشائعة (Excel, PDF, Word, CSV, PPT)تثبيت
scriptcat-dev/مساعد تطوير سكرپتات ScriptCat/Tampermonkeyتثبيت
synology-office-sheet/قراءة/كتابة جداول بيانات Synology Officeتثبيت
wechat-publisher/مساعد عمليات الحساب الرسمي WeChat — جمع المحتوى وكتابة المقالات والنشرتثبيت
xiaohongshu-publisher/مساعد عمليات Xiaohongshu (RED) — كتابة الملاحظات وتوليد الصور والنشرتثبيت

أمثلة الأكواد:

الدليلالوصف
examples/conversation/أمثلة واجهة برمجة الحوار — chat, streaming, استدعاءات الأدوات
examples/dom/أمثلة واجهة برمجة DOM — قراءة الصفحات، تعبئة النماذج، إدارة التبويبات
examples/config/أمثلة تكوين Skill — تصريح حقول التكوين واستخدام CAT_CONFIG
examples/page_copilot.user.jsمثال كامل لسكرپت مستخدم — مساعد ذكاء اصطناعي بزر الفأرة الأيمن مع واجهة متدفقة

فكرة جيدة أن تبدأ تعلم تطوير Skills من الكود في مستودع الأمثلة.

طرق التثبيت

التثبيت من رابط

افتح رابط SKILL.cat.md مباشرة في المتصفح؛ سيعترضه ScriptCat ويعرض صفحة تثبيت.

يمكنك أيضاً القيام بذلك من صفحة الإدارة ← Agent ← إدارة Skills:

  1. انقر على زر التثبيت عبر الرابط
  2. الصق رابط SKILL.cat.md
  3. أكد التثبيت

يجلب ScriptCat SKILL.cat.md أولاً، ثم يجلب الملفات الأخرى بمساراتها النسبية بناءً على scripts و references المُصرح عنهما في frontmatter. بعد التثبيت، يُسجل installUrl، بحيث يمكن لاحقاً التحقق من التحديثات حسب رقم الإصدار.

التثبيت من سكرپت

// ==UserScript==
// @grant CAT.agent.skills
// ==/UserScript==

await CAT.agent.skills.install(
skillMdContent,
[{ name: "search.js", code: scriptCode }],
[{ name: "docs.md", content: docsContent }]
);

كيف يتم تحميل Skills

تستخدم Skills تحميلاً تدريجياً ثلاثي المستويات لتحسين استخدام السياق:

المستوىمتىالمحتوى
الملخصفي بداية حواراسم Skill + الوصف + قائمة الأدوات (محقونة في المطالبة النظامية)
المطالبةعندما يستدعي الذكاء الاصطناعي load_skill بنشاطالنص الكامل لملف SKILL.cat.md
الأدواتبعد load_skillتُسجل SkillScripts كأدوات LLM قابلة للاستدعاء

يستدعي الذكاء الاصطناعي load_skill تلقائياً عندما يحتاج إلى تحميل المحتوى الكامل والأدوات الخاصة بـ Skill.

مثال كامل

هيكل الدليل

translator-skill/
├── SKILL.cat.md
├── scripts/
│ └── translate.js
└── references/
└── language-codes.md

SKILL.cat.md

---
name: "translator"
description: "Multilingual translation tool, supports 100+ languages"
version: "1.0.0"
scripts:
- translate.js
references:
- language-codes.md
config:
apiKey:
title: "Translation API Key"
type: "text"
secret: true
required: true
defaultTarget:
title: "Default target language"
type: "select"
values: ["zh", "en", "ja", "ko", "fr", "de", "es"]
default: "zh"
---

# Translation assistant

Use the `translate` tool to translate text. Refer to language-codes.md for the full list of language codes.

## Usage rules

- If the user hasn't specified a target language, use the default language from the configuration
- Long text is automatically translated in chunks
- Preserve the original formatting (Markdown, code blocks, etc.)

scripts/translate.js

// ==SkillScript==
// @name translate
// @description Translate text into a specified language
// @param text string [required] The text to translate
// @param target string Target language code (uses the config value by default)
// @param source string Source language code (auto-detected by default)
// @timeout 60
// ==SkillScript==

const { text, target, source } = arguments[0];
const apiKey = CAT_CONFIG.apiKey;
const targetLang = target || CAT_CONFIG.defaultTarget || "zh";

const response = await fetch("https://api.example.com/translate", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${apiKey}`
},
body: JSON.stringify({
text,
target_language: targetLang,
source_language: source || "auto"
})
});

if (!response.ok) {
throw new Error(`Translation failed: ${response.statusText}`);
}

const result = await response.json();
return {
original: text,
translated: result.translated_text,
source_language: result.detected_language,
target_language: targetLang
};

references/language-codes.md

# Language code reference

| Code | Language |
|------|------|
| zh | Chinese |
| en | English |
| ja | Japanese |
| ko | Korean |
| fr | French |
| de | German |
| es | Spanish |
| ... | ... |