Specifikation av färdighetsformat

Formatet skills.md definierar hur färdigheter struktureras, konfigureras och exekveras. Den här specifikationen säkerställer konsekvent beteende i alla Tajo-färdigheter.

Filstruktur

En färdighet definieras i en enda 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-fält

Obligatoriska fält

FältTypBeskrivning
namestringUnik identifierare (kebab-case)
versionstringSemantisk version (t.ex. “2.1.0”)
descriptionstringKort beskrivning (max 160 tecken)
categoryenumEtt av: data-sync, email-marketing, sms-whatsapp, loyalty, analytics, integrations
triggersarrayHändelser som aktiverar färdigheten
actionsarrayOperationer som färdigheten kan utföra

Valfria fält

FältTypStandardBeskrivning
statusenumstableEtt av: stable, beta, experimental
brevoEndpointsarray[]Brevo API-endpoints som används
permissionsarray[]Obligatoriska Brevo API-behörigheter
relatedSkillsarray[]ID:n för relaterade färdigheter
featuredbooleanfalseLyft fram i färdighetskatalogen

Triggers

Triggers definierar vilka händelser som aktiverar färdigheten.

Händelsetriggers

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

Schemalagda triggers

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

Webhook-triggers

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

Villkorsoperatorer

OperatorBeskrivningExempel
=Lika medstatus: "active"
!=Inte lika medstatus: "!= deleted"
>Större äncart_value: "> 50"
>=Större än eller lika meditems: ">= 1"
<Mindre änage: "< 30"
<=Mindre än eller lika medquantity: "<= 10"
containsSträng innehålleremail: "contains @gmail.com"
starts_withSträngprefixname: "starts_with Dr."
inVärde i listacountry: "in US,CA,UK"

Åtgärder

Åtgärder definierar vilka operationer färdigheten utför.

Åtgärdsdefinition

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'

Åtgärdstyper

TypBeskrivning
brevo/send-emailSkicka transaktionsmejl
brevo/send-smsSkicka SMS-meddelande
brevo/send-whatsappSkicka WhatsApp-meddelande
brevo/create-contactSkapa ny kontakt
brevo/update-contactUppdatera kontaktattribut
brevo/delete-contactRadera kontakt
brevo/add-to-listLägg till kontakt i lista
brevo/remove-from-listTa bort kontakt från lista
brevo/track-eventFölj anpassad händelse
http/requestGör HTTP-förfrågan
transform/mapOmvandla data
control/delayVänta innan du fortsätter
control/conditionFörgrening baserat på villkor

Mallvariabler

Använd {{ }}-syntax för att referera till 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' }}"

Tillgängliga filter

FilterBeskrivningExempel
defaultStandardvärde{{ name | default: 'Guest' }}
uppercaseVersal sträng{{ name | uppercase }}
lowercaseGemen sträng{{ email | lowercase }}
capitalizeGör första bokstaven versal{{ name | capitalize }}
truncateTrunkera sträng{{ desc | truncate: 100 }}
dateFormatera datum{{ date | date: 'YYYY-MM-DD' }}
currencyFormatera valuta{{ price | currency: 'EUR' }}
mapMappa arrayegenskap{{ items | map: 'name' }}
joinSammanfoga array{{ tags | join: ', ' }}
firstFörsta arrayelementet{{ items | first }}
lastSista arrayelementet{{ items | last }}
sizeArray-/stränglängd{{ items | size }}

Behörigheter

Definiera obligatoriska Brevo API-behörigheter:

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

Fullständigt exempel

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

Exponering som MCP-verktyg

Färdigheter kan exponeras som MCP-verktyg, vilket gör dem anropbara av AI-agenter. Lägg till fältet mcp i 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å fungerar MCP-exponering

När en färdighet har ett mcp-fält blir den ett verktyg som AI-agenter kan upptäcka och anropa:

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-fält

FältTypBeskrivning
mcp.tool_namestringMCP-verktygsnamn (format: tajo/skill-name)
mcp.descriptionstringBeskrivning som visas för AI-agenter vid verktygsupptäckt
mcp.inputSchemaobjectJSON Schema som definierar verktygets indataparametrar
mcp.brevo_serversarrayVilka Brevo MCP-servermoduler den här färdigheten behöver

Färdigheter jämfört med direkta MCP-verktyg

AspektFärdighet som MCP-verktygDirekt Brevo MCP
AbstraktionHög – agenten säger “återvinn den här varukorgen”Låg – agenten måste anropa enskilda Brevo-endpoints
KomplexitetKapslar in flerstegslogikAgenten måste orkestrera varje steg
SkyddsräckenInbyggda i färdigheten (villkor, debounce)Agenten måste implementera sina egna
Bäst förUpprepbara arbetsflödenAd hoc-operationer

Tip

Använd färdigheter som MCP-verktyg för komplexa flerstegsarbetsflöden som agenter inte ska uppfinna på nytt varje gång. Använd direkta Brevo MCP-verktyg för enkla engångsoperationer som att slå upp en kontakt eller skicka ett enskilt mejl.

Att kombinera färdigheter och agenter

En agent kan använda både färdigheter (som MCP-verktyg) och direkta 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
---

Det ger agenterna högnivåautomation (färdigheter) för vanliga mönster samtidigt som de behåller lågnivååtkomst (Brevo MCP) för anpassad logik.

Se Format för agentspecifikation och Bygga agenter för alla detaljer.

Rekommenderade arbetssätt

Tip

Versionera dina färdigheter med semantisk versionering. Brytande ändringar kräver en bump av huvudversion.

  1. Håll färdigheter fokuserade – En färdighet ska göra en sak bra
  2. Använd beskrivande namnabandoned-cart-recovery, inte acr
  3. Dokumentera villkor – Förklara varför varje villkor finns
  4. Hantera fel elegant – Använd on_error: continue för icke-kritiska åtgärder
  5. Testa med små målgrupper – Använd status: experimental under utveckling
  6. Lägg till MCP-exponering för färdigheter som agenter ska kunna anropa direkt

Nästa steg

Subscribe to updates

developer-docs

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

auto-detect
AI-assistent

Hej! Fråga mig om dokumentationen.