Specificatie van het skills-formaat
Het skills.md-formaat definieert hoe Skills worden gestructureerd, geconfigureerd en uitgevoerd. Deze specificatie zorgt voor consistent gedrag over alle Tajo-skills.
Bestandsstructuur
Een skill wordt gedefinieerd in één markdown-bestand met 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...Frontmatter-velden
Verplichte velden
| Veld | Type | Beschrijving |
|---|---|---|
name | string | Unieke identifier (kebab-case) |
version | string | Semantische versie (bv. “2.1.0”) |
description | string | Korte beschrijving (max 160 tekens) |
category | enum | Een van: data-sync, email-marketing, sms-whatsapp, loyalty, analytics, integrations |
triggers | array | Events die deze skill activeren |
actions | array | Operaties die deze skill kan uitvoeren |
Optionele velden
| Veld | Type | Standaard | Beschrijving |
|---|---|---|---|
status | enum | stable | Een van: stable, beta, experimental |
brevoEndpoints | array | [] | Gebruikte Brevo API-endpoints |
permissions | array | [] | Vereiste Brevo API-permissies |
relatedSkills | array | [] | ID’s van gerelateerde skills |
featured | boolean | false | Uitlichten in de skill-catalogus |
Triggers
Triggers definiëren welke events de skill activeren.
Event-triggers
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-triggeringSchedule-triggers
triggers: - schedule: "0 9 * * *" # Cron expression (daily at 9am) timezone: "America/New_York" - schedule: every_hour - schedule: every_dayWebhook-triggers
triggers: - webhook: /skills/customer-sync/trigger method: POST authentication: api_keyConditie-operators
| Operator | Beschrijving | Voorbeeld |
|---|---|---|
= | Gelijk aan | status: "active" |
!= | Niet gelijk aan | status: "!= deleted" |
> | Groter dan | cart_value: "> 50" |
>= | Groter dan of gelijk | items: ">= 1" |
< | Kleiner dan | age: "< 30" |
<= | Kleiner dan of gelijk | quantity: "<= 10" |
contains | String bevat | email: "contains @gmail.com" |
starts_with | Stringprefix | name: "starts_with Dr." |
in | Waarde in lijst | country: "in US,CA,UK" |
Acties
Acties definiëren welke operaties de skill uitvoert.
Actiedefinitie
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'Actietypes
| Type | Beschrijving |
|---|---|
brevo/send-email | Verstuur transactionele e-mail |
brevo/send-sms | Verstuur SMS-bericht |
brevo/send-whatsapp | Verstuur WhatsApp-bericht |
brevo/create-contact | Maak nieuw contact aan |
brevo/update-contact | Werk contactattributen bij |
brevo/delete-contact | Verwijder contact |
brevo/add-to-list | Voeg contact toe aan lijst |
brevo/remove-from-list | Verwijder contact uit lijst |
brevo/track-event | Volg aangepast event |
http/request | Doe HTTP-request |
transform/map | Transformeer data |
control/delay | Wacht voordat je verdergaat |
control/condition | Vertakking op basis van conditie |
Templatevariabelen
Gebruik {{ }}-syntax om naar data te verwijzen:
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' }}"Beschikbare filters
| Filter | Beschrijving | Voorbeeld |
|---|---|---|
default | Standaardwaarde | {{ name | default: 'Guest' }} |
uppercase | String in hoofdletters | {{ name | uppercase }} |
lowercase | String in kleine letters | {{ email | lowercase }} |
capitalize | Eerste letter hoofdletter | {{ name | capitalize }} |
truncate | String inkorten | {{ desc | truncate: 100 }} |
date | Datum opmaken | {{ date | date: 'YYYY-MM-DD' }} |
currency | Valuta opmaken | {{ price | currency: 'EUR' }} |
map | Array-eigenschap mappen | {{ items | map: 'name' }} |
join | Array samenvoegen | {{ tags | join: ', ' }} |
first | Eerste array-item | {{ items | first }} |
last | Laatste array-item | {{ items | last }} |
size | Lengte van array/string | {{ items | size }} |
Permissies
Definieer vereiste Brevo API-permissies:
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 eventsVolledig voorbeeld
---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-exposure
Skills kunnen worden blootgesteld als MCP-tools, waardoor ze aan te roepen zijn door AI-agents. Voeg het mcp-veld toe aan je frontmatter:
---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---Hoe MCP-exposure werkt
Wanneer een skill een mcp-veld heeft, wordt deze een tool die AI-agents kunnen ontdekken en aanroepen:
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-velden
| Veld | Type | Beschrijving |
|---|---|---|
mcp.tool_name | string | MCP-toolnaam (formaat: tajo/skill-name) |
mcp.description | string | Beschrijving die aan AI-agents wordt getoond tijdens tool discovery |
mcp.inputSchema | object | JSON Schema dat de inputparameters van de tool definieert |
mcp.brevo_servers | array | Welke Brevo MCP-servermodules deze skill nodig heeft |
Skills versus directe MCP-tools
| Aspect | Skill als MCP-tool | Directe Brevo MCP |
|---|---|---|
| Abstractie | Hoog, agent zegt “herstel deze winkelwagen” | Laag, agent moet afzonderlijke Brevo-endpoints aanroepen |
| Complexiteit | Kapselt logica met meerdere stappen in | Agent moet elke stap zelf orkestreren |
| Guardrails | Ingebouwd in de skill (condities, debounce) | Agent moet deze zelf implementeren |
| Geschikt voor | Herhaalbare workflows | Ad-hoc operaties |
Tip
Gebruik Skills als MCP-tools voor complexe workflows in meerdere stappen die agents niet steeds opnieuw hoeven uit te vinden. Gebruik directe Brevo MCP-tools voor simpele, eenmalige operaties zoals een contact opzoeken of één e-mail versturen.
Skills en agents combineren
Een agent kan zowel Skills (als MCP-tools) als directe Brevo MCP-modules gebruiken:
# 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---Dit geeft agents high-level automatisering (Skills) voor veelvoorkomende patronen en behoudt tegelijkertijd low-level toegang (Brevo MCP) voor aangepaste logica.
Zie Agent Specification Format en Building Agents voor alle details.
Best practices
Tip
Versie je skills volgens semantische versienummering. Breaking changes vereisen een major versiebump.
- Houd skills gericht - Eén skill zou één ding goed moeten doen
- Gebruik beschrijvende namen -
abandoned-cart-recoveryin plaats vanacr - Documenteer condities - Leg uit waarom elke conditie bestaat
- Handel fouten netjes af - Gebruik
on_error: continuevoor niet-kritieke acties - Test met kleine doelgroepen - Gebruik
status: experimentaltijdens ontwikkeling - Voeg MCP-exposure toe voor skills die agents direct moeten kunnen aanroepen
Volgende stappen
- MCP & Agents Overview - Hoe Skills passen in de agentic-architectuur
- Agent Specification Format - Definieer agents die Skills als tools gebruiken
- Building Agents - Bouw je eerste marketing-agent
- Data Sync Skills - Verken data-synchronisatie-skills