Skills-formatspecifikation
skills.md-formatet definerer, hvordan skills struktureres, konfigureres og eksekveres. Denne specifikation sikrer ensartet adfærd på tværs af alle Tajo-skills.
Filstruktur
En skill defineres i en enkelt markdown-fil med 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-felter
Påkrævede felter
| Felt | Type | Beskrivelse |
|---|---|---|
name | string | Unik identifikator (kebab-case) |
version | string | Semantisk version (f.eks. “2.1.0”) |
description | string | Kort beskrivelse (maks. 160 tegn) |
category | enum | En af: data-sync, email-marketing, sms-whatsapp, loyalty, analytics, integrations |
triggers | array | Hændelser der aktiverer denne skill |
actions | array | Operationer som denne skill kan udføre |
Valgfrie felter
| Felt | Type | Standard | Beskrivelse |
|---|---|---|---|
status | enum | stable | En af: stable, beta, experimental |
brevoEndpoints | array | [] | Brugte Brevo API-endpoints |
permissions | array | [] | Nødvendige Brevo API-tilladelser |
relatedSkills | array | [] | ID’er på relaterede skills |
featured | boolean | false | Fremhæv i skill-kataloget |
Triggere
Triggere definerer, hvilke hændelser der aktiverer skillen.
Hændelsestriggere
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-triggeringPlanlægningstriggere
triggers: - schedule: "0 9 * * *" # Cron expression (daily at 9am) timezone: "America/New_York" - schedule: every_hour - schedule: every_dayWebhook-triggere
triggers: - webhook: /skills/customer-sync/trigger method: POST authentication: api_keyBetingelsesoperatorer
| Operator | Beskrivelse | Eksempel |
|---|---|---|
= | Lig med | status: "active" |
!= | Ikke lig med | status: "!= deleted" |
> | Større end | cart_value: "> 50" |
>= | Større end eller lig med | items: ">= 1" |
< | Mindre end | age: "< 30" |
<= | Mindre end eller lig med | quantity: "<= 10" |
contains | Streng indeholder | email: "contains @gmail.com" |
starts_with | Strengprefiks | name: "starts_with Dr." |
in | Værdi i liste | country: "in US,CA,UK" |
Handlinger
Handlinger definerer, hvilke operationer skillen udfører.
Handlingsdefinition
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'Handlingstyper
| Type | Beskrivelse |
|---|---|
brevo/send-email | Send transaktions-e-mail |
brevo/send-sms | Send SMS-besked |
brevo/send-whatsapp | Send WhatsApp-besked |
brevo/create-contact | Opret ny kontakt |
brevo/update-contact | Opdater kontaktattributter |
brevo/delete-contact | Slet kontakt |
brevo/add-to-list | Tilføj kontakt til liste |
brevo/remove-from-list | Fjern kontakt fra liste |
brevo/track-event | Spor tilpasset hændelse |
http/request | Lav HTTP-forespørgsel |
transform/map | Transformer data |
control/delay | Vent før fortsættelse |
control/condition | Forgren baseret på betingelse |
Skabelonvariabler
Brug {{ }}-syntaks til at referere data:
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' }}"Tilgængelige filtre
| Filter | Beskrivelse | Eksempel |
|---|---|---|
default | Standardværdi | {{ name | default: 'Guest' }} |
uppercase | Versaler | {{ name | uppercase }} |
lowercase | Små bogstaver | {{ email | lowercase }} |
capitalize | Stort forbogstav | {{ name | capitalize }} |
truncate | Afkort streng | {{ desc | truncate: 100 }} |
date | Formatér dato | {{ date | date: 'YYYY-MM-DD' }} |
currency | Formatér valuta | {{ price | currency: 'EUR' }} |
map | Map array-egenskab | {{ items | map: 'name' }} |
join | Saml array | {{ tags | join: ', ' }} |
first | Første array-element | {{ items | first }} |
last | Sidste array-element | {{ items | last }} |
size | Array-/strenglængde | {{ items | size }} |
Tilladelser
Definer nødvendige Brevo API-tilladelser:
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 eventsFuldstændigt eksempel
---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-værktøjseksponering
Skills kan eksponeres som MCP-værktøjer, så de kan kaldes af AI-agenter. Tilføj feltet mcp til din 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---Sådan fungerer MCP-eksponering
Når en skill har et mcp-felt, bliver den et værktøj, som AI-agenter kan opdage og kalde:
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-felter
| Felt | Type | Beskrivelse |
|---|---|---|
mcp.tool_name | string | MCP-værktøjsnavn (format: tajo/skill-name) |
mcp.description | string | Beskrivelse vist til AI-agenter under værktøjsopdagelse |
mcp.inputSchema | object | JSON Schema, der definerer værktøjets inputparametre |
mcp.brevo_servers | array | Hvilke Brevo MCP-servermoduler denne skill har brug for |
Skills vs. direkte MCP-værktøjer
| Aspekt | Skill som MCP-værktøj | Direkte Brevo MCP |
|---|---|---|
| Abstraktion | Høj, agenten siger “genopret denne kurv” | Lav, agenten skal kalde individuelle Brevo-endpoints |
| Kompleksitet | Indkapsler flertrinslogik | Agenten skal orkestrere hvert trin |
| Guardrails | Indbygget i skillen (betingelser, debounce) | Agenten skal implementere sine egne |
| Bedst til | Gentagne workflows | Ad hoc-operationer |
Tip
Brug skills som MCP-værktøjer til komplekse, flertrinsworkflows, som agenter ikke bør genopfinde hver gang. Brug direkte Brevo MCP-værktøjer til enkle engangsoperationer som at slå en kontakt op eller sende en enkelt e-mail.
Sammensætning af skills og agenter
En agent kan bruge både skills (som MCP-værktøjer) og direkte Brevo MCP-moduler:
# 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---Dette giver agenter automatisering på højt niveau (skills) til almindelige mønstre, samtidig med at de bevarer adgang på lavt niveau (Brevo MCP) til tilpasset logik.
Se Agent-specifikationsformat og Byg agenter for fulde detaljer.
Bedste praksis
Tip
Versionér dine skills ved hjælp af semantisk versionering. Brydende ændringer kræver et major-versionsløft.
- Hold skills fokuserede - En skill bør gøre én ting godt
- Brug beskrivende navne -
abandoned-cart-recoveryikkeacr - Dokumentér betingelser - Forklar hvorfor hver betingelse findes
- Håndter fejl elegant - Brug
on_error: continuetil ikke-kritiske handlinger - Test med små målgrupper - Brug
status: experimentalunder udvikling - Tilføj MCP-eksponering til skills, som agenter bør kunne kalde direkte
Næste skridt
- MCP & agenter-oversigt - Hvordan skills passer ind i den agentiske arkitektur
- Agent-specifikationsformat - Definer agenter, der bruger skills som værktøjer
- Byg agenter - Byg din første marketing-agent
- Datasynkroniserings-skills - Udforsk datasynkroniserings-skills