স্কিপ করে মূল কন্টেন্ট এ যান

Skill ডেভেলপমেন্ট গাইড

একটি Skill হলো Agent সিস্টেমের জন্য একটি এক্সটেনশন প্যাকেজ, যা একটি প্রম্পট + টুল স্ক্রিপ্ট + রেফারেন্স উপকরণ নিয়ে গঠিত। Skill-এর মাধ্যমে আপনি AI-তে ডোমেইন-নির্দিষ্ট জ্ঞান এবং কাস্টম টুল ক্ষমতা ইনজেক্ট করতে পারেন।

Skill ডিরেক্টরি স্ট্রাকচার

my-skill/
├── SKILL.cat.md # Required: metadata + prompt (entry file)
├── scripts/ # Optional: SkillScript tool scripts
│ ├── search.js
│ └── export.js
└── references/ # Optional: reference material files
├── api-docs.md
└── examples.json

SKILL.cat.md হলো Skill-এর এন্ট্রি ফাইল। URL থেকে ইনস্টল করার সময়, ScriptCat প্রথমে এই ফাইলটি ফেচ করে, তারপর এর frontmatter-এ ঘোষিত scripts এবং references অনুযায়ী আপেক্ষিক পথ দিয়ে বাকি ফাইলগুলো ফেচ করে।

SKILL.cat.md ফরম্যাট

SKILL.cat.md মেটাডেটা ঘোষণা করতে YAML frontmatter ব্যবহার করে, এবং Markdown বডি AI-কে দেওয়া প্রম্পট হিসেবে কাজ করে।

---
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"]); URL দিয়ে ইনস্টল করার সময় scripts/ ডিরেক্টরি থেকে স্বয়ংক্রিয়ভাবে ফেচ হয়
referencesstring[]নারেফারেন্স-উপকরণ ফাইলের নামের তালিকা (যেমন ["api-docs.md"]); URL দিয়ে ইনস্টল করার সময় references/ ডিরেক্টরি থেকে স্বয়ংক্রিয়ভাবে ফেচ হয়
configobjectনাকনফিগারেশন ফিল্ডের সংজ্ঞা

কনফিগারেশন ফিল্ড টাইপ

typeবিবরণটাইপ-নির্দিষ্ট প্রপার্টি
textটেক্সট ইনপুটsecret: UI-তে এটি মাস্ক করা আছে কিনা
numberসংখ্যা ইনপুট
selectড্রপডাউনvalues: বিকল্প তালিকা (string[])
switchটগল

সাধারণ প্রপার্টি:

প্রপার্টিটাইপবিবরণ
titlestringডিসপ্লে শিরোনাম
requiredbooleanএটি আবশ্যক কিনা
defaultunknownডিফল্ট মান
secretbooleanএটি সংবেদনশীল তথ্য কিনা

ব্যবহারকারী ম্যানেজমেন্ট পেজে Skill-এর সেটিংসে এই কনফিগ মানগুলো পূরণ করে।

প্রম্পট বডি

Markdown বডি AI-এর সিস্টেম প্রম্পট হিসেবে ইনজেক্ট হয়। লেখার টিপস:

  • Skill যে টুলগুলো প্রদান করে এবং সেগুলো কী কাজে লাগে তা বর্ণনা করুন
  • প্রতিটি টুলের প্যারামিটারগুলোর অর্থ এবং ব্যবহারের নিয়ম ব্যাখ্যা করুন
  • সাধারণ ব্যবহারের পরিস্থিতি এবং যে বিষয়গুলো খেয়াল রাখতে হবে তা দিন
  • রেফারেন্স উপকরণ থাকলে, কীভাবে সেটি পরামর্শ করতে হবে তা ব্যাখ্যা করুন

SkillScript টুল স্ক্রিপ্ট

একটি SkillScript হলো একটি টুল স্ক্রিপ্ট যা AI কল করতে পারে। প্রতিটি 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টুলের নাম (AI যখন কল করে তখন ব্যবহৃত হয়)get_weather
@descriptionটুলের বিবরণ (AI এটি কখন কল করবে তা ঠিক করতে ব্যবহার করে)Look up city weather
@paramপ্যারামিটার সংজ্ঞা (একাধিকবার থাকতে পারে)নিচে দেখুন
@grantপ্রয়োজনীয় GM API অনুমতিCAT.agent.opfs
@requireবাহ্যিক লাইব্রেরি URL (লোড ও ক্যাশ করা হয়)https://cdn.example.com/lib.js
@timeoutসেকেন্ডে এক্সিকিউশন টাইমআউট60 (ডিফল্ট 300)

@param সিনট্যাক্স

@param paramName type[enumValues] [required] description

টাইপ: string, number, boolean

এনাম ভ্যালু (ঐচ্ছিক): বর্গ brackets-এ আবদ্ধ, কমা দিয়ে আলাদা

আবশ্যক মার্কার: বিবরণের আগে [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

প্যারামিটার সংজ্ঞাগুলো টুল কলের সময় LLM ব্যবহারের জন্য স্বয়ংক্রিয়ভাবে JSON Schema-তে রূপান্তরিত হয়।

স্ক্রিপ্ট লেখা

// ==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] — AI যে প্যারামিটার অবজেক্ট পাঠিয়েছে
কনফিগ পাওয়াCAT_CONFIG — একটি গ্লোবাল, শুধু-পঠন অবজেক্ট যা ব্যবহারকারীর কনফিগারেশন ধারণ করে
রিটার্ন ভ্যালুreturn স্টেটমেন্ট একটি JSON-সিরিয়ালাইজেবল ভ্যালু ফেরত দেয়
অ্যাসিঙ্ক সাপোর্টasync/await, fetch, এবং Promise সব সমর্থিত
বাহ্যিক লাইব্রেরি@require দিয়ে লোড হয়, স্থানীয়ভাবে ক্যাশ হয়
টাইমআউটডিফল্ট ৩০০ সেকেন্ড, @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/ ডিরেক্টরির ফাইলগুলো AI পরামর্শ করতে পারে এমন রেফারেন্স উপকরণ হিসেবে কাজ করে। AI যখন প্রয়োজন হয়, তখন বিল্ট-ইন read_reference টুলের মাধ্যমে সেগুলো পড়ে।

রেফারেন্স উপকরণের জন্য উপযুক্ত কনটেন্ট:

  • API ডকুমেন্টেশন
  • ডেটা ফরম্যাট স্পেসিফিকেশন
  • ব্যবহারের উদাহরণের সংগ্রহ
  • ডোমেইন জ্ঞানের নথি

উদাহরণ রিপোজিটরি

Skill উদাহরণের একটি আনুষ্ঠানিকভাবে রক্ষণাবেক্ষণ করা রিপোজিটরি আছে, যেখানে বেশ কয়েকটি রেডি-টু-ব্যবহার Skill এবং স্ক্রিপ্ট API উদাহরণ রয়েছে:

scriptscat/skills

Skill তালিকা:

ডিরেক্টরিবিবরণইনস্টল
browser-automation/পেজ বিশ্লেষণ, DOM ম্যানিপুলেশন, ফর্ম পূরণ, স্ক্রিনশট, নেভিগেশনInstall
scheduled-tasks/ক্রন নির্ধারিত কাজ (ইন্টারনাল + ইভেন্ট মোড)Install
skill-creator/নতুন Skill তৈরি, পরীক্ষা এবং প্যাকেজ করতে সাহায্য করেInstall
file-parser/সাধারণ ফাইল ফরম্যাট পার্স করে (Excel, PDF, Word, CSV, PPT)Install
scriptcat-dev/ScriptCat/Tampermonkey স্ক্রিপ্ট ডেভেলপমেন্ট সহকারীInstall
synology-office-sheet/Synology Office স্প্রেডশিট পড়া/লেখাInstall
wechat-publisher/WeChat অফিসিয়াল অ্যাকাউন্ট অপারেশন সহকারী — কনটেন্ট সংগ্রহ, নিবন্ধ লেখা এবং প্রকাশনাInstall
xiaohongshu-publisher/Xiaohongshu (RED) অপারেশন সহকারী — নোট লেখা, ইমেজ জেনারেশন এবং প্রকাশনাInstall

উদাহরণ কোড:

ডিরেক্টরিবিবরণ
examples/conversation/Conversation API উদাহরণ — চ্যাট, স্ট্রিমিং, টুল কল
examples/dom/DOM API উদাহরণ — পেজ পড়া, ফর্ম পূরণ, ট্যাব ম্যানেজমেন্ট
examples/config/Skill কনফিগ উদাহরণ — কনফিগ ফিল্ড ঘোষণা এবং CAT_CONFIG ব্যবহার
examples/page_copilot.user.jsএকটি সম্পূর্ণ ব্যবহারকারী স্ক্রিপ্ট উদাহরণ — স্ট্রিমিং UI সহ রাইট-ক্লিক AI সহকারী

উদাহরণ রিপোজিটরির কোড থেকে Skill ডেভেলপমেন্ট শেখা শুরু করা একটি ভালো ধারণা।

ইনস্টলেশন পদ্ধতি

URL থেকে ইনস্টল

ব্রাউজারে সরাসরি একটি SKILL.cat.md URL খুলুন; ScriptCat এটি আটকাবে এবং একটি ইনস্টল পেজ পপ আপ করবে।

আপনি ম্যানেজমেন্ট পেজ → Agent → Skill ম্যানেজমেন্ট থেকেও এটি করতে পারেন:

  1. URL-ইনস্টল বাটনে ক্লিক করুন
  2. SKILL.cat.md URL পেস্ট করুন
  3. ইনস্টল নিশ্চিত করুন

ScriptCat প্রথমে SKILL.cat.md ফেচ করে, তারপর এর frontmatter-এ ঘোষিত scripts এবং references অনুযায়ী আপেক্ষিক পথ দিয়ে বাকি ফাইলগুলো ফেচ করে। ইনস্টল করার পরে, installUrl রেকর্ড করা হয়, তাই পরবর্তীতে সংস্করণ নম্বর দিয়ে আপডেট চেক করা যায়।

একটি স্ক্রিপ্ট থেকে ইনস্টল

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

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

Skill কীভাবে লোড হয়

Skill কনটেক্সট ব্যবহার অপ্টিমাইজ করতে তিন-স্তরের প্রগতিশীল লোডিং ব্যবহার করে:

স্তরকখনকনটেন্ট
সারাংশকথোপকথনের শুরুতেSkill নাম + বিবরণ + টুল তালিকা (সিস্টেম প্রম্পটে ইনজেক্ট হয়)
প্রম্পটAI সক্রিয়ভাবে load_skill কল করলেSKILL.cat.md-এর সম্পূর্ণ বডি
টুলload_skill-এর পরেSkillScript-গুলো কলযোগ্য LLM টুল হিসেবে নিবন্ধিত হয়

AI যখন একটি Skill-এর সম্পূর্ণ কনটেন্ট এবং টুল লোড করার প্রয়োজন হয় তখন স্বয়ংক্রিয়ভাবে load_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 |
| ... | ... |