Specyfikacja formatu Skills

Format skills.md określa sposób budowania, konfigurowania i wykonywania Skills. Specyfikacja ta zapewnia spójne zachowanie wszystkich Skills w Tajo.

Struktura pliku

Skill definiowany jest w jednym pliku markdown z YAML frontmatter:

---
name: customer-sync
version: 2.1.0
description: Sync customer data to Brevo contacts
category: data-sync
status: 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...

Pola frontmatter

Pola wymagane

PoleTypOpis
namestringUnikalny identyfikator (kebab-case)
versionstringWersja semantyczna (np. „2.1.0”)
descriptionstringKrótki opis (maks. 160 znaków)
categoryenumJedna z: data-sync, email-marketing, sms-whatsapp, loyalty, analytics, integrations
triggersarrayZdarzenia aktywujące ten skill
actionsarrayOperacje, które skill może wykonywać

Pola opcjonalne

PoleTypDomyślnaOpis
statusenumstableJedna z: stable, beta, experimental
brevoEndpointsarray[]Używane punkty końcowe API Brevo
permissionsarray[]Wymagane uprawnienia API Brevo
relatedSkillsarray[]Identyfikatory powiązanych skillów
featuredbooleanfalseWyróżnienie w katalogu skillów

Wyzwalacze

Wyzwalacze określają, jakie zdarzenia aktywują skill.

Wyzwalacze zdarzeń

triggers:
- event: cart_abandoned
conditions:
- cart_value: "> 50" # Minimalna wartość koszyka
- items_count: ">= 1" # Przynajmniej jeden produkt
- time_since_activity: "> 30m" # 30 minut braku aktywności
debounce: 5m # Odczekaj 5 minut przed ponownym wyzwoleniem

Wyzwalacze harmonogramu

triggers:
- schedule: "0 9 * * *" # Wyrażenie cron (codziennie o 9:00)
timezone: "America/New_York"
- schedule: every_hour
- schedule: every_day

Wyzwalacze webhook

triggers:
- webhook: /skills/customer-sync/trigger
method: POST
authentication: api_key

Operatory warunków

OperatorOpisPrzykład
=Równa sięstatus: "active"
!=Różne odstatus: "!= deleted"
>Większe niżcart_value: "> 50"
>=Większe lub równeitems: ">= 1"
<Mniejsze niżage: "< 30"
<=Mniejsze lub równequantity: "<= 10"
containsZawiera ciągemail: "contains @gmail.com"
starts_withPrefiks ciąguname: "starts_with Dr."
inWartość na liściecountry: "in US,CA,UK"

Działania

Działania określają, jakie operacje wykonuje skill.

Definicja działania

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'

Typy działań

TypOpis
brevo/send-emailWyślij e-mail transakcyjny
brevo/send-smsWyślij wiadomość SMS
brevo/send-whatsappWyślij wiadomość WhatsApp
brevo/create-contactUtwórz nowy kontakt
brevo/update-contactZaktualizuj atrybuty kontaktu
brevo/delete-contactUsuń kontakt
brevo/add-to-listDodaj kontakt do listy
brevo/remove-from-listUsuń kontakt z listy
brevo/track-eventŚledź niestandardowe zdarzenie
http/requestWyślij żądanie HTTP
transform/mapPrzekształć dane
control/delayOdczekaj przed kontynuowaniem
control/conditionRozgałęź na podstawie warunku

Zmienne szablonu

Używaj składni {{ }} do odwoływania się do danych:

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' }}"

Dostępne filtry

FiltrOpisPrzykład
defaultWartość domyślna{{ name | default: 'Guest' }}
uppercaseWielkie litery{{ name | uppercase }}
lowercaseMałe litery{{ email | lowercase }}
capitalizePierwsza litera wielka{{ name | capitalize }}
truncateSkróć ciąg{{ desc | truncate: 100 }}
dateFormatuj datę{{ date | date: 'YYYY-MM-DD' }}
currencyFormatuj walutę{{ price | currency: 'EUR' }}
mapMapuj właściwość tablicy{{ items | map: 'name' }}
joinPołącz tablicę{{ tags | join: ', ' }}
firstPierwszy element tablicy{{ items | first }}
lastOstatni element tablicy{{ items | last }}
sizeDługość tablicy/ciągu{{ items | size }}

Uprawnienia

Zdefiniuj wymagane uprawnienia API Brevo:

permissions:
- contacts:read # Odczyt danych kontaktów
- contacts:write # Tworzenie/aktualizacja kontaktów
- email:send # Wysyłanie e-maili transakcyjnych
- sms:send # Wysyłanie wiadomości SMS
- lists:write # Zarządzanie listami kontaktów
- events:write # Śledzenie zdarzeń

Pełny przykład

---
name: abandoned-cart-recovery
version: 3.0.0
description: Recover abandoned shopping carts with a multi-step email sequence
category: email-marketing
status: 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...

Ekspozycja jako narzędzie MCP

Skills mogą być udostępniane jako narzędzia MCP, dzięki czemu agenty AI mogą je wywoływać. Dodaj pole mcp do frontmatter:

---
name: abandoned-cart-recovery
version: 3.0.0
description: Recover abandoned shopping carts with a multi-step email sequence
category: email-marketing
# Konfiguracja MCP
mcp:
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
---

Jak działa ekspozycja MCP

Gdy skill ma pole mcp, staje się narzędziem, które agenty AI mogą odkryć i wywołać:

Agent: „Recover abandoned cart #4521 for [email protected]"
Odkrywanie narzędzia MCP: znajduje tajo/recover-abandoned-cart
Wykonanie narzędzia: uruchamia łańcuch działań skilla
Serwery MCP Brevo: wywoływane moduły kontaktów i e-mail
Wynik: sekwencja odzyskiwania uruchomiona

Pola MCP

PoleTypOpis
mcp.tool_namestringNazwa narzędzia MCP (format: tajo/skill-name)
mcp.descriptionstringOpis wyświetlany agentom AI podczas odkrywania narzędzia
mcp.inputSchemaobjectJSON Schema definiujące parametry wejściowe narzędzia
mcp.brevo_serversarrayModuły serwera MCP Brevo wymagane przez ten skill

Skills jako narzędzia MCP vs. bezpośrednie narzędzia MCP

AspektSkill jako narzędzie MCPBezpośrednie MCP Brevo
AbstrakcjaWysoka – agent mówi „odzyskaj ten koszyk”Niska – agent musi wywoływać poszczególne punkty końcowe Brevo
ZłożonośćZawiera wieloetapową logikęAgent musi koordynować każdy krok
ZabezpieczeniaWbudowane w skill (warunki, debounce)Agent musi implementować własne
Najlepszy dlaPowtarzalne przepływy pracyJednorazowe operacje

Tip

Używaj Skills jako narzędzi MCP dla złożonych, wieloetapowych przepływów pracy, których agenty nie powinny odtwarzać za każdym razem. Używaj bezpośrednich narzędzi MCP Brevo do prostych, jednorazowych operacji, takich jak wyszukanie kontaktu lub wysłanie pojedynczego e-maila.

Łączenie Skills i Agentów

Agent może używać zarówno Skills (jako narzędzi MCP), jak i bezpośrednich modułów MCP Brevo:

# Specyfikacja agenta
---
name: retention-agent
tools:
# Skills Tajo jako narzędzia MCP
- tajo/recover-abandoned-cart
- tajo/customer-sync
- tajo/win-back-sequence
# Bezpośrednie moduły MCP Brevo
- brevo_contacts
- brevo_campaign_analytics
- brevo_segments
---

Zapewnia to agentom wysokopoziomową automatyzację (Skills) dla typowych wzorców przy zachowaniu niskopoziomowego dostępu (MCP Brevo) do niestandardowej logiki.

Szczegóły znajdziesz w Formacie specyfikacji agenta i Budowaniu agentów.

Najlepsze praktyki

Tip

Wersjonuj swoje skille używając semantycznego wersjonowania. Zmiany niekompatybilne wstecz wymagają inkrementacji wersji głównej.

  1. Utrzymuj skille skupione – Jeden skill powinien robić jedną rzecz dobrze
  2. Używaj opisowych nazwabandoned-cart-recovery, nie acr
  3. Dokumentuj warunki – Wyjaśnij, dlaczego każdy warunek istnieje
  4. Obsługuj błędy łagodnie – Używaj on_error: continue dla działań niekrytycznych
  5. Testuj na małych odbiorcach – Używaj status: experimental podczas tworzenia
  6. Dodaj ekspozycję MCP dla skillów, które agenty powinny móc wywoływać bezpośrednio

Następne kroki

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
Asystent AI

Cześć! Zapytaj mnie o dokumentację.