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

Frontmatter-Felder

Pflichtfelder

FeldTypBeschreibung
namestringEindeutige Kennung (kebab-case)
versionstringSemantische Version (z. B. „2.1.0”)
descriptionstringKurzbeschreibung (max. 160 Zeichen)
categoryenumEines von: data-sync, email-marketing, sms-whatsapp, loyalty, analytics, integrations
triggersarrayEreignisse, die diesen Skill aktivieren
actionsarrayOperationen, die dieser Skill ausführen kann

Optionale Felder

FeldTypStandardBeschreibung
statusenumstableEines von: stable, beta, experimental
brevoEndpointsarray[]Verwendete Brevo-API-Endpunkte
permissionsarray[]Erforderliche Brevo-API-Berechtigungen
relatedSkillsarray[]IDs verwandter Skills
featuredbooleanfalseIm 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-triggering

Zeitplan-Trigger

triggers:
- schedule: "0 9 * * *" # Cron expression (daily at 9am)
timezone: "America/New_York"
- schedule: every_hour
- schedule: every_day

Webhook-Trigger

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

Bedingungsoperatoren

OperatorBeschreibungBeispiel
=Gleichstatus: "active"
!=Ungleichstatus: "!= deleted"
>Größer alscart_value: "> 50"
>=Größer oder gleichitems: ">= 1"
<Kleiner alsage: "< 30"
<=Kleiner oder gleichquantity: "<= 10"
containsZeichenkette enthältemail: "contains @gmail.com"
starts_withZeichenketten-Präfixname: "starts_with Dr."
inWert in Listecountry: "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

TypBeschreibung
brevo/send-emailTransaktions-E-Mail senden
brevo/send-smsSMS-Nachricht senden
brevo/send-whatsappWhatsApp-Nachricht senden
brevo/create-contactNeuen Kontakt anlegen
brevo/update-contactKontaktattribute aktualisieren
brevo/delete-contactKontakt löschen
brevo/add-to-listKontakt zu Liste hinzufügen
brevo/remove-from-listKontakt aus Liste entfernen
brevo/track-eventBenutzerdefiniertes Ereignis erfassen
http/requestHTTP-Anfrage ausführen
transform/mapDaten transformieren
control/delayVor Fortsetzung warten
control/conditionVerzweigung 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

FilterBeschreibungBeispiel
defaultStandardwert{{ name | default: 'Guest' }}
uppercaseGroßbuchstaben{{ name | uppercase }}
lowercaseKleinbuchstaben{{ email | lowercase }}
capitalizeErsten Buchstaben groß{{ name | capitalize }}
truncateZeichenkette kürzen{{ desc | truncate: 100 }}
dateDatum formatieren{{ date | date: 'YYYY-MM-DD' }}
currencyWährung formatieren{{ price | currency: 'EUR' }}
mapArray-Eigenschaft mappen{{ items | map: 'name' }}
joinArray verbinden{{ tags | join: ', ' }}
firstErstes Array-Element{{ items | first }}
lastLetztes Array-Element{{ items | last }}
sizeArray-/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 events

Vollständiges Beispiel

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

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

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 initiated

MCP-Felder

FeldTypBeschreibung
mcp.tool_namestringMCP-Tool-Name (Format: tajo/skill-name)
mcp.descriptionstringBeschreibung, die KI-Agenten bei der Tool-Erkennung sehen
mcp.inputSchemaobjectJSON-Schema, das die Eingabeparameter des Tools definiert
mcp.brevo_serversarrayBrevo-MCP-Servermodule, die dieser Skill benötigt

Skills vs. direkte MCP-Tools

AspektSkill als MCP-ToolDirektes Brevo-MCP
AbstraktionHoch – Agent sagt „diesen Warenkorb zurückgewinnen”Niedrig – Agent muss einzelne Brevo-Endpunkte aufrufen
KomplexitätKapselt mehrstufige LogikAgent muss jeden Schritt orchestrieren
LeitplankenIm Skill eingebaut (Bedingungen, Debounce)Agent muss eigene implementieren
Am besten fürWiederholbare WorkflowsAd-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-agent
tools:
# 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.

  1. Skills fokussiert halten – Ein Skill sollte eine Aufgabe gut erledigen
  2. Aussagekräftige Namen verwendenabandoned-cart-recovery statt acr
  3. Bedingungen dokumentieren – Erklären Sie, warum jede Bedingung existiert
  4. Fehler sauber behandeln – Nutzen Sie on_error: continue für unkritische Aktionen
  5. Mit kleinen Zielgruppen testen – Verwenden Sie status: experimental während der Entwicklung
  6. MCP-Bereitstellung hinzufügen für Skills, die Agenten direkt aufrufen können sollen

Nächste Schritte

Subscribe to updates

developer-docs

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

auto-detect
AI-Assistent

Hallo! Fragen Sie mich alles über die Dokumentation.