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-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...Pola frontmatter
Pola wymagane
| Pole | Typ | Opis |
|---|---|---|
name | string | Unikalny identyfikator (kebab-case) |
version | string | Wersja semantyczna (np. „2.1.0”) |
description | string | Krótki opis (maks. 160 znaków) |
category | enum | Jedna z: data-sync, email-marketing, sms-whatsapp, loyalty, analytics, integrations |
triggers | array | Zdarzenia aktywujące ten skill |
actions | array | Operacje, które skill może wykonywać |
Pola opcjonalne
| Pole | Typ | Domyślna | Opis |
|---|---|---|---|
status | enum | stable | Jedna z: stable, beta, experimental |
brevoEndpoints | array | [] | Używane punkty końcowe API Brevo |
permissions | array | [] | Wymagane uprawnienia API Brevo |
relatedSkills | array | [] | Identyfikatory powiązanych skillów |
featured | boolean | false | Wyróż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 wyzwoleniemWyzwalacze harmonogramu
triggers: - schedule: "0 9 * * *" # Wyrażenie cron (codziennie o 9:00) timezone: "America/New_York" - schedule: every_hour - schedule: every_dayWyzwalacze webhook
triggers: - webhook: /skills/customer-sync/trigger method: POST authentication: api_keyOperatory warunków
| Operator | Opis | Przykład |
|---|---|---|
= | Równa się | status: "active" |
!= | Różne od | status: "!= deleted" |
> | Większe niż | cart_value: "> 50" |
>= | Większe lub równe | items: ">= 1" |
< | Mniejsze niż | age: "< 30" |
<= | Mniejsze lub równe | quantity: "<= 10" |
contains | Zawiera ciąg | email: "contains @gmail.com" |
starts_with | Prefiks ciągu | name: "starts_with Dr." |
in | Wartość na liście | country: "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ń
| Typ | Opis |
|---|---|
brevo/send-email | Wyślij e-mail transakcyjny |
brevo/send-sms | Wyślij wiadomość SMS |
brevo/send-whatsapp | Wyślij wiadomość WhatsApp |
brevo/create-contact | Utwórz nowy kontakt |
brevo/update-contact | Zaktualizuj atrybuty kontaktu |
brevo/delete-contact | Usuń kontakt |
brevo/add-to-list | Dodaj kontakt do listy |
brevo/remove-from-list | Usuń kontakt z listy |
brevo/track-event | Śledź niestandardowe zdarzenie |
http/request | Wyślij żądanie HTTP |
transform/map | Przekształć dane |
control/delay | Odczekaj przed kontynuowaniem |
control/condition | Rozgałęź 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
| Filtr | Opis | Przykład |
|---|---|---|
default | Wartość domyślna | {{ name | default: 'Guest' }} |
uppercase | Wielkie litery | {{ name | uppercase }} |
lowercase | Małe litery | {{ email | lowercase }} |
capitalize | Pierwsza litera wielka | {{ name | capitalize }} |
truncate | Skróć ciąg | {{ desc | truncate: 100 }} |
date | Formatuj datę | {{ date | date: 'YYYY-MM-DD' }} |
currency | Formatuj walutę | {{ price | currency: 'EUR' }} |
map | Mapuj właściwość tablicy | {{ items | map: 'name' }} |
join | Połącz tablicę | {{ tags | join: ', ' }} |
first | Pierwszy element tablicy | {{ items | first }} |
last | Ostatni element tablicy | {{ items | last }} |
size | Dł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-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...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-recoveryversion: 3.0.0description: Recover abandoned shopping carts with a multi-step email sequencecategory: email-marketing
# Konfiguracja MCPmcp: 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 uruchomionaPola MCP
| Pole | Typ | Opis |
|---|---|---|
mcp.tool_name | string | Nazwa narzędzia MCP (format: tajo/skill-name) |
mcp.description | string | Opis wyświetlany agentom AI podczas odkrywania narzędzia |
mcp.inputSchema | object | JSON Schema definiujące parametry wejściowe narzędzia |
mcp.brevo_servers | array | Moduły serwera MCP Brevo wymagane przez ten skill |
Skills jako narzędzia MCP vs. bezpośrednie narzędzia MCP
| Aspekt | Skill jako narzędzie MCP | Bezpośrednie MCP Brevo |
|---|---|---|
| Abstrakcja | Wysoka – 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 |
| Zabezpieczenia | Wbudowane w skill (warunki, debounce) | Agent musi implementować własne |
| Najlepszy dla | Powtarzalne przepływy pracy | Jednorazowe 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-agenttools: # 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.
- Utrzymuj skille skupione – Jeden skill powinien robić jedną rzecz dobrze
- Używaj opisowych nazw –
abandoned-cart-recovery, nieacr - Dokumentuj warunki – Wyjaśnij, dlaczego każdy warunek istnieje
- Obsługuj błędy łagodnie – Używaj
on_error: continuedla działań niekrytycznych - Testuj na małych odbiorcach – Używaj
status: experimentalpodczas tworzenia - Dodaj ekspozycję MCP dla skillów, które agenty powinny móc wywoływać bezpośrednio
Następne kroki
- Przegląd MCP i Agentów – Jak Skills wpisują się w architekturę agentyczną
- Format specyfikacji agenta – Definiuj agenty używające Skills jako narzędzi
- Budowanie agentów – Zbuduj swojego pierwszego agenta marketingowego
- Skills synchronizacji danych – Poznaj skille do synchronizacji danych