스킬 포맷 사양

skills.md 포맷은 스킬의 구조, 구성 및 실행 방식을 정의합니다. 이 사양은 모든 Tajo 스킬에서 일관된 동작을 보장합니다.

파일 구조

스킬은 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 필드

필수 필드

필드타입설명
namestring고유 식별자(kebab-case)
versionstring시맨틱 버전(예: “2.1.0”)
descriptionstring짧은 설명(최대 160자)
categoryenum다음 중 하나: data-sync, email-marketing, sms-whatsapp, loyalty, analytics, integrations
triggersarray이 스킬을 활성화하는 이벤트
actionsarray이 스킬이 수행할 수 있는 작업

선택 필드

필드타입기본값설명
statusenumstable다음 중 하나: stable, beta, experimental
brevoEndpointsarray[]사용되는 Brevo API 엔드포인트
permissionsarray[]필요한 Brevo API 권한
relatedSkillsarray[]관련 스킬의 ID
featuredbooleanfalse스킬 카탈로그에서 강조 표시

트리거

트리거는 스킬을 활성화하는 이벤트를 정의합니다.

이벤트 트리거

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:
- schedule: "0 9 * * *" # Cron expression (daily at 9am)
timezone: "America/New_York"
- schedule: every_hour
- schedule: every_day

Webhook 트리거

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

조건 연산자

연산자설명예시
=같음status: "active"
!=같지 않음status: "!= deleted"
>초과cart_value: "> 50"
>=이상items: ">= 1"
<미만age: "< 30"
<=이하quantity: "<= 10"
contains문자열 포함email: "contains @gmail.com"
starts_with문자열 접두사name: "starts_with Dr."
in리스트에 값이 있음country: "in US,CA,UK"

액션

액션은 스킬이 수행할 작업을 정의합니다.

액션 정의

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'

액션 타입

타입설명
brevo/send-email트랜잭셔널 이메일 발송
brevo/send-smsSMS 메시지 발송
brevo/send-whatsappWhatsApp 메시지 발송
brevo/create-contact신규 연락처 생성
brevo/update-contact연락처 속성 업데이트
brevo/delete-contact연락처 삭제
brevo/add-to-list연락처를 리스트에 추가
brevo/remove-from-list연락처를 리스트에서 제거
brevo/track-event커스텀 이벤트 추적
http/requestHTTP 요청 생성
transform/map데이터 변환
control/delay계속 진행 전 대기
control/condition조건에 따른 분기

템플릿 변수

데이터를 참조하려면 {{ }} 구문을 사용하세요.

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

사용 가능한 필터

필터설명예시
default기본값{{ name | default: 'Guest' }}
uppercase대문자 변환{{ name | uppercase }}
lowercase소문자 변환{{ email | lowercase }}
capitalize첫 글자 대문자{{ name | capitalize }}
truncate문자열 자르기{{ desc | truncate: 100 }}
date날짜 포맷{{ date | date: 'YYYY-MM-DD' }}
currency통화 포맷{{ price | currency: 'EUR' }}
map배열 속성 매핑{{ items | map: 'name' }}
join배열 결합{{ tags | join: ', ' }}
first배열 첫 항목{{ items | first }}
last배열 마지막 항목{{ items | last }}
size배열/문자열 길이{{ items | size }}

권한

필요한 Brevo API 권한을 정의합니다.

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

전체 예제

---
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 도구 노출

스킬은 MCP 도구로 노출되어 AI 에이전트가 호출할 수 있습니다. frontmatter에 mcp 필드를 추가합니다.

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

MCP 노출 작동 방식

스킬에 mcp 필드가 있으면 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 initiated

MCP 필드

필드타입설명
mcp.tool_namestringMCP 도구 이름(형식: tajo/skill-name)
mcp.descriptionstring도구 발견 시 AI 에이전트에게 표시되는 설명
mcp.inputSchemaobject도구의 입력 매개변수를 정의하는 JSON Schema
mcp.brevo_serversarray이 스킬이 필요로 하는 Brevo MCP 서버 모듈

스킬 vs 직접 MCP 도구

측면MCP 도구로서의 스킬직접 Brevo MCP
추상화높음, 에이전트가 “이 장바구니를 복구하라”고 말함낮음, 에이전트가 개별 Brevo 엔드포인트를 호출해야 함
복잡성다단계 로직을 캡슐화에이전트가 각 단계를 오케스트레이션해야 함
가드레일스킬에 내장됨(조건, 디바운스)에이전트가 자체 구현해야 함
적합한 용도반복 가능한 워크플로우임시 작업

Tip

에이전트가 매번 재발명해서는 안 되는 복잡한 다단계 워크플로우에는 스킬을 MCP 도구로 사용하세요. 연락처 조회나 단일 이메일 발송 같은 간단한 일회성 작업에는 직접 Brevo MCP 도구를 사용하세요.

스킬과 에이전트 결합

에이전트는 스킬(MCP 도구로서)과 직접 Brevo MCP 모듈을 모두 사용할 수 있습니다.

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

이를 통해 에이전트는 공통 패턴에 대해 고수준 자동화(스킬)를 얻는 동시에, 커스텀 로직에 대해 저수준 액세스(Brevo MCP)를 유지합니다.

전체 세부 정보는 에이전트 사양 포맷에이전트 구축을 참조하세요.

모범 사례

Tip

시맨틱 버저닝을 사용하여 스킬 버전을 관리하세요. 호환성이 깨지는 변경은 주 버전 증가가 필요합니다.

  1. 스킬을 집중적으로 유지 - 하나의 스킬은 한 가지 일을 잘 해야 합니다
  2. 설명적인 이름 사용 - acr이 아닌 abandoned-cart-recovery
  3. 조건 문서화 - 각 조건이 존재하는 이유를 설명하세요
  4. 오류를 우아하게 처리 - 중요하지 않은 액션에는 on_error: continue를 사용하세요
  5. 소규모 대상으로 테스트 - 개발 중에는 status: experimental을 사용하세요
  6. 에이전트가 직접 호출할 수 있어야 하는 스킬에는 MCP 노출을 추가하세요

다음 단계

Subscribe to updates

developer-docs

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

auto-detect
AI 어시스턴트

안녕하세요! 문서에 대해 무엇이든 물어보세요.