Especificação do Formato Skills

O formato skills.md define como as Skills são estruturadas, configuradas e executadas. Esta especificação garante comportamento consistente em todas as Skills Tajo.

Estrutura do Arquivo

Uma skill é definida em um único arquivo markdown com frontmatter YAML:

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

Campos do Frontmatter

Campos Obrigatórios

CampoTipoDescrição
namestringIdentificador único (kebab-case)
versionstringVersão semântica (ex.: “2.1.0”)
descriptionstringDescrição curta (máximo 160 caracteres)
categoryenumUm de: data-sync, email-marketing, sms-whatsapp, loyalty, analytics, integrations
triggersarrayEventos que ativam esta skill
actionsarrayOperações que esta skill pode executar

Campos Opcionais

CampoTipoPadrãoDescrição
statusenumstableUm de: stable, beta, experimental
brevoEndpointsarray[]Endpoints da API do Brevo utilizados
permissionsarray[]Permissões necessárias na API do Brevo
relatedSkillsarray[]IDs de skills relacionadas
featuredbooleanfalseDestacar no catálogo de skills

Triggers

Triggers definem quais eventos ativam a skill.

Triggers de Evento

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

Triggers Agendados

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

Triggers de Webhook

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

Operadores de Condição

OperadorDescriçãoExemplo
=Igualstatus: "active"
!=Diferentestatus: "!= deleted"
>Maior quecart_value: "> 50"
>=Maior ou igualitems: ">= 1"
<Menor queage: "< 30"
<=Menor ou igualquantity: "<= 10"
containsString contémemail: "contains @gmail.com"
starts_withPrefixo de stringname: "starts_with Dr."
inValor na listacountry: "in US,CA,UK"

Ações

Ações definem quais operações a skill executa.

Definição de Ação

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'

Tipos de Ação

TipoDescrição
brevo/send-emailEnviar e-mail transacional
brevo/send-smsEnviar mensagem SMS
brevo/send-whatsappEnviar mensagem no WhatsApp
brevo/create-contactCriar novo contato
brevo/update-contactAtualizar atributos de contato
brevo/delete-contactExcluir contato
brevo/add-to-listAdicionar contato à lista
brevo/remove-from-listRemover contato da lista
brevo/track-eventRastrear evento personalizado
http/requestFazer requisição HTTP
transform/mapTransformar dados
control/delayAguardar antes de continuar
control/conditionRamificar com base em uma condição

Variáveis de Template

Use a sintaxe {{ }} para referenciar dados:

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' }}"

Filtros Disponíveis

FiltroDescriçãoExemplo
defaultValor padrão{{ name | default: 'Guest' }}
uppercaseString em maiúsculas{{ name | uppercase }}
lowercaseString em minúsculas{{ email | lowercase }}
capitalizeCapitalizar a primeira letra{{ name | capitalize }}
truncateTruncar string{{ desc | truncate: 100 }}
dateFormatar data{{ date | date: 'YYYY-MM-DD' }}
currencyFormatar moeda{{ price | currency: 'EUR' }}
mapMapear propriedade de array{{ items | map: 'name' }}
joinJuntar array{{ tags | join: ', ' }}
firstPrimeiro item do array{{ items | first }}
lastÚltimo item do array{{ items | last }}
sizeTamanho de array/string{{ items | size }}

Permissões

Defina as permissões necessárias na API do Brevo:

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

Exemplo Completo

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

Exposição como Ferramenta MCP

Skills podem ser expostas como ferramentas MCP, tornando-as chamáveis por agentes de IA. Adicione o campo mcp ao seu 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
---

Como Funciona a Exposição via MCP

Quando uma skill tem um campo mcp, ela se torna uma ferramenta que agentes de IA podem descobrir e invocar:

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

Campos MCP

CampoTipoDescrição
mcp.tool_namestringNome da ferramenta MCP (formato: tajo/skill-name)
mcp.descriptionstringDescrição exibida para agentes de IA durante a descoberta de ferramentas
mcp.inputSchemaobjectJSON Schema que define os parâmetros de entrada da ferramenta
mcp.brevo_serversarrayQuais módulos de servidor MCP do Brevo esta skill precisa

Skills vs Ferramentas MCP Diretas

AspectoSkill como Ferramenta MCPMCP Brevo Direto
AbstraçãoAlta, o agente diz “recupere este carrinho”Baixa, o agente deve chamar endpoints individuais do Brevo
ComplexidadeEncapsula lógica de várias etapasO agente precisa orquestrar cada etapa
GuardrailsIntegrados na skill (condições, debounce)O agente precisa implementar os seus
Ideal paraFluxos de trabalho repetíveisOperações ad-hoc

Tip

Use Skills como ferramentas MCP para fluxos de trabalho complexos e de várias etapas que os agentes não devem reinventar a cada vez. Use ferramentas MCP diretas do Brevo para operações simples e pontuais, como consultar um contato ou enviar um único e-mail.

Compondo Skills e Agents

Um agente pode usar tanto Skills (como ferramentas MCP) quanto módulos MCP do Brevo diretos:

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

Isso dá aos agentes automação de alto nível (Skills) para padrões comuns, mantendo o acesso de baixo nível (MCP do Brevo) para lógica personalizada.

Consulte Formato de Especificação de Agent e Construindo Agents para todos os detalhes.

Boas Práticas

Tip

Versione suas skills usando versionamento semântico. Mudanças com quebra de compatibilidade exigem um bump de versão maior.

  1. Mantenha skills focadas - Uma skill deve fazer uma coisa bem
  2. Use nomes descritivos - abandoned-cart-recovery e não acr
  3. Documente as condições - Explique por que cada condição existe
  4. Trate erros com elegância - Use on_error: continue para ações não críticas
  5. Teste com audiências pequenas - Use status: experimental durante o desenvolvimento
  6. Adicione exposição MCP para skills que os agentes devem poder invocar diretamente

Próximos Passos

Subscribe to updates

developer-docs

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

auto-detect
Assistente AI

Olá! Pergunte-me qualquer coisa sobre a documentação.