Spesifikasi Format Skill
Format skills.md mendefinisikan bagaimana Skill disusun, dikonfigurasi, dan dijalankan. Spesifikasi ini memastikan perilaku yang konsisten di seluruh Skill Tajo.
Struktur file
Sebuah skill didefinisikan dalam satu file markdown dengan 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...Bidang frontmatter
Bidang wajib
| Bidang | Tipe | Deskripsi |
|---|---|---|
name | string | Identifier unik (kebab-case) |
version | string | Versi semantik (misalnya “2.1.0”) |
description | string | Deskripsi singkat (maksimal 160 karakter) |
category | enum | Salah satu dari: data-sync, email-marketing, sms-whatsapp, loyalty, analytics, integrations |
triggers | array | Event yang mengaktifkan skill ini |
actions | array | Operasi yang dapat dijalankan skill ini |
Bidang opsional
| Bidang | Tipe | Default | Deskripsi |
|---|---|---|---|
status | enum | stable | Salah satu dari: stable, beta, experimental |
brevoEndpoints | array | [] | Endpoint API Brevo yang digunakan |
permissions | array | [] | Izin API Brevo yang diperlukan |
relatedSkills | array | [] | ID skill terkait |
featured | boolean | false | Tonjolkan di katalog skill |
Trigger
Trigger menentukan event apa yang mengaktifkan skill.
Trigger event
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-triggeringTrigger jadwal
triggers: - schedule: "0 9 * * *" # Cron expression (daily at 9am) timezone: "America/New_York" - schedule: every_hour - schedule: every_dayTrigger webhook
triggers: - webhook: /skills/customer-sync/trigger method: POST authentication: api_keyOperator kondisi
| Operator | Deskripsi | Contoh |
|---|---|---|
= | Sama dengan | status: "active" |
!= | Tidak sama dengan | status: "!= deleted" |
> | Lebih besar dari | cart_value: "> 50" |
>= | Lebih besar dari atau sama dengan | items: ">= 1" |
< | Lebih kecil dari | age: "< 30" |
<= | Lebih kecil dari atau sama dengan | quantity: "<= 10" |
contains | String mengandung | email: "contains @gmail.com" |
starts_with | Awalan string | name: "starts_with Dr." |
in | Nilai ada dalam daftar | country: "in US,CA,UK" |
Aksi
Aksi menentukan operasi apa yang dijalankan skill.
Definisi aksi
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'Tipe aksi
| Tipe | Deskripsi |
|---|---|
brevo/send-email | Kirim email transaksional |
brevo/send-sms | Kirim pesan SMS |
brevo/send-whatsapp | Kirim pesan WhatsApp |
brevo/create-contact | Buat kontak baru |
brevo/update-contact | Perbarui atribut kontak |
brevo/delete-contact | Hapus kontak |
brevo/add-to-list | Tambahkan kontak ke daftar |
brevo/remove-from-list | Keluarkan kontak dari daftar |
brevo/track-event | Lacak event kustom |
http/request | Lakukan permintaan HTTP |
transform/map | Transformasikan data |
control/delay | Tunggu sebelum melanjutkan |
control/condition | Bercabang berdasarkan kondisi |
Variabel template
Gunakan sintaks {{ }} untuk merujuk ke 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' }}"Filter yang tersedia
| Filter | Deskripsi | Contoh |
|---|---|---|
default | Nilai default | {{ name | default: 'Guest' }} |
uppercase | Ubah string ke huruf besar | {{ name | uppercase }} |
lowercase | Ubah string ke huruf kecil | {{ email | lowercase }} |
capitalize | Kapitalkan huruf pertama | {{ name | capitalize }} |
truncate | Potong string | {{ desc | truncate: 100 }} |
date | Format tanggal | {{ date | date: 'YYYY-MM-DD' }} |
currency | Format mata uang | {{ price | currency: 'EUR' }} |
map | Petakan properti array | {{ items | map: 'name' }} |
join | Gabungkan array | {{ tags | join: ', ' }} |
first | Item pertama array | {{ items | first }} |
last | Item terakhir array | {{ items | last }} |
size | Panjang array/string | {{ items | size }} |
Izin
Tentukan izin API Brevo yang diperlukan:
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 eventsContoh lengkap
---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...Ekspos skill sebagai tool MCP
Skill dapat diekspos sebagai tool MCP sehingga dapat dipanggil oleh agen AI. Tambahkan bidang mcp ke frontmatter Anda:
---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---Cara kerja ekspos MCP
Ketika sebuah skill memiliki bidang mcp, skill itu menjadi tool yang dapat ditemukan dan dipanggil oleh agen AI:
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 initiatedBidang MCP
| Bidang | Tipe | Deskripsi |
|---|---|---|
mcp.tool_name | string | Nama tool MCP (format: tajo/skill-name) |
mcp.description | string | Deskripsi yang ditampilkan ke agen AI saat penemuan tool |
mcp.inputSchema | object | JSON Schema yang mendefinisikan parameter input tool |
mcp.brevo_servers | array | Modul server MCP Brevo yang dibutuhkan skill ini |
Skill vs tool MCP langsung
| Aspek | Skill sebagai tool MCP | Brevo MCP langsung |
|---|---|---|
| Abstraksi | Tinggi, agen cukup berkata “pulihkan keranjang ini” | Rendah, agen harus memanggil setiap endpoint Brevo satu per satu |
| Kompleksitas | Merangkum logika multi-langkah | Agen harus mengorkestrasi setiap langkah |
| Pengaman | Tertanam di dalam skill (kondisi, debounce) | Agen harus membuatnya sendiri |
| Paling cocok untuk | Alur kerja yang berulang | Operasi ad-hoc |
Tip
Gunakan Skill sebagai tool MCP untuk alur kerja kompleks bertahap yang tidak perlu disusun ulang oleh agen setiap kali. Gunakan tool Brevo MCP langsung untuk operasi sederhana sekali jalan seperti mencari satu kontak atau mengirim satu email.
Merangkai Skill dan Agen
Sebuah agen dapat memakai Skill (sebagai tool MCP) sekaligus modul Brevo MCP langsung:
# 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---Dengan begitu agen memperoleh otomatisasi tingkat tinggi (Skill) untuk pola umum sambil tetap memiliki akses tingkat rendah (Brevo MCP) untuk logika kustom.
Lihat Format Spesifikasi Agen dan Membangun Agen untuk detail lengkapnya.
Praktik terbaik
Tip
Beri versi pada skill Anda menggunakan semantic versioning. Perubahan yang memutus kompatibilitas memerlukan kenaikan versi mayor.
- Jaga skill tetap fokus - Satu skill sebaiknya mengerjakan satu hal dengan baik
- Gunakan nama yang deskriptif -
abandoned-cart-recovery, bukanacr - Dokumentasikan kondisi - Jelaskan mengapa setiap kondisi ada
- Tangani error dengan baik - Gunakan
on_error: continueuntuk aksi yang tidak kritis - Uji dengan audiens kecil - Gunakan
status: experimentalselama pengembangan - Tambahkan ekspos MCP untuk skill yang perlu dapat dipanggil langsung oleh agen
Langkah berikutnya
- Ikhtisar MCP & Agen - Bagaimana Skill menempati arsitektur agentik
- Format Spesifikasi Agen - Definisikan agen yang memakai Skill sebagai tool
- Membangun Agen - Bangun agen pemasaran pertama Anda
- Skill Sinkronisasi Data - Jelajahi skill sinkronisasi data