Перейти до основного вмісту

Посібник з розробки Skill

Skill — це пакет розширення для системи Agent, що складається з підказки + скриптів інструментів + довідкових матеріалів. Skill дозволяють впроваджувати доменні знання та власні можливості інструментів у AI.

Структура каталогу Skill

my-skill/
├── SKILL.cat.md # Обов'язково: метадані + підказка (вхідний файл)
├── scripts/ # За бажанням: скрипти інструментів SkillScript
│ ├── search.js
│ └── export.js
└── references/ # За бажанням: файли довідкових матеріалів
├── api-docs.md
└── examples.json

SKILL.cat.md — це вхідний файл Skill. Під час встановлення з URL ScriptCat спочатку отримує цей файл, потім отримує інші файли за їхніми відносними шляхами на основі scripts і references, оголошених у frontmatter.

Формат 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"]); автоматично отримується з каталогу scripts/ під час встановлення за URL
referencesstring[]НіСписок назв довідкових матеріалів (напр. ["api-docs.md"]); автоматично отримується з каталогу references/ під час встановлення за URL
configobjectНіВизначення полів конфігурації

Типи полів конфігурації

typeОписВластивості, специфічні для типу
textТекстове введенняsecret: чи маскується в інтерфейсі
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 APICAT.agent.opfs
@requireURL зовнішньої бібліотеки (завантажується та кешується)https://cdn.example.com/lib.js
@timeoutЧас очікування виконання в секундах60 (за замовчуванням 300)

Синтаксис @param

@param paramName type[enumValues] [required] description

Типи: string, number, boolean

Значення enum (за бажанням): у квадратних дужках, розділені комами

Позначка обов'язковості: [required] перед описом

// Обов'язковий рядковий параметр
// @param city string [required] City name

// Рядковий параметр з enum
// @param unit string [celsius,fahrenheit] Temperature unit

// Необов'язковий числовий параметр
// @param days number Number of forecast days

// Логічний параметр
// @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. Отримати параметри, які AI передав через arguments[0]
const { city, days = 3 } = arguments[0];

// 2. CAT_CONFIG надає конфігурацію Skill, яку користувач заповнив на сторінці керування
const apiKey = CAT_CONFIG.apiKey;
const unit = CAT_CONFIG.unit || "celsius";

// 3. Виконати фактичну роботу
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. Повернути результат AI через `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, кешуються локально
Час очікування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==

// Бібліотеку, завантажену через @require, можна використовувати безпосередньо
const result = _.groupBy(data, "category");
return result;

Зовнішні бібліотеки кешуються під час першого завантаження, і наступні виконання використовують кешовану версію безпосередньо.

Довідкові матеріали

Файли в каталозі references/ слугують довідковими матеріалами, до яких може звертатися AI. Коли AI потребує їх, він читає їх через вбудований інструмент read_reference.

Вміст, який добре підходить для довідкових матеріалів:

  • Документація API
  • Специфікації форматів даних
  • Колекції прикладів використання
  • Документи з доменними знаннями

Приклад репозиторію

Існує офіційно підтримуваний репозиторій прикладів Skill, що містить кілька готових до використання Skill та прикладів скриптових API:

scriptscat/skills

Список Skill:

КаталогОписВстановлення
browser-automation/Аналіз сторінок, операції з DOM, заповнення форм, скріншоти, навігаціяВстановити
scheduled-tasks/Cron-заплановані завдання (внутрішній + режим подій)Встановити
skill-creator/Допомагає створювати, тестувати та пакувати нові SkillВстановити
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/Приклади API розмови — чат, потокова передача, виклики інструментів
examples/dom/Приклади DOM API — читання сторінок, заповнення форм, керування вкладками
examples/config/Приклади конфігурації Skill — оголошення полів конфігурації та використання CAT_CONFIG
examples/page_copilot.user.jsПовний приклад користувацького скрипта — AI-асистент правої кнопки миші з потоковим інтерфейсом

Хороша ідея почати вивчати розробку Skill з коду в прикладному репозиторії.

Методи встановлення

Встановлення з URL

Відкрийте URL SKILL.cat.md безпосередньо в браузері; ScriptCat перехопить його та покаже сторінку встановлення.

Ви також можете зробити це зі сторінки керування → Agent → Керування Skill:

  1. Натисніть кнопку встановлення за URL
  2. Вставте URL 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 }]
);

Як завантажуються Skill

Skill використовують трирівневе поступове завантаження для оптимізації використання контексту:

РівеньКолиВміст
ПідсумокНа початку розмовиНазва Skill + опис + список інструментів (впроваджується в системну підказку)
ПідказкаКоли AI активно викликає load_skillПовне тіло SKILL.cat.md
ІнструментиПісля load_skillSkillScript реєструються як викликані інструменти LLM

AI викликає 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 |
| ... | ... |