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

Påkrævede felter

FeltTypeBeskrivelse
namestringUnik identifikator (kebab-case)
versionstringSemantisk version (f.eks. “2.1.0”)
descriptionstringKort beskrivelse (maks. 160 tegn)
categoryenumEn af: data-sync, email-marketing, sms-whatsapp, loyalty, analytics, integrations
triggersarrayHændelser der aktiverer denne skill
actionsarrayOperationer som denne skill kan udføre

Valgfrie felter

FeltTypeStandardBeskrivelse
statusenumstableEn af: stable, beta, experimental
brevoEndpointsarray[]Brugte Brevo API-endpoints
permissionsarray[]Nødvendige Brevo API-tilladelser
relatedSkillsarray[]ID’er på relaterede skills
featuredbooleanfalseFremhæ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-triggering

Planlægningstriggere

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

Webhook-triggere

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

Betingelsesoperatorer

OperatorBeskrivelseEksempel
=Lig medstatus: "active"
!=Ikke lig medstatus: "!= deleted"
>Større endcart_value: "> 50"
>=Større end eller lig meditems: ">= 1"
<Mindre endage: "< 30"
<=Mindre end eller lig medquantity: "<= 10"
containsStreng indeholderemail: "contains @gmail.com"
starts_withStrengprefiksname: "starts_with Dr."
inVærdi i listecountry: "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

TypeBeskrivelse
brevo/send-emailSend transaktions-e-mail
brevo/send-smsSend SMS-besked
brevo/send-whatsappSend WhatsApp-besked
brevo/create-contactOpret ny kontakt
brevo/update-contactOpdater kontaktattributter
brevo/delete-contactSlet kontakt
brevo/add-to-listTilføj kontakt til liste
brevo/remove-from-listFjern kontakt fra liste
brevo/track-eventSpor tilpasset hændelse
http/requestLav HTTP-forespørgsel
transform/mapTransformer data
control/delayVent før fortsættelse
control/conditionForgren 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

FilterBeskrivelseEksempel
defaultStandardværdi{{ name | default: 'Guest' }}
uppercaseVersaler{{ name | uppercase }}
lowercaseSmå bogstaver{{ email | lowercase }}
capitalizeStort forbogstav{{ name | capitalize }}
truncateAfkort streng{{ desc | truncate: 100 }}
dateFormatér dato{{ date | date: 'YYYY-MM-DD' }}
currencyFormatér valuta{{ price | currency: 'EUR' }}
mapMap array-egenskab{{ items | map: 'name' }}
joinSaml array{{ tags | join: ', ' }}
firstFørste array-element{{ items | first }}
lastSidste array-element{{ items | last }}
sizeArray-/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 events

Fuldstændigt eksempel

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

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 initiated

MCP-felter

FeltTypeBeskrivelse
mcp.tool_namestringMCP-værktøjsnavn (format: tajo/skill-name)
mcp.descriptionstringBeskrivelse vist til AI-agenter under værktøjsopdagelse
mcp.inputSchemaobjectJSON Schema, der definerer værktøjets inputparametre
mcp.brevo_serversarrayHvilke Brevo MCP-servermoduler denne skill har brug for

Skills vs. direkte MCP-værktøjer

AspektSkill som MCP-værktøjDirekte Brevo MCP
AbstraktionHøj, agenten siger “genopret denne kurv”Lav, agenten skal kalde individuelle Brevo-endpoints
KompleksitetIndkapsler flertrinslogikAgenten skal orkestrere hvert trin
GuardrailsIndbygget i skillen (betingelser, debounce)Agenten skal implementere sine egne
Bedst tilGentagne workflowsAd 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-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
---

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.

  1. Hold skills fokuserede - En skill bør gøre én ting godt
  2. Brug beskrivende navne - abandoned-cart-recovery ikke acr
  3. Dokumentér betingelser - Forklar hvorfor hver betingelse findes
  4. Håndter fejl elegant - Brug on_error: continue til ikke-kritiske handlinger
  5. Test med små målgrupper - Brug status: experimental under udvikling
  6. Tilføj MCP-eksponering til skills, som agenter bør kunne kalde direkte

Næste skridt

Subscribe to updates

developer-docs

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

auto-detect
AI-assistent

Hej! Spørg mig om dokumentationen.