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-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...Campos do Frontmatter
Campos Obrigatórios
| Campo | Tipo | Descrição |
|---|---|---|
name | string | Identificador único (kebab-case) |
version | string | Versão semântica (ex.: “2.1.0”) |
description | string | Descrição curta (máximo 160 caracteres) |
category | enum | Um de: data-sync, email-marketing, sms-whatsapp, loyalty, analytics, integrations |
triggers | array | Eventos que ativam esta skill |
actions | array | Operações que esta skill pode executar |
Campos Opcionais
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
status | enum | stable | Um de: stable, beta, experimental |
brevoEndpoints | array | [] | Endpoints da API do Brevo utilizados |
permissions | array | [] | Permissões necessárias na API do Brevo |
relatedSkills | array | [] | IDs de skills relacionadas |
featured | boolean | false | Destacar 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-triggeringTriggers Agendados
triggers: - schedule: "0 9 * * *" # Cron expression (daily at 9am) timezone: "America/New_York" - schedule: every_hour - schedule: every_dayTriggers de Webhook
triggers: - webhook: /skills/customer-sync/trigger method: POST authentication: api_keyOperadores de Condição
| Operador | Descrição | Exemplo |
|---|---|---|
= | Igual | status: "active" |
!= | Diferente | status: "!= deleted" |
> | Maior que | cart_value: "> 50" |
>= | Maior ou igual | items: ">= 1" |
< | Menor que | age: "< 30" |
<= | Menor ou igual | quantity: "<= 10" |
contains | String contém | email: "contains @gmail.com" |
starts_with | Prefixo de string | name: "starts_with Dr." |
in | Valor na lista | country: "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
| Tipo | Descrição |
|---|---|
brevo/send-email | Enviar e-mail transacional |
brevo/send-sms | Enviar mensagem SMS |
brevo/send-whatsapp | Enviar mensagem no WhatsApp |
brevo/create-contact | Criar novo contato |
brevo/update-contact | Atualizar atributos de contato |
brevo/delete-contact | Excluir contato |
brevo/add-to-list | Adicionar contato à lista |
brevo/remove-from-list | Remover contato da lista |
brevo/track-event | Rastrear evento personalizado |
http/request | Fazer requisição HTTP |
transform/map | Transformar dados |
control/delay | Aguardar antes de continuar |
control/condition | Ramificar 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
| Filtro | Descrição | Exemplo |
|---|---|---|
default | Valor padrão | {{ name | default: 'Guest' }} |
uppercase | String em maiúsculas | {{ name | uppercase }} |
lowercase | String em minúsculas | {{ email | lowercase }} |
capitalize | Capitalizar a primeira letra | {{ name | capitalize }} |
truncate | Truncar string | {{ desc | truncate: 100 }} |
date | Formatar data | {{ date | date: 'YYYY-MM-DD' }} |
currency | Formatar moeda | {{ price | currency: 'EUR' }} |
map | Mapear propriedade de array | {{ items | map: 'name' }} |
join | Juntar array | {{ tags | join: ', ' }} |
first | Primeiro item do array | {{ items | first }} |
last | Último item do array | {{ items | last }} |
size | Tamanho 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 eventsExemplo Completo
---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...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-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---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 initiatedCampos MCP
| Campo | Tipo | Descrição |
|---|---|---|
mcp.tool_name | string | Nome da ferramenta MCP (formato: tajo/skill-name) |
mcp.description | string | Descrição exibida para agentes de IA durante a descoberta de ferramentas |
mcp.inputSchema | object | JSON Schema que define os parâmetros de entrada da ferramenta |
mcp.brevo_servers | array | Quais módulos de servidor MCP do Brevo esta skill precisa |
Skills vs Ferramentas MCP Diretas
| Aspecto | Skill como Ferramenta MCP | MCP Brevo Direto |
|---|---|---|
| Abstração | Alta, o agente diz “recupere este carrinho” | Baixa, o agente deve chamar endpoints individuais do Brevo |
| Complexidade | Encapsula lógica de várias etapas | O agente precisa orquestrar cada etapa |
| Guardrails | Integrados na skill (condições, debounce) | O agente precisa implementar os seus |
| Ideal para | Fluxos de trabalho repetíveis | Operaçõ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-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---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.
- Mantenha skills focadas - Uma skill deve fazer uma coisa bem
- Use nomes descritivos -
abandoned-cart-recoverye nãoacr - Documente as condições - Explique por que cada condição existe
- Trate erros com elegância - Use
on_error: continuepara ações não críticas - Teste com audiências pequenas - Use
status: experimentaldurante o desenvolvimento - Adicione exposição MCP para skills que os agentes devem poder invocar diretamente
Próximos Passos
- Visão Geral de MCP e Agents - Como as Skills se encaixam na arquitetura agentic
- Formato de Especificação de Agent - Defina agents que usam Skills como ferramentas
- Construindo Agents - Construa seu primeiro agent de marketing
- Skills de Sincronização de Dados - Explore skills de sincronização de dados