Spezifikation des Skills-Formats
Das skills.md-Format definiert, wie Skills aufgebaut, konfiguriert und ausgeführt werden. Diese Spezifikation sorgt für konsistentes Verhalten über alle Tajo-Skills hinweg.
Dateistruktur
Ein Skill wird in einer einzelnen Markdown-Datei mit YAML-Frontmatter definiert:
---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-Felder
Pflichtfelder
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | Eindeutige Kennung (kebab-case) |
version | string | Semantische Version (z. B. „2.1.0”) |
description | string | Kurzbeschreibung (max. 160 Zeichen) |
category | enum | Eines von: data-sync, email-marketing, sms-whatsapp, loyalty, analytics, integrations |
triggers | array | Ereignisse, die diesen Skill aktivieren |
actions | array | Operationen, die dieser Skill ausführen kann |
Optionale Felder
| Feld | Typ | Standard | Beschreibung |
|---|---|---|---|
status | enum | stable | Eines von: stable, beta, experimental |
brevoEndpoints | array | [] | Verwendete Brevo-API-Endpunkte |
permissions | array | [] | Erforderliche Brevo-API-Berechtigungen |
relatedSkills | array | [] | IDs verwandter Skills |
featured | boolean | false | Im Skill-Katalog hervorheben |
Trigger
Trigger legen fest, welche Ereignisse den Skill aktivieren.
Ereignis-Trigger
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-triggeringZeitplan-Trigger
triggers: - schedule: "0 9 * * *" # Cron expression (daily at 9am) timezone: "America/New_York" - schedule: every_hour - schedule: every_dayWebhook-Trigger
triggers: - webhook: /skills/customer-sync/trigger method: POST authentication: api_keyBedingungsoperatoren
| Operator | Beschreibung | Beispiel |
|---|---|---|
= | Gleich | status: "active" |
!= | Ungleich | status: "!= deleted" |
> | Größer als | cart_value: "> 50" |
>= | Größer oder gleich | items: ">= 1" |
< | Kleiner als | age: "< 30" |
<= | Kleiner oder gleich | quantity: "<= 10" |
contains | Zeichenkette enthält | email: "contains @gmail.com" |
starts_with | Zeichenketten-Präfix | name: "starts_with Dr." |
in | Wert in Liste | country: "in US,CA,UK" |
Aktionen
Aktionen legen fest, welche Operationen der Skill ausführt.
Aktionsdefinition
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'Aktionstypen
| Typ | Beschreibung |
|---|---|
brevo/send-email | Transaktions-E-Mail senden |
brevo/send-sms | SMS-Nachricht senden |
brevo/send-whatsapp | WhatsApp-Nachricht senden |
brevo/create-contact | Neuen Kontakt anlegen |
brevo/update-contact | Kontaktattribute aktualisieren |
brevo/delete-contact | Kontakt löschen |
brevo/add-to-list | Kontakt zu Liste hinzufügen |
brevo/remove-from-list | Kontakt aus Liste entfernen |
brevo/track-event | Benutzerdefiniertes Ereignis erfassen |
http/request | HTTP-Anfrage ausführen |
transform/map | Daten transformieren |
control/delay | Vor Fortsetzung warten |
control/condition | Verzweigung nach Bedingung |
Vorlagenvariablen
Verwenden Sie die Syntax {{ }}, um auf Daten zu verweisen:
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' }}"Verfügbare Filter
| Filter | Beschreibung | Beispiel |
|---|---|---|
default | Standardwert | {{ name | default: 'Guest' }} |
uppercase | Großbuchstaben | {{ name | uppercase }} |
lowercase | Kleinbuchstaben | {{ email | lowercase }} |
capitalize | Ersten Buchstaben groß | {{ name | capitalize }} |
truncate | Zeichenkette kürzen | {{ desc | truncate: 100 }} |
date | Datum formatieren | {{ date | date: 'YYYY-MM-DD' }} |
currency | Währung formatieren | {{ price | currency: 'EUR' }} |
map | Array-Eigenschaft mappen | {{ items | map: 'name' }} |
join | Array verbinden | {{ tags | join: ', ' }} |
first | Erstes Array-Element | {{ items | first }} |
last | Letztes Array-Element | {{ items | last }} |
size | Array-/Zeichenkettenlänge | {{ items | size }} |
Berechtigungen
Legen Sie die erforderlichen Brevo-API-Berechtigungen fest:
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 eventsVollständiges Beispiel
---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-Tool-Bereitstellung
Skills können als MCP-Tools bereitgestellt werden, sodass sie von KI-Agenten aufgerufen werden können. Fügen Sie dazu das Feld mcp in Ihr Frontmatter ein:
---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---Funktionsweise der MCP-Bereitstellung
Wenn ein Skill ein mcp-Feld besitzt, wird er zu einem Tool, das KI-Agenten erkennen und aufrufen können:
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-Felder
| Feld | Typ | Beschreibung |
|---|---|---|
mcp.tool_name | string | MCP-Tool-Name (Format: tajo/skill-name) |
mcp.description | string | Beschreibung, die KI-Agenten bei der Tool-Erkennung sehen |
mcp.inputSchema | object | JSON-Schema, das die Eingabeparameter des Tools definiert |
mcp.brevo_servers | array | Brevo-MCP-Servermodule, die dieser Skill benötigt |
Skills vs. direkte MCP-Tools
| Aspekt | Skill als MCP-Tool | Direktes Brevo-MCP |
|---|---|---|
| Abstraktion | Hoch – Agent sagt „diesen Warenkorb zurückgewinnen” | Niedrig – Agent muss einzelne Brevo-Endpunkte aufrufen |
| Komplexität | Kapselt mehrstufige Logik | Agent muss jeden Schritt orchestrieren |
| Leitplanken | Im Skill eingebaut (Bedingungen, Debounce) | Agent muss eigene implementieren |
| Am besten für | Wiederholbare Workflows | Ad-hoc-Operationen |
Tip
Nutzen Sie Skills als MCP-Tools für komplexe, mehrstufige Workflows, die Agenten nicht jedes Mal neu erfinden sollten. Nutzen Sie direkte Brevo-MCP-Tools für einfache, einmalige Operationen wie das Nachschlagen eines Kontakts oder das Versenden einer einzelnen E-Mail.
Skills und Agents kombinieren
Ein Agent kann sowohl Skills (als MCP-Tools) als auch direkte Brevo-MCP-Module verwenden:
# 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---So erhalten Agenten für gängige Muster eine hochwertige Automatisierung (Skills) und behalten gleichzeitig den direkten Low-Level-Zugriff (Brevo MCP) für individuelle Logik.
Weitere Details finden Sie unter Agent-Spezifikationsformat und Agents erstellen.
Best Practices
Tip
Versionieren Sie Ihre Skills mithilfe semantischer Versionierung. Breaking Changes erfordern einen Major-Versionssprung.
- Skills fokussiert halten – Ein Skill sollte eine Aufgabe gut erledigen
- Aussagekräftige Namen verwenden –
abandoned-cart-recoverystattacr - Bedingungen dokumentieren – Erklären Sie, warum jede Bedingung existiert
- Fehler sauber behandeln – Nutzen Sie
on_error: continuefür unkritische Aktionen - Mit kleinen Zielgruppen testen – Verwenden Sie
status: experimentalwährend der Entwicklung - MCP-Bereitstellung hinzufügen für Skills, die Agenten direkt aufrufen können sollen
Nächste Schritte
- MCP- & Agents-Überblick – Wie Skills in die agentische Architektur passen
- Agent-Spezifikationsformat – Agents definieren, die Skills als Tools nutzen
- Agents erstellen – Bauen Sie Ihren ersten Marketing-Agent
- Data-Sync-Skills – Skills zur Datensynchronisation erkunden