---
title: "Specyfikacja formatu Skills | Tajo"
description: "Poznaj format skills.md służący do definiowania opartych na AI modułów automatyzacji integrujących się z Brevo."
url: https://tajo.io/pl/docs/skills/overview/skills-format/
markdown: https://tajo.io/pl/docs/skills/overview/skills-format.md
lang: pl-PL
author: "Set Noa"
author_url: https://tajo.io/pl/set-noa/
robots: noindex
---

Poproś o wcześniejszy dostęp

Podaj imię i firmowy adres e-mail. Wyślemy Ci link potwierdzający prośbę o dostęp do Tajo.

# Specyfikacja formatu Skills

[Set Noa](https://tajo.io/pl/set-noa/)

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:

```markdown
---
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

| 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ń

```yaml
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

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

### Wyzwalacze webhook

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

### Operatory 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

```yaml
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:

```yaml
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:

```yaml
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

```yaml
---
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:

```yaml
---
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 user@example.com"
    ↓
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

| 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:

```yaml
# 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](https://tajo.io/pl/docs/mcp/agent-specification) i [Budowaniu agentów](https://tajo.io/pl/docs/mcp/building-agents).

## 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 nazw** – `abandoned-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

- [Przegląd MCP i Agentów](https://tajo.io/pl/docs/mcp) – Jak Skills wpisują się w architekturę agentyczną
- [Format specyfikacji agenta](https://tajo.io/pl/docs/mcp/agent-specification) – Definiuj agenty używające Skills jako narzędzi
- [Budowanie agentów](https://tajo.io/pl/docs/mcp/building-agents) – Zbuduj swojego pierwszego agenta marketingowego
- [Skills synchronizacji danych](https://tajo.io/pl/docs/skills/data-sync) – Poznaj skille do synchronizacji danych
