Спецификация на формата за умения
Форматът skills.md дефинира как уменията са структурирани, конфигурирани и изпълнявани. Тази спецификация гарантира последователно поведение във всички умения на Tajo.
Структура на файла
Едно умение се дефинира в един markdown файл с YAML frontmatter:
---name: customer-syncversion: 2.1.0description: Sync customer data to Brevo contactscategory: data-syncstatus: stable
triggers: - event: customer_created - event: customer_updated - event: customer_deleted
actions: - brevo/create-contact - brevo/update-contact - brevo/delete-contact
brevoEndpoints: - POST /v3/contacts - PUT /v3/contacts/{identifier} - DELETE /v3/contacts/{identifier}
permissions: - contacts:write - contacts:read---
# Customer Sync
Automatically synchronize customer data from your platform to Brevo contacts.
## Overview
This skill listens for customer lifecycle events and mirrors changes to Brevo...Полета в frontmatter
Задължителни полета
| Поле | Тип | Описание |
|---|---|---|
name | string | Уникален идентификатор (kebab-case) |
version | string | Семантична версия (напр. “2.1.0”) |
description | string | Кратко описание (макс. 160 знака) |
category | enum | Едно от: data-sync, email-marketing, sms-whatsapp, loyalty, analytics, integrations |
triggers | array | Събития, които активират това умение |
actions | array | Операции, които това умение може да изпълнява |
Незадължителни полета
| Поле | Тип | По подразбиране | Описание |
|---|---|---|---|
status | enum | stable | Едно от: stable, beta, experimental |
brevoEndpoints | array | [] | Използвани API крайни точки на Brevo |
permissions | array | [] | Необходими разрешения за API на Brevo |
relatedSkills | array | [] | ID на свързани умения |
featured | boolean | false | Откроява в каталога на уменията |
Тригери
Тригерите дефинират какви събития активират уменнието.
Тригери от тип събитие
triggers: - event: cart_abandoned conditions: - cart_value: "> 50" # Minimum cart value - items_count: ">= 1" # At least one item - time_since_activity: "> 30m" # 30 minutes of inactivity debounce: 5m # Wait 5 minutes before re-triggeringПланирани тригери
triggers: - schedule: "0 9 * * *" # Cron expression (daily at 9am) timezone: "America/New_York" - schedule: every_hour - schedule: every_dayWebhook тригери
triggers: - webhook: /skills/customer-sync/trigger method: POST authentication: api_keyОператори за условия
| Оператор | Описание | Пример |
|---|---|---|
= | Равно | status: "active" |
!= | Различно | status: "!= deleted" |
> | По-голямо от | cart_value: "> 50" |
>= | По-голямо или равно | items: ">= 1" |
< | По-малко от | age: "< 30" |
<= | По-малко или равно | quantity: "<= 10" |
contains | Съдържа низ | email: "contains @gmail.com" |
starts_with | Префикс на низ | name: "starts_with Dr." |
in | Стойност в списък | country: "in US,CA,UK" |
Действия
Действията дефинират какви операции изпълнява уменнието.
Дефиниция на действие
actions: - id: send_reminder_email type: brevo/send-email parameters: template_id: 12345 to: "{{ contact.email }}" params: first_name: "{{ contact.firstName }}" cart_items: "{{ cart.items }}" retry: attempts: 3 backoff: exponential on_error: continue # or 'stop'Типове действия
| Тип | Описание |
|---|---|
brevo/send-email | Изпращане на транзакционен имейл |
brevo/send-sms | Изпращане на SMS съобщение |
brevo/send-whatsapp | Изпращане на WhatsApp съобщение |
brevo/create-contact | Създаване на нов контакт |
brevo/update-contact | Обновяване на атрибути на контакт |
brevo/delete-contact | Изтриване на контакт |
brevo/add-to-list | Добавяне на контакт към списък |
brevo/remove-from-list | Премахване на контакт от списък |
brevo/track-event | Проследяване на персонализирано събитие |
http/request | HTTP заявка |
transform/map | Трансформация на данни |
control/delay | Изчакване преди продължаване |
control/condition | Разклоняване по условие |
Променливи в шаблон
Използвайте синтаксис {{ }} за обръщане към данни:
parameters: to: "{{ contact.email }}" subject: "Your order #{{ order.number }} has shipped" params: name: "{{ contact.firstName | default: 'Customer' }}" items: "{{ cart.items | map: 'name' | join: ', ' }}" total: "{{ cart.total | currency: 'USD' }}"Налични филтри
| Филтър | Описание | Пример |
|---|---|---|
default | Стойност по подразбиране | {{ name | default: 'Guest' }} |
uppercase | Главни букви | {{ name | uppercase }} |
lowercase | Малки букви | {{ email | lowercase }} |
capitalize | Главна първа буква | {{ name | capitalize }} |
truncate | Съкращаване на низ | {{ desc | truncate: 100 }} |
date | Форматиране на дата | {{ date | date: 'YYYY-MM-DD' }} |
currency | Форматиране на валута | {{ price | currency: 'EUR' }} |
map | Картографиране по свойство на масив | {{ items | map: 'name' }} |
join | Обединяване на масив | {{ tags | join: ', ' }} |
first | Първи елемент на масив | {{ items | first }} |
last | Последен елемент на масив | {{ items | last }} |
size | Дължина на масив/низ | {{ items | size }} |
Разрешения
Дефинирайте необходимите разрешения за API на Brevo:
permissions: - contacts:read # Read contact data - contacts:write # Create/update contacts - email:send # Send transactional emails - sms:send # Send SMS messages - lists:write # Manage contact lists - events:write # Track eventsПълен пример
---name: abandoned-cart-recoveryversion: 3.0.0description: Recover abandoned shopping carts with a multi-step email sequencecategory: email-marketingstatus: stable
triggers: - event: cart_abandoned conditions: - cart_value: "> 25" - customer_email: "exists" - items_count: ">= 1" debounce: 30m
actions: - id: wait_1h type: control/delay parameters: duration: 1h
- id: check_purchase type: control/condition parameters: condition: "{{ cart.converted }} = false" then: send_first_email else: stop
- id: send_first_email type: brevo/send-email parameters: template_id: {{ env.ABANDONED_CART_TEMPLATE_1 }} to: "{{ contact.email }}" params: first_name: "{{ contact.firstName }}" cart_url: "{{ cart.recovery_url }}" items: "{{ cart.items }}" total: "{{ cart.total | currency }}"
- id: wait_24h type: control/delay parameters: duration: 24h
- id: check_purchase_2 type: control/condition parameters: condition: "{{ cart.converted }} = false" then: send_second_email else: stop
- id: send_second_email type: brevo/send-email parameters: template_id: {{ env.ABANDONED_CART_TEMPLATE_2 }} to: "{{ contact.email }}" params: first_name: "{{ contact.firstName }}" cart_url: "{{ cart.recovery_url }}" discount_code: "{{ generate_discount(10, 'percent') }}"
brevoEndpoints: - POST /v3/smtp/email - GET /v3/contacts/{identifier}
permissions: - contacts:read - email:send
relatedSkills: - customer-sync - order-events - browse-abandonment---
# Abandoned Cart Recovery
Recover lost sales with a proven multi-step email sequence...Излагане като MCP инструмент
Уменията могат да бъдат изложени като MCP инструменти, което ги прави извикаеми от AI агенти. Добавете полето mcp към Вашия frontmatter:
---name: abandoned-cart-recoveryversion: 3.0.0description: Recover abandoned shopping carts with a multi-step email sequencecategory: email-marketing
# MCP Configurationmcp: tool_name: tajo/recover-abandoned-cart description: Execute abandoned cart recovery sequence for a specific cart inputSchema: type: object properties: cart_id: type: string description: The abandoned cart identifier customer_email: type: string description: Customer email address min_cart_value: type: number description: Minimum cart value to trigger recovery default: 25 required: [cart_id, customer_email] brevo_servers: - brevo_contacts - brevo_email_campaign_management - brevo_templates---Как работи излагането чрез MCP
Когато едно умение има поле mcp, то става инструмент, който AI агентите могат да открият и извикат:
Agent: "Recover abandoned cart #4521 for [email protected]" ↓MCP Tool Discovery: finds tajo/recover-abandoned-cart ↓Tool Execution: runs the skill's action chain ↓Brevo MCP Servers: contacts + email modules called ↓Result: recovery sequence initiatedMCP полета
| Поле | Тип | Описание |
|---|---|---|
mcp.tool_name | string | Име на MCP инструмент (формат: tajo/skill-name) |
mcp.description | string | Описание, показвано на AI агентите при откриване на инструмент |
mcp.inputSchema | object | JSON Schema, дефинираща входните параметри на инструмента |
mcp.brevo_servers | array | Кои MCP сървърни модули на Brevo са нужни на това умение |
Умения срещу директни MCP инструменти
| Аспект | Умение като MCP инструмент | Директен Brevo MCP |
|---|---|---|
| Абстракция | Висока – агентът казва “възстанови тази количка” | Ниска – агентът трябва да вика отделни крайни точки на Brevo |
| Сложност | Капсулира многостъпкова логика | Агентът трябва да оркестрира всяка стъпка |
| Защитни огради | Вградени в уменнието (условия, debounce) | Агентът трябва да внедри свои |
| Най-подходящо за | Повторяеми работни процеси | Инцидентни операции |
Tip
Използвайте умения като MCP инструменти за сложни, многостъпкови работни процеси, които агентите не бива да измислят отначало всеки път. Използвайте директни MCP инструменти на Brevo за прости, еднократни операции като търсене на контакт или изпращане на единичен имейл.
Комбиниране на умения и агенти
Един агент може да използва едновременно умения (като MCP инструменти) и директни MCP модули на Brevo:
# Agent spec---name: retention-agenttools: # Tajo Skills as MCP tools - tajo/recover-abandoned-cart - tajo/customer-sync - tajo/win-back-sequence # Direct Brevo MCP modules - brevo_contacts - brevo_campaign_analytics - brevo_segments---Това дава на агентите автоматизация на високо ниво (умения) за често срещани шаблони, като същевременно запазва достъпа на ниско ниво (Brevo MCP) за персонализирана логика.
Вижте Формат на спецификацията на агенти и Изграждане на агенти за пълни подробности.
Добри практики
Tip
Версионирайте уменията си чрез семантично версиониране. Промени, които нарушават съвместимостта, изискват вдигане на главната версия.
- Поддържайте уменията фокусирани – Едно умение трябва да прави едно нещо добре
- Използвайте описателни имена –
abandoned-cart-recovery, а неacr - Документирайте условията – Обяснете защо съществува всяко условие
- Обработвайте грешките внимателно – Използвайте
on_error: continueза некритични действия - Тествайте с малки аудитории – Използвайте
status: experimentalпо време на разработка - Добавете излагане чрез MCP за умения, които агентите трябва да могат да извикват директно
Следващи стъпки
- Преглед на MCP и агенти – Как уменията се вписват в агентската архитектура
- Формат на спецификацията на агенти – Дефинирайте агенти, които използват умения като инструменти
- Изграждане на агенти – Изградете Вашия първи маркетингов агент
- Умения за синхронизация на данни – Разгледайте уменията за синхронизация на данни